【问题标题】:Issue with Dice Rolling Program掷骰子程序的问题
【发布时间】:2014-05-11 03:16:09
【问题描述】:

我必须为我的计算机课做一个掷骰子程序。我选择用 Python 编写我的。但是,当我执行它时,它会打印 1000 次数字列表。这是代码。任何帮助将不胜感激。

`

import random
def rollDie():
    one = 0
    two = 0
    three = 0
    four = 0
    five = 0
    six = 0
    seven = 0
    eight = 0
    nine = 0
    ten = 0 
    eleven = 0
    twelve = 0
    for i in range(0, 1000):
        roll = int(random.randint(1,6)) + (random.randint(1,6))
        if roll == 2:
            two = two+1
        elif roll == 3:
            three = three+1
        elif roll == 4:
            four = four+1
        elif roll == 5:
            five = five+1
        elif roll == 6:
            six = six+1
        elif roll == 7:
           seven = six+1
        elif roll == 8:
           eight = eight+1 
        elif roll == 9:
           nine = nine+1 
        elif roll == 10:
           ten = ten+1
        elif roll == 11:
           eleven = eleven+1
        elif roll == 12:
           twelve = twelve+1
    print "2:%s" % two
    print "3:%s" % three
    print "4:%s" % four
    print "5:%s" % five
    print "6:%s" % six
    print "7:%s" % seven
    print "8:%s" % eight
    print "9:%s" % nine
    print "10:%s" % ten
    print "11:%s" % eleven
    print "12:%s" % twelve
rollDie()

`

谢谢!

【问题讨论】:

  • 仅供参考,这里有一个错误:seven = six+1。我想你想要seven + 1 那里。
  • 另外,该程序完全按照您在此处发布的方式运行,只打印一次数字列表。
  • 100% 确定!我想知道您是否在文本编辑器中使用制表符而不是空格,这导致 Python 解释的缩进与您在文件中看到的不同。尝试将 .py 文件中的所有制表符转换为空格,然后重试。
  • 这段代码只是尖叫使用列表。如果您还没有涵盖列表,请忽略此评论,否则此问题是禁止的。但是使用列表,一次模拟掷 10 个骰子会更短,也更容易。
  • 是的,使用这样的命名变量真的很糟糕。使用大小为 12 的列表或以整数 2 到 12 作为键的字典...

标签: python indentation dice


【解决方案1】:

我的猜测是您在文本编辑器中的缩进已关闭;打印语句包含在for 循环中。你也有一点问题,你打电话给seven = six+1。这是您编辑的代码,请尝试将 this 粘贴到您的文件中:

import random
def rollDie():
    one = 0
    two = 0
    three = 0
    four = 0
    five = 0
    six = 0
    seven = 0
    eight = 0
    nine = 0
    ten = 0 
    eleven = 0
    twelve = 0
    for i in range(0, 1000):
        roll = int(random.randint(1,6)) + (random.randint(1,6))
        if roll == 2:
            two = two+1
        elif roll == 3:
            three = three+1
        elif roll == 4:
            four = four+1
        elif roll == 5:
            five = five+1
        elif roll == 6:
            six = six+1
        elif roll == 7:
           seven = seven+1
        elif roll == 8:
           eight = eight+1 
        elif roll == 9:
           nine = nine+1 
        elif roll == 10:
           ten = ten+1
        elif roll == 11:
           eleven = eleven+1
        elif roll == 12:
           twelve = twelve+1
    print "2:%s" % two
    print "3:%s" % three
    print "4:%s" % four
    print "5:%s" % five
    print "6:%s" % six
    print "7:%s" % seven
    print "8:%s" % eight
    print "9:%s" % nine
    print "10:%s" % ten
    print "11:%s" % eleven
    print "12:%s" % twelve
rollDie()

另外,您的代码效率极低;尝试使用以下代码:

import random
rolls = {}
for k in range(2, 13):
        rolls[k] = 0

for k in range(1000):
        roll = random.randint(1, 6)+random.randint(1, 6)
        rolls[roll]+=1

for k in rolls:
        print '%d occurred %d times!' %(k, rolls[k])

运行如下:

bash-3.2$
2 occurred 38 times!
3 occurred 51 times!
4 occurred 90 times!
5 occurred 99 times!
6 occurred 136 times!
7 occurred 173 times!
8 occurred 151 times!
9 occurred 90 times!
10 occurred 92 times!
11 occurred 58 times!
12 occurred 22 times!
bash-3.2$

如果我们为我们的节目计时,这是您的时间:

This ran in 0.06672 seconds!

这是我的:

This ran in 0.004228 seconds!

当然,这可能只是我的电脑造成了如此巨大的差异:)。如果您想知道我是如何计时的,我使用了time.time() - previous time.time()

【讨论】:

    【解决方案2】:

    没有变量,我们可以用同样的方式实现掷骰子的相同功能:

    import random
        from collections import Counter,OrderedDict
    
    
        def ran(i):
            roll = int(random.randint(1,6)) + (random.randint(1,6))
            return roll
    
        for i,j in OrderedDict(Counter(map(ran,range(1,1000)))).items():
            print i,":", j
    

    解释:首先我们将 rand int 的所有值存储在 dict.map 链接方法 ran 中。 然后usinf counter v 可以找到所有的频率然后使用oded dict根据key进行排序,即first no.of 2's等等。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 2014-05-12
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多