1

我来自 Google 的 App Inventor 的背景。我要上网课。

任务:用嵌套的while循环用星号制作一个三角形。三角形的底边有 19 个星号,高有 10 个星号。

这就是我所在的地方。

Num = 1

while Num <= 19:

        print '*'
        Num = Num * '*' + 2
print Num
4

6 回答 6

1

你在做什么 Num = Num * '*' + 2 如下:

  • 你创建一个字符串(Num-times '*')这就是你想要的
  • 然后你尝试添加两个,你可能会看到一个错误,比如cannot concatenate 'str' and 'int' objects,因为没有办法将字符串添加到int(至少在 python 中)。相反,您可能只想向Num添加两个。
于 2013-05-13T06:44:51.227 回答
1
n = 0
w = 19
h = 10
rows = []
while n < h:
    rows.append(' '*n+'*'*(w-2*n)+' '*n)
    n += 1
print('\n'.join(reversed(rows)))

生产

         *         
        ***        
       *****       
      *******      
     *********     
    ***********    
   *************    #etc...
  ***************   #2 space on both sides withd-4 *
 *****************  #1 space on both sides, width-2 *
******************* #0 spaces
>>> len(rows[-1])
19
>>> len(rows)
10
于 2013-05-13T07:03:15.553 回答
1

这是一个很酷的技巧——在 Python 中,你可以用 将一个字符串乘以一个数字*,它会变成连接在一起的字符串的多个副本。

>>> "X "*10
'X X X X X X X X X X '

您可以将两个字符串连接在一起+

>>> " "*3 + "X "*10
'   X X X X X X X X X X '

所以你的 Python 代码可以是一个简单的 for 循环:

for i in range(10):
    s = ""
    # concatenate to s how many spaces to align the left side of the pyramid?
    # concatenate to s how many asterisks separated by spaces?
    print s
于 2013-05-13T06:49:51.650 回答
0

通常你不会使用嵌套的 while 循环来解决这个问题,但这是一种方法

rows = 10
while rows:
    rows -=1
    cols = 20
    line = ""
    while cols:
        cols -=1
        if rows < cols < 20-rows:
            line += '*'
        else:
            line += ' '
    print line
于 2013-05-13T07:00:21.950 回答
0

(count - 1) * 2 + 1计算每行中的星号数。

count = 1
while count <= 10:
    print('*' * ((count - 1) * 2 + 1))
    count += 1

你当然可以走简单的路。

count = 1
while count <= 20:
    print('*' * count)
    count += 2
于 2013-05-13T07:20:44.037 回答
0

您可以使用字符串对象中的“中心”方法:

width = 19

for num in range(1, width + 1, 2):
     print(('*' * num).center(width))

         *         
        ***        
       *****       
      *******      
     *********     
    ***********    
   *************   
  ***************  
 ***************** 
*******************
于 2013-05-16T16:04:15.513 回答