You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

蒙提霍尔游戏For循环未执行指定次数:TypeError: 'int'对象不可迭代

嘿,别慌!作为编程新手遇到循环问题太正常啦,我来帮你一步步解决~

解决蒙提霍尔游戏循环的两个核心问题

1. 先搞定TypeError:确保循环次数是整数类型

你提到输入v=2时出现TypeError,大概率是因为用户输入的内容默认是字符串,直接传给range()就会报错。比如你如果写了v = input("请输入循环次数:"),这时候v是字符串,不是整数,range()根本不认它。

解决方法超简单,把输入转成整数就行:

# 把输入的字符串强制转成整数
v = int(input("请输入循环次数:"))
# 两种循环写法都能实现v次运行,选你习惯的就行
for t in range(v):  # 生成0到v-1的序列,刚好循环v次
    # 这里放你的蒙提霍尔游戏代码
# 或者用下面这种,从1开始计数
for t in range(1, v+1):
    # 这里放你的蒙提霍尔游戏代码

2. 解决循环只运行一次:检查代码缩进!

如果v>1但代码只跑一次,90%是游戏核心代码没缩进在for循环的块里。比如你可能不小心写成了这样:

v = int(input("请输入循环次数:"))
for t in range(v):
print(f"开始第{t+1}次游戏")
# 其他游戏代码...

这种情况下,print和后面的代码不在循环范围内,只会执行一次。正确的做法是:把所有需要重复运行的游戏代码,都缩进(一般是4个空格)放在for循环的冒号后面:

v = int(input("请输入循环次数:"))
for t in range(v):
    print(f"开始第{t+1}次游戏")  # 缩进4个空格,属于循环内的代码
    # 下面所有蒙提霍尔的逻辑,比如初始化门、用户选择、主持人开门、统计结果
    # 全部都要缩进在这里!

给你一个简化的可运行示例

你可以对照这个例子调整自己的代码,逻辑更清晰:

import random

def monty_hall_round():
    # 封装单次蒙提霍尔游戏的逻辑
    doors = [0, 0, 1]  # 1代表藏奖品的门
    random.shuffle(doors)
    # 模拟玩家随机选门
    player_pick = random.randint(0, 2)
    # 主持人打开一扇空门(简化处理)
    available_doors = [i for i in range(3) if i != player_pick and doors[i] == 0]
    host_open = random.choice(available_doors)
    # 模拟玩家选择切换门
    new_pick = [i for i in range(3) if i != player_pick and i != host_open][0]
    # 返回这次游戏是否中奖
    return doors[new_pick] == 1

# 先获取有效的循环次数
while True:
    try:
        v = int(input("请输入循环次数:"))
        if v > 0:
            break
        print("请输入大于0的整数哦!")
    except ValueError:
        print("输入无效,请输入一个数字!")

# 循环运行游戏并统计结果
win_times = 0
for t in range(1, v+1):
    if monty_hall_round():
        win_times += 1
    print(f"第{t}次游戏结束,累计中奖{win_times}次")

print(f"\n共运行{v}次,切换门的中奖率:{win_times/v*100:.2f}%")

内容的提问来源于stack exchange,提问作者florence-y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:23:22