在经历了一个while循环之后,我遇到了一个从函数中获取随机int的问题。该功能的目的是洗牌:
def shuffling(maindeck, shuffle_steps):
random.seed()
# sets a number of steps and creates a new array to be returned
steps = 0
shuffler = maindeck
while steps < shuffle_steps:
firstR = random.randrange(len(maindeck) - 1)
secondR = random.randrange(len(maindeck) - 1)
shuffler[firstR], shuffler[secondR] = shuffler[secondR], shuffler[firstR]
steps +=1
return shuffler
这是使用函数的代码:
^{pr2}$其中total_deck是来自文件的数组甲板.py在
这段代码在while循环的第一次迭代中运行良好,但是当循环迭代时,我得到错误:
ValueError: empty range for randrange()
错误发生在
random.randrange(len(Maindeck) - 1)
是因为
len(Maindeck) - 1
现在计算结果是否等于或小于0?为什么会这样?在
选项:
如果列表中有一组卡,并且想重新排列整个序列,只需使用random.shuffle(sequence)进行内部洗牌。
如果要获得一个洗牌副本,请使用random.sample()并将长度设置为序列的长度。
此行:
假定^{cd1>}是某种可变列表数据结构,^{{cd2>}引用了与^{{cd1>}相同的数据-您正在重新排列^{cd1>}(伪装)并返回它-然后进一步地,您正在对其进行编译。您可以使用^{cd5>}代替wich返回主甲板的洗牌副本。
^{cd6>}设置产生随机性的Mersenne_Twister的起始内部状态-如果需要,请设置一次,但每次洗牌时都设置一次。
Seeding
如果随机值固定,将导致相同的随机数,给定的u使用的随机操作与每个随机操作更改内部状态相同-不需要任何种子使用它,默认情况下,它在源中完成:请参阅Python's random: What happens if I don't use seed(someValue)?您的代码应该使用^{cd8>}。
代码:
^{pr2}$输出:
^{pr3}$如果需要卡值,请使用:
^{pr4}$啊!我看到问题了!您的游戏“用完”主牌堆,因为
shuffling()
函数将置换并返回原始牌堆:主甲板的副本不会创建。因此
^{pr2}$从主甲板上拿牌。在
修复:制作一个主甲板的深拷贝并使用它(在
shuffling()
):等等!每场比赛都有全新的游戏装备。在
相关问题 更多 >
编程相关推荐