1

六面体のサイコロを 1000 回振ってから、サイコロの各数字が何回振られたかのリストを返す必要があるコードに問題があります。

コードは正常に実行され、最後にリストを取得できますが、リストの 4 の代わりに 0 が表示され続けているため、関数が 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

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 に作業を任せる方が簡単です。:-)

編集: インデックス 1 から 6 を使用するため、リストの長さは 7 です。リストには位置 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 に答える