习题 32: 循环和列表

阅读原文

现在你应该有能力写更有趣的程序出来了。如果你能一直跟得上,你应该已经看出 将“if 语句”和“布尔表达式”结合起来可以让程序作出一些智能化的事情。

然而,我们的程序还需要能很快地完成重复的事情。这节习题中我们将使用 for-loop (for 循环)来创建和打印出各种各样的列表。在做的过程中,你会逐渐明白它们是怎么 回事。现在我不会告诉你,你需要自己找到答案。

在你开始使用for-loop for 循环之前,你需要在某个位置存放循环的结果。最好的方法是使用列表(list), 顾名思义,它就是一个按顺序存放东西的容器。列表并不复杂,你只是要学习 一点新的语法。首先我们看看如何创建列表:

hairs = ['brown', 'blond', 'red']
eyes = ['brown', 'blue', 'green']
weights = [1, 2, 3, 4]

你要做的是以 [ (左方括号)开头“打开”列表,然后写下你要放入列表的东西, 用逗号隔开,就跟函数的参数一样,最后你需要用 ] (右方括号)结束右方括号 的定义。然后 Python 接收这个列表以及里边所有的内容,将其赋给一个变量。

warning:: 对于不会编程的人来说这是一个难点。习惯性思维告诉你的大脑大地是平的。 记得上一个练习中的 if 语句嵌套吧,你可能觉得要理解它有些难度,因为 生活中一般人不会去像这样的问题,但这样的问题在编程中几乎到处都是。你会看到 一个函数调用另外一个包含 if 语句的函数,其中又有嵌套列表的列表。如果你看到 这样的东西一时无法弄懂,就用纸币记下来,手动分割下去,直到弄懂为止。

现在我们将使用for-loop循环创建一些列表,然后将它们打印出来。

the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']

# this first kind of for-loop goes through a list
for number in the_count:
    print "This is count %d" % number

# same as above
for fruit in fruits:
    print "A fruit of type: %s" % fruit

# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
for i in change:
    print "I got %r" % i

# we can also build lists, first start with an empty one
elements = []

# then use the range function to do 0 to 5 counts
for i in range(0, 6):
    print "Adding %d to the list." % i
    # append is a function that lists understand
    elements.append(i)

# now we can print them out too
for i in elements:
    print "Element was: %d" % i

What You Should See

$ python ex32.py
This is count 1
This is count 2
This is count 3
This is count 4
This is count 5
A fruit of type: apples
A fruit of type: oranges
A fruit of type: pears
A fruit of type: apricots
I got 1
I got 'pennies'
I got 2
I got 'dimes'
I got 3
I got 'quarters'
Adding 0 to the list.
Adding 1 to the list.
Adding 2 to the list.
Adding 3 to the list.
Adding 4 to the list.
Adding 5 to the list.
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5

Study Drills

  1. 注意一下 range 的用法。查一下 range 函数并理解它。
  2. 在第 23 行,你可以可以直接将 elements 赋值为 range(0,6),而无需使用 for 循环?
  3. 在 Python 文档中找到关于列表的内容,仔细阅读以下,除了 append 以外列表还 支持哪些操作?

Common Student Questions

How do you make a 2-dimensional (2D) list?
That's a list in a list like this: [[1,2,3],[4,5,6]]
Aren't lists and arrays the same thing?
Depends on the language and the implementation. In classic terms a list is very different from an array because of how they're implemented. In Ruby though they call these arrays. In Python they call them lists. Just call these lists for now since that's what Python calls them.
Why is a for-loop able to use a variable that isn't defined yet?
The variable is defined by the for-loop when it starts, initializing it to the current element of the loop iteration, each time through.
Why does for i in range(1, 3): only loop two times instead of three times?
The range() function only does numbers from the first to the last, not including the last. So it stops at two, not three in the above. This turns out to be the most common way to do this kind of loop.
What does elements.append() do?
It simply appends to the end of the list. Open up the Python shell and try a few examples with a list you make. Any time you run into things like this, always try to play with them interactively in the Python shell.

Copyright (C) 2010 by
Author: Zed Shaw
Translator:Zander Wong

results matching ""

    No results matching ""