How to sum the selected elements from an array in python? (Multiple Inputs)
代码如下:
1 2 3 4 5 6 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] x = raw_input() for i, v in enumerate(PRICE): print total price |
例如,用户输入"1 3 2 2"所以x是我从用户那里得到的多个输入。我如何总结它们?答案应该是1100+1300+1200+1200=4800我想创建一个代码,即使我更改了输入,我仍然能够总结它们。如果我把x改为2,2,2,1,我的总数是4700。
您可以将用户输入转换为如下索引:
1 | print sum(PRICE[int(a)] for a in x.split()) |
但是,只有当
编辑:删除了评论中建议的中间列表创建
1 2 3 4 5 6 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] x = raw_input() for i, v in enumerate(PRICE): print total price |
嗯,我被卡住了,我不能回答,但我能做点什么吗?
也许我可以打印一些东西给我更多的想法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] x = raw_input() print x for i, v in enumerate(PRICE): print i, v >>> you said 2 0 1000 1 1100 2 1200 3 1300 4 1400 5 1500 |
所以
也许我现在可以把它们都加起来?价格是
1 2 3 4 5 6 7 8 9 10 11 12 13 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] x = raw_input() print"you said", x for i, v in enumerate(PRICE): v = v + v print v >>> you said 3 3000 |
3000?3000是多少?哦,它来自最后一个,1500+1500。所以我不能用这样的V。
好吧,我知道清单,如果我这样做……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): TOTAL = TOTAL + v print TOTAL >>> Traceback (most recent call last): File"<interactive input>", line 1, in <module> TypeError: can only concatenate list (not"int") to list |
不,那是个错误。嗯…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): TOTAL = TOTAL + [v] print TOTAL >>> you said 2 [1000, 1100, 1200, 1300, 1400, 1500] |
这不是什么加起来的,只是复制的!真是浪费时间!
嗯,现在怎么样?我不知道,也许我会把我所有的东西都打印出来看看会发生什么:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): TOTAL = TOTAL + [v] print"x:", x,"i:", i,"v:", v,"TOTAL:", TOTAL print TOTAL >>> you said 2 x: 2 i: 0 v: 1000 TOTAL: [1000] x: 2 i: 1 v: 1100 TOTAL: [1000, 1100] x: 2 i: 2 v: 1200 TOTAL: [1000, 1100, 1200] x: 2 i: 3 v: 1300 TOTAL: [1000, 1100, 1200, 1300] x: 2 i: 4 v: 1400 TOTAL: [1000, 1100, 1200, 1300, 1400] x: 2 i: 5 v: 1500 TOTAL: [1000, 1100, 1200, 1300, 1400, 1500] [1000, 1100, 1200, 1300, 1400, 1500] |
看那个,在某个点,x是2,i是2。这就是他们输入的匹配我看到的。我想要那个。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): if x == i: TOTAL = TOTAL + [v] print TOTAL >>> you said 2 [] |
什么?我只是看到他们是平等的,但没有起作用。太荒谬了,我讨厌它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> i = 1 >>> print i 1 >>> x = raw_input() >>> print x 2 >>> raw_input() == 2 False >>> help(raw_input) Help on built-in function raw_input in module __builtin__: raw_input(...) raw_input([prompt]) -> string Read a string from standard input. The trailing newline... |
哦,这提醒了我,我听说过弦。
1 2 3 4 5 6 | >>> x = raw_input() >>> help(x) no Python documentation found for '2' >>> help(i) Help on int object: ... |
…hmm googles原始输入、int对象、python、比较、读取
1 2 | >>> raw_input() == str(i) True |
对!
现在我在哪里?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): if x == str(i): TOTAL = TOTAL + [v] print TOTAL >>> you said 2 [1200] |
这是有史以来最酷的事情。
*Google的"python add list",在python中找到一个数字列表sees
1 2 3 4 | >>> sum(PRICE) 7500 >>> sum(TOTAL) 1200 |
哦,但我不想用和,我想把它们加在循环中。
但至少现在我有一些用户选择的东西。
我还能做什么?我被困住了。
*认为
我刚才找到了
1 2 | >>> help(str) [gibberish] |
我不知道这是什么意思:(
嘿,再见!
1 2 3 4 5 6 7 8 9 10 11 12 | >>> help(str) Help on class str in module __builtin__: class str(basestring) | str(object='') -> string | | Return a nice string representation of the object. | If the argument is a string, the return value is the same object. | | __eq__(...) | x.__eq__(y) <==> x==y | |
我刚用过==现在这里面全是==。
1 2 3 4 5 6 | | count(...) | S.count(sub[, start[, end]]) -> int | | Return the number of non-overlapping occurrences of substring sub in | string S[start:end]. Optional arguments start and end are interpreted | as in slice notation. |
嘿,count()在str里面做什么?我想数数!返回不重叠的偏航跳数。
1 2 3 4 5 6 7 | | find(...) | S.find(sub [,start [,end]]) -> int | | Return the lowest index in S where substring sub is found, | such that sub is contained within S[start:end]. Optional | arguments start and end are interpreted as in slice notation. | |
发现,这是我认识的一个词,我刚才看到了
找到什么东西了吗?返回在s中找到子字符串的最低索引。
并且…在我把它和x比较之前,我必须先把它
如果我
1 2 3 4 5 | >>> x = raw_input() >>> print x 2 >>> x.find <built-in method find of str object at 0x0000000001E680A8> |
Google内置方法
浏览结果
看到"如果x不是python int对象,它必须定义一个index()方法"
不看,只是注意到
1 2 3 4 5 6 | >>> x.find() {error} >>> x.find(2) {error} >>> x.find(str(2)) 0 |
我讨厌这个,真糟糕。
等。
几小时后。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): if x.find(str(i)) > -1: TOTAL = TOTAL + [v] print TOTAL >>> you said 23 [1200, 1300] |
哦,我的话,我发现用户输入的东西不止一个!
*小时后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | PRICE = [1000, 1100, 1200, 1300, 1400, 1500] TOTAL = [] x = raw_input() print"you said", x for i, v in enumerate(PRICE): if x.find(str(i)) > -1: TOTAL = TOTAL + [v] print TOTAL add_total = 0 for i, v in enumerate(TOTAL): add_total = int(add_total) + int(v) print"Total is:", str(add_total) >>> you said 14 [1100, 1400] Total is: 2500 |
!!!!!!!!!!!!!!!!!!!!!!!
这就是所有"尝试一下这个:整洁的解决方案:)"背后真正发生的事情。
知道答案的人都知道,因为他们经历了很多这样的事情。(或者也许只有我一个人?D:)。做了那么多会让你熟悉很多事情,也会让你想起你在其他地方看到的事情,"那不管用,我以前试过,这就是为什么……"的时刻。
不要避免受挫,直截了当。学会爱上它。