我正在尝试通过良好的旧三角形练习(目前只需要一个奇数输入)来磨练我的 Python 3(特别是嵌套循环)。但是,我遇到了一个我无法解决的问题。
user_input = 7
x = 1
temp = user_input
spaces = " "
stars = ""
y = temp - 2
t = 0
while x < temp:
while y > t:
stars = "*" * x
spaces = spaces * y
print(spaces + stars)
spaces= " "
y -= 1
x += 2
我有一个 user_input
(现在是 7,所以我不必在每次运行时都提供输入)。
用于 while
循环的变量 x
和 t
保存我的 user_input
的另一个 temp
orary 变量(以防我减少它以免“损坏”原始变量)。
一个变量 spaces
和另一个变量 stars
(这应该是不言自明的,因为我正在尝试根据星号绘制三角形)。
我有一个变量 y
等于 temp - 2
7 的预期输出应该是这样的:
*
***
*****
*******
我让 y
等于 temp - 2
的原因是因为第一行的空格等于 user_input - 2
。
假设我们的输入是 7,第一行的空格数是 5。
如果我们的输入是9,第一行的空格数是7
第一个 while
循环将从 1 循环到 7 (1, 3 , 5, 7) 这就是为什么我让 x
等于 1
.
第二个 while
循环应该从 input - 2
循环到 0。
奇怪的是,如果我的 user_input
等于 5
,它会输出我预期的结果。
*
***
*****
但是一旦我输入类似 7
的内容,它就会构建一个从 1 到 9 (1, 3, 5, 7, 9) 的三角形
*
***
*****
*******
*********
但我希望它在最后一行之前结束,它应该输出与我的输入一样多的星号。
我的思维过程有问题吗?如果是这样,我哪里错了?
我希望我已经尽可能地澄清了一切。
非常感谢。
最佳答案
看起来太复杂了。为什么不只是:
input = 7
i = 1
while i <= input:
spaces = ' ' * ((input-i) // 2)
stars = '*' * i
print(spaces + stars)
i += 2
*
***
*****
*******
或者更简单,使用 str.center
:
while i <= input:
print(('*' * i).center(input))
i += 2
关于Python 3 中心三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52681460/