Skip to main content
 首页 » 编程设计

Python 3 中心三角形

2025年05月04日19lidabo

我正在尝试通过良好的旧三角形练习(目前只需要一个奇数输入)来磨练我的 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 的另一个 temporary 变量(以防我减少它以免“损坏”原始变量)。

一个变量 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