2016-10-04 87 views
-2

我想在Python中创建这种模式:使用简单循环创建模式?

* 
    * * 
    * * * 
    * * 
    * 

这是我的计划,到目前为止,我已经想出:

ster = "*" 
space = " " 
lines = 0 
n = 3 
x = 1 
while lines <= 5: 
    print space*n, ster*x 
    n-= 1 
    x+= 1 
    lines += 1 

我在做什么错?

+0

嗯,开始:为什么你认为这个代码会完成该模式的创建? – n1c9

+0

@ n1c9这是现在的问题不是吗? – HogRider123

+0

@ n1c9这就是我问的问题,我该如何纠正我的代码? – HogRider123

回答

2

好的,首先您可以创建一个数字列表,表示每行中星号的数量。

number_of_stars = 5 

i_list = list(range(number_of_stars)) 
# extend the list by its inverse i_list[::-1] 
# but exclude the first item 
i_list.extend(i_list[::-1][1:]) 

print(i_list) # prints: [0, 1, 2, 3, 4, 3, 2, 1, 0] 

现在你可以走通的列表,并打印*

for i in i_list: 
    print('* ' * i) 

多个但这没有正确对齐。通过添加多个空格在左边一个可以归档解决方案:

for i in i_list: 
    print(' ' * (number_of_stars - i) + '* ' * i) 

注意,在蟒蛇可以通过使用乘号重复的字符串:

print('a'*5) # prints: aaaaa 
1

通知你有

  • 3个空间适用于一星
  • 2个空格对二星
  • 1个空间3颗星。

对于您的钻石(包括大部分)的直立三角形部分。然后,你必须

  • 2位为2星级
  • 3位为1星级

没有抛出了答案,尝试在我刚才指出了分析特定的模式。它可以通过2个循环实现(适用于或同时,取决于您的偏好)。

2

感谢您的帮助,我为这个问题写了一个功能性代码。它应该使用while循环(s)。 这就是我所做的:

width = int(input("Width: ")) 

i = 1 
while i < width*2: 
    if i < width: 
     print " " * (width-i) + "* " * i 
    else: 
     print " " * (i-width) + "* " * (2*width-i) 

    i = i + 1 
+0

这给了我一个无限循环。因为'i = i + 1'的缩进需要在循环中。 – MooingRawr

+0

@MooingRawr它呢?我只是跑了代码,似乎工作正常 – HogRider123

+0

@MooingRawr啊是的,这是一个错字。感谢您指出 – HogRider123