蒙提霍尔游戏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
相关产品推荐
相关产品推荐

