如何在Python代码中处理用户输入错误后实现循环执行?
改进你的简易计算器:实现输入错误时自动循环
先提下原代码的几个小问题
- 你把所有逻辑都写在类的顶层,这会在定义类的时候就直接执行,而不是等创建类的实例再运行,不符合类的使用规范,类应该用来封装属性和方法。
- 没有处理输入不是数字的情况,比如用户输入字母会直接报错崩溃。
- 除法时没处理除数为0的情况,也会导致程序报错。
带输入验证和循环的改进版代码(函数式写法)
这种写法更适合新手理解,逻辑清晰:
def simple_calculator(): while True: print('这是一个简易计算器!请输入两个数字!') # 循环获取合法的第一个数字 while True: num1_input = input('输入数字1:') try: num_1 = float(num1_input) break except ValueError: print('输入无效,请输入合法数字!') # 循环获取合法的第二个数字 while True: num2_input = input('输入数字2:') try: num_2 = float(num2_input) break except ValueError: print('输入无效,请输入合法数字!') # 循环获取合法的运算符 while True: operator = input('请选择运算(+、-、*、/):') if operator in ['+', '-', '*', '/']: break else: print('运算符无效,请输入+、-、*、/中的一个!') # 执行计算,处理除法除零的情况 try: if operator == '+': result = num_1 + num_2 elif operator == '-': result = num_1 - num_2 elif operator == '*': result = num_1 * num_2 elif operator == '/': if num_2 == 0: print('错误:除数不能为0!') continue # 回到循环开头重新输入 result = num_1 / num_2 print(f'计算结果:{result}') # 询问是否继续计算 continue_choice = input('是否继续计算?(y/n):').lower() if continue_choice != 'y': print('计算器已退出!') break except Exception as e: print(f'发生未知错误:{e}') if __name__ == '__main__': simple_calculator()
关键逻辑说明
- 外层用
while True做无限循环,直到用户选择退出才终止。 - 每个输入环节单独做循环验证,确保用户输入符合要求才进入下一步。
- 用
try-except捕获数字转换时的ValueError,避免程序直接崩溃。 - 除法时单独判断除数是否为0,给出明确提示后重新循环。
面向对象写法(更规范)
如果想练习类的使用,可以把不同功能拆成方法,代码更模块化:
class SimpleCalculator: def run(self): while True: print('这是一个简易计算器!请输入两个数字!') num_1 = self.get_valid_number('输入数字1:') num_2 = self.get_valid_number('输入数字2:') operator = self.get_valid_operator() try: result = self.calculate(num_1, num_2, operator) print(f'计算结果:{result}') except ZeroDivisionError: print('错误:除数不能为0!') continue if not self.ask_continue(): print('计算器已退出!') break def get_valid_number(self, prompt): while True: user_input = input(prompt) try: return float(user_input) except ValueError: print('输入无效,请输入合法数字!') def get_valid_operator(self): while True: operator = input('请选择运算(+、-、*、/):') if operator in ['+', '-', '*', '/']: return operator else: print('运算符无效,请输入+、-、*、/中的一个!') def calculate(self, num1, num2, operator): if operator == '+': return num1 + num2 elif operator == '-': return num1 - num2 elif operator == '*': return num1 * num2 elif operator == '/': if num2 == 0: raise ZeroDivisionError return num1 / num2 def ask_continue(self): choice = input('是否继续计算?(y/n):').strip().lower() return choice == 'y' if __name__ == '__main__': calc = SimpleCalculator() calc.run()
内容的提问来源于stack exchange,提问作者crumby
相关产品推荐
相关产品推荐

