我要打印一个中空的倒金字塔:
******
* *
* *
* *
**
*以下是我的代码:
n = int(input())
for i in range(n,0,-1):
if i == n:
print(n*'*', end = '')
if i > 1 and i <n:
print('*'+(i-2)*' '+'*')
else:
print('*')
print()对于输入为6,我不知道为什么我的代码打印7星。如果有人能帮我解释我做错了什么或者错过了什么,那就太棒了!
发布于 2022-07-23 19:10:55
这里有两个问题:
, end=''。您仍然希望在这一行星号之后打印一条换行符。if而不是elif作为第二个条件,所以即使第一个条件为真,else中的第三个代码块仍将运行。以下是修正后的代码:
n = int(input())
for i in range(n, 0, -1):
if i == n:
print(n * "*")
elif 1 < i < n:
print("*" + (i - 2) * ' ' + '*')
else:
print('*')发布于 2022-07-23 19:18:01
如果循环的第一次迭代,有两个print调用正在执行:第一个和最后一个,因此在第一行输出中总共有7颗星。
由于第一种情况和最后一种情况与其他情况不同,所以只处理循环之外的情况就更容易了:
n = int(input())
print(n*'*')
for i in range(n - 3, -1, -1):
print('*' + i*' ' + '*')
if n > 1:
print('*')这里仍然有一个if,以确保它对于等于1甚至0的n仍然正确工作。
要做到这一点,没有那个if,您可以这样做:
n = int(input())
print(n*'*')
s = '*' + n*' '
for i in range(n - 2, -1, -1):
print(s[:i] + '*')https://stackoverflow.com/questions/73093444
复制相似问题