Python - 滚动2个6面模具1000次

时间:2014-03-16 18:44:54

标签: python-2.7

这是针对使用python2的编程类。说明是模拟滚动一对模具1000次,将结果存储在列表中并显示每次滚动发生的时间百分比。

输出的示例:

  • 滚动2 27次,或2.7%
  • 滚动3次54次,或5.4%
  • 滚动4次75次,或7.5%
  • 滚动5次101次,或10.1%
  • 滚动6 157次,或15.7%

这是我目前的代码:

#!/usr/bin/python

import random

rolls = [0]*12

for v in range(1000):
d1 = random.randint(1,6)
d2 = random.randint(1,6)
rolls[d1 + d2 -1] += 1

print("Rolled %s %d times, or %.2f %" % (str(rolls)))

现在我得到" TypeError:没有足够的格式字符串参数"。

我意识到我需要为%d和%.2f定义一个引用(我意识到使用%' s正在采用.format的方式,但这就是教授要求它的方式 - 还没有教会如何使用.format)。我不确定如何引用%d和%.2f。

我知道%d需要计算一定数量的滚动次数,但我仍然坚持如何定义和引用它。 %.2f需要使用count / 1000的定义。

所以,我认为在我的印刷行中我需要像

这样的东西
print("Rolled %s %d times, or %.2f %" % (str(rolls), count, count/1000))

任何见解/更正都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

Python文档中涵盖了这一点:http://docs.python.org/2/library/stdtypes.html#string-formatting

但是对于每个%,您需要一个值来替换:

for roll_value, roll_count in enumerate(rolls):
    print "Rolled %s %d times, or %.2f %%" %((roll_value+1), roll_count, (roll_count/1000.)*100)

*请注意%%打印%符号,1000.返回类型float

答案 1 :(得分:0)

字典是另一种选择,它看起来像这样:

import random

results = {}

for _ in range(1000):
    d1 = random.randint(1,6)
    d2 = random.randint(1,6)
    results[d1+d2] = results.setdefault(d1+d2, 1) + 1

for roll, count in results.iteritems():
    print('Rolled %d %d times, or %.2f %%' % (roll, count, count/1000.)) 

setdefault会为某个值设置一个键,如果它不存在,否则它将返回该键的值。

答案 2 :(得分:0)

第一个答案不是100%正确,因为他/她添加的是返回或将default设置为1,然后添加另一个正在递增总数的答案。在这种情况下,总数将超过1000。这是正确的代码:

for _ in range(1000):
    d1 = random.randint(1,6)
    d2 = random.randint(1,6)
    results[d1+d2] = results.setdefault(d1+d2, 0) + 1

for roll, count in results.iteritems():
    print('Rolled %d %d times, or %.2f %%' % (roll, count, count/1000)) 
相关问题