2017-02-13 7 views
0
def Change_char_stats(): 
    Char_dmg = 50 
    Char_health = 100 
    Char_stat_choice= '' 
    print('Current Damage is:',Char_dmg,'and health is:',Char_health,'.') 
    Char_stat_choice=input('\nWhat character stat would you like to edit?') 

    if Char_stat_choice == '1': 
     print('Current damage is',Char_dmg,'.') 
     Char_dmg=int(input('Character damage to: ')) 
     print('Character damage has been changed to',Char_dmg,'.') 
     Change_char_stats() 

    elif Char_stat_choice == '2': 
     print('Current damage is',Char_health,'.') 
     Char_health=int(input('Character health to: ')) 
     print('Character health has been changed to',Char_health,'.') 
     Change_char_stats() 
    else: 
     print('Input invalid.') 
     Change_char_stats() 

Change_char_stats() 

Так что в основном я работаю над простой игрой для себя на Python, и у меня проблема с моими переменными, так как при запуске исходные переменные программы установлены до 50 дмг и 100 здоровья, но то, что я хочу сделать, это возможность запускать код, изменять переменные, а затем оставлять их такими. Хотя я понимаю, почему переменные не остаются в качестве новых значений, я понятия не имею, как их переписать, помощь будет высоко оценена.Как перезаписать переменную в python в функции

Спасибо.

+0

Вы не видите закрывающей цитаты '' 'в этой строке' Char_stat_choice = input ('\ nЧто вы хотите изменить?) ' – Keatinge

+2

Вы рекурсивно вызываете' Change_char_stats(), но вы не отслеживаете любых изменений, сделанных для «Char_health» и т. д. Возможно, лучше иметь символ, представленный как экземпляр класса, чтобы вы могли отслеживать изменения. – roganjosh

+1

Вы должны использовать класс и использовать экземпляры там - но вам действительно лучше понять, как funcitons workm перед определением класса символов yur. Я предлагаю вам прочитать в учебнике Python по адресу https://docs.python.org/3/tutorial/index.html – jsbueno

ответ

0

Поместите переменные вне тела функции и сделать их доступными в пределах usng глобального ключевого слова:

somevar = 5 

def foobar(x): 
    global somevar 
    somevar = x 

print somevar 
foobar(6) 
print somevar 
+0

Это было бы интересно в многопользовательской игре :) Здесь нет причин использовать глобальные переменные. – roganjosh

+0

Ну, в некотором смысле, он правильно отвечает на то, что спросил ОП. Я бы не отказался от этого ответа, поскольку он «правильный». Но я не буду его продвигать, если только он не объяснит, каковы проблемы с этим дизайном, и предлагает лучший вариант. – jsbueno

2

Я предлагаю создать класс, чтобы упаковать все переменные в один объект:

def class player_character: 
    def __init__(self): 
     self.health = 100 
     self.dmg = 50 

сейчас вы создаете экземпляр класса:

player = player_character() 

И изменить переменные прямо LY:

player.health -= 10 

В качестве альтернативы, вы можете добавить функции к классу:

def class player_character: 
    def __init__(self): 
     self.health = 100 
     self.dmg = 50 

    def hit(self, dmg): 
     self.health -= dmg 

Теперь вы можете вызвать функцию на объекте:

player.hit(10) 

Классы невероятно мощные и большие средства для организации кода. Они позволяют обрабатывать множество данных как единое целое. Я настоятельно рекомендую вам узнать больше о них и объектно-ориентированном программировании в целом.