Python中的猪游戏

时间:2014-01-08 19:58:30

标签: python

我正在尝试用python编写一个猪游戏。这是我的代码:

from random import *
roll_q = raw_input('would you like to roll')
if roll_q == (' yes'):
    while True:
        num1 = randint(1,6)
        print str(randint)
        if randint == 1:
            print('your turn is over')
            total = 0
        else:
         num1 = randint(1,6)
         print ('you got ') + str(randint) + ('points')
         total = randint
         print str(total)
         total=total + randint
         cont_q = raw_input('would you like to continue playing')
         if cont_q == ('yes'):
                print ('awesome')
         else:
                print ('ok')
else:
    print ('awesome')

当我运行这个程序时,我被问到是否要滚动和打印一些东西。但后来它给了我一个我不明白的错误。

would you like to roll yes
<bound method Random.randint of <random.Random object at 0x89b010>>
you got <bound method Random.randint of <random.Random object at 0x89b010>>points
<bound method Random.randint of <random.Random object at 0x89b010>>

Traceback (most recent call last):
  File "/Users/centralcity/Desktop/Computer Science!/pig game", line 15, in <module>
    total=total + randint
TypeError: unsupported operand type(s) for +: 'instancemethod' and 'instancemethod'

请帮助我了解错误以及我的程序无法正确打印的原因。提前致谢。

5 个答案:

答案 0 :(得分:3)

你一直说randint你应该说num1。在使用randint致电randint(1,6)后,您将结果存储在num1中,因此之后的行应引用num1

if roll_q == (' yes'):
    while True:
        num1 = randint(1,6)
        print str(num1)
        if num1 == 1:
            print('your turn is over')
            total = 0
        else:
         num1 = randint(1,6)
         print ('you got ') + str(num1) + ('points')
         total = num1
         print str(total)
         total=total + num1
         cont_q = raw_input('would you like to continue playing')
         if cont_q == ('yes'):
                print ('awesome')
         else:
                print ('ok')

答案 1 :(得分:1)

在Python中,即使没有参数,也总是需要括号来调用函数。所以,这一行:

total = randint

...不会致电randint。相反,它只为total函数本身设置randint另一个名称。

所以,当你这样做时:

total=total + randint

...你正试图将两个功能加在一起。这没有任何意义。

你可能想要做的是这样的事情:

total = randint(1, 6)
# …
total = total + randint(1, 6)

或许,既然你已经完成num1 = randint(1, 6),你想要的是:

total = num1
# …
total = total + num

如果不清楚两者之间有什么区别:第一个推出一个全新的模具并将结果分配给total,然后滚动另一个新模具并将结果添加到total。第二个将前一个掷骰子的结果(num1中的值)分配给总数,然后再将相同的值添加到total


您在其他多个地方遇到类似的问题,例如执行print str(randint)(会打印出“<bound method Random.randint of <random.Random object at 0x89b010>>”,您可能需要print num1(这会打印出{{1}之类的内容}})。

答案 2 :(得分:0)

randint是一种方法。你应该叫它:

total = randint(1, 20)

据我了解您的代码,您应该将所有randint(不带括号)替换为num1。您已拨打randint并将其返回值指定为num1

答案 3 :(得分:0)

您正在为函数randint分配总数。

total = randint

答案 4 :(得分:0)

我相信你有一个简单的思考错误。在while循环的顶部,您可以分配变量num1。但是,如果您明确打算使用num1,则不要使用randint,而是使用num1(这不是变量)。

while True:
    num1 = randint(1,6)
    print str(randint)
    if randint == 1:
        ...

randint替换为上面的num1(同样在else子句中),你应该没问题。