基础脚本中使用break语句是否合理:以简易计算器程序为例
你当前代码里的break既不属于过度设计,也不是合理用法,属于不符合交互逻辑的误用。
现有break用法的核心问题
你用while True无限循环作为计算器的主逻辑,本意应该是支持用户连续多次计算,但你现在写的4处break里,只有用户主动输入e退出的那一处是符合预期的,剩下3处全是错误用法:
- 输入非法操作符后的
break - 输入非数字触发
ValueError后的break - 除以零触发
ZeroDivisionError后的break
上述三处break的效果都是一出错就直接终止整个主程序,用户只要输错一次就得重新打开程序才能再次计算,完全不符合计算器的常规使用逻辑。
你当前代码还存在其他无法运行的bug
除了break逻辑问题,现有代码还有三处明显错误,直接运行会报错:
- 缩进错误:
try关键字没有放在while True的缩进块下,直接触发语法错误 - 变量未定义:
val1=float(input(val1))中val1还没有赋值就被用作input的提示文本,触发NameError - 冗余输入:
val2先做了一次无提示的input(),又做了一次带val2提示的input(),会要求用户连续输入两次第二个数值
修正后的参考代码
把所有出错场景的break替换为continue(回到循环开头,让用户重新输入),仅保留主动退出场景的break即可:
while True: try: print("Choose operation(+ | - | * | / | Enter 'e' to exit)") op = input().strip() if op not in ("+", "-", "*", "/", "e"): print("Invalid input, you must choose an option from the menu.") continue elif op == "e": print("Program exited.") break else: print("> Please enter first value:") val1 = float(input()) print("> Please enter second value:") val2 = float(input()) if op == "+": res = val1 + val2 elif op == "-": res = val1 - val2 elif op == "*": res = val1 * val2 else: res = val1 / val2 print(f"= {res}") except ValueError: print("Input must be numerical.") continue except ZeroDivisionError: print("Dividing by zero is undefined.") continue exit()
break本身就是Python原生用来终止循环的语法,不存在过度设计的说法,只需要判断使用场景是否符合逻辑即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

