我正在从蒂莫西·巴德的书“探索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()
答案 0 :(得分: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个零的列表。
如果你希望在num1==num2==6
时能够使用它而不需要keyerror,那么你需要times = [0]*13
,因为python是一个0索引系统。
旁注:不要将sum
用作变量名,因为它是内置函数(预定义),您不想覆盖它。请改用times[sum([num1,num2])] += 1
或times[num1+num2]
。
答案 1 :(得分: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]
对应于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
是Python 3上的错误for i range(1, 1000)
错了。它产生1到999的i(包括999次迭代而不是1000次)。 range
不包括上限,因为它可以为节目中的间隔提供定制。