1

我遇到了一个代码问题,我需要将一个六面骰子滚动 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]
4

4 回答 4

8

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

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
于 2013-10-04T18:46:49.150 回答
0

我无法改进 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)
于 2013-10-04T19:01:27.460 回答
-1

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

...
roll = random.randint(1, 7)
于 2013-10-04T18:51:10.567 回答
-3
import random

def dice():

    print random.randint(1,6)

dice()
于 2016-04-07T01:51:19.743 回答