[英]Function not returning values after being called for a second time
我正在嘗試完成一個python Hangman miniproject,以幫助我學習編碼。
我創建了一個函數,希望可以要求玩家輸入字母,檢查字母是否只有1個字母,並確保它不是數字。
這是我到目前為止的代碼:
def getLetter():
letter = raw_input('Please enter a letter...')
if letter.isdigit() == True:
print('That is a number!')
getLetter()
if len(str(letter)) >1:
print("Sorry, you have to enter exactly ONE letter")
getLetter()
else:
return letter
當第一個輸入正確時,即正常工作。 一個字母。 但是,如果輸入不正確,例如'ddddd',則程序會要求輸入另一個字母,但將返回初始輸入('ddddd')而不是新輸入,或者什么都不返回。
如何使其返回新輸入? 我需要清除raw_input嗎? 如果是這樣,怎么辦?
您不會返回遞歸調用的結果; 調用getLetter()
任何地方都會丟棄返回值。
在這些調用之前添加return
以將結果傳遞到調用鏈:
return getLetter()
但是,你不應該使用遞歸可言 ; 使用循環代替:
def getLetter():
while True:
letter = raw_input('Please enter a letter...')
if letter.isdigit() == True:
print('That is a number!')
continue
if len(str(letter)) >1:
print("Sorry, you have to enter exactly ONE letter")
continue
return letter
每個遞歸調用都會添加到調用堆棧中,該堆棧的大小不是無限的。 最終,總是輸入數字的用戶會破壞您的程序! 有關更多信息,請參見要求用戶提供輸入,直到他們給出有效答復為止 。
def get_valid_letter():
while True:
letter = raw_input('Please enter a letter...')
if letter.isdigit() == True:
print('That is a number!')
elif len(str(letter)) >1:
print("Sorry, you have to enter exactly ONE letter")
else:
return letter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.