计算器程序仅重复流程不输出计算结果,如何修复?
问题分析与修复方案
你的计算器程序不输出结果直接进入重复询问的核心问题是**valid变量的初始化位置错误**,以及错误操作符处理逻辑的缺失。
具体问题点
valid变量未重置:valid = 3定义在最外层,第一次运算后valid会被减到0,后续循环中while valid > 0的条件直接不成立,运算代码完全不执行。- 错误操作符未重新输入:当用户输入无效操作符时,代码只减少尝试次数,但没有让用户重新输入新的操作符,导致循环结束后直接进入重复询问。
- 数字输入的小缺陷:
isdigit()无法识别负数,不过这不是当前核心问题,可后续优化。
修复后的代码
import time valid_operations = ("/", "*", "+", "-") repeat = "y" while repeat == "y": # 每次循环重置尝试次数 valid = 3 number_1 = input('Enter first number \n') if number_1.lstrip('-').isdigit(): # 支持负数输入 num_1 = int(number_1) else: print("that is not a valid integer") exit() number_2 = input('Enter second number \n') if number_2.lstrip('-').isdigit(): num_2 = int(number_2) else: print("that is not a valid integer") exit() operation = input("what operation would you like? \nvalid operations include:\n/ - divide\n* - multiply\n+ - add\n- - subtract\n") while valid > 0: if operation in valid_operations: if operation == "/": print(f"Answer = {num_1 / num_2}") elif operation == "*": print(f"Answer = {num_1 * num_2}") elif operation == "+": print(f"Answer = {num_1 + num_2}") elif operation == "-": print(f"Answer = {num_1 - num_2}") break # 运算完成后直接退出循环 else: valid -= 1 if valid > 0: operation = input(f"that is not a valid operation you have {valid} more attempts to type a valid operation\n") else: print("No attempts left, exiting.") exit() time.sleep(2) while True: want_rep = input("would you like to do another calculation? y/n\n") if want_rep.lower() == "y": repeat = "y" break elif want_rep.lower() == "n": repeat = "n" break else: print("that is not a valid response, please choose either yes - y or no - n") exit()
关键修复说明
- 将
valid = 3移到外层while repeat == "y"循环内部,确保每次计算都重置尝试次数。 - 运算正确后用
break退出内层循环,替代原来的valid -=3,逻辑更清晰。 - 当输入无效操作符时,让用户重新输入新的操作符,而不是只减少次数。
- 优化数字输入判断,支持负数(
lstrip('-').isdigit()),同时提前将输入转为整数,避免后续重复转换。 - 优化重复询问的逻辑,确保用户输入有效后才继续循环。
内容的提问来源于stack exchange,提问作者jstEagle
相关产品推荐
相关产品推荐

