2016-12-27 1 views
-6

Я пытаюсь добавить два целых числа в 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 или Players.player1 .money - это строка.

Если я конвертирую обе переменные в целое число с помощью int(), он продолжается как обычно, но затем снова разрывается на следующей строке при добавлении Table.pot для увеличения суммы единицы. Я делаю то же самое с int(), но на этот раз он не работает.

Я не вижу, как python думает, что переменные являются строкой, потому что все они ранее определены как целые числа.

Я думаю, что наиболее вероятная причина, о которой я могу думать, заключается в том, что когда программа устанавливает Player.player1 = ai (or human), она не переносит целое свойство?

+0

Что вы ожидаете от этого? raiseAmount1 = int – BlackBear

+2

, пожалуйста, прочитайте учебник python! –

ответ

0

raw_input возвращает строку. Вы должны преобразовать его так:

int(raw_input("Raise by: "))

Кроме того, обратите внимание, что если пользователь вводит любой другой символ это вызовет ошибку.

Вы также можете просто использовать input вместо raw_input:

input("Raise by: ")

Это, опять же, вызовет ошибку, если пользователь вводит любой другой символ.

+1

или просто используйте ввод – BlackBear

+0

Спасибо, добавлено! –

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/ - очень хорошее место для начала программирования.

-1
raiseAmount1 = int 
raiseAmount2 = int 

Эти 2 линии делать не гарантии, что raiseAmount1 и raiseAmount2 будут целые числа всюду в программе, даже не одна линия под ними. Python не является C или Java, где вы объявляете переменную типа X, и она остается таковой во всей вашей программе.

raiseAmount1 = raw_input("Raise by: ") присваивает raiseAmount1 введенную пользователем строку.Если вы хотите, чтобы это целое число, вам необходимо называть int: int(raiseAmount1) и быть готовым поймать исключение ValueError, если введенная строка не представляет собой целое число.

+0

И причина для downvote? – DeepSpace

Смежные вопросы