我是一个新手写刽子手,并在我的一个模块中遇到了一个错误。我在这个模块中的意图是检查用户输入并验证它是一个字母而不是数字的单个字符。错误检查的工作原理是它不会退出模块,直到输入单个字母(或特殊字母,尚未找到解决方法),但返回值始终是输入的第一个用户输入而不是最后一个正确的输入。任何建议将不胜感激。
def get_guess():
guess = str(raw_input('Please enter your guess letter: '))
if len(guess) == 1:
try:
float(guess)
is_int = True
except ValueError:
is_int = False
if is_int:
print "You have entered a number not a letter."
get_guess()
else:
print "Please enter a single letter."
get_guess()
return guess
答案 0 :(得分:3)
您正在使用递归来获取重复输入,但不会返回递归调用结果。你需要返回所产生的递归调用以将其传递回堆栈:
return get_guess()
您需要在递归调用get_guess()
的两个位置执行此操作。
然而,使用递归来获得响应并不是一个好主意;永远不要低估白痴错误的决心,而是达到你的递归限制。改为使用循环:
def get_guess():
while True:
guess = raw_input('Please enter your guess letter: ')
if len(guess) == 1:
if guess.isdigit():
print "You have entered a number not a letter."
else:
return guess
else:
print "Please enter a single letter."
这里函数不断循环,直到你返回一个有效的字符猜测。请注意,如果只允许使用字母,可能想要测试str.isalpha()
。您的代码和我的版本允许任何不是数字的内容,因此也允许使用空格和标点符号。
您可能还想学习Asking the user for input until they give a valid response