我正在尝试用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'
请帮助我了解错误以及我的程序无法正确打印的原因。提前致谢。
答案 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
子句中),你应该没问题。