计算器循环复用、退出异常及NameError(name 'main' is not defined)问题求助
问题分析与修复方案
核心问题
NameError: name 'main' is not defined:你调用了main()函数,但代码里根本没定义这个函数,Python找不到它所以报错。- 输入9无法触发退出流程+无法循环回到初始界面:操作选择的输入
chr=int(input(...))写在while True循环外面,程序只会在启动时读取一次用户选择,之后循环会一直重复第一次的操作逻辑,不会重新显示菜单让用户选择新操作。 - 无效输入分支冗余:单独判断chr=5到8的写法太繁琐,完全可以合并成一个分支处理所有非1-4、非9的输入。
修复后的代码
while True: # 每次循环都重新显示菜单 print("calculator") print("1.Pluss") print("2.Minus") print("3.Ganging") print("4.Deling") print("9.Avslutt") try: chr = int(input("1-4 eller Avslutt: ")) except ValueError: print("请输入有效的数字(1-4或9)") continue if chr == 1: a = int(input("Number 1:")) b = int(input("Number 2:")) c = a + b print("sum = ", c) elif chr == 2: a = int(input("Number 1:")) b = int(input("Number 2:")) c = a - b print("sum = ", c) elif chr == 3: a = int(input("Number 1:")) b = int(input("Number 2:")) c = a * b print("sum = ", c) elif chr == 4: a = int(input("Number 1:")) b = int(input("Number 2:")) try: c = a / b print("sum = ", c) except ZeroDivisionError: print("除数不能为0!") elif chr == 9: print("Thank you for using my calculator!") again = input("Do you want to keep using my calculator? y/n: ") if again.lower() != "y": print("Thank you!") break # 如果输入y/Y,循环会自动回到开头显示菜单 else: print("请输入1-4之间的数字或9退出!")
关键改动说明
- 把菜单显示和操作选择移到
while True循环内部,确保每次循环都能重新显示菜单并获取用户的新选择。 - 移除了错误的
main()调用,用户输入y/Y时,循环会自动回到开头,重新执行菜单显示和选择逻辑。 - 添加了
try-except处理:- 捕获用户输入非数字的情况,避免程序崩溃。
- 处理除法时的除数为0错误,增强程序健壮性。
- 合并了冗余的无效输入判断,用一个
else分支处理所有非1-4、非9的输入。 - 调整了退出逻辑:当用户输入9时直接触发退出询问流程,逻辑更清晰。
内容的提问来源于stack exchange,提问作者IBeatBoba
相关产品推荐
相关产品推荐

