Python面向对象硬币接收器CLI程序报错排查与修复请求
修复硬币接收器退还后插入报错的问题
问题根源
报错unsupported operand type(s) for +=: 'type' and 'int',且退还后显示硬币数量为<class 'int'>、总价值为<class 'float'>,核心原因是退还硬币的方法中错误地将实例变量赋值为数据类型本身(如self.coin_count = int),而非重置为初始数值0/0.0。后续插入硬币时,+=操作试图将int类型对象与整数相加,自然触发类型错误。
修复方案
1. 修正coin_acceptor.py中的CoinAcceptor类
找到退还硬币的方法,把错误的类型赋值改为数值重置:
class CoinAcceptor: def __init__(self): # 初始化实例变量为数值类型的初始值 self.coin_count = 0 self.total_value = 0.0 def insert_coin(self, coin_value): # 插入硬币:累加数量与价值 self.coin_count += 1 self.total_value += coin_value print(f"当前硬币数量:{self.coin_count},总价值:{self.total_value:.2f}元") def refund_coins(self): # 修复:重置为初始数值,而非类型对象 print(f"已退还全部硬币:共{self.coin_count}枚,总价值{self.total_value:.2f}元") self.coin_count = 0 self.total_value = 0.0
2. 确保main.py的CLI交互逻辑正确
调用修正后的类方法,避免传入错误值:
from coin_acceptor import CoinAcceptor def main(): acceptor = CoinAcceptor() while True: print("\n=== 硬币接收器 ===") print("1. 插入硬币") print("2. 退还所有硬币") print("3. 退出") choice = input("请输入操作编号:") if choice == "1": try: value = float(input("输入硬币面值(元):")) if value <= 0: print("请输入正数面值") continue acceptor.insert_coin(value) except ValueError: print("请输入有效的数字") elif choice == "2": acceptor.refund_coins() elif choice == "3": print("程序退出") break else: print("无效操作,请重新输入") if __name__ == "__main__": main()
验证效果
- 执行退还操作后,硬币数量显示为
0,总价值显示为0.00元 - 后续插入硬币时,
+=操作正常累加数量与价值,不再触发TypeError
内容的提问来源于stack exchange,提问作者RovKat
相关产品推荐
相关产品推荐

