Python调用Done()时elif无输出 是否为变量引用错误排查
御术师趣味测试无输出问题修复
核心错误点
代码存在两个直接导致无输出的问题:
__init__构造方法缩进错误,原本应该绑定到实例的四个御术积分属性,没有写在构造方法的函数体内,实例初始化逻辑失效Done()函数中错误使用类名Benders访问积分属性,但所有计分操作都是在实例ap上执行的,类本身不存在这四个积分属性,所有条件判断都无法命中,自然不会触发任何打印逻辑,连else分支都走不到。
修正后可运行代码
class Benders(): def __init__(self, firebender=0, earthbender=0, airbender=0, waterbender=0): # 修正缩进,将属性绑定到实例 self.firebender = firebender self.earthbender = earthbender self.airbender = airbender self.waterbender = waterbender def Firepower(self): self.firebender = self.firebender + 1 return self.firebender def Earthbendingstyle(self): self.earthbender = self.earthbender + 1 return self.earthbender def Windy(self): self.airbender = self.airbender + 1 return self.airbender def Tidal(self): self.waterbender = self.waterbender + 1 return self.waterbender ap = Benders() # 原有计分逻辑保持不变 red = ap.Firepower() yellow = ap.Firepower() orange = ap.Earthbendingstyle() green = ap.Tidal() blue = ap.Windy() indigo = ap.Tidal() violet = ap.Earthbendingstyle() yes = ap.Earthbendingstyle() yes_o = ap.Tidal() no = ap.Firepower() no_o = ap.Windy() yes = yes_o no = no_o slytherin = ap.Firepower() hufflepuff = ap.Earthbendingstyle() gryffindor = ap.Tidal() ravenclaw = ap.Windy() deer = ap.Tidal() ram = ap.Firepower() longhorn = ap.Earthbendingstyle() hummingbird = ap.Windy() cry = ap.Windy() yell_back = ap.Firepower() i_dont = ap.Earthbendingstyle() try_to_understand_them = ap.Tidal() waterbending = ap.Earthbendingstyle() firebending = ap.Windy() earthbending = ap.Tidal() airbending = ap.Firepower() def Done(): # 修正:访问实例ap的积分属性而非类属性,同时将结果文本翻译为中文 if ap.waterbender >= 11: print("“水是变化的元素。水善部落的族人能够适应诸多变故,他们骨子里的集体意识与爱意支撑着彼此渡过任何难关。”——爱洛。你是御水师,这段描述完全贴合你的特质。你未必喜欢变化,但总能从容应对,身边也有一群坚定的朋友陪你走过所有路程。只是要注意你天性乐于付出,别被别有用心的人利用。") elif ap.firebender >= 11: print("“火是力量的元素。火烈国的族人有强烈的渴望与意志,有足够的能量和内驱力去实现自己的目标。”——爱洛。你是御火师,这非常酷。你的决心和机敏可能会吓到一部分人,但别因此停下追逐目标的脚步,真正值得留在你生命里的人,会在你攀向顶峰的路上一直为你加油。") elif ap.airbender >= 10: print("“气是自由的元素。气和族的僧人脱离世俗烦忧,找到了平静与自由,而且他们显然都很有幽默感。”——爱洛。你是御气师,这种特质有时看起来有点矛盾:你是朋友里最孩子气的那个,却有着远超年龄的智慧。大多数人摸不透你,希望你“选个明确的活法”,别听他们的,做你自己就好。") elif ap.earthbender >= 11: print("“土是实在的元素。大土国的族人多元又强大,他们坚韧、隐忍、持之以恒。”——爱洛。你是御土师,这种特质常被人误解:大家觉得你固执甚至有点粗线条,但你只是在保护自己和在乎的人。不过偶尔也可以灵活一点,不用事事都硬扛。") else: print("你是降世神通。你是个相当均衡的人,大概率是朋友圈里的和事佬,也是家里“靠谱”的那个孩子。记得多留点时间给自己,别忘了你手里握着的力量。") # 调用函数执行判断 Done()
运行说明
- 按照当前的测试计分逻辑,四类御术的积分均为7,未达到单类判定阈值,运行后会正常输出else分支的降世神通结果
- 后续调整题目对应计分逻辑时,只要保持调用实例ap的四个加分方法即可,判断逻辑不需要额外改动
- 如果要避免全局变量依赖,可以把ap作为参数传入Done函数,写法更规范。
内容的提问来源于stack exchange,提问作者Sophia Ellen
相关产品推荐
相关产品推荐

