Подтвердить что ты не робот

TypeError: Невозможно преобразовать объект 'int' в str неявно

Я пытаюсь написать текстовую игру, и я столкнулся с ошибкой в ​​функции, которую я определяю, которая позволяет вам в основном тратить свои очки навыков после того, как вы создадите своего персонажа. Сначала ошибка показала, что я пытался вычесть строку из целого числа в этой части кода: balance - strength. Очевидно, что это было неправильно, поэтому я исправил его с помощью strength = int(strength)... но теперь я получаю эту ошибку, которую я никогда раньше не видел (новый программист), и я в тупике о том, что именно он пытается сказать мне и как я ее исправляю.

Вот мой код для части функции, которая не работает:

def attributeSelection():
    balance = 25
    print("Your SP balance is currently 25.")
    strength = input("How much SP do you want to put into strength?")
    strength = int(strength)
    balanceAfterStrength = balance - strength
    if balanceAfterStrength == 0:
        print("Your SP balance is now 0.")
        attributeConfirmation()
    elif strength < 0:
        print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")
        attributeSelection()
    elif strength > balance:
        print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")
        attributeSelection()
    elif balanceAfterStrength > 0 and balanceAfterStrength < 26:
        print("Ok. You're balance is now at " + balanceAfterStrength + " skill points.")
    else:
        print("That is an invalid input. Restarting attribute selection.")
        attributeSelection()

И вот ошибка, которую я получаю, когда попадаю в эту часть кода в оболочке:

    Your SP balance is currently 25.
How much SP do you want to put into strength?5
Traceback (most recent call last):
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 205, in <module>
    gender()
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 22, in gender
    customizationMan()
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 54, in customizationMan
    characterConfirmation()
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 93, in characterConfirmation
    characterConfirmation()
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 85, in characterConfirmation
    attributeSelection()
  File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 143, in attributeSelection
    print("Ok. You're balance is now at " + balanceAfterStrength + " skill points.")
TypeError: Can't convert 'int' object to str implicitly

Кто-нибудь знает, как это решить? Спасибо заранее.

4b9b3361

Ответ 1

Вы не можете объединить string с int. Вам нужно будет преобразовать int в string с помощью функции str или использовать formatting для форматирования вывода.

Изменить: -

print("Ok. Your balance is now at " + balanceAfterStrength + " skill points.")

to: -

print("Ok. Your balance is now at {} skill points.".format(balanceAfterStrength))

или: -

print("Ok. Your balance is now at " + str(balanceAfterStrength) + " skill points.")

или в соответствии с комментарием используйте , для передачи различных строк в вашу функцию print, а не для конкатенации с помощью +: -

print("Ok. Your balance is now at ", balanceAfterStrength, " skill points.")

Ответ 2

def attributeSelection():
balance = 25
print("Your SP balance is currently 25.")
strength = input("How much SP do you want to put into strength?")
balanceAfterStrength = balance - int(strength)
if balanceAfterStrength == 0:
    print("Your SP balance is now 0.")
    attributeConfirmation()
elif strength < 0:
    print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")
    attributeSelection()
elif strength > balance:
    print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")
    attributeSelection()
elif balanceAfterStrength > 0 and balanceAfterStrength < 26:
    print("Ok. You're balance is now at " + str(balanceAfterStrength) + " skill points.")
else:
    print("That is an invalid input. Restarting attribute selection.")
    attributeSelection()