使用 elif 语句和 for 循环创建星形图案

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

我需要使用“for 循环”和“elif 语句”来创建下面的形状进行赋值。

我已经有了仅使用“for 循环”创建形状的代码,但我正在努力将其更改为 elif 语句。

我才刚刚进入编码的第三周,所以不确定这段代码是否是简洁易读的代码,因为我一整天都在从各个网站将其拼凑在一起。我也不明白为什么我需要添加 elif 语句,因为它似乎使过程更加复杂?

rows = 6
for i in range(0, rows):
    for j in range(0, i + 1):
        print("*", end=' ')
    print(" ")


for i in range(rows + 1, 0, -1):
    for j in range(0, i - 1):
        print("*", end=' ')
    print(" ")

此代码生成的星形图案:

*

**

***

****

*****

******

******

*****

****

***

**

*
python for-loop shapes
1个回答
0
投票

编程中有一句口头禅“不要重复自己”,又名“DRY”。如果您查看当前的代码,两个循环块看起来都做了很多相同的事情。复制这些块并使第二个块略有不同,老实说,在快速原型设计时,我一直在做这种事情,这可能不是什么大问题。

然后我通常会回去重构/清理代码以“干燥”它。同样,这也不是什么大事,但想象一下,如果最内层循环中的单个

print("*", end=' ')
实际上是一组更复杂的代码,并且有人要求更改。现在你(或下一个人)需要记住这段代码是重复的。

当然,解决这个问题的一种方法可能是用对方法的调用来替换内部循环中的内容,从而使代码更加“干燥”。另一种方法,也许已经向您建议的是,可以使用一组循环来绘制上升线和下降线。

让我们尝试一下@sembei-norimaki 的推荐。

row_count = 6
start = 1
end = (2 * row_count)+1
for row_number in range(start, end):
    star_count = row_number if row_number <= row_count else end - row_number
    for i in range(star_count):
        print("*", end=" ")
    print()

注意这里我们根据条件计算要打印的星星数量。如果我们的

row_number
小于或等于
row_count
那么我们将打印等于
row_number
的星星数量。另一方面,一旦我们的
row_number
超过我们的
row_count
,我们将开始减少开始打印的次数。

这会产生:

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

作为最后的简化,如果在 Python 中将一个字符串相乘,您会得到一个重复的字符串。因此:

print("* " * 2)

应该给你:

* * 

使用这个我们可以取消内部循环和对

print()

的额外调用
row_count = 6
start = 1
end = (2 * row_count)+1
for row_number in range(start, end):
    star_count = row_number if row_number <= row_count else end - row_number
    print("* " * star_count)
© www.soinside.com 2019 - 2024. All rights reserved.