2013-03-26 131 views
1

我必須編寫一個程序,該程序從用戶處獲取一系列有效輸入,然後使用嵌套循環繪製倒三角形。在Python中使用嵌套循環繪製星號的倒三角形

我已經設法解決了三角形問題,但我在倒三角形上掙扎着。任何人都可以給我一些關於如何繪製倒三角形的提示,只打印*的單個字符而不使用* * rowlength?

全球恆定

L = 10 

獲取的行數

rows = int(input ('Enter a number of rows: ')) 

行可以不小於10或大於100

while rows < 10 or rows > 100: 
    if rows < L: 
     print('The number is too Low.') 
    else: 
     print('The number is too high.') 
    rows = int(input ('Enter the correct value: ')) 

顯示三角形

for r in range(rows): 
    for c in range(r + 1): 
     print('*', end='') 
print() 
+0

你不需要空格填充了三角如果它倒過來? – 2013-03-26 08:34:18

+0

爲什麼不用手工製作倒三角形,並根據高度和線數來計算每一行中空格,星星等數量的變化? – Patashu 2013-03-26 08:42:46

+0

你是什麼意思?你能給我舉個例子嗎? – user2210599 2013-03-26 08:56:34

回答

1

這是非常相似的問題,我有課上做一次,但我們在C中實現它其實挺爽到現​​在回去,在蟒蛇重新實現它,看看差異。

我們在課堂上遇到的問題非常相似。我的Python代碼,使這項工作是:

while True: 
    rows = input('Enter the number of rows: ') 

    if 3 <= rows <= 33: 
     break 
    else: 
     continue 

padding = ' '*rows   
while rows > 0: 
    print(padding[rows:] + '*'*rows) 
    rows = rows - 1 

- 以下修改,打印倒三角輪廓:

# print the outline of an inverted triangle: 
height = rows 

# inner padding for min height (3) 
inner_buffer = [0, 1, 3] 
while len(inner_buffer) <= rows: 
    inner_buffer.append(inner_buffer[-1]+2) 

while height > 0: 
    outer_padding = ' '*(rows - height)  
    if height == 1: 
     print(outer_padding + '*') 
    else: 
     inner_padding = ' '*(inner_buffer.pop()-2) 
     print(outer_padding + '*' + inner_padding + '*') 
    height = height - 1 

有一定是一個更優雅的希望將代碼這一點,而只是一個工作黑客,看看我們是否在正確的軌道上。

新修訂如下: - 定義

將產生一個正三角形或倒三角形功能
def get_rows(): 
    while True: 
     rows = input('Enter the number of rows: ') 
     if 3 <= rows <= 33: 
      return rows 

def triangle(rows, regular=False, invert=True): 

    if invert: 
     height = -1 * rows 
    else: 
     height = 0 

    # inner padding for min height (3) 
    inner_buffer = [0, 1, 3] 
    while len(inner_buffer) <= rows: 
     inner_buffer.append(inner_buffer[-1]+2) 

    level = 0   
    while level <= rows: 
     outer_padding = ' '*(rows - abs(height)) 

     if height == 0: 
      print(outer_padding + '*') 
     else: 
      inner_padding = ' '*(inner_buffer[ abs(height) ]) 
      print(outer_padding + '*' + inner_padding + '*') 

     height += 1 
     level += 1 

讓我知道:)

+0

問題是我不允許在整行中使用多個*字符串。 (例如'*'*行長度)。 – user2210599 2013-03-26 09:10:31

+0

好的,嗯,強硬的一個?我修改了上面的答案來打印包含倒三角形的輪廓。這更接近了嗎? – 2013-03-26 09:48:15

+0

非常感謝你,我找到了解決方案。 – user2210599 2013-03-27 04:53:08