python изменение переменной с помощью функции

#python #function #variables

#python #функция #переменные

Вопрос:

Я пытаюсь написать функцию для базового курса python, который я прохожу. Мы находимся на том этапе, когда мы объединяемся как группа и создаем одну программу как команда. Я назначил каждому члену записывать свою часть в виде функции в надежде, что я смогу просто вызвать каждую функцию для выполнения всей программы. Прошло много времени с тех пор, как я играл в объектное программирование, и это выше требований класса, но я хочу попробовать и заставить это работать.

У меня возникают трудности с передачей переменной в функцию, а затем получением измененной переменной из функции.

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

Вот первый пример кода, который я попробовал

 import random
MOBhp=100

def ATTACK(TYPEatck,MOBhp):
#    global MOBhp

    print ('the type attack chosen was ',TYPEatck,'the MOB has ',MOBhp)
    if TYPEatck =='M'or TYPEatck =='m':
        print ('the ',PLAYER,' used melee to attack',MOB)
        MOBhp=MOBhp-10
    elif TYPEatck =='R'or TYPEatck =='r':
        print ('the ',PLAYER,' used range to attack',MOB)
        MOBhp=MOBhp-5
    else:
        print ('please choose a valid attack')
    print ('the MOB hitpoints are ',MOBhp)
    return MOBhp;


PLAYER='HERO'
MOB='Dragon'
AC=12
while MOBhp > 0:
   TYPEatck=random.choice('RM')
   ATTACK(TYPEatck,MOBhp)
print('really the MOB hitpoints are ', MOBhp)        
print(MOB,'was slain by ',PLAYER)
  

Это дает повторяющийся результат, который я должен прервать с помощью cntrl c

 the type attack chosen was  R the MOB has  100
the  HERO  used range to attack Dragon
the MOB hitpoints are  95
the type attack chosen was  M the MOB has  100
the  HERO  used melee to attack Dragon
the MOB hitpoints are  90
the type attack chosen was  R the MOB has  100
the  HERO  used range to attack Dragon
the MOB hitpoints are  95
  

Где, как будто я делаю следующее

 enter code here
#while MOBhp > 0:
TYPEatck=random.choice('RM')
ATTACK(TYPEatck,MOBhp)
print('really the MOB hitpoints are ', MOBhp)        
print(MOB,'was slain by ',PLAYER)
  

Я получаю следующие результаты

 the type attack chosen was  R the MOB has  100
the  HERO  used range to attack Dragon
the MOB hitpoints are  95
really the MOB hitpoints are  100
Dragon was slain by  HERO
  

Я также пытался играть с глобальными переменными и, похоже, не могу заставить это работать.

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

1. Пожалуйста, исправьте отступ. Код Python в противном случае бесполезен. Как предполагаю, вы, похоже, не присваиваете возвращаемое значение ATTACK back to MOBhp .

2. Кроме того, у вас есть неправильные пробелы после некоторых print операторов и нет пробелов перед or

Ответ №1:

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

 while MOBhp > 0:
    TYPEatck=random.choice('RM')
    MOBhp = ATTACK(TYPEatck,MOBhp)
  

Ответ №2:

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

 import random
MOBhp=100

def ATTACK(TYPEatck, hp):
    global MOBhp
    MOBhp = hp

    print('the type attack chosen was ',TYPEatck,'the MOB has ',MOBhp)
    if TYPEatck == 'M' or TYPEatck == 'm':
        print('the ',PLAYER,' used melee to attack',MOB)
        MOBhp = MOBhp - 10
        elif TYPEatck == 'R' or TYPEatck == 'r':
        print('the ',PLAYER,' used range to attack',MOB)
        MOBhp = MOBhp - 5
    else:
        print('please choose a valid attack')
    print('the MOB hitpoints are ',MOBhp)
    return MOBhp;


PLAYER = 'HERO'
MOB = 'Dragon'
AC = 12
while MOBhp > 0:
    TYPEatck = random.choice('RM')
    ATTACK(TYPEatck,MOBhp)

print('really the MOB hitpoints are ', MOBhp)        
print(MOB,'was slain by ',PLAYER)
  

Или вы можете использовать class:

 import random

class Game():
    def __init__(self, player, mob):
        self.player = player
        self.mob = mob
        self.mobhp = 100

    def ATTACK(self, TYPEatck):
        print('the type attack chosen was ',TYPEatck,'the MOB has ',self.mobhp)
        if TYPEatck == 'M' or TYPEatck == 'm':
            print('the ',self.player,' used melee to attack',self.mob)
            self.mobhp -= 10
        elif TYPEatck == 'R' or TYPEatck == 'r':
            print('the ',self.player,' used range to attack',self.mob)
            self.mobhp -= 5
        else:
            print('please choose a valid attack')
        print('the MOB hitpoints are ',self.mobhp)
        return self.mobhp;

    def get_MOBhp(self):
        return self.mobhp

PLAYER = 'HERO'
MOB = 'Dragon'
AC = 12
game = Game(PLAYER, MOB)
while game.get_MOBhp() > 0:
    TYPEatck = random.choice('RM')
    game.ATTACK(TYPEatck)

print('really the MOB hitpoints are ', game.get_MOBhp())        
print(MOB,'was slain by ',PLAYER)
  

Ответ №3:

Спасибо всем за помощь! Я понял это и смог написать свою программу до завершения.

Вот код, отформатированный и опубликованный на Reddit