2017-10-04 46 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)返回一些(例如bool)值並檢查它。

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

希望這會有所幫助!