【问题标题】:Creating an upside down asterisk triangle in Python using for loop使用 for 循环在 Python 中创建一个倒置的星号三角形
【发布时间】:2017-02-14 10:54:36
【问题描述】:

我讨厌我不得不问这个问题,但我一生都无法弄清楚如何完成这项工作。该程序应该要求输入一个奇数,然后创建一个倒置的金字塔,第一行包含星号的数量作为数字,最后一行只有一个居中的星号。我已经设法弄清楚其中的大部分内容,但是无论我尝试什么,我的星号都拒绝居中排列。我在这里查看了类似的其他主题,并尝试使用它们,但仍然无法弄清楚。我不确定为什么要使用“i”,但在另一篇文章中看到它,它看起来比我以前的稍微好一点。

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

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)

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

【问题讨论】:

  • 我不知道你的限制是什么。但是,这里有两个提示: (a) 使用等宽字体(以便每个字符占据相同数量的水平空间)。 (b) 每个星号使用两个字符位置,一个是空白,一个是星号本身。
  • 您必须每行删除 两个 星 - 那是 range(x_int+1, 0, -2)

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我会调查的。刚开始编码。
【解决方案2】:

您需要将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】:

尝试类似:

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))

这不仅适用于奇数。

【讨论】:

    【解决方案4】:

    由于无法在半空格之间放置字符,我认为您无法将它们居中。也许尝试在所有星星之间插入一个空格,这样你就可以更好地将它们居中并产生类似的效果。

    * * * *
     * * *
      * * 
       *
    

    代替:

    ****
     ***
     **
      *
    

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2015-08-26
      相关资源
      最近更新 更多