因此,我在python中制作了一个骰子滚动模拟器,尽管它完成了我想要的一切,但我被告知我可以实现列表或字典,而这将是“更好的”代码。我试图将两者都添加到我的代码中,但完全迷路了。如果你们中的任何一个可以帮助/告诉我,那将很棒。这是我的代码,非常感谢。
from random import randint
print ""
die_amount = raw_input(">How many dice would you like to roll?: " )
die_amount = int(die_amount)
print ""
print "\t %s die are being rolled:" % die_amount
def dieroll(die_amount):
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
for i in range(1, die_amount+1):
roll = randint(1,6)
print "\t You rolled: %s" % roll
if roll == 1:
one +=1
elif roll == 2:
two +=1
elif roll ==3:
three +=1
elif roll == 4:
four +=1
elif roll == 5:
five+=1
elif roll == 6:
six +=1
print """
One's rolled: %s
Two's rolled: %s
Three's rolled: %s
Four's rolled: %s
Five's rolled: %s
Six's rolled: %s
""" % (one, two, three, four, five, six )
return [one, two, three, four, five, six]
dieroll(die_amount)
最佳答案
Counter
data structure完全符合您的尝试。
from collections import Counter
c = Counter()
for i in range(die_amount):
roll = randint(1,6)
c[roll] += 1
或者,甚至更简单:
c = Counter(randint(1,6) for i in range(die_amount))
c[1]
然后包含1
滚动的次数等。要打印出卷数,您可以使用
for number, count in c.iteritems():
print "{}'s rolled: {}".format(number, count)
Counter
基本上是Python字典,默认值为零。例如,这使其特别适合于计算列表中出现了多少个对象。有几种原因使这种方法比为每个计数保留一个单独的变量更好。
如果您想拥有100个骰子,则必须定义100个单独的变量。这更容易出错。
原则上,它要快得多。具有六个不同的变量需要使用一系列的if语句在它们之间循环。假设您掷了六。在进入
if roll == 6
之前,您将必须评估五个不同的if语句。相比之下,计数器使用hash table,因此c[roll]
花费相同的时间量,无论您进行多少次滚动。这就引出了一个问题:如何知道何时应该使用集合而不是一组变量?经验法则是,如果一组对象是同一事物的不同实例,并且我们打算以完全相同的方式使用每个对象,则它们可能属于一个集合。在这种情况下,就程序流程而言,1卷或4卷基本上是相同的。我们将一视同仁。因此,应将它们保存在一个集合中。