探索Python练习

时间:2012-08-15 05:58:32

标签: python python-3.x

我正在从蒂莫西·巴德的书“探索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()

2 个答案:

答案 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])] += 1times[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不包括上限,因为它可以为节目中的间隔提供定制。