#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 toMOBhp
.2. Кроме того, у вас есть неправильные пробелы после некоторых
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:
Спасибо всем за помощь! Я понял это и смог написать свою программу до завершения.