这是针对使用python2的编程类。说明是模拟滚动一对模具1000次,将结果存储在列表中并显示每次滚动发生的时间百分比。
输出的示例:
这是我目前的代码:
#!/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))
任何见解/更正都将受到赞赏。
答案 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))