我试图在python中添加两个整数但它似乎认为变量是一个字符串?以下是我的代码片段:
raiseAmount1 = int
raiseAmount2 = int
while end == False:
action1 = raw_input(str(Players.player1)[9:] + ", what is your move? (r/c/f):")
if action1 == 'f':
Players.player2.score = Players.player2.score + 1
game().winner = str(Players.player2)[9:]
end = True
elif action1 == 'r':
raiseAmount1 = raw_input("Raise by: ")
Players.player1.money = Players.player1.money - raiseAmount1
Table.pot = Table.pot + raiseAmount1
end = False
(完整代码:http://pastebin.com/T6N8gmJk)
这是错误:
Welcome to texas holdem!
You are on round: 0
human, what is your move? (r/c/f):r
Raise by: 80
Traceback (most recent call last):
File "poker.py", line 144, in <module>
game()
File "poker.py", line 18, in game
playGame()
File "poker.py", line 129, in playGame
bettingRound()
File "poker.py", line 96, in bettingRound
Players.player1.money = Players.player1.money - raiseAmount1
TypeError: unsupported operand type(s) for +: 'int' and 'str'
因此程序认为raiseAmount1或Players.player1.money是一个字符串。
如果我使用int()
将两个变量转换为整数,它将继续正常,但在添加Table.pot以提高第一行时,会在下一行再次中断。我对int()
做了同样的事情,但这次它不起作用。
我没有看到python如何认为变量是一个字符串,因为它们之前都被定义为整数。
我认为我能想到的最可能的原因是,当程序设置Player.player1 = ai (or human)
时,它不会继承其整数属性?
答案 0 :(得分:0)
raw_input
返回一个字符串。你需要像这样转换它:
int(raw_input("Raise by: "))
另外,请注意,如果用户输入任何其他字符,则会引发错误。
您也可以使用input
代替raw_input
:
input("Raise by: ")
如果用户输入任何其他字符,这将再次引发错误。
答案 1 :(得分:0)
你需要对该行进行隐式转换,因为方法raw_imput返回一个字符串,你也在代码的开头使用变量声明,就像它是c或java一样,记住python中的变量可以改变它们键入执行时间,因此曾经是字符串的变量在某个其他时间点可能是一个int。
有效的解决方案应该是:
while end == False:
action1 = raw_input(str(Players.player1)[9:] + ", what is your move? (r/c/f):")
if action1 == 'f':
Players.player2.score = Players.player2.score + 1
game().winner = str(Players.player2)[9:]
end = True
elif action1 == 'r':
raiseAmount1 = raw_input("Raise by: ")
Players.player1.money = Players.player1.money - raiseAmount1
Table.pot = Table.pot + int(raiseAmount1)
end = False
您也可以使用函数输入而不是raw_input。我建议你查看一些教程来了解如何分配python的变量,https://www.codecademy.com/是一个非常好的开始编程的地方。
答案 2 :(得分:-1)
raiseAmount1 = int
raiseAmount2 = int
这两行不保证raiseAmount1
和raiseAmount2
在程序中的所有位置都是整数,甚至不在它们下面的一行。 Python不是C或Java,您将变量声明为X类型,并且它在整个程序中保持该类型。
raiseAmount1 = raw_input("Raise by: ")
将raiseAmount1
分配给用户输入的字符串。如果您希望它是一个整数,那么您必须在其上调用int
:int(raiseAmount1)
,并准备好在输入的字符串不表示整数时捕获ValueError
异常