Мне нужна помощь в вычитании переменных друг из друга, оба из которых являются числами

#python #string #math #addition

#python #строка #математика #сложение

Вопрос:

Итак, я пытаюсь написать текстовую приключенческую игру, чтобы привыкнуть к Python. В основном, я работаю над здоровьем и атакой и т. Д. Мои значения работоспособности и атаки

 health=50
squidAttack=5
squidHealth=20
attack=5
 

Итак, я тогда определил

 def squidAttack():
 global health
 global squidHealth
 global squidAttack
 health=health-squidAttack
 

но когда я запускаю, я получаю сообщение об ошибке:

 Traceback (most recent call last):                                    
File "C:UsersAaronCDocumentsPythonKrados.py", line 280, in
<module> squidAttack()                File
"C:UsersAaronCDocumentsPythonKrados.py", line 253, in squidAttack
health=health-squidAttack                                             
TypeError: unsupported operand type(s) for -: 'int' and 'function'
 

Я хотел бы подчеркнуть; Я понятия не имею, что означает любая ошибка, и я много искал, но ничего не мог найти. Пожалуйста, помогите.

Комментарии:

1. «неправильное использование строк друг из друга»? Я не понимаю, о чем вы спрашиваете.

2. @JeffreyBosboom: я думаю, что он неправильно написал «minusing» (т. Е. вычитание) и может путать строки с переменными. Я собираюсь изменить заголовок.

3. Отбросьте global s и прочитайте приличный учебник.

4. определение переменных в Python? Без обид, но, возможно, вы хотите сначала прочитать о Python и, возможно, также о динамически и статически типизированных языках

Ответ №1:

Вы используете одно и то же имя, squidAttack , как для переменной, так и для функции. Переименуйте один из них, и он будет работать нормально.

Ответ №2:

 squidAttack = 5
# squidAttack is an int

# ... Code goes here ...

def squidAttack():
    # stuff goes here

# squidAttack is a function
 

Когда вы определяете squidAttack функцию, она переопределяет то, что когда-то было int .

Гораздо лучший способ сделать это — использовать классы

 class Actor(object):
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack
    def attacks(other):
        other.health -= self.attack

me = Actor("Me", 50, 5)
squid = Actor("Squid", 20, 5)

squid.attacks(me)
 

Ответ №3:

Вы используете имя squidAttack как для переменной, содержащей значение 5 , так и для функции для вычитания из этой переменной health . Поскольку функция идет последней, она переопределяет 5 значение squidAttack , и поэтому, когда вы пытаетесь это сделать health=health-squidAttack , Python будет использовать определение функции squidAttack и пытаться вычесть функцию из целого числа. Очевидно, что это не работает. Вам нужно переименовать хотя бы один из squidAttack s, чтобы у них были разные имена.