Python不能将两个整数相加,以为它们是字符串

2024-09-22 16:37:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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要么是玩家.player1金钱是一根弦。你知道吗

如果我使用int()将这两个变量转换为整数,它将继续正常运行,但在添加时在下一行再次中断表格.pot筹集一笔钱。我对int()也做了同样的事情,但这次不行了。你知道吗

我不明白python是如何认为变量是字符串的,因为它们之前都被定义为整数。你知道吗

我认为我能想到的最可能的原因是,当程序设置Player.player1 = ai (or human)时,它不进行其整数属性?你知道吗


Tags: inpyline整数fileintendplayers
3条回答

raw_input返回一个字符串。你需要这样转换它:

int(raw_input("Raise by: "))

另外,请注意,如果用户输入任何其他字符,这将引发错误。你知道吗

也可以使用input而不是raw_input

input("Raise by: ")

如果用户输入任何其他字符,这将再次引发错误。你知道吗

raiseAmount1 = int
raiseAmount2 = int

这两行并不保证raiseAmount1raiseAmount2在程序中的任何地方都是整数,甚至它们下面的一行都不是。Python不是C或Java,在这里您声明一个变量是X类型的,并且它在整个程序中都保持这种类型。你知道吗

raiseAmount1 = raw_input("Raise by: ")将用户输入的字符串分配给raiseAmount1。如果您希望它是一个整数,那么您必须对它调用intint(raiseAmount1),并准备捕获一个ValueError异常,以防输入的字符串不代表整数。你知道吗

您需要对行进行隐式转换,因为方法raw\u 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

也可以使用函数输入而不是原始输入。我建议您查看一些教程来了解python的变量是如何分配的,https://www.codecademy.com/是一个非常好的开始编程的地方。你知道吗

相关问题 更多 >