循环数字向下和向上,而不是在python中使用递归

问题描述 投票:3回答:5

我的代码有一个小问题。我似乎无法弄清楚如何做到这一点。我可以让它与两个for循环一起工作。但是在练习中它说我只能使用一个循环来获得结果。代码应该执行这个:

bounce2(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的东西。我不知道如何让数字切换位置。 print语句也应该是整数而不是字符串。所以我不能使用替换。

真的需要帮助来弄清楚逻辑。所有帮助表示赞赏。

python for-loop numbers integer bounce
5个回答
2
投票

以下是我认为非常优雅的解决方案:

def bounce(n):
    for x in range(-n, n+1):
        print(abs(x))

我们的循环从n的负数到n的正数,打印绝对值。


3
投票

所以,在向您展示代码之前,我的一些思考过程。显然,有九条线,或更普遍的n * 2 + 1线。因为我们需要倒数到0并备份。这是你需要打印多少次。

现在,如果您将行号添加到预期输出中,并将其视为描述函数f(i, n)的表,其中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

Soooo,取n - ii - n的绝对值,无论如何。

def f(i, n):
    return abs(n-i)

1
投票

因为你需要向下计数n次,向下计算另一个n次数,而1来自0计数,而不是实际向下计数然后在两个单独的循环中向上计数,我们可以使用一个循环向上计数2 * n + 1次数,这实际上就像计数朝n然后弹跳n,所以我们可以简单地计算到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

1
投票

一个非常简单的解决方案是:

for i in range(n, -(n+1), -1):
    print(abs(i))

这就像在一些点附近镜像数字。 在你的情况下,该点为零,并使用相同的镜像使用abs


0
投票

尝试下面的,有一个l元素列表str(n)迭代通过n时间2的范围,然后检查x大于n+2如果它是n加1,否则从n减去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
© www.soinside.com 2019 - 2024. All rights reserved.