2016-03-04 4 views
-5

Я пытаюсь создать «текстовый треугольник», состоящий из символа 'o'. Вот код, который я написал:Как получить треугольник O's

base = 6 
print("Part Two: Triangle with o's") 
for r in range(base, 0, -1): 
    for c in range(r): 
     print(' ', end='') 
    print('o', sep='') 

код, который я написал выводит следующее:

 o 
    o 
    o 
    o 
    o 
o 

но мой желаемый результат заключается в следующем:

 o 
    oo 
    ooo 
    oooo 
ooooo 
oooooo 

Может кто-то пожалуйста, помогите мне определить что я делаю неправильно?

+6

Возможно, вам нужно скопировать код в вопрос, вместо того, чтобы показывать нам его фотографию. –

+0

, пожалуйста, отправьте содержимое своих изображений в качестве кода в своем сообщении. – phenxd

+0

Ваш учитель дал вам разрешение на помощь в Интернете? Потому что у них в распоряжении много инструментов, чтобы найти учеников, пытающихся обмануть. – JDB

ответ

-1

Вот функция, чтобы сделать это:

def text_triangle(base, char): 
    return '\n'.join(' ' * (base-i) + char * i for i in range(1, base+1)) 

print(text_triangle(6, 'o')) 

Не собирается провести тот факт, что вы только что отправленную скриншот против вас, потому что этот вопрос имеет много общего с форматированием, которое трудно представить в уценкой ,

EDIT

Вы получили правильное количество пробелов в каждой строке (хорошая работа!). Проблема с вашим кодом заключалась в том, что вы помещали только одну строку 'o' на каждую строку, а не заполняли остальную часть строки 'o'.

base = 6 
for r in range(base-1, -1, -1): 
    for blank in range(0, r): 
     print(' ', end='') 
    for o in range(r, base): 
     print('o', end='') 
    print() 

Чтобы сделать это, мы можем просто написать еще один вложенный для цикла, который улавливает, где последний вложенные для цикла кончил, в r, и идти до конца строки, base. Наконец, нам нужно вызвать print() без аргументов в нижней части основного цикла for, чтобы получить символ новой строки. Надеюсь, это более объяснительно, чем мой быстрый ответ.

Приведенное выше соответствует требованиям вашего учителя, но далеко не лучшее решение. Если бы я должен был ответить на этот вопрос без каких-либо ограничений (то есть с помощью вложенной для-петли), я бы, вероятно, сделать что-то вроде этого:

base = 6 
for r in range(base): 
    print('{:>{}}'.format('o' * (r+1), base)) 

Это решение использует str.format() и format specification mini-language направо совместите 'o' «с.

+0

Не могли бы ли downvoters объяснить, что не так с моим ответом? Он дал точный результат, который OP желал довольно эффективно. – pzp

+4

Возможно, потому, что вы отвечаете на то, что кажется * вопросом «сделайте мою домашнюю работу для меня» *, давая дамп кода без объяснения причин его действия и того, что было не так с кодом в вопросе. Как выяснится, запрограммировать это? – AdrianHHH

+0

Ответ должен использоваться строго для циклов. И мне бы хотелось, чтобы вы руководствовались в правильном направлении, а не просто получали ответ. – CWeech

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