Python计数器如何支持输入数学运算表达式?
解决计数器支持数学表达式输入的问题
你的问题出在直接用int(input())转换输入内容——当输入是2+1这类表达式时,它不是合法的整数字符串,自然会抛出invalid literal for int() with base 10错误。要支持数学表达式输入,需要先计算表达式的结果,再和目标值对比。
修改思路
- 先获取输入的字符串,而非直接转整数
- 计算表达式的数值结果(用
eval()实现,同时做基础安全校验避免恶意代码) - 捕获表达式解析/计算时的异常,处理非法输入的情况
- 对比计算结果与
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
相关产品推荐
相关产品推荐

