2017-10-04 8 views
0

whileループを作成しようとすると、一連の質問が表示され、最後の質問が表示されたときに再起動します。問題は、特定の単語を任意の質問に入力することによってユーザーが終了することができるようにすることです。私はループ内で可能な限り小さなコードを望んでいるので、if/elifステートメントは関数の中にあります。関数からwhileループを中断または継続する

私の質問は次のとおりです:機能からループを継続するか、中断することはできますか?

マイコード:

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 

これは可能ですか?

+0

コードが正しくインデントされていません。それを修正できますか? –

答えて

4

check_age(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": 
     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

あなたはこのコードを試してみてください、誰かが他の文字を入れているループは

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

を破るだろう最善の方法は、おそらく次のように質問関数内からカスタム例外を高めることです。

#!/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 

私はあなたのコードをもう少しpythonicにするためにいくつかの変更を加えました。ところで、注意してください、上記のコードは、ユーザーが「foo」以外の何かを入力したときに失敗するか、年齢の質問に返答する数値に失敗します。

ちなみに、ユーザーに多くの質問をしたい場合は、優れたClick packageをチェックしてください。

希望すると便利です。

関連する問題