2016-07-24 1 views
0

По какой-то причине я не могу изменить глобальную переменную total_hours. Или почему вывод всегда 0 0 0?Почему это всегда дает выход 0 0 0?

hour = 1 
day = 24 
week = 168 
part_day = 8 
total_hours = int(0) 
hours = total_hours % 168 
days = ((total_hours % 168) // 7) 
weeks = total_hours // 168 

def sleep(): 
     global total_hours 
     global week 
     total_hours += week 

def show_time(): 
     global hours 
     global days 
     global weeks 
     print(hours, days, weeks) 

sleep() 

show_time() 
+1

Вы никогда не изменяли значение 'hours',' days' или 'weeks'. Все, что вы изменили, - 'total_hours'. Переменные присваиваются значениям, а не долам «total_hours». – zondo

+0

Но если я изменяю значение total_hours, то оно работает ... –

+0

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

ответ

1

Что вы делаете здесь, заключается в следующем:

  1. присваивается значение 0 переменной total_hours
  2. Вы вычислить значения переменных hour, days и week с помощью переменной total_hours со значением 0 и присвоить им результаты тоже
  3. Вы изменяете значение переменной total_hours
  4. Вы печатаете значения hour, days и weeks как они были вычислены в 2

Чтобы лучше понять, что происходит, вы должны играть немного больше с print:

hour = 1 
day = 24 
week = 168 
part_day = 8 
total_hours = int(0) 
hours = total_hours % 168 
days = ((total_hours % 168) // 7) 
weeks = total_hours // 168 

def sleep(): 
     global total_hours 
     global week 
     total_hours += week 

print 'values before `sleep`', hours, days, weeks, total_hours 
sleep() 
print 'values after `sleep`', hours, days, weeks, total_hours 

Если вы хотите (пересчитать) значения зависят от total_hours, вы могли бы сделать что-то вроде этого:

hour = 1 
day = 24 
week = 168 
part_day = 8 
total_hours = int(0) 
hours = total_hours % 168 
days = ((total_hours % 168) // 7) 
weeks = total_hours // 168 

def recalc(): 
    global weeks, days, hours, total_hours 
    hours = total_hours % 168 
    days = ((total_hours % 168) // 7) 
    weeks = total_hours // 168 

def sleep(): 
    global total_hours, week 
    total_hours += week 

def show_time(): 
    global hours, days, weeks 
    print(hours, days, weeks) 

sleep() 
recalc() 
show_time()