为何指定betType为'red'时if语句未执行,else分支持续触发?
Python轮盘赌游戏逻辑问题排查
问题场景
当用户输入red作为betType时,明明betType == 'red'和bet in red两个条件都为真,却始终走else分支,没有执行盈利逻辑。相关代码如下:
if betType == "red" and bet in red == True: self.balance += betprice[0] * 2 else: self.balance -= betprice[0] print("Oh, the ball landed on a black number :(. This is your current balance: ".format(self.balance)) if betType == "black" and bet in black == True: self.balance += betprice[0] * 2 else: self.balance -= betprice[0] print("Oh, the ball landed on a red number :(. This is your current balance: ".format(self.Balance))
核心原因分析
1. 链式比较逻辑不符合预期
Python支持链式比较,bet in red == True会被解析成bet in red and red == True。这里red应该是存储红色数字的列表/集合,和布尔值True比较结果必然是False,导致整个if条件最终为False,直接进入else分支。
而且bet in red本身就返回布尔值,完全没必要多此一举加== True,直接写bet in red即可。
2. 连续独立if导致重复扣减
就算第一个if条件修复,当用户选red时,第一个if执行盈利后,第二个if的betType == "black"不成立,会进入第二个else分支,再次扣减余额——相当于赢了也会被扣钱,逻辑完全错误。应该用elif把两个分支改成互斥结构。
3. 属性名大小写不一致
第二个else里的self.Balance用了大写B,但类里的属性是self.balance小写b,这会要么触发AttributeError,要么使用错误的属性值,导致输出异常。
修正后的代码示例
if betType == "red" and bet in red: self.balance += betprice[0] * 2 print(f"恭喜赢了!当前余额: {self.balance}") elif betType == "black" and bet in black: self.balance += betprice[0] * 2 print(f"恭喜赢了!当前余额: {self.balance}") else: self.balance -= betprice[0] print(f"很遗憾,球落在{bet}上。当前余额: {self.balance}")
内容的提问来源于stack exchange,提问作者Gabriel Rodríguez
相关产品推荐
相关产品推荐

