2013-10-08 81 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] 

基本上,它只是返回一個列表。所以,簡單來說,你需要一個列表。從技術上講,字符串是粘在一起的字符列表。

希望有所幫助。