Не трябваше ли да мога да направя това без sum()? [Python Codeacademy]

Така че аз съм най-големият от начинаещите, които се опитват да преминат през курсовете по Python в Codeacademy. Последният проблем в раздела за списъци и речници (http://www.codecademy.com/courses/python-beginner-en-IZ9Ra/1#!/exercises/3) ви моли да отпечатате общата стойност на наличност от различни артикули на различни цени, определени като това:

prices = {
"banana": 4,
"apple": 2,
"orange": 1.5,
"pear": 3
}

stock = {
"banana": 6,
"apple": 0,
"orange": 32,
"pear": 15
}

Имах много проблеми с мисленето как да пренеса резултатите от една итерация на for цикъл към следващата или извън цикъла, за да мога да ги сумирам. Прекарах известно време в търсене на това и не можах да намеря добри отговори, което ме кара да мисля, че мисля за това неправилно. Но във всеки случай открих функцията sum() и затова написах следното и получих правилния отговор:

values = []

for items in prices:
    value = prices[items] * stock[items]
    values.append(value)

print sum(values)

Проблемът е, че Codeacademy все още не ме е научил на sum(), така че изглежда, че пропускам доста очевиден начин да направя това без него. Без него можех да получа списък с отделните стойности за 4-те различни елемента, но не можах да ги сумирам. И така - може ли някой да ми даде намек как да пренеса резултатите от една итерация в следващата? Но мисля, че това е грешният начин на мислене, нали? Ако е така, може ли някой да ми подскаже как трябва да мисля?

Бях заседнал на втория проблем на проекта Ойлер (сумиране на четните числа на редицата на Фибоначи до 4 милиона) поради подобно объркване, мисля.

Благодаря ти! (Ако това е лош въпрос за публикуване или е лошо формулиран, моля, обяснете. Благодаря ви отново!)


person nowhereroad    schedule 29.03.2013    source източник


Отговори (2)


Това, което имате сега, не е лошо решение. Можете да пропуснете създаването на списък и просто да добавите към сумарна променлива:

total = 0

for item in prices:
    total += prices[item] * stock[item]

print total

Или използвайте генератор заедно с sum за едноредов:

total = sum(prices[item] * stock[item] for item in prices)
person Blender    schedule 29.03.2013
comment
Не осъзнавах, че можеш да поставиш аритметиката и за x в y всичко на един ред дори. Благодаря ти! - person nowhereroad; 30.03.2013
comment
@nowhereroad: Вероятно все още не сте стигнали до генериране на изрази. Повечето уроци/книги/класове/и т.н. смятат ги за ужасно напреднали, което според мен е жалко. Не само, че сте принудени да се научите по трудния начин да правите всичко и сте обучени да пишете не-pythonic код, това също ви прави по-трудно да разберете предложенията от (и кода, написан от) опитни програмисти на Python, които разбира се правят неща лесният начин. - person abarnert; 30.03.2013

person    schedule
comment
ах Това има много смисъл. Благодаря ти! - person nowhereroad; 30.03.2013
comment
Имайте предвид, че OP вероятно още няма да е научил +=, така че имайте предвид, че това е същото като totalValue = totalValue + prices[item] * stock[item] - person Daniel Roseman; 30.03.2013
comment
Благодаря ви, все още не бях научил това от Codeacademy, но се появи при предишно гугъл. - person nowhereroad; 30.03.2013