2013-02-23 5 views
1

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

money = 1 
def Stats(): 
    print 
    print "money " + str(money) 

def gainM(): 
    money + 2 
    Stats() 

if money == 1: 
    gainM() 

Теперь, когда происходит печать денег, значение остается равным 1, хотя я добавляю 2 к значению. (код не является копией моей фактической программы, но пример, чтобы показать, что происходит.)

+0

'money + 2' ничего не делает.В любом случае ни одна из функций не имеет доступа к «деньгам» - вы должны поместить их в класс или передать «деньги» в качестве аргумента и вернуть обновленное значение. –

ответ

5

money + 2 не является оператором. На самом деле вы должны назначить money новое значение

money = money + 2 
# or 
money += 2 

Но тогда вы увидите, вы получите ошибку - вы не можете назначить переменные вне области видимости функции. Вы можете использовать ключевое слово global:

global money 
money += 2 

Это позволит вам изменить значение money внутри функции.

Однако рекомендуемый путь прохождения money в качестве параметра:

def gainM(money): 
    money += 2 
    Stats() 
    return money 

if money == 1: 
    money = gainM(money) 

Если вы используете второй вариант (который вы должны быть), вам также необходимо изменить Stats функцию, чтобы иметь money параметр.

def Stats(money): 
    print 
    print "money " + str(money) 

В противном случае функция печати 1 вместо 3.

Другая рекомендация - используйте форматирование строк.

'money %d' % money # the old way 
'money {}'.format(money) # the new and recommended way 

Теперь вы передаете money в функцию Stats.

def gainM(money): 
    money += 2 
    Stats(money) 
    return money 
+0

спасибо за помощь .. я бы хотел отметить, у меня изначально было это деньги = деньги + 2, но у меня была ошибка, поэтому я изменил ее, но не подумал проверить, что я действительно делал что-нибудь. Благодарю. –

2

Вам нужно присвоить новое значение деньгам. Как так:

money = money + 2 

или сокращенном виде:

money += 2 

Кроме того, если переменная находится за пределами функции, вам нужно объявить его глобальным (так что не вместо этого создать локальную переменную)

Таким образом, вы в конечном итоге с:

def gainM(): 
    global money 
    money += 2 
    Stats() 

Edit: просто для уточнения, я не говорю, что вы должны использовать глобальные переменные. В общем, это плохая идея (хотя в некоторых ситуациях они могут быть полезны). Однако именно этот пример должен работать. Однако есть вероятность, что вы хотите, вероятно, класс с переменными экземпляра, которые изменяют методы этого класса. Однако, учитывая, что вы, похоже, еще не поняли основы языка, делайте шаг за шагом и не волнуйтесь ни о каких словах в моих предыдущих предложениях, которые вы не понимали на данный момент :)

+0

Спасибо всем, энтропия, ты, возможно, прав, я не понял основ, но с тем, как я учился, мне нравится делать что-то в своем шаге, я придумываю идею, и, когда я сталкиваюсь с проблемой, я изучаю как пройти мимо него. –

+0

Это определенно лучший способ найти новые вещи. Хотя в какой-то момент, когда вы поймете основы, чтение некоторых более абстрактных вещей, таких как общие шаблоны проектирования, которые помогают в управлении сложностью вашего кода, безусловно, полезно. Удачи вам в матче :-) – entropy

Смежные вопросы