python - Python While 循环使用 try-catch 语句给出意外结果
问题描述
我是一个蟒蛇菜鸟,希望有人能在这里为我指明正确的方向。
我正在尝试获取用户输入并且只接受大写和小写字母。
如果输入了其他任何内容,那么我想再次询问用户是否输入有效信息(一封信)。
我的代码有效(在一定程度上)-如果输入了正确的值,它会按预期工作,但是如果输入了无效值,它会再次询问问题,但现在即使输入了有效值,它也需要输入与那里一样多次的值是错误的答案。
我知道可能有更好的方法来做我想做的事(我在下面有一个不同的工作解决方案,但我的好奇心是为什么这个脚本会这样)
import string
def get_guess():
lower_letters = list(string.ascii_lowercase)
while True:
try:
guess = input('Guess a letter: ')
if guess.lower() in lower_letters:
return guess
else:
get_guess()
except:
print("That's not a valid option!")
letter = get_guess()
print(letter)
我知道我可以用下面的代码替换该代码并得到我想要的结果,但是你能解释一下为什么顶级代码正在做它是什么 - 如果这是一个明显的菜鸟问题,我就是不能放手。
工作代码:
import re
while 1:
inputString = input()
if re.match(r"^[A-Z,a-z]$", inputString):
print("Input accepted")
break
else:
print("Bad input, please try again")
如果有更好的方法来获得相同的结果,而不是我提供的 2 个片段,也请随时向我指出任何其他资源 - 我总是愿意学习。
谢谢大家。
解决方案
推荐阅读
- html - 使用css网格在网格内带有网格的滚动条
- ssl - 在 Godaddy 的 LightSail AWS Ubuntu 18.04 服务器托管和域上安装 LetsEncrypt SSL
- amazon-s3 - 找不到时指向后备 S3 域子文件夹的 Lambda 脚本
- ios - SwiftUI - 错误 - 类型的值没有成员
- c# - ASP.NET Core 3.0 Identity 没有向我的浏览器添加任何身份验证数据
- python - NetworkX:`G.edges` 和 `G.nodes` 的返回长度与用于创建图形的边和节点列表的长度不匹配
- javascript - 具有 firebase auth 和 node.js / mongodb 的 Angular 应用程序
- spring-boot - 从浏览器中的另一个选项卡注销时,Spring Security Keycloak Adapter 无法处理单点注销
- wordpress - 图片大于 2500px 上传错误。但有些超过 3300px 的图片上传正常
- react-native - 如何在功能组件中编写Animated.Value.addListener?