Python无法添加两个整数,认为它们是字符串

时间:2016-12-27 11:41:44

标签: python typeerror

我试图在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)时,它不会继承其整数属性?

3 个答案:

答案 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

这两行保证raiseAmount1raiseAmount2在程序中的所有位置都是整数,甚至不在它们下面的一行。 Python不是C或Java,您将变量声明为X类型,并且它在整个程序中保持该类型。

raiseAmount1 = raw_input("Raise by: ")raiseAmount1分配给用户输入的字符串。如果您希望它是一个整数,那么您必须在其上调用intint(raiseAmount1),并准备好在输入的字符串不表示整数时捕获ValueError异常