能否优化或缩短这段Python奇偶校验脚本?
优化你的Python奇偶校验脚本
嘿,我来帮你梳理下这段脚本的优化空间,顺便修正几个小问题!先看看原脚本里的几个可以改进的地方,再给你几个更简洁、更健壮的版本。
原脚本的小问题
首先,你的trying()函数里有个逻辑错误:
if not q == 'y' or q == 'yes': return 0
这个条件的逻辑完全写反了——它会在用户输入yes时返回0(退出循环),而你实际想要的应该是:如果用户输入不是'y'也不是'yes',才退出循环。另外,全局变量g的使用可以避免,重复的重试判断代码也可以合并,让脚本更简洁。
基础优化版(兼顾可读性和简洁性)
这个版本修复了逻辑错误,简化了循环结构,代码更清晰:
def should_retry(): # 处理输入,忽略大小写和前后空格,兼容不规范输入 response = input('Enter (y or yes) to retry: ').strip().lower() # 如果是y/yes返回True,否则返回False return response in ('y', 'yes') while True: try: num = int(input('Please enter an integer: ')) # 用三元表达式简化奇偶判断的打印 print('Your number is even' if num % 2 == 0 else 'Your number is odd') # 询问是否重试,不满足就退出循环 if not should_retry(): break except ValueError: print('Sorry, you need to enter numbers only!')
改进点说明:
- 修复了重试判断的逻辑错误,用
strip().lower()处理输入,能兼容用户输入Y、yes这类不规范的情况 - 去掉了全局变量
g,用while True配合break控制循环,更符合Python的惯用写法 - 把重复的重试逻辑封装成独立函数,避免代码冗余,也让逻辑更清晰
- 用三元表达式简化了奇偶判断的打印语句,减少了不必要的分支代码
更简洁的版本(适合简单场景)
如果追求更短的代码,可以把重试逻辑直接内联,去掉单独的函数,同时用f-string让打印更简洁:
while True: try: num = int(input('Please enter an integer: ')) # f-string配合三元表达式,一行完成判断和打印 print(f"Your number is {'even' if num % 2 == 0 else 'odd'}") # 直接处理重试输入,不满足就退出 if input('Enter (y or yes) to retry: ').strip().lower() not in ('y', 'yes'): break except ValueError: print('Sorry, numbers only please!')
这个版本去掉了单独的函数,代码更紧凑,同时保留了健壮性,适合这种简单的小脚本。
额外小建议
- 输入提示里加个空格(比如
Please enter an integer:),用户输入时体验更好 - 用
strip()处理所有输入的前后空格,避免用户误输入空格导致的问题 - 如果需要支持更多重试输入(比如
Y、YES),用lower()统一转小写是个省心的办法
内容的提问来源于stack exchange,提问作者Salman Abdullah Idrees
相关产品推荐
相关产品推荐

