МШ
Михаил Шпиев

Вопрос по python. Почему так происходит?

Есть два кода. С первого взгляда они ничем не отличаются:
(1) def print_shopping_list(recipe1, recipe2):
recipe11 = set(recipe1)
recipe22 = set(recipe2)
recipe = recipe11.union(recipe22)
for i in recipe:
weight = 0
if i in recipe1.keys():
weight += recipe1[i]
if i in recipe2.keys():
weight += recipe2[i]
print(i + ":" + str(weight))

pizza = {'мука, кг': 1,
'помидоры, кг': 1.5,
'шампиньоны, кг': 1.5,
'сыр, кг': 0.8,
'оливковое масло, л': 0.1,
'дрожжи, г': 50}
salad = {'огурцы, кг': 1,
'перцы, кг': 1,
'помидоры, кг': 1.5,
'оливковое масло, л': 0.1,
'листья салата, кг': 0.4}

print_shopping_list(pizza, salad)
(2) def print_shopping_list(recipe1, recipe2):
weight = 0
recipe11 = set(recipe1)
recipe22 = set(recipe2)
recipe = recipe11.union(recipe22)
for i in recipe:
if i in recipe1.keys():
weight += recipe1[i]
if i in recipe2.keys():
weight += recipe2[i]
print(i + ":" + str(weight))

pizza = {'мука, кг': 1,
'помидоры, кг': 1.5,
'шампиньоны, кг': 1.5,
'сыр, кг': 0.8,
'оливковое масло, л': 0.1,
'дрожжи, г': 50}
salad = {'огурцы, кг': 1,
'перцы, кг': 1,
'помидоры, кг': 1.5,
'оливковое масло, л': 0.1,
'листья салата, кг': 0.4}

print_shopping_list(pizza, salad)

При этом, первый работает как часы, а второй выдает странных значения. Почему так происходит? Какая разница, где объявлять переменную weight(перед циклом и в нём)?

Почему-то отступы не указываются на этом проекте. Но они есть..

ВП
Василиса Печерская

В первом коде weight зануляется на каждой итерации, во втором зануляется только в самом начале и, как результат, тащит за собой сумму по предыдущим итерациям for,

Похожие вопросы
Python пожалуйсто помогите срочно!
Информатика python ПаМаГиТе
Python как убрать кавычки
Python вопрос про class, помогите
Помогите новичку в Python
Калькулятор на PYTHON
Калькулятор на Python
Вопрос о суммировании в python 3
Python, обратное число
Ошибка python после установки