Python报错:'method'与'int'间不支持'>='运算的解决求助
TypeError 修复:方法未调用导致的类型不匹配
错误原因
报错TypeError: '>=' not supported between instances of 'method' and 'int'的核心问题是:在Kilpailu类的kilpailu_ohi方法中,你直接使用了i.getKuljettuMatka(这是一个方法对象)与整数self.pituuskm比较,而没有调用这个方法(需要加括号()来执行方法并获取返回值)。
修复步骤
1. 修正方法调用
将kilpailu_ohi方法中的i.getKuljettuMatka改为i.getKuljettuMatka(),确保调用方法获取行驶里程数值:
class Kilpailu(): def __init__(self, nimi, pituuskm, osallistujat): self.nimi = nimi self.pituuskm = pituuskm self.osallistujat = osallistujat def kilpailu_ohi(self): for i in self.osallistujat: # 修复:添加括号调用getKuljettuMatka方法 if i.getKuljettuMatka() >= self.pituuskm: return True # 遍历所有车辆后都未达标,才返回False return False
2. 修正循环逻辑(重要)
原代码的循环逻辑存在问题:只会检查第一个参赛车辆,若第一个不满足就直接返回False,不会继续检查后续车辆。上面的修复已经修正了这个问题——遍历所有车辆,只要有一辆达标就返回True,全部不达标才返回False。
3. 优化主执行代码(可选)
原代码将执行逻辑放在class main():中是不合理的,Python中不需要用类包裹脚本执行逻辑,直接写成顶层代码即可:
import random autot = [] for i in range(10): auto = Auto("ABC-" + str(i + 1), random.randint(100, 200)) autot.append(auto) k = Kilpailu("Suuri romuralli", 8000, autot) tunnit = 0 print(k.kilpailu_ohi()) # 现在会返回False(初始里程都是0)
扩展:模拟比赛过程(可选)
由于所有车辆初始里程为0,修复后第一次调用kilpailu_ohi()会返回False。如果需要模拟真实比赛过程,给Auto类添加行驶相关方法:
class Auto: def __init__(self, rekisteritunnus, huippunopeus): self.rekisteritunnus = rekisteritunnus self.huippunopeus = huippunopeus self.nopeus = 0 self.KuljettuMatka = 0 def getKuljettuMatka(self): return int(self.KuljettuMatka) # 添加加速方法 def kiihdytä(self, nopeuden_muutos): uusi_nopeus = self.nopeus + nopeuden_muutos # 限制速度在0到最高速度之间 if uusi_nopeus > self.huippunopeus: self.nopeus = self.huippunopeus elif uusi_nopeus < 0: self.nopeus = 0 else: self.nopeus = uusi_nopeus # 添加行驶方法(按小时计算里程) def aja(self, tunnit): self.KuljettuMatka += self.nopeus * tunnit
然后在主代码中模拟比赛循环:
while not k.kilpailu_ohi(): tunnit += 1 for auto in autot: # 随机调整速度(-10到15之间的变化量) auto.kiihdytä(random.randint(-10, 15)) # 行驶1小时 auto.aja(1) # 打印当前进度 print(f"\n第{tunnit}小时:") for auto in autot: print(f"{auto.rekisteritunnus}: {auto.getKuljettuMatka()}km") print("\n比赛结束!")
内容的提问来源于stack exchange,提问作者Mirzu42
相关产品推荐
相关产品推荐

