2017-10-04 1 views
0

Ich versuche, eine while-Schleife eine Reihe von Fragen zu stellen und neu zu starten, wenn die letzte Frage gestellt wird. Die Sache ist, ich möchte, dass der Benutzer die Fähigkeit hat, zu beenden, indem er bei jeder Frage ein bestimmtes Wort eingibt. Ich möchte auch so wenig Code wie möglich in der Schleife, also liegen die if/elif-Anweisungen in Funktionen.Break oder Fortsetzung einer While-Schleife von einer Funktion

Meine Frage ist: Kann ich eine Schleife von einer Funktion fortsetzen oder unterbrechen?

Mein Code:

def check_gender(q): 
    if q == "f": 
     number_women = number_women + 1 
    elif q == "m": 
     number_men = number_men + 1 
    elif q == "foo": 
     #break the loop 
    else: 
     print("Please answer M or F: ") 
     q = input("Are you a male or female (M/F)? ").lower() 
     check_gender(q) 



def check_age(q): 
    if not(16 <= int(q) <= 25): 
     print("You are not in the age range for this survey") 
    #Jump back to first question here 
    if q == "foo": 
     #break the loop 

while True: 
    gender = input("Are you a male or female (M/F)? ").lower() 
    check_gender(gender) 

    age = input("Please enter your age: ") 
    check_age(age) 

    #And so on with questions 

Ist das möglich?

+0

Ihr Code ist nicht richtig eingerückt; Könntest du das reparieren? –

Antwort

4

Sie können einen Wert (z. B. bool) von der Funktion check_age(q) zurückgeben und überprüfen.

def check_age(q): 
    if not(16 <= int(q) <= 25): 
     print("You are not in the age range for this survey") 
    #Jump back to first question here 
    if q == "foo": 
     return True 
    else: 
     return False 
while True: 
    gender = input("Are you a male or female (M/F)? ").lower() 
    check_gender(gender) 

    age = input("Please enter your age: ") 
    if check_age(age): 
     break 
0

sollten Sie diesen Code versuchen, jemand anderen Brief setzen die Schleife

def check_gender(q): 
    if q == "f": 
     number_women = number_women + 1 
    elif q == "m": 
     number_men = number_men + 1 
    # elif q == "foo": 
     #break the loop 
    else: 
     print("Please answer M or F: ") 
     q = input("Are you a male or female (M/F)? ").lower() 
     check_gender(q) 



def check_age(q): 
    if not(16 <= int(q) <= 25): 
     print("You are not in the age range for this survey") 
    #Jump back to first question here 
    #if q == "foo": 
     #break the loop 

while True: 
    gender = input("Are you a male or female (M/F)? ").lower() 
    if gender != "f" and gender != "m": 
     break 
    else: 
     check_gender(gender) 

    age = input("Please enter your age: ") 
    try: 
     ageValue = int(age) 
     check_age(age) 
    except ValueError: 
     print ("You must enter a number") 
     break 
1

Der beste Weg, wahrscheinlich zu brechen ist eine benutzerdefinierte Exception aus dem Inneren der Frage Funktionen zu erhöhen, wie folgt:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

NUMBER_MEN, NUMBER_WOMEN = 0, 0 


class ExitLoop(Exception): 

    pass 


def check_gender(reply): 
    global NUMBER_WOMEN, NUMBER_MEN 
    while True: 
     if reply == "f": 
      NUMBER_WOMEN += 1 
      return 
     elif reply == "m": 
      NUMBER_MEN += 1 
      return 
     elif reply == "foo": 
      raise ExitLoop 
     else: 
      print("Please answer M or F: ") 
      reply = input("Are you a male or female (M/F)? ").lower() 


def check_age(reply): 
    if reply == "foo": 
     raise ExitLoop 
    if not 16 <= int(reply) <= 25: 
     print("You are not in the age range for this survey") 
     return False 
    return True 


while True: 
    try: 
     gender = input("Are you a male or female (M/F)? ").lower() 
     check_gender(gender) 

     age = input("Please enter your age: ") 
     inrange = check_age(age) 
     if not inrange: 
      continue 
    except ExitLoop: 
     break 

Ich habe ein paar andere Änderungen an Ihrem Code vorgenommen, um es etwas pythischer zu machen. Achten Sie übrigens darauf, dass der obige Code fehlschlägt, wenn der Benutzer etwas außer "foo" oder eine Zahl als Antwort auf die Altersfrage eingibt.

Übrigens, wenn Sie Ihren Benutzer eine Menge Fragen stellen möchten, sollten Sie die ausgezeichnete Click package überprüfen.

Hoffe, das hilft!

Verwandte Themen