繁体   English   中英

Python骰子滚动模拟

[英]Python dice rolling simulation

我遇到了一个代码问题,我需要将六面模具滚动1000次,然后返回一个列表,列出了模具上每个数字的滚动次数。

代码运行得很好,我可以在最后得到一个列表,但是我的列表一直有0代替4,所以看起来我的函数没有保持标记正在滚动的数字4或根本没有滚动。

我有点难过,我想也许有人可以帮忙。 任何和所有的帮助表示赞赏。

这是我的代码。

def rollDie(number):
    one = 0
    two = 0
    three = 0
    four = 0
    five = 0
    six = 0
    for i in range(0, number):
        roll=int(random.randint(1,6))
        if roll == 1:
            one = one+1
        elif roll == 2:
            two = two+1
        elif roll == 3:
            three = three+1
        elif roll == 4:
            four == four+1
        elif roll == 5:
            five = five+1
        elif roll == 6:
            six = six+1
    return [one,two,three,four,five,six]

你有一个小错字; 你正在测试平等,而不是分配:

four == four+1

应该:

four = four+1

但是,您已经有一个介于1和6之间的数字,为什么不将其作为结果列表的索引? 这样你就不必使用那么多if语句。 保持数据不受变量名称的影响:

def rollDie(number):
    counts = [0] * 6
    for i in range(number):
        roll = random.randint(1,6)
        counts[roll - 1] += 1
    return counts

我无法改进Martijn Pieters的答案。 :-)但是使用列表可以更方便地解决这个问题。

import random

def rollDie(number):
    # create a list with 7 values; we will only use the top six
    rolls = [0, 0, 0, 0, 0, 0, 0]
    for i in range(0, number):
        roll=int(random.randint(1,6))
        rolls[roll] += 1
    return rolls

if __name__ == "__main__":
    result = rollDie(1000)
    print(result[1:])  # print only the indices from 1 to 6

而且,这有点棘手,但是这里有一个更好的方法来创建7个条目的列表,所有条目都设置为零:

rolls = [0] * 7

为什么要自己计算零? 让Python为你工作更容易。 :-)

编辑:列表的长度为7,因为我们要使用索引1到6.列表中还有一个位置0,但我们不使用它。

另一种方法是将骰子卷映射到索引上。 这是一个非常简单的映射:只需减去1.因此,1的掷骰将进入列表的索引0,2的掷骰将进入索引1,依此类推。 现在我们将使用列表中的每个位置。

这是那个版本:

import random

def rollDie(number):
    rolls = [0] * 6
    for i in range(0, number):
        roll=int(random.randint(1,6))
        rolls[roll - 1] += 1
    return rolls

if __name__ == "__main__":
    result = rollDie(1000)
    print(result)

你应该做random.randint(1, 7) ,否则你永远不会得到6。

...
roll = random.randint(1, 7)
import random

def dice():

    print random.randint(1,6)

dice()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM