2016-10-04 81 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