2014-10-10 95 views
0

我在做一個調查,詢問用戶年齡,性別等,使用while循環。當用戶輸入諸如「cya」或「bye」之類的字符串時,有什麼辦法讓程序退出循環?如何在用戶輸入某個字符串時使while循環退出?

我知道我可以在每次輸入後都做一個if語句,但有沒有更快更簡單的方法來做到這一點?什麼我想要實現

例子:

while (user has not entered "cya"): 
    age = int(input("How old? ")) 
    gender = input("gender? ") 

編輯:這個例子很短,但我做的調查是很長,所以測試每一個變量是太費時。

回答

1

我認爲執行調查的最簡單方法是構建一個所有問題的列表,然後用它來製作所有用戶詳細信息的字典。

details = {} 
questions = [("gender", "What is your gender?"), ("age", "How old?"), ("name", "What is your name?")] 
response = "" 
while response not in ("bye", "cya"): 
    for detail, question in questions: 
     response = input(question) 
     if response in ("bye", "cya"): 
      break 
     details[detail] = response 
    print(details) 

例子:

What is your gender?M 
How old?5 
What is your name?john 
{'gender': 'M', 'age': '5', 'name': 'john'} 

What is your gender?m 
How old?bye 
{'gender': 'm'} 
+0

但是,有沒有辦法用一個while循環做到這一點? – 2014-10-10 09:36:25

+0

我舉了一個使用while循環的例子。但是,它比其他版本更復雜,所以我強烈建議使用for循環。 – icedtrees 2014-10-10 09:56:13

+0

謝謝,但是當我運行你的代碼時,它不會循環。它只是在問了一組問題後才停止? – 2014-10-10 17:21:36

0

這不是一個好主意,但實現你想要的一種方法是拋出一個異常來擺脫循環。

def wrap_input(prompt, exit_condition): 
     x = raw_input(prompt) 
     if x == exit_condition: 
      raise Exception 
     return x 

    try: 
     while True: 
      age = int(wrap_input("gender ", "cya")) 
    except Exception: 
     pass 

編輯:如果您不需要立即退出,然後一個更簡潔的方法是要提供一種存儲在一組,然後可以在每次迭代檢查/復位所有輸入自己的輸入功能。

相關問題