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

Python Golf类evaluateAndDisplayScore函数传参顺序异常问题

问题分析与修复

核心问题

  1. 类方法缺少self参数:Python中类的实例方法必须以self作为第一个参数,用来指代当前对象。你写的evaluateAndDisplayScore没有这个参数,导致调用时传入的参数顺序完全混乱——调用hole1.evaluateAndDisplayScore(enterHole, score)时,第一个参数enterHole实际被当成了方法里的hole参数,但方法的第一个位置本该接收对象本身,所以打印出来的数值顺序完全不对。
  2. 冗余传参+未更新对象属性:每个Golf对象初始化时已经存储了hole编号和par值,调用方法时不需要再传hole编号;用户输入的score也没有更新到对应对象的score属性里,而是直接作为参数传递,逻辑冗余且容易出错。

修正后的代码

class Golf:
    def __init__(self, hole, score, par):
        self.hole = hole
        self.score = score
        self.par = par

    # 添加self作为第一个参数,直接使用对象的属性
    def evaluateAndDisplayScore(self):
        if self.score > self.par:
            results = "Over Par"
        elif self.score < self.par:
            results = "Under Par"
        else:
            results = "At Par"
        print(f"You scored {results} on hole # {self.hole} with a par of {self.par}.")

score = 0
hole1 = Golf(1, score, 3)
hole2 = Golf(2, score, 4)
hole3 = Golf(3, score, 5)

enterHole = int(input("Enter hole number: "))
score = int(input("Enter score: "))

if enterHole == 1:
    hole1.score = score  # 更新对象的score属性
    hole1.evaluateAndDisplayScore()  # 调用方法时无需传参
elif enterHole == 2:
    hole2.score = score
    hole2.evaluateAndDisplayScore()
elif enterHole == 3:
    hole3.score = score
    hole3.evaluateAndDisplayScore()
else:
    print("Invalid hole number entered.")

验证示例结果

运行修正后的代码,输入示例中的值:

Enter hole number: 1
Enter score: 5
You scored Over Par on hole # 1 with a par of 3

Enter hole number: 2
Enter score: 1
You scored Under Par on hole # 2 with a par of 4

Enter hole number: 3
Enter score: 5
You scored At Par on hole # 3 with a par of 5

完全匹配你需要的示例输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:48:10