2015-04-18 7 views
1

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

Я попытался сохранить каждую часть кода отдельно в своей собственной функции и использовать решение if, elif, else, чтобы ограничить печать этого флага, но не очень повезло с поиском решения того, что кажется проблема с петлей. Я попытался вставить код if, elif, else в функцию обработки непосредственно в функцию вопроса, но не нашел, что это полезно. Я также попытался поместить инструкцию break после каждого оператора if, чтобы закончить цикл после выбора, но это ничего не делало.

Что я сделал не так? петли - мое самое слабое звено, внимательно следишь за заявлениями, я подозреваю, что фалют может лежать в моем заявлении if, но я не уверен. Любая помощь будет оценена, спасибо.

Это мой код:

Защиту основных():

intro() 
choice = question() 
processing(choice) 
unitedStates() 
italy() 
germany() 

def intro(): 

    print("program to draw a national flag.") 
    print() 

def processing(choice): 

    for f in choice: 
     if choice == "1": 
      unitedStates() 
      break 

     elif choice == "2": 
      italy() 
      break 

     elif choice == "3" 
      germany() 
      break 

    return unitedStates(), italy(), germany() 

def question(): 

    while True: 

     choice =() 
     print("Please choose a flag:") 
     print("  1, for United States;") 
     print("  2, for Italy;") 
     print("  3, for Germany;") 

     choice = input("-->",) 

     if choice[0] >= "1" and choice[0] <= "5" and len(choice) == 1: 
      break 
     print("Choice must be, between 1-5, not ", choice + ".") 
     print("Try again.") 
     print() 

    print() 
    return choice 

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

+1

вы вернуть все флаги в обработке(), я предполагаю, что это ваша проблема – mguijarr

+0

Да, вам не нужно ничего возвращать из вашего 'обработки)' функции (. Просто избавитесь от всей обратной линии. – logic

+0

Почему бы не поместить функции в словарь 'funcs = {'3': germany, ...}'? Тогда это просто 'funcs [choice]()'. – jonrsharpe

ответ

0

У вас есть две проблемы, кажется:

  1. Вы вернуть все флаги в функции processing()
  2. Вы называете все флаги снова сразу после функция processing() выполняется

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

Попробуйте это:

def main(): 
    intro() 
    choice = question() 
    processing(choice) 

def intro(): 

    print("program to draw a national flag.") 
    print() 

def processing(choice): 

    for f in choice: 
     if choice == "1": 
      unitedStates() 

     elif choice == "2": 
      italy() 

     elif choice == "3": 
      germany() 


def question(): 

    while True: 

     choice =() 
     print("Please choose a flag:") 
     print("  1, for United States;") 
     print("  2, for Italy;") 
     print("  3, for Germany;") 

     choice = input("-->",) 

     if choice[0] >= "1" and choice[0] <= "5" and len(choice) == 1: 
      break 
     print("Choice must be, between 1-5, not ", choice + ".") 
     print("Try again.") 
     print() 

    print() 
    return choice 

#======================================================== 
#  Flag functions added by Michael 
#======================================================== 

def unitedStates(): 

    for i in range(1,5): 
     print((" * * *" * 2), ("X" * 34)) 
     print("* * * " * 2) 

    print(" * * *" * 2, "X" * 34) 

    for i in range(4): 
     print() 
     print("X" * 47) 
    print() 

def italy(): 

    green(14, "G") 
    white(14, "W") 
    red(14, "R") 
    for i in range(15): 

     print(green(15, "G") + white(15, ".") + red(15, "R")) 
    print() 

def green(gn, gch): 

    pg = gn * gch 

    return pg 

def white(wn, wch): 

    pw = wn * wch 

    return pw 

def red(rn, rch): 

    pr = rn * rch 
    return pr 

def germany(): 

    black(47, "G") 
    red(47, "W") 
    yellow(47, "R") 
    for cBlack in range(5): 
     print(black(47, "B")) 
    for cRed in range(5): 
     print(red(47, "`")) 
    for cYellow in range(5): 
     print(yellow(47, "Y")) 

def black(gn, gch): 

    pg = gn * gch 

    return pg 

def red(wn, wch): 

    pw = wn * wch 

    return pw 

def yellow(rn, rch): 

    pr = rn * rch 
    return pr 



main() #call main here 
+0

Благодарим вас за шаг к решению моей проблемы, немного поиграв с кодом, я вижу, что я вызываю флаги после моей def main(): line, которая выше моего def intro(): Теперь моя проблема становится той, где, если перемещать вызовы функций, я получаю ошибку отступа с помощью def intro(): Если я переведу главный раздел, проблема повторяется. Благодарю вас за один шаг к поиску решения. – Michael

+0

@Michael Где находится 'def main():' line? – logic

+0

def main(): выше вызовов функций, которые находятся выше def intro(): – Michael

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

  • Нет связанных вопросов^_^