设计
我认为您应该尽可能地将循环响应和获取已验证响应这两个问题分开,您可以通过编写一个函数来实现这一点,该函数处理验证用户输入的问题。在
这样的函数需要知道如果用户的输入无效,如何提示用户以及如何告诉用户,因此我们必须为函数提供两个参数,但我们也为参数提供合理的默认值。。。在
为了检查输入的正确性,我们使用一个try: ... except: ...子句,如果try的主体出现错误,except将查看错误,如果它是一个特定的错误(对于我们,ValueError),则执行except的主体。在
except的主体以对我们定义的函数的调用结尾,因为这是另一种循环方式,如果你考虑到发生了什么。。。在这种情况下,这是一种更简单的循环方式。在
实施
也就是说,在理解我们的职能需要的基础上,我们写下:def get_integer(prompt='Enter an integer: ',
err_prompt='Not an integer, please try again.'):
answer = input(prompt)
try:
number = int(answer)
return number
except ValueError:
print(err_prompt)
return get_integer(prompt, err_prompt)
测试
现在再做一点测试
^{pr2}$
把它们放在一起
我使用了你的实现,因为它确实足够好,但是我稍微改变了字符串的大小写,不再是try ... except,因为它隐藏在get_integer()中,并且引入了一个在正常终止时执行的^{} clause to the ^{} loop,这样用户就可以知道程序停止的原因了。在import random
def get_integer(prompt='Enter an integer: ',
err_prompt='Not an integer, please try again.'):
answer = input(prompt)
try:
return int(answer)
except ValueError:
print(err_prompt)
return get_integer(prompt, err_prompt)
print("Hello, what is your name?")
GG = input()
print("Well, " + GG + ", I am thinking of a number between 0 and 20...")
number = random.randint(0,20)
for taken in range(1,7):
print("Take a guess.")
guess = get_integer()
if guess < number:
print("Your guess is too low.")
elif guess > number:
print("Your guess is too high.")
else:
print("Your guess is exact!")
break
else:
print("Too many attempts. You lose!")