Python骰子滚动模拟

时间:2013-10-04 18:42:56

标签: python python-3.x

我遇到了一个代码问题,我需要将六面模具滚动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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分:-1)

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

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

答案 3 :(得分:-3)

Intent intent = new Intent("com.android.phone.EmergencyDialer.DIAL");
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                Intent intent1 = new Intent(MyService.this,MyService2.class);
                startService(intent1);