一些基本的python编码bug我不知道如何解决

时间:2017-10-04 10:50:30

标签: python-3.x runtime-error

我在尝试模拟学校的数学问题时遇到了一些问题,我独立测试了内循环,结果就是我所期望的。我不知道问题出在哪里,我在哪里可以得到分辨率。这应该是一个简单的错误。

这是一个问题: 有一个包包括三个红球,四个白球和五个黑球。每次拿一个球。然后红球是第一种颜色的概率是多少。

这是我的代码:(我的代码中未添加所有注释)

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上提问,你也可以给我一些关于我的代码风格或方法以及提问方式的建议,下次我会更好,希望你不介意。

1 个答案:

答案 0 :(得分:0)

我认为您的问题确实与外部循环 newbg = orgbg 中的初始化有关。要更正代码,您应该使用

修改此行
newbg = deepcopy(orgbg)

并在代码开头导入相应的模块:

from copy import deepcopy

该错误的解释有点复杂,并且与复制列表时Python处理内存的方式相关联。事实上,这有两种可能性:浅拷贝或深拷贝。在这里,当需要深拷贝时,你做了一个浅拷贝。这里有更好的解释:https://www.python-course.eu/deep_copy.phpWhat exactly is the difference between shallow copy, deepcopy and normal assignment operation?