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

如何编写可持续接收用户输入并对所有输入内容进行求值的程序

实现思路
  • 第一步:搭建持续输入监听逻辑:通过无限循环接收用户输入,预设退出关键词,用户输入对应内容即可终止程序。
  • 第二步:输入合法性校验:直接调用系统自带的求值函数存在代码注入风险,需先设置合法字符白名单,只允许数字、四则运算符、括号这类运算相关的字符输入,过滤敏感内容。
  • 第三步:运算与异常捕获:对校验通过的表达式执行求值操作,同步捕获运算过程中可能出现的语法错误、除零错误等异常,给用户返回明确的报错提示,避免程序直接崩溃。
  • 第四步:结果回显:输出运算结果后回到输入监听状态,等待下一次用户输入。
可参考Python实现代码
# 合法字符白名单,仅支持四则运算和括号
ALLOWED_CHARS = set('0123456789+-*/(). ')

def calculate_expression(expr):
    # 先校验输入是否包含非法字符
    for char in expr:
        if char not in ALLOWED_CHARS:
            raise ValueError("输入包含非法字符,仅支持数字、+-*/运算符和括号")
    # 禁用eval内置函数上下文,降低注入风险
    return eval(expr, {"__builtins__": None}, {})

if __name__ == "__main__":
    print("四则运算计算器已启动,输入exit/quit/q即可退出")
    while True:
        user_input = input(">>> ").strip()
        # 触发退出逻辑
        if user_input.lower() in ['exit', 'quit', 'q']:
            print("程序已退出")
            break
        # 空输入直接跳过
        if not user_input:
            continue
        # 运算和异常处理
        try:
            result = calculate_expression(user_input)
            print(f"运算结果:{result}")
        except ZeroDivisionError:
            print("错误:除数不能为0")
        except SyntaxError:
            print("错误:表达式语法不正确")
        except ValueError as e:
            print(f"错误:{e}")
        except Exception as e:
            print(f"运算失败:{str(e)}")
代码说明
  • 上述实现通过白名单校验+禁用eval内置函数的方式降低了代码注入风险,如果是生产环境使用,建议替换eval为专门的表达式解析库(如asteval),安全性更高。
  • 覆盖了常规的运算异常场景,用户输入不合法时不会导致程序崩溃。
  • 支持加减乘除四则运算、括号调整运算优先级,符合常规数学运算规则。

内容的提问来源于stack exchange,提问作者Yuzuki Yuki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:54:02