我正在从Timothy的“探索Python”一书中学习Python。本章的练习之一是:
15.随机模块的函数randint可用于产生随机数。例如,对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()发布于 2012-08-15 06:28:43
若要计数发生次数,请执行以下操作:
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]对应于在1000次尝试中出现的多次sum_ == i。
注意:times[0]和times[1]总是为零,因为sum_ > 1
[x]*3生产[x, x, x],它是一个更好的版本:
L = []
L.append(x)
L.append(x)
L.append(x)关于您的代码的其他评论:
print something是Python3上的一个错误for i range(1, 1000)错了。它生成从1到999的i,包括(999次迭代,而不是根据需要的1000次迭代)。range不包括上限,因为它为编程中的间隔定制。发布于 2012-08-15 06:08:53
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个零组成的列表。
如果您希望在num1==num2==6时能够在没有键错误的情况下使用它,则需要执行times = [0]*13,因为python是一个0索引系统。
Sidenote:不要使用sum作为变量名,因为它是一个内置函数(预定义的),而且您不想覆盖它。使用times[sum([num1,num2])] += 1或times[num1+num2]代替。
https://stackoverflow.com/questions/11964720
复制相似问题