0

私はTimothyBuddの著書ExploringPythonからPythonを学んでいます。この章の演習の1つは、次のとおりです。

15.randintランダムモジュールの関数を使用して、乱数を生成できます。random.randint(1, 6)たとえば、を呼び出すと、同じ確率で1から6の値が生成されます。1000回ループするプログラムを作成します。各反復でrandint、サイコロのペアの転がりをシミュレートするために2つの呼び出しを行います。2つのサイコロの合計を計算し、各値が表示される回数を記録します。ループの後、合計の配列を出力します。この章で前述したイディオムを使用して、アレイを初期化できます。

times = [0] * 12 # make an array of 12 elements, initially zero

配列に合計を出力することはできますが、各値が表示される回数を記録するという概念を理解していません。また、どのような目的がありtimes = [0]ますか?合計を印刷するための私のコードは次のとおりです。

 #############################################
#   Program to print the sum of dice rolls  #
#############################################

from random import randint
import sys


times = [0] * 12

summation = []

def diceroll():

    print "This program will print the"
    print "sum of numbers, which appears"
    print "after each time the dice is rolled."
    print "The program will be called 1000 times"



    for i in range(1,1000):

        num1 = randint(1,6)
        num2 = randint(1,6)

        sum = num1 + num2
        summation.append(sum)
        #times[i] = [i] * 12
    print summation
    #print times


diceroll()
4

2 に答える 2

1

times[0] * 12値0の12個の要素のリストを開始します。次に実行したいのは

times[s] += 1 #adds 1 to the number of times s occurs

これは、dictを使用して値をエンコードするのと似ていますが、より単純です。

times = [0]長さ1および値0の時間と呼ばれるリストを初期化します。イディオムtimes = [0] * 12は、時間が12個のゼロのリストであることを意味します。

のときにkeyerrorなしでこれを使用できるようにする場合は、pythonが0インデックスシステムであるため、これnum1==num2==6を行う必要があります。times = [0]*13

補足:sum組み込み関数(事前定義済み)であり、オーバーライドしたくないため、変数名として使用しないでください。times[sum([num1,num2])] += 1またはのtimes[num1+num2]代わりに使用してください。

于 2012-08-15T06:08:53.477 に答える
0

発生数をカウントするには:

times = [0]*13
for _ in range(1000):
    sum_ = randint(1, 6) + randint(1, 6)
    times[sum_] += 1

print(times[2:])

sum_の可能な値は2...12を含みます。可能なtimesインデックスは0...12を含みます。

times[i]sum_ == i1000回の試行のうちの発生回数に対応します。

注:times[0]times[1]は常にゼロです。sum_ > 1

[x]*3これは[x, x, x]、次のより良いバージョンです。

L = []
L.append(x)
L.append(x)
L.append(x)

コードに関する追加のコメント:

  • print somethingPython3のエラーです
  • for i range(1, 1000)間違っている。これは、1から999までのiを生成します(必要に応じて1000回ではなく999回の反復)。rangeプログラミングの間隔に便利なため、上限は含まれていません。
于 2012-08-15T06:28:43.473 に答える