Python代码中赌注金额未按规则倍数计算问题求助
代码问题分析与修正
核心问题清单
- 多独立if语句覆盖收益值:你写的三个if是独立执行的,后面的if会直接覆盖前面计算的
money变量。比如选10(既是偶数又是10的倍数),第一个if把money设为2*bet,第二个if立刻改成3*bet,如果10不是质数,最后一个else又把money改回bet,最终结果完全不符合预期。 - 质数判断逻辑错误:
primenum列表里存的是字符串(如"3"),但你输入的number是整数,类型不匹配,永远无法匹配成功。number == primenum ==0的写法完全不符合语法逻辑,你实际想表达的是「判断数字是否在质数列表中」,正确写法是number in primenum(前提是列表元素为整数)。
- 冗余的else分支:
money = bet+0完全等价于money = bet,且每次else都会覆盖之前的计算结果,这也是收益不生效的关键原因。 - 未使用生成的
winningnumber:你代码里生成了开奖号码,但没有用它做任何判断,按正常博彩逻辑,应该是用户选的数字等于开奖号码时,才根据属性计算收益。
修正后的代码
假设需求是:用户选的数字等于开奖号码时,按「质数5倍>10的倍数3倍>偶数2倍」的优先级计算收益,未中奖则损失赌注:
import random bet = int(input("enter a bet: ")) winning_number = random.randint(0, 30) user_number = int(input("Pick a number 0-30: ")) # 初始化收益为0,未中奖则无收益 money = 0 # 先判断是否命中开奖号码 if user_number == winning_number: # 质数列表改为整数类型 prime_nums = [3, 5, 7, 11, 13, 17, 19, 23, 29] # 按倍数从高到低判断,避免覆盖 if user_number in prime_nums: print("The number was a prime number, you get 5x your money.") money = bet * 5 elif user_number % 10 == 0: print("The number was a multiple of 10, you get 3x your money.") money = bet * 3 elif user_number % 2 == 0: print("The number was even, you get 2x your money.") money = bet * 2 else: print("The number is odd, you get your bet back.") money = bet else: print("You didn't pick the winning number, you lose your bet.") print(f"The winning number was {winning_number}") print(f"Your money at the end of the round is {money}")
修正说明
- 将独立if改为elif链式判断,确保只会执行第一个满足的条件,不会覆盖之前的收益计算,同时按倍数优先级排序。
- 修正质数列表为整数类型,使用
in关键字判断数字是否在质数列表中。 - 加入开奖号码的命中判断,符合正常博彩逻辑(若你的需求是仅根据选号属性发奖,可删除外层的
if user_number == winning_number判断)。 - 移除冗余的变量赋值,简化逻辑。
内容的提问来源于stack exchange,提问作者MONKEYBALLS85
相关产品推荐
相关产品推荐

