2013-03-26 9 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

+0

Что вы имеете в виду? Можете ли вы привести мне пример? – user2210599

ответ

1

Это очень похоже на вопрос, который я должен был сделать для класса один раз, но мы реализовывали его в С. На самом деле, довольно прохладно, чтобы вернуться сейчас, переописать его в питон и посмотрите на разницу.

Проблема, которую мы имели в классе, была очень похожа. Мой питон код, чтобы сделать эту работу:

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

Проблема в том, что мне не разрешено использовать строку из нескольких * для всей строки. (например, '*' * rowlength). – user2210599

+0

ОК, хммм, жесткий один ??? Я изменил приведенный выше ответ на печать, включив контур перевернутого треугольника. Это ближе? –

+0

Большое вам спасибо, я нашел решение. – user2210599

Смежные вопросы