2013-10-08 52 views
2

所以我一直试图让我的脑袋里面的python循环,但我不明白他们是如何工作的。我正在尝试创建一个for循环,它将遍历数字列表并将它们全部添加在一起,但我真的在语法的工作方式上苦苦挣扎。无法理解的循环Python

从我了解的语法是:

for w in words: 
    print w, len(w) 

有人能解释一下这迭代变量作品(W),也许用数字列表的例子吗?

我试过这个,但我认为我有错。

​​
+6

其他语言称之为'foreach'循环,如果有帮助的话。 – roippi

+4

在你的第二个例子中,'numbers'将是一个字符串。如果你遍历一个字符串,每个项目(在你的例子中''编号')将是该字符串中的单个字符。看起来你想要类似的东西遍历数字列表 - 看看['str.split()'](http://docs.python.org/2/library/stdtypes.html#str.split )的方式来分割字符串(例如空白)。然后你可以迭代它给你的列表,明确地将每个数字转换为一个“int”。 – thegrinner

+0

你的for循环没问题,这是你的raw_inout不能按照你的想法工作。尝试用'numbers =(1,4,5,8)'替换该行,然后您会看到您期望的内容。 – Kevin

回答

2

For环路参加一个事情每个项目,分配一个值给一个变量像wnumber,做一个手术,然后移动到下一个项目,直到他们用完。

让我们的例子第一个工作日...

numberstring = raw_input("> ") # expect a string like "1 2.0 4 100" 
addition = 0 
numberlist = numberstring.split(" ") # convert the chars into a list of "words" 
for number in numberlist: 
    addition = addition + float(number) 
print addition 

不coverting使用.split()列表,你的循环将通过串中的每个字母移动,将其解释为一个字母而不是数字。并且,如果不将这些单词转换为数字(使用float()),它甚至可以将字符串加回(除非在这种情况下,初始化为零)。

列表混淆的一个来源:变量的名称并不重要。如果你说for letter in myvar:它不强制程序选择字母。它只需要下一个项目并将该值分配给变量letter。在Python中,这个项目可以是单词,数字等的列表,或者如果给定一个字符串,它将以字符作为项目。

另一种方式来想象它是你有一个购物篮装满物品,和收银员通过他们一次一个循环:

for eachitem in mybasket: 
    # add item to total 
    # go to next item. 

如果你把他们一袋苹果,问他们通过它循环,他们会拿出每个苹果,但如果你给他们一个篮子,他们会把袋子作为一个项目...

+0

numberstring.split(“”)之间的“”是什么意思? – musha1

+0

.split()将分隔符作为参数,因此在这种情况下,他告诉split将每个由单个空格分隔的值放入列表中。例如,我们可以在包含“1,2,3,4,5”的字符串上使用split来将数字放入Python列表中。 “1,2,3,4,5”.split(“,”) –

+0

它是可选的,但在这种情况下,指定一个空格作为用于将字符串拆分为列表的字符。如果你忽略它,它会使用任何空格(包括'“”'),但我认为它会更清晰地指定。你可以用逗号,冒号等分割,甚至连续链接在一起。 – beroe

0

你有什么更像是一个foreach循环。

也许是这样的:

input = raw_input("> ") #separate with spaces 
sum = 0 
numbers = [int(n) for n in input.split()] 
for number in numbers: 
    sum = sum + number 
print sum 
+1

或者:'sum(int(n)for n in raw_input(“>”).split())'。 – iCodez

+0

@iCodez但是,如果没有'print'语句,我怎么知道你的紧凑Python是否正确? :) – John

+0

大声笑。我在Python解释器中做了那个你不需要'print'的东西。 :) – iCodez

0

有两种类型的for循环。

你是用什么大概是:

sum = 0 
for i in range(0,10): 
    sum += 1 
#prints 9 

你质疑的语法设置符号。它表示“对于每个成员词汇w”,打印w和w的长度。在python 2.7及更低版本中,print可以用作一个声明,其中包含多个要打印的内容,例如,print w, len(w)可打印单词w及其长度。这不会像python 3或更高版本中所述的那样工作。

+2

只有一种for循环。 '对于范围(0,10)'中的我循环遍历可迭代的'范围(0,10)'。 – abarnert

1

For循环工作的对象是iterables(对象是能够一次返回一个物体)。字符串是可迭代

>>> for c in "this is iterable": 
... print c + " ", 
... 
t h i s  i s  i t e r a b l e 

然而一些则不是。

>>> for x in 3: 
... print "this is not" 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 

遍历一系列号码,蟒蛇给你一个很好发电机称为功能......你猜对了,这range在Python 2.x中返回一个列表

>>> for x in range(3): 
... print x 
... 
0 
1 
2 
+1

一个小小的nit:'range'不是一个生成器函数。它返回一个列表,而不是一个生成器。 (在3.x中,它会返回一个自定义的“范围”,而不是一个列表,但它仍然不是一个生成器,而且你的代码显然是2.x。)否则,很好的解释,以及指向'iterable'的链接词汇表是一个很好的方式来指导读者更多地发现。 – abarnert

+0

@abarnert谢谢 - 编辑我的答案。 – Freddie

2

那么,一个小的控制台会话应该清除它。简而言之,Python会遍历iterable对象。现在这是什么意思。这意味着像字符串,如列表或数组。

>>> numbers = [1, 2, 3, 4, 5] 
>>> for n in numbers: print n 
1 
2 
3 
4 
5 

基本上,它会循环任何可以循环的东西。下面是另一个例子:

>>> my_happy_string = "cheese" 
>>> for c in my_happy_string: print c 
c 
h 
e 
e 
s 
e 

这里是一个单词列表的例子:

>>> list_of_words = ["hello", "cat", "world", "mouse"] 
>>> for word in list_of_words: print word 
hello 
cat 
world 
mouse 

基本上,蟒蛇的需求对象,它可以遍历做一个for循环,所以如果你想要一个for循环将开始在010结束了,你会做这样的事情:

>>> for i in range(0, 10): print i 
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 

让我们来看看什么range FUNC回报:

>>> range(0, 10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

基本上,它只是返回一个列表。所以,简单来说,你需要一个列表。从技术上讲,字符串是粘在一起的字符列表。

希望有所帮助。