Python 3 中心三角形

标签 python python-3.x loops while-loop

我正在尝试通过良好的旧三角形练习(目前只需要一个奇数输入)来磨练我的 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 循环的变量 xt

保存我的 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

关于Python 3 中心三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52681460/

相关文章:

c++ - 打破 while 循环的更好方法? C

python - 查找图像中极大值的坐标

python - 设置对象实例变量的正确方法

python - 在 Python 中创建网格

python - python中的日期格式不一致

php - 匹配两个mysql结果

python - 从 Excel CSV 读取并写入另一个文件时出现问题

python - 如何将不平衡库与 sklearn pipeline 一起使用?

python - 尝试用 Kivy 和线程划清界限

javascript - 我想写javascript代码来获得加法倒计时