2013-03-29 2 views
0

Так что я самый ранний новичок, пытающийся работать через курсы Python по Codeacademy. Последняя проблема в разделе списков и словарей (http://www.codecademy.com/courses/python-beginner-en-IZ9Ra/1#!/exercises/3) просит вас напечатать общую стоимость запаса различных предметов по разным ценам, определенный как это:Должен ли я сделать это без sum()? [Python Codeacademy]

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 миллионов) из-за подобной путаницы, я думаю.

Спасибо! (Если это плохой вопрос для размещения или плохо сформулированы, объясните, пожалуйста. Еще раз спасибо!)

ответ

2
totalValue = 0 

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

print totalValue 
+0

ах. Это имеет большой смысл. Спасибо! – nowhereroad

+0

Обратите внимание, что OP, вероятно, еще не узнал '+ =', поэтому обратите внимание, что это то же самое, что и 'totalValue = totalValue + prices [item] * stock [item]' –

+0

Спасибо, я не узнал, что от Codeacademy все же, но это действительно появилось в предыдущем googling. – nowhereroad

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) 
+0

Я не понимал, что вы можете поставить арифметику и для x в y все в одной строке. Спасибо! – nowhereroad

+0

@nowhereroad: Вы, вероятно, еще не получили выражения генератора. Большинство учебников/книг/классов/и т. Д. считайте их ужасно продвинутыми, что, по моему мнению, является позором. Мало того, что вы вынуждены учиться трудному способу делать все и обучать писать непифонный код, это также затрудняет вам понимание предложений от опытных программистов Python (и написанных кодом), которые, конечно же, делают что-то простой способ. – abarnert

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