仅押注奇数的无限轮盘赌模拟器代码无限循环问题求助
轮盘赌模拟器代码问题修复
问题分析
你的代码出现无限循环和逻辑错误的原因如下:
- 金额计算与打印逻辑混乱:赢/输钱时的金额打印完全错误,导致
Money的实际值和输出不符;同时赢钱后未重置下注金额到最小值,输钱后翻倍下注未限制最大值。 - 循环结束条件未触发:“达成目标”和“输光钱”的判断被嵌套在奇偶判断的分支里,永远不会执行;且循环条件在
Money等于目标时仍会继续循环。
修正后的代码
import random random.seed(5) profit_goal = int(input('Profit Goal:')) starting_money = int(input('Starting money:')) table_min = int(input('Table minimum bet:')) table_max = int(input('Table maximum bet:')) bet = table_min money = starting_money while 0 < money < profit_goal: # 等于目标时直接退出循环 number = random.randint(1, 36) previous_money = money # 记录下注前的金额 if number % 2 != 0: # 赢钱:金额增加下注额,下注重置为最小值 money += bet print(f'Spin: {number}. You won ${bet} on the bet. You had {previous_money}. Now you have {money} left.') bet = table_min else: # 输钱:金额减少下注额,下注翻倍但不超过最大值 money -= bet print(f'Spin: {number}. You lost ${bet} on the bet. You had {previous_money}. Now you have {money} left.') bet = min(bet * 2, table_max) # 限制下注不超过桌台最大值 # 循环结束后判断最终结果 if money >= profit_goal: print(f'You reached your goal and beat the casino. You should stop now. You have ${money}.') elif money <= 0: print('You have lost all of your money')
关键修改点
- 循环条件改为
0 < money < profit_goal,当金额等于或超过目标时直接退出循环。 - 每次下注前记录
previous_money,确保打印的“之前金额”准确。 - 赢钱后将
bet重置为table_min,和示例逻辑保持一致。 - 输钱后用
min(bet * 2, table_max)限制下注金额不超过桌台最大值。 - 将结果判断移到循环外部,确保循环结束后正确输出最终状态。
- 用f-string优化输出格式,和示例效果匹配。
内容的提问来源于stack exchange,提问作者Gwyn
相关产品推荐
相关产品推荐

