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

Python MoneyChecker类代码运行结果与预期不符问题排查

钞票校验代码问题排查

核心错误原因

checker方法的判断逻辑完全没有绑定调用方法的实例本身,硬编码依赖全局变量money1和money2:

  • 不管是money1还是money2调用checker(),方法执行的第一个判断永远是检查全局变量money1.amount是否等于200。由于初始化时已经把money1.amount固定设为200,这个判断条件永远成立,调用money2.checker()时会直接命中该分支返回脏钞结果,后面的清洁钞判断逻辑根本没有执行机会。
  • 代码里还存在一处会直接导致运行报错的笔误:money2.amount = [100][1]是对仅含单个元素的列表取索引为1的值,Python列表索引从0开始,这行正常执行会抛出IndexError: list index out of range,能得到运行结果说明这行是粘贴或书写时的错误。
  • 类定义写法不规范:将type、amount直接定义在类下属于类属性,所有类实例会共享这两个值,很容易出现属性被意外覆盖的问题,实例属性应该统一写在__init__初始化方法中。

修正后的可运行代码

class MoneyChecker:
    def __init__(self, amount, note_type):
        self.amount = amount
        self.type = note_type

    def checker(self):
        # 所有判断基于当前实例自身属性,不依赖外部全局变量
        if self.amount >= 200:
            return "The %d %s is a dirty note" % (self.amount, self.type)
        else:
            return "The %d %s is a clean note" % (self.amount, self.type)


money1 = MoneyChecker(200, "Naira")
money2 = MoneyChecker(100, "Naira")
print(money1.checker())
print(money2.checker())

运行输出

The 200 Naira is a dirty note
The 100 Naira is a clean note

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:30:39