Python Golf类evaluateAndDisplayScore函数传参顺序异常问题
问题分析与修复
核心问题
- 类方法缺少
self参数:Python中类的实例方法必须以self作为第一个参数,用来指代当前对象。你写的evaluateAndDisplayScore没有这个参数,导致调用时传入的参数顺序完全混乱——调用hole1.evaluateAndDisplayScore(enterHole, score)时,第一个参数enterHole实际被当成了方法里的hole参数,但方法的第一个位置本该接收对象本身,所以打印出来的数值顺序完全不对。 - 冗余传参+未更新对象属性:每个
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
相关产品推荐
相关产品推荐

