在 python 中上下循环数字并且不使用递归
loop numbers down and up and not using recursion in python
我的代码有一个小问题。我似乎不知道该怎么做。我可以让它与两个 for 循环一起工作。但是在练习中它说我只能使用一个循环来获得结果。
代码应该执行这个:
弹跳2(4):
- 4
- 3
- 2
- 1
- 0
- 1
- 2
- 3
- 4
我想到了什么:
def bounce2(n):
for x in range(n,-1,-1):
print(x)
打印出 4,3,2,1,0
但是现在我不知道该怎么办。。
我尝试了不同的 if 语句,例如:
def bounce2(n):
for x in range(n,-1,-1):
print(x)
if n == 0:
x = x + 1
print(x)
但是他们只打印一个整数,因为他们在循环之外。
如果我尝试在循环内创建 if 语句,情况也会一样,然后它会打印出类似 433221100 的内容。我不知道如何让数字切换位置。打印语句也应该是一个整数而不是字符串。所以我不能使用替换。
真的需要帮助来弄清楚逻辑。感谢所有帮助。
试试下面的方法,让一个列表 l
的元素为 str(n)
遍历 n
的范围 2 次,然后检查 x
是否大于 n+2
如果是n
加1,否则[=14=减1],两种情况都追加到l
,最后做str.join
加入'\n'
(换行符)和 l
:
def bounce2(n):
l=[str(n)]
for x in range(n*2):
if x>n+2:
n+=1
l.append(str(n))
else:
n-=1
l.append(str(n))
return '\n'.join(l)
print(bounce2(4))
输出:
4
3
2
1
0
1
2
3
4
由于需要向下数n
次,向上数n
次,而1
来自于0
,而不是实际向下数然后在两个单独的循环中向上计数,我们可以使用一个循环向上计数 2 * n + 1
次,这实际上就像计数到 n
然后弹回 n
,所以我们可以简单地计算 "distance"改为n
,这是n - x
的绝对值:
def bounce2(n):
for x in range(2 * n + 1):
print(abs(n - x))
这样 bounce2(4)
就会输出:
4
3
2
1
0
1
2
3
4
所以,在向您展示代码之前,先简单介绍一下我的思考过程。显然有九行,或者更一般地说 n * 2 + 1
行。因为我们需要倒数到0再倒数。那就是你需要调用 print 的次数。
现在,如果您将行号添加到预期输出并将其视为描述函数 f(i, n)
的 table,其中 i
是行号,n
是起始值和结束值。什么是 f
?你能写下公式吗?例如
i f(i, 4)
0 4
1 3
2 2
3 1
4 0
5 1
6 2
7 3
8 4
我们可以写下代码的基本结构,我们仍然不知道 f
是什么样子,但假设我们有它:
for i in range(2*n+1):
print f(i)
还有,f
是什么?现在你需要有点创意,也许可以尝试一下。我所做的是尝试 i
和 n
的基本算术组合来匹配 f(i, n)
,我很快注意到 n - i
一直有效,直到我们到达输出的后半部分,只有 -
符号不同。
i f(i, 4) n - i
0 4 4
1 3 3
2 2 2
3 1 1
4 0 0
5 1 -1
6 2 -2
7 3 -3
8 4 -4
太好了,取n - i
或i - n
的绝对值,随便吧。
def f(i, n):
return abs(n-i)
一个非常简单的解决方案是:
for i in range(n, -(n+1), -1):
print(abs(i))
这就像围绕某个点的镜像数字。
在您的情况下,该点为零并具有相同的镜像使用 abs
我认为这是一个非常优雅的解决方案:
def bounce(n):
for x in range(-n, n+1):
print(abs(x))
我们的循环从 n 的负数到 n 的正数,打印绝对值。
我的代码有一个小问题。我似乎不知道该怎么做。我可以让它与两个 for 循环一起工作。但是在练习中它说我只能使用一个循环来获得结果。 代码应该执行这个:
弹跳2(4):
- 4
- 3
- 2
- 1
- 0
- 1
- 2
- 3
- 4
我想到了什么:
def bounce2(n):
for x in range(n,-1,-1):
print(x)
打印出 4,3,2,1,0 但是现在我不知道该怎么办。。 我尝试了不同的 if 语句,例如:
def bounce2(n):
for x in range(n,-1,-1):
print(x)
if n == 0:
x = x + 1
print(x)
但是他们只打印一个整数,因为他们在循环之外。 如果我尝试在循环内创建 if 语句,情况也会一样,然后它会打印出类似 433221100 的内容。我不知道如何让数字切换位置。打印语句也应该是一个整数而不是字符串。所以我不能使用替换。
真的需要帮助来弄清楚逻辑。感谢所有帮助。
试试下面的方法,让一个列表 l
的元素为 str(n)
遍历 n
的范围 2 次,然后检查 x
是否大于 n+2
如果是n
加1,否则[=14=减1],两种情况都追加到l
,最后做str.join
加入'\n'
(换行符)和 l
:
def bounce2(n):
l=[str(n)]
for x in range(n*2):
if x>n+2:
n+=1
l.append(str(n))
else:
n-=1
l.append(str(n))
return '\n'.join(l)
print(bounce2(4))
输出:
4
3
2
1
0
1
2
3
4
由于需要向下数n
次,向上数n
次,而1
来自于0
,而不是实际向下数然后在两个单独的循环中向上计数,我们可以使用一个循环向上计数 2 * n + 1
次,这实际上就像计数到 n
然后弹回 n
,所以我们可以简单地计算 "distance"改为n
,这是n - x
的绝对值:
def bounce2(n):
for x in range(2 * n + 1):
print(abs(n - x))
这样 bounce2(4)
就会输出:
4
3
2
1
0
1
2
3
4
所以,在向您展示代码之前,先简单介绍一下我的思考过程。显然有九行,或者更一般地说 n * 2 + 1
行。因为我们需要倒数到0再倒数。那就是你需要调用 print 的次数。
现在,如果您将行号添加到预期输出并将其视为描述函数 f(i, n)
的 table,其中 i
是行号,n
是起始值和结束值。什么是 f
?你能写下公式吗?例如
i f(i, 4)
0 4
1 3
2 2
3 1
4 0
5 1
6 2
7 3
8 4
我们可以写下代码的基本结构,我们仍然不知道 f
是什么样子,但假设我们有它:
for i in range(2*n+1):
print f(i)
还有,f
是什么?现在你需要有点创意,也许可以尝试一下。我所做的是尝试 i
和 n
的基本算术组合来匹配 f(i, n)
,我很快注意到 n - i
一直有效,直到我们到达输出的后半部分,只有 -
符号不同。
i f(i, 4) n - i
0 4 4
1 3 3
2 2 2
3 1 1
4 0 0
5 1 -1
6 2 -2
7 3 -3
8 4 -4
太好了,取n - i
或i - n
的绝对值,随便吧。
def f(i, n):
return abs(n-i)
一个非常简单的解决方案是:
for i in range(n, -(n+1), -1):
print(abs(i))
这就像围绕某个点的镜像数字。
在您的情况下,该点为零并具有相同的镜像使用 abs
我认为这是一个非常优雅的解决方案:
def bounce(n):
for x in range(-n, n+1):
print(abs(x))
我们的循环从 n 的负数到 n 的正数,打印绝对值。