You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:50:20