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

Python计数器如何支持输入数学运算表达式?

解决计数器支持数学表达式输入的问题

你的问题出在直接用int(input())转换输入内容——当输入是2+1这类表达式时,它不是合法的整数字符串,自然会抛出invalid literal for int() with base 10错误。要支持数学表达式输入,需要先计算表达式的结果,再和目标值对比。

修改思路

  1. 先获取输入的字符串,而非直接转整数
  2. 计算表达式的数值结果(用eval()实现,同时做基础安全校验避免恶意代码)
  3. 捕获表达式解析/计算时的异常,处理非法输入的情况
  4. 对比计算结果与contador + 1是否相等

修改后的代码

contador = 0
allowed_ops = ["+", "-", "*", "/"]

def is_safe_expression(expr):
    # 简单校验:只允许数字、指定运算符和空格,防止恶意代码
    for char in expr:
        if not (char.isdigit() or char in allowed_ops or char.isspace()):
            return False
    return True

while True:
    if contador == 0:
        user_input = input("¡Comenzamos! Estamos en 0: ").strip()
        if not is_safe_expression(user_input):
            print("输入包含非法内容,游戏结束!")
            break
        try:
            result = eval(user_input)
            # 确保结果是整数(因为计数器是整数递增)
            if not isinstance(result, int):
                print("结果必须是整数,游戏结束!")
                break
            if result == contador + 1:
                contador = result
            else:
                print("¡Has perdido!")
                break
        except (SyntaxError, ZeroDivisionError):
            print("表达式无效或出现除零错误,游戏结束!")
            break
    else:
        user_input = input("Introduce el siguiente número: ").strip()
        if not is_safe_expression(user_input):
            print("输入包含非法内容,游戏结束!")
            break
        try:
            result = eval(user_input)
            if not isinstance(result, int):
                print("结果必须是整数,游戏结束!")
                break
            if result == contador + 1:
                contador = result
            else:
                print("¡Has perdido!")
                break
        except (SyntaxError, ZeroDivisionError):
            print("表达式无效或出现除零错误,游戏结束!")
            break

关键说明

  • is_safe_expression函数做基础安全校验,只允许数字、指定运算符和空格,避免用户输入恶意代码
  • 使用eval()计算表达式结果,同时捕获语法错误、除零错误等异常,处理非法输入
  • 额外判断结果是否为整数,避免输入1.5+1.5这类得到浮点数的情况,保证计数器的整数递增逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:22:33