如何让这个星形模式仅与Python中的一个for循环一起使用?

问题描述 投票:0回答:1

对 Python 和一般编码非常陌生! 尝试获得如下所示的星形图案:

*
**
***
****
*****
****
***
**
*

使用 for 循环工作,但我只允许使用单个 for 循环,并在其中嵌入 if/else 语句以使其工作。如果我可以使用 2 个 for 循环,我会知道如何做到这一点,但不确定为什么我当前的解决方案不起作用,因为它只输出前 5 行星星,然后停止。任何帮助表示赞赏:)

我当前的代码库:

print("Pattern: ")

# Stores the * as a variable, not entirely necessary but negates having to type out "*" 
star = "*"

for i in range(9):
    if i in range(5):
     print(star * (i + 1))
    elif i in range(4, 0, -1):
       print(star * i)
python for-loop if-statement
1个回答
0
投票

range(4, 0, -1)
包含整数
[4, 3, 2, 1]
,所有这些都已经是
range(5)
的一部分,因此
elif
分支中的代码永远不会执行。您可以直接使用
else
来处理
i
中不在
range(5)
中的值。然而,
star * i
是错误的打印表达式,因为星号的数量会随着循环的继续而增加,但图案的下半部分的星星数量应该减少;
star * (9 - i)
就能达到这个效果。

您也可以使用

min
来避免显式分支,如下所示:

star = "*"
size = 9
for i in range(size):
    print(star * min(i + 1, size - i))
© www.soinside.com 2019 - 2024. All rights reserved.