我的代码有一个小问题。我似乎无法弄清楚如何做到这一点。我可以让它与两个for循环一起工作。但是在练习中它说我只能使用一个循环来获得结果。代码应该执行这个:
bounce2(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语句也应该是整数而不是字符串。所以我不能使用替换。
真的需要帮助来弄清楚逻辑。所有帮助表示赞赏。
以下是我认为非常优雅的解决方案:
def bounce(n):
for x in range(-n, n+1):
print(abs(x))
我们的循环从n的负数到n的正数,打印绝对值。
所以,在向您展示代码之前,我的一些思考过程。显然,有九条线,或更普遍的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
?现在你需要有点创意,也许可以尝试一下。我做的是尝试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
Soooo,取n - i
或i - n
的绝对值,无论如何。
def f(i, n):
return abs(n-i)
因为你需要向下计数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
一个非常简单的解决方案是:
for i in range(n, -(n+1), -1):
print(abs(i))
这就像在一些点附近镜像数字。
在你的情况下,该点为零,并使用相同的镜像使用abs
尝试下面的,有一个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