使用for循环在Python中创建一个颠倒的星号三角形

时间:2016-10-05 20:48:53

标签: python python-3.x for-loop

我讨厌我不得不问这个,但我不能为我的生活弄清楚如何使这项工作。该程序应该要求输入一个奇数,然后创建一个颠倒的金字塔,第一行包含星号数量作为数字,最后一行只有一个,居中的星号。我已经设法弄清了大部分内容,但无论我尝试什么,我的星号拒绝排队。我已经看过这里类似的其他主题,并试图使用它们但仍然无法弄明白。我不确定为什么'我'被使用,但是在另一个帖子上看到了它,它看起来比我以前略好。

这是我的代码,我已经修改了很多但无济于事。

x=input('Enter an odd number width: ')
x_int = int(x)
print('Triangle:')
for i in range(x_int+1, 0, -1) :
    numwhite = (x_int - i)/2
    white_int= int(numwhite)
    print(' '* white_int + '*'*i)

哪些输出(输入13):

Triangle:
**************
*************
************
 ***********
 **********
  *********
  ********
   *******
   ******
    *****
    ****
     ***
     **
      *

我希望它看起来像(输入7)

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

4 个答案:

答案 0 :(得分:2)

除了将步骤值设置为-2之外,如果使用Python的字符串format方法,您将拥有更易读的代码。您可以使用居中对齐即可轻松居中您的星号。 ^

x = input('Enter an odd number width: ')
x_int = int(x)
print('Triangle:')

fmt = '{' + ':^{}'.format(x_int) + '}' # Notice the caret ^ and how the width is set
for i in range(x_int, 0, -2):
    stars = '*'*i
    print(fmt.format(stars))

试验:

Enter an odd number width: 15
Triangle:
***************
 ************* 
  ***********  
   *********   
    *******    
     *****     
      ***      
       *    

您可以使用字符串格式执行更多操作。请查看参考:https://pyformat.info

答案 1 :(得分:2)

尝试类似:

x = int(input('Enter an odd number width: '))
print('Triangle:')
for i in range(x_int, 0, -1):
    print('{:^{str_len}}'.format('* ' * i, str_len= x_int * 2))

这不仅适用于奇数。

答案 2 :(得分:1)

您需要将range的“步骤”设置为-2,这样它才能反向获取赔率。然后需要使+ 1正常工作的空白数量。

x=input('Enter an odd number width: ')
x_int = int(x)
print('Triangle:')
for i in range(x_int, 0, -2):
    numwhite = ((x_int - i)/2) + 1
    white_int= int(numwhite)
    print(' ' * white_int + '*'*i)

输出继电器:

Enter an odd number width: 7
Triangle:
*******
 *****
  ***
   *

更具可读性的代码及解释

x_int = int(input('Enter an odd number width: '))  # reducing

print('Triangle:')

for i in range(x_int, 0, -2):  # -2 means only do every 2nd number in reverse
    num_white = int(((x_int - i)/2) + 1)  # Checking the math here, needed a +1
    print(' ' * num_white + '*' * i)  # Could be changed to .format but works

输出

Enter an odd number width: 13
Triangle:
 *************
  ***********
   *********
    *******
     *****
      ***
       *

答案 3 :(得分:0)

我不认为你可以将它们集中在一起,因为它们不能在半空间之间放置字符。也许尝试在所有星星之间插入一个空格,这样你就可以更好地将它们居中并产生类似的东西。

* * * *
 * * *
  * * 
   *

而不是:

****
 ***
 **
  *