python-3.x - 囚箱问题,模拟解
问题描述
我正在尝试编写代码来模拟囚犯去标有他们号码的盒子,然后到里面的票也发送给他们的盒子,依此类推。
我收到列表索引超出范围错误但不确定代码是否正确
total = 0
for s in range(100):
prisoners = []
boxes = []
counter = 0
winners = 0
number = 0
for i in range(1, 101):
prisoners.append(i)
#print(prisoners)
for x in range(1, 101):
boxes.append(x)
shuffle(boxes)
#print(boxes)
while counter!=99:
for h in range(1, 51):
if prisoners[counter] == boxes[number]:
print("winner")
winners +=1
counter +=1
break
else:
number = boxes[number]
print("loser")
解决方案
问题是您将框编号存储为范围 [1,100],但将它们用作 100 长数组 (0-99) 的索引,因此当它运行时number = boxes[number]
,有时会将编号分配为 100 并导致错误。
解决它的一种方法是 make it number = boxes[number] - 1
。
另一种是在逻辑中使用 0-99 范围,但如果要打印它们,则添加 1。
推荐阅读
- javascript - 离子 JavaScript 函数在第一次加载时有效,但在第二次加载时无效
- matlab - 使用 Matlab ode45 对弹丸运动进行建模
- point-cloud-library - PCL 特征匹配失败
- rounding - python中不确定性的科学四舍五入?
- vue.js - 箭头函数不绑定数据与 axios 响应
- ruby-on-rails - Rails 使用数据库查询按月分组记录
- node.js - 当我尝试使用 JS 从外部类扩展类时,为什么会出现引用错误
- custom-model-binder - 如何在 ModelBinders 中使用 DefaultModelBindingMessageProvider
- vb.net - 使用联接时查询活页夹显示单元格只读
- r - 减少地块之间的空间 ggplot2