为何Python计算器代码中Result变量未更新?运行结果始终为0
问题分析与修正
你的代码输出始终为0,核心原因是第一个循环的条件逻辑错误,导致后续的运算符识别、数字收集全部出错,最终运算分支没有被触发,Result保持初始值0。
具体错误点
1. 第一个while循环条件逻辑错误
原代码的循环条件:
while not (str(MathSlice[i]) == "+" or "-" or "*" or "/"):
这个条件逻辑完全错误:or "-"这类写法是判断字符串"-"的布尔值(非空字符串永远为True),所以整个括号内的表达式永远为True,not True就是False,循环体根本不会执行。
这会导致:
Number1是空列表,转字符串后为空i始终为0,Operation被赋值为MathSlice[0](即字符'1')- 后续的
if/elif分支中,Operation不是任何运算符,所以Result保持初始的0
正确的条件应该是判断当前字符是否不属于运算符集合:
while MathSlice[i] not in "+-*/":
2. 第二个while循环的数字收集逻辑错误
原代码的第二个循环逻辑混乱,会收集到很多无关字符(包括运算符、空格、重复的数字),后续的pop(1)也无法正确过滤无效内容。正确的做法是从运算符的下一个位置开始,收集所有非运算符的字符,再过滤掉空格。
3. 未处理数字中的空格
输入字符串里的空格(比如"1 + 2"中的空格)会被混入数字字符串,转int时会报错,需要先过滤掉空格。
修正后的代码
MathSlice = list("1 + 2") i = 0 Number1 = [] Operation = "" Number2 = [] Result = 0 # 收集第一个数字(跳过空格) while i < len(MathSlice) and MathSlice[i] not in "+-*/": if MathSlice[i] != " ": Number1.append(MathSlice[i]) i += 1 # 跳过空格找到运算符 while i < len(MathSlice) and MathSlice[i] == " ": i += 1 Operation = MathSlice[i] i += 1 # 收集第二个数字(跳过空格) while i < len(MathSlice): if MathSlice[i] != " ": Number2.append(MathSlice[i]) i += 1 Number1 = ''.join(Number1) Number2 = ''.join(Number2) if Operation == "+": Result = int(Number1) + int(Number2) elif Operation == "-": Result = int(Number1) - int(Number2) elif Operation == "*": Result = int(Number1) * int(Number2) elif Operation == "/": Result = int(Number1) / int(Number2) print(Result) # 输出3
额外说明
- 加入了越界判断(
i < len(MathSlice)),避免索引超出列表长度报错 - 单独处理了空格,确保数字字符串中只有数字字符
- 拆分了运算符的查找逻辑,先跳过空格再获取运算符,避免取到空格作为运算符
内容的提问来源于stack exchange,提问作者DiamondKnight
相关产品推荐
相关产品推荐

