0

我正在从Timothy Budd的Exploring Python一书中学习 Python。本章的练习之一是:

15. randintrandom 模块的函数可用于产生随机数。例如,对 的调用random.randint(1, 6)将以相等的概率产生值 1 到 6。编写一个循环 1000 次的程序。在每次迭代中,它都会调用两次randint来模拟掷骰子。计算两个骰子的总和,并记录每个值出现的次数。在循环之后,打印总和数组。您可以使用本章前面显示的惯用语来初始化数组:

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启动一个包含 12 个值为 0 的元素的列表。接下来要做的是

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

这类似于使用 dict 对值进行编码,但更简单。

times = [0]初始化一个名为 times 长度为 1 且值为 0 的列表。习惯用法times = [0] * 12表示 times 是一个包含 12 个零的列表。

如果您希望能够在没有 keyerror when 的情况下使用它num1==num2==6,您需要这样做,times = [0]*13因为 python 是一个 0 索引系统。

旁注:不要sum用作变量名,因为它是内置函数(预定义)并且您不想覆盖它。使用times[sum([num1,num2])] += 1times[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 something在 Python 3 上是一个错误
  • for i range(1, 1000)是错的。它产生从 1 到 999 的 i(包括 999 次迭代而不是 1000 次)。range不包括上限,因为它对编程间隔的客户化。
于 2012-08-15T06:28:43.473 回答