|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题:我执行答案那个代码时,按ctrl+c或者ctrl+d都会报错,而不会打印输入错误,为什么?
题目:
猜数字游戏中input() 函数有可能产生两类异常:EOFError(文件末尾endoffile,当用户按下组合键 Ctrl+d 产生)和 KeyboardInterrupt(取消输入,当用户按下组合键 Ctrl+c 产生),再次修改上边代码,捕获处理 input() 的两类异常,提高用户体验。
代码:
import random
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
try:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
except (ValueError, EOFError, KeyboardInterrupt):
print('输入错误!')
guess = secret
while guess != secret:
temp = input("哎呀,猜错了,请重新输入吧:")
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
else:
if guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
print("游戏结束,不玩啦^_^")
从你提供的代码来看,只有在第一次输入时捕获了异常。当第一次输入时发生异常,程序会打印“输入错误!”并将 guess 设置为 secret 。在后面的 while 循环中,如果用户再次按下Ctrl+C或Ctrl+D,代码并没有处理这些异常,所以会直接报错。
为了解决这个问题,你可以在 while 循环中也捕获这些异常。修改后的代码如下:
- import random
- secret = random.randint(1,10)
- print('------------------我爱鱼C工作室------------------')
- try:
- temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
- guess = int(temp)
- except (ValueError, EOFError, KeyboardInterrupt):
- print('输入错误!')
- guess = secret
- while guess != secret:
- try:
- temp = input("哎呀,猜错了,请重新输入吧:")
- guess = int(temp)
- except (ValueError, EOFError, KeyboardInterrupt):
- print('输入错误!')
- continue
- if guess == secret:
- print("我草,你是小甲鱼心里的蛔虫吗?!")
- print("哼,猜中了也没有奖励!")
- else:
- if guess > secret:
- print("哥,大了大了~~~")
- else:
- print("嘿,小了,小了~~~")
- print("游戏结束,不玩啦^_^")
复制代码
这样,当用户在 while 循环中按下Ctrl+C或Ctrl+D时,程序会捕获这些异常并打印“输入错误!”,然后继续执行循环。
|
|