2014-02-06 2 views
1

Эй, я действительно новичок в python, но я проработал некоторое программирование на C++ и Javascript, я просто не понимаю, почему моя переменная x не имеет своего значения.Python Глобальная переменная не имеет значения

Спасибо за помощь и приятный день!

a = input("How much xp? :\n") 
x = int(a) 
w = 100 
z = 1 
h = 0 

def Call(): 
    global a 
    print "\n" 
    print x 
    print "\n" 
    print "Would you like to Continue ? \n Y/N \n" 
    j = raw_input("") 
    if j == "Y": 
      print "Call \n" 
      a = input("How much xp? :\n") 
      Level() 
    elif j == "N": 
      return 0 
    else: 
      return 0 

def Level(): 
    global x 
    global w 
    global z 
    global h 
    if x >= w: 
     z = z + 1 
     print "Your level is " + str(z) 
     h = x % w 
     x = x + h 
     w = w + 50 
     Call() 
    else: 
     print "Your level is " + str(z) 
     Call() 

Level() 
+0

Какая ошибка? Как фактический результат работы вашей программы отличается от ожидаемого результата? – user2357112

+0

Можете ли вы дать некоторый вклад с ожидаемым выходом и неправильным. Я не могу понять, что вы пытаетесь сделать с помощью 'a = input (« Сколько xp?: \ N »); x = int (a) '... – hivert

ответ

2

Вы определяете x в самом начале вашего кода, который я предполагаю, чтобы преобразовать a в целое число, так что вы можете делать операции с ним:

x = int(a) 

Когда вы просите сумму опыт вы хотите в вашей Call() функции:

a = input("How much xp?\n") 

x никогда не изменяется, так как задания x = int(a) не повторится автоматически!

Вам нужно переназначить x после переназначения a:

a = input("How much xp?\n") 
x = int(a) 

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

Кроме того, я бы рекомендовал использовать в коде некоторые более описательные переменные. Это не средняя школьная алгебра: переменные могут быть любой длины, поэтому вы должны объяснить, что a - это что-то вроде input_string, x - это что-то вроде experience, а j - это что-то вроде response.

1

Проблема в вашей функции Call(). Вход пользователя связан с переменной 'a', которую вы не используете в остальной части программы. Кажется, вы хотите связать его с переменной x.

Это мое предложенное решение:
1. Вставьте global x в начале функции вызова(), так что вы можете изменить его из функции.
2. Заменить

a = input("How much xp?\n") 
x = int(a) 

с

x = input("How much xp?\n") 

(дважды, в первой строке, а также в функции() вашего вызова)


Вот короткая программа Python, что достигает аналогичной цели. Я старался как можно больше сохранить систему именования.

w = 100 
z = 1 
h = 0 

while True: 
    x = input("How much xp? :\n") 
    if x >= w: 
     z = z + 1 
     h = x % w 
     x = x + h 
     w = w + 50 

    print "Your level is " + str(z) 

    if raw_input("Would you like to continue?\nY/N\n") != "Y": 
     break 

Примечание:

  • Я пытался использовать структуры, знакомые Javascript и C++, который вы знаете.
  • Функция input() (в python2) не требуется преобразовывать в int, потому что тип автоматически определяется на основе входного текста.
+0

Что вы подразумеваете под« дважды, в первой строке, а также в функции Call()? – ahoffer

+0

Я имел в виду, что он должен выполнить предложенную замену дважды, как это происходит в коде. Есть ли способ сделать это более ясным? – icedtrees

+0

Я вижу. Существует глобальное и локальное определение тех же утверждений. Возможно, плакат нуждается в том или ином, но не в обоих. – ahoffer

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