2

所以我一直在尝试了解python内部的循环,但我就是不明白它们是如何工作的。我正在尝试创建一个 for 循环,该循环将遍历一个数字列表并将它们加在一起,但我真的很困惑语法的工作原理。

据我了解,语法是:

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

有人可以解释一下这个迭代变量是如何工作的(w),也许可以使用数字列表的例子吗?

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

numbers = raw_input("> ")
addition = 0
for number in numbers:
    addition = addition + number
print addition
4

5 回答 5

3

For循环获取thing中的每个项目,将该值分配给类似wor的变量number,执行操作,然后继续执行下一个项目,直到它们用完。

让我们先让你的例子工作......

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

在不使用 转换为列表的情况下.split(),您的循环将遍历字符串的每个字母,将其解释为字母而不是数字。如果不将这些单词转换为数字(使用float()),它甚至可以将字符串重新加在一起(除非在这种情况下初始化为零)。

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

另一种设想方式是,您有一个装满物品的购物篮,而收银员一次又一次地遍历它们:

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

如果你递给他们一袋苹果并让他们循环使用,他们会取出每个苹果,但如果你给他们一个篮子,他们会将袋子作为一个物品取出......

于 2013-10-08T20:43:33.457 回答
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

基本上,python 需要它可以循环的对象来创建一个 for 循环,所以如果你想要一个从 开始0和结束的 for 循环10,你可以这样做:

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

让我们看一下range函数返回的内容:

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

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

希望有帮助。

于 2013-10-08T20:44:22.103 回答
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

为了迭代一系列数字,python 为您提供了一个不错的生成器函数,称为...您猜对了,range它在 Python 2.x 中返回一个列表。

>>> for x in range(3):
...   print x
...
0
1
2
于 2013-10-08T20:43:53.770 回答
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
于 2013-10-08T20:43:09.887 回答
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 或更高版本中所述,这将不起作用。

于 2013-10-08T20:43:19.337 回答