你反复要求输入row的值,才会出现这样的情况
把while之前的input拿到while里面去,保证只有一个地方处理输入,避免代码冗余,就能减少很多问题
根源其实是top_row利用了row的值做计算,而row的值改变后top_row并没有重新赋值导致的
而更根源的问题就是因为你同样的代码复制来粘贴去,少粘了一行就会出bug
你应该封装一下,或者优化你的逻辑,不要总是出现重复的代码段
换种想法:
def diamond(n):
for i in [*range(1,(n+2)//2),*range((n+2)//2,0,-1)]:
print(' '*((n+2)//2-i) + ('*' if i==1 else ('*'+' '*(2*i-3)+'*')))
for i in range(1,12,2):
print(i)
diamond(i)
输出:
1
*
3
*
* *
*
5
*
* *
* *
* *
*
7
*
* *
* *
* *
* *
* *
*
9
*
* *
* *
* *
* *
* *
* *
* *
*
11
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
循环输入row后top_row没有修改