在 python 中上下循环数字并且不使用递归

loop numbers down and up and not using recursion in python

我的代码有一个小问题。我似乎不知道该怎么做。我可以让它与两个 for 循环一起工作。但是在练习中它说我只能使用一个循环来获得结果。 代码应该执行这个:

弹跳2(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 是什么?现在你需要有点创意,也许可以尝试一下。我所做的是尝试 in 的基本算术组合来匹配 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 - ii - 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 的正数,打印绝对值。