2016-10-21 6 views
0

Ich bin ein einfaches Programm zu schreiben, die wie folgt aussehen:Gibt es eine Möglichkeit, eine Elif- und eine While-Anweisung in eine zu konvertieren?

while True: 
    choice = float(input("options: ")) 

    if choice == 1: 
     # Do something 

    elif choice == 2: 
     # Do something 

    elif choice == 3: # <--- seems redudant 
     while choice == 3: 
      choice_return = input("do you want to return?: ") 

       if choice_return == "yes": 
        choice = None 
       else: 
        pass 

    elif choice == 4: 
     break 

Da der Code in der erwähnten, die „elif statment“ scheint überflüssig, weil sie die gleichen Bedingungen wie die „while-Schleife“ hat unter . Sie können natürlich auch schreiben Sie einfach den Code wie folgt:

while True: 
    choice = float(input("options: ")) 

    if choice == 1: 
     # Do something 

    elif choice == 2: 
     # Do something 

    elif choice == 4: 
     break 

    while choice == 3: <--- three after four, no!!! 
     choice_return = input("do you want to return?: ")  
      if choice_return == "yes": 
        choice = None 
      else: 
       pass 

, die nicht schlecht in diesem Beispiel sehen, aber in den eigentlichen Code, es ruiniert irgendwie die Strukturierung (und meine OCD nicht erlauben, für das). Gibt es eine Möglichkeit, die Redundanz zu entfernen, während ich die Ordnung aufrechterhalte?

NB. nehme an, die "Wahlnummer" ist festgelegt.

+0

Gibt es nur 4 Optionen, die ein Benutzer eingeben kann? –

+0

können Sie einen Schalterkasten verwenden. –

+0

Python hat keinen 'Schalter'. – bgporter

Antwort

1

Sie auf die if/elif Struktur halten kann und Dinge aufzuräumen durch die Logik des elif choice == 3 in einer Funktion Verpackung und ein while True Rezept in der Funktion:

def myfunc() 
    while True: 
     choice_return = input("do you want to return?: ") 
     if choice_return == "yes": 
      return None # None here is redundant 

while True: 
    choice = float(input("options: ")) 

    if choice == 1: 
     ... 

    elif choice == 3: 
     choice = myfunc() 
    ... 
0

Es scheint keinen Grund zu sein, Verwenden Sie choice als Bedingung in der while Schleife. Umstrukturieren Sie es so, dass es break verwendet, um die Schleife zu stoppen, wenn es angemessen ist.

0

Setzen Sie die innere While-Schleife in eine Funktion, der Code wird dann viel sauberer sein. Sie haben immer noch beide Tests, aber ganzzahlige Vergleiche sind schnell - warum verwenden Sie also float?

Besser noch, wenn Sie aber jeder "Fall" in eine Funktion könnten Sie eine Liste von Funktionen verwenden.

# Functions return True to break out of the loop, otherwise False 

def case1(): 
    # Do something 

def case2(): 
    # Do something 

def case3(): 
    # Do something 

def case4(): 
    # Do something 

cases = [case1, case2, case3, case4] 

while True: 
    choice = int(input("options: ")) 

    if choice < len(cases) and choice >= 0: 
     if cases[choice](): 
      break 
    else: 
     print("Invalid option", choice) 
Verwandte Themen