2014-10-24 3 views
2

Я пытаюсь создать программу, в которой вы вводите число, и программа создает «крест-наряд». Например, если я ввожу номер 5, программа должна напечатать:Использование для циклов для создания рождественской елки

+ 
    +++ 
    +++++ 
+++++++ 
+++++++++ 

То, что я до сих пор:

def holidaybush(n): 
    z=n-1 
    x=1 
    for i in range(0,n): 
     for i in range(0,z): 
      print('',end='') 
     for i in range(0,x): 
      print('+',end='') 
     for i in range(0,z): 
      print('',end='') 
     x=x*2 
     x=x-1 
     z=z-1 
     print() 
holidaybush(5) 

Это не работает совсем так, как я ожидал, хотя я иду через логики, и это, кажется, работает в моей голове. Любая помощь? Я только что узнал о петлях сегодня, поэтому я, возможно, не знаю все о них.

+0

Какой язык? Что вы получаете? – usr2564301

+0

Это похоже на недействительный JS. , , –

+1

@Godisgood Nope, выглядит сильно как python3, поэтому я его повторил, как только получится, хотя обзор ... – matsjoyce

ответ

3

ОК, у вас есть две проблемы. Во-первых, когда вы идете, чтобы сделать ваш отступы, вы пишете:

print('',end='') 

В Python (и других языках), '' пустая строка. Вы должны использовать ' '.

Во-вторых, ваша x инкрементирующая логика кажется неправильной. Простое добавление 2 каждый цикл работает отлично, делая вашу программу:

def holidaybush(n): 
    z=n-1 
    x=1 
    for i in range(0,n): 
     for i in range(0,z): 
      print(' ',end='') 
     for i in range(0,x): 
      print('+',end='') 
     for i in range(0,z): 
      print(' ',end='') 
     x=x+2 
     z=z-1 
     print() 
holidaybush(5) 

Ваш код может быть сделан более компактным по:

  • Использование операторов инфиксные, заменив x=x+2 с x+=2
  • range автоматически начинается с нуля , поэтому range(0,z) может быть заменен на range(z)
  • Использование умножения строк, замена вашего внутреннего for петли с ' ' * z

Применением этих результатов в:

def holidaybush(n): 
    z = n - 1 
    x = 1 
    for i in range(n): 
     print(' ' * z + '+' * x + ' ' * z) 
     x+=2 
     z-=1 
holidaybush(5) 

Но вы можете придерживаться с многословной версией.

+0

Спасибо за помощь. Трюк с этой программой заключается в том, что мне не разрешено размножать строки, потому что это слишком легко. Отсутствие пространства было явно глупо. Благодарим вас за помощь в том, чтобы сделать ее более жесткой. Я не узнал эти ярлыки. Это сработало!Спасибо –

2

как об этом:

def holidaybush(n): 
    for i in range(n): 
     print ' ' * (n - (i + 1)),'+' * (2*i+1) 

holidaybush(5) 
0

Если вы измените «х + = 2» до «х + = 1» вы получите правильную форму, но не так много «+», но это не будет ширины мод:

def holidaybush(n): 
z = n 
x =1 

for i in range(n): 
    print(' ' * z + '+' * x + ' ' * z) 
    x+=1 
    z-=1 


holidaybush(5) 
1

Вы можете использовать string.center(), только для добавления другого решения, это сделало код более компактным:

def holidaybush(n): 
    for i in range(n): 
     print(("+" * (i * 2 + 1)).center(n * 2 - 1)) 

holidaybush(5) 
-2
height = eval(input("Enter height of tree: ")) 
for row in range(height): 
    for count in range(height - row): 
     print(end=" ") 
    for count in range(2*row + 1): 
     print(end="*") 
    print() 
+0

Просьба представить описание, по крайней мере, того, что вы хотите задать –

+1

, пожалуйста, отформатируйте свой код и добавьте описание, почему вы считаете, что блок кода должен использоваться –

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