我在尝试模拟学校的数学问题时遇到了一些问题,我独立测试了内循环,结果就是我所期望的。我不知道问题出在哪里,我在哪里可以得到分辨率。这应该是一个简单的错误。
这是一个问题: 有一个包包括三个红球,四个白球和五个黑球。每次拿一个球。然后红球是第一种颜色的概率是多少。
这是我的代码:(我的代码中未添加所有注释)
import random as rd
y = 1000 *//total try*
succ = 0 *//success times*
orgbg = ['r','r','r','w','w','w','w','b','b','b','b','b'] *//original bag for each loop initialization*
while (y >= 0):
redball = 0
blackball = 0
whiteball = 0
newbg = orgbg *//every bag for a single try*
while (redball < 3 and whiteball < 4 and blackball < 5):
tknum = rd.randrange(0,len(newbg),1)
tkball = newbg[tknum]
if (tkball == 'r'):
redball = redball + 1
elif (tkball =='w'):
whiteball = whiteball + 1
else:
blackball = blackball + 1
del newbg[tknum]
if (redball == 3):
succ = succ + 1
y = y - 1
print (succ)
这是错误报告所说的内容: ValueError:randrange()(0,0,0)的空范围
当我转动代码时
tknum = rd.randrange(0,len(newbg),1)
到
tknum = rd.randrange(5,len(newbg),1)
错误重写说: ValueError:randrange()的空范围(5,5,0)
我想这是外循环中的初始化 newbg = orgbg 无法解决,但是怎么会发生这种情况呢?
很抱歉提出这么长的问题,我是初学者,这是我第一次在StackOverFlow上提问,你也可以给我一些关于我的代码风格或方法以及提问方式的建议,下次我会更好,希望你不介意。
答案 0 :(得分:0)
我认为您的问题确实与外部循环 newbg = orgbg 中的初始化有关。要更正代码,您应该使用
修改此行newbg = deepcopy(orgbg)
并在代码开头导入相应的模块:
from copy import deepcopy
该错误的解释有点复杂,并且与复制列表时Python处理内存的方式相关联。事实上,这有两种可能性:浅拷贝或深拷贝。在这里,当需要深拷贝时,你做了一个浅拷贝。这里有更好的解释:https://www.python-course.eu/deep_copy.php或What exactly is the difference between shallow copy, deepcopy and normal assignment operation?