2015-10-02 4 views
2

Я пробовал сейчас, но я просто не могу понять, как это правильно. Я начинаю программист и должен выполнить задание для школы. Программа должна запросить у пользователя номер и напечатать алмазную форму на основе этого номера. Теперь у меня все нормально работает, но у меня есть распечатки за пределами моей основной. Как мне получить это внутри моей основной?Возвращение в циклы python

мой код:

def loop(start, eind, step, ei): 
    for a in range (start, eind, step):  
     for b in range(a):     
      print(" ", end="")     
     for c in range(ei+1, a, -1): 
      print(a, end="")    
     for d in range(a, ei):   
      print(a, end="")    
    print("") 

def main(): 
    print("Welcome! :) ") 
    loop(y,0,-1,y) 
    loop(2,y+1,1,y) 

Надеется, что вы, ребята, можете мне помочь! Кстати, у меня есть больше кода для этой программы, но это не имеет значения (например, просить пользователя «y»).

+3

*, но у меня есть операторы печати за пределами моей основной. Как я могу получить это в моей основной? * Что вы подразумеваете под этим? – Leb

ответ

3

Предполагая, отступы вы вставили правильно (и y переменная определена в глобальном масштабе), ваш текущий код не производит ромбовидную форму, было бы только получить произведено правильно, если последний print("") внутри функции loop() был отступом внутри цикл for.

Учитывая, что вы можете захотеть заглянуть, это generator functions с yield statements. Пример -

def loop(start, eind, step, ei): 
    for a in range (start, eind, step):  
     for b in range(a):     
      yield " "     
     for c in range(ei+1, a, -1): 
      yield a    
     for d in range(a, ei):   
      yield a 
     yield '\n' 

def main(): 
    print("Welcome! :) ") 
    for x in loop(y,0,-1,y): 
     print(x,end="") 
    for x in loop(2,y+1,1,y): 
     print(x,end="") 

Это предполагает y переменная определена в глобальном масштабе.

Demo -

>>> def loop(start, eind, step, ei): 
...  for a in range (start, eind, step): 
...   for b in range(a): 
...    yield " " 
...   for c in range(ei+1, a, -1): 
...    yield a 
...   for d in range(a, ei): 
...    yield a 
...   yield '\n' 
... 
>>> def main(): 
...  print("Welcome! :) ") 
...  y = 5 
...  for x in loop(y,0,-1,y): 
...   print(x,end="") 
...  for x in loop(2,y+1,1,y): 
...   print(x,end="") 
... 
... 
>>> main() 
Welcome! :) 
    5 
    444 
    33333 
    2222222 
111111111 
    2222222 
    33333 
    444 
    5 
+1

Вы можете изучить метод string format(), чтобы упростить выполнение и расширение инструкций печати. [Вот пример аналогичного вопроса о пирамидах печати.] (Http://stackoverflow.com/a/32427982/2125392). Хотя это может быть и не так, поскольку проблема, похоже, предназначена для изучения цикла. – CivFan

+0

Спасибо! Я собираюсь попрактиковаться в этом. – Kamlesh95

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