第三章 基本使用
last edited 2 months ago by panjy
下面我们用例子来介绍Python的基本用法。在例子中,用户输入和系统输出靠有没有提示 (>>>和...)来分别。如果要试这些例子的话,需要键入提示后的所有命令,例子 中没有提示的行是系统的输出。注意只有次提示的行意味着需要键入一个空行,这用于结束 多行命令。
3.1 用Python作计算器使用
启动解释程序,等待主提示>>>出现。解释程序可以作为计算器使用。键入一个 表达式,解释程序就可以输出结果。表达式的写法很直观:+,-,*,/, %, **等算符的作用 和其它大多数语言(如Pascal或C)没什么差别,括号可以用来组合。例如:
>>> 2+2
4
>>> # 这是一个注释
... 2+2
4
>>> 2+2 # 和代码在同一行的注释
4
>>> (50-5*6)/4
5
>>> # 整数除法得下面的整数
... 7/3
2
>>> 7/-3
-3
>>>
和C中一样,等于号用来给变量赋值,赋值的结果不显示:
>>> width = 20
>>> height = 5*9
>>> width * height
900
>>>
可以同时给几个变量赋同一个值:
>>> x = y = z = 0 # 把 x, y 和 z赋零
>>> x
0
>>> y
0
>>> z
0
>>>
Python完全支持浮点数,混合类型的运算会把整数先转换成浮点数:
>>> 4 * 2.5 / 3.3
3.0303030303
>>> 7.0 / 2
3.5
>>>
Python也提供了复数,方法是用j和J作为虚数单位,如1+1j,3.14e-10j,等等。
3.2. 字符串
Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹:
>>> 'spam eggs'
'spam eggs'
>>> 'doesn't'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> ""Yes," he said."
'"Yes," he said.'
>>> '"Isn't," she said.'
'"Isn't," she said.'
>>>
字符串输出格式与输入的样子相同,都是用撇号包裹,撇号和其它特殊字符用用反斜杠转 义。如果字符串中有单撇号而没有双撇号则用双撇号包裹,否则应该用单撇号包裹。后面要 介绍的print语句可以不带撇号或转义输出字符串。
字符串可以用+号连接起来,用*号重复:
>>> Word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
>>>
字符串可以象在C中那样用下标索引,字符串的第一个字符下标为0。
Python没有单独的字符数据类型,一个字符就是长度为一的字符串。象在Icon语言中那样 ,可以用片段(slice)记号来指定子串,片段即用冒号隔开的两个下标。
>>> word[4]
[1] [2] [3] [4] 下一页
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
>>>
片段有很好的缺省值:第一下标省略时缺省为零,第二下标省略时缺省为字符串的长度。
>>> word[:2] # 前两个字符
'He'
>>> word[2:] # 除前两个字符串外的部分
'lpA'
>>>
注意s[:i]? + s[i:]? 等于 s 是片段运算的一个有用的恒等式。
>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'
>>>
不合理的片段下标可以很好地得到解释:过大的下标被换成字符串长度,上界小于下界时 返回空串。
>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''
>>>
下标允许为负数,这时从右向左数。例如:
>>> word[-1] # 最后一个字符
'A'
>>> word[-2] # 倒数第二个字符
'p'
>>> word[-2:] # 最后两个字符
'pA'
>>> word[:-2] # 除最后两个字符外的部分
'Hel'
>>>
但要注意的是 -0 实际还是 0,所以它不会从右向左数!
>>> word[-0] # (因为 -0 等于 0)
'H'
>>>
超出范围的片段下标被截断,但在非片段的情况下不要这样:
>>> word[-100:]
'HelpA'
>>> word[-10] # 错误
Traceback (innermost last):
File "<stdin>", line 1
IndexError: string index out of range
>>>
记住片段意义的最好方法是把下标看成是字符 之间的点,第一个字符的左边界号码为0。有n个字符的字符串的最后一个字符的右边 界下标为n,例如:
+---+---+---+---+---+
H e l p A
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
第一行数字给出字符串中下标0到5的位置,第二行给出相应的负下标。从i到j的片段由在 边界i和j之间的字符组成。
对于非负下标,如果下标都在界内,则片段的长度为下标的差。例如,word[1:3]? 的长度 为 2。
内置函数len()返回字符串的长度:
>>> s = 'supercalifragilisticeXPialidocious'
>>> len(s)
34
>>>
多行的长字符串也可以用行尾反斜杠续行,续行的行首空白不被忽略,如
hello = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant.\n"
print hello
结果为
上一页 [1] [2] [3] [4] 下一页
This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line is significant.
对于特别长的字符串(比如包含说明的几段文字),如果用上面的方式每行都用\n\结尾 是很麻烦的,特别是这样无法用象Emacs这样的功能强大的编辑器重新编排。对这种情况,可 以使用三重撇号,例如
hello = """
This string is bounded by triple double quotes (3 times ").
Unescaped newlines in the string are retained, though \
it is still possible\nto use all normal escape sequences.
Whitespace at the beginning of a line is
significant. If you need to include three opening quotes
you have to escape at least one of them, e.g. """.
This string ends in a newline.
"""
三重撇号字符串也可以用三个单撇号,没有任何语义差别。
多行的字符串常量可以直接连接起来,字符串常量之间用空格分隔则在编译时可以自动连 接起来,这样可以把一个长字符串连接起来而不需要牺牲缩进对齐或性能,不象用加号连接 需要运算,也不象字符串串内的换行其行首空格需要保持。
3.3 列表
Python中有几种复合数据类型,用来把其它值组合到一起。其中最灵活的是列表,可 以写成在方括号之间用逗号隔开的若干值(项)。列表的项不必取同一类型。
>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]
>>>
象字符串下标那样,列表下标从0开始,列表可以取片段,可以连接,等等:
>>> a[0]
'spam'
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boe!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!']
>>>
与字符串不同的是列表是可变的,可以修改列表的每个元素:
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]
>>>
也可以给一个片段重新赋值,这甚至可以改变表的大小:
>>> # 替换若干项:
... a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # 去掉若干项:
... a[0:2] = []
>>> a
[123, 1234]
>>> # 插入若干项:
... a[1:1] = ['bletch', 'xyzzy']
>>> a
[123, 'bletch', 'xyzzy', 1234]
>>> a[:0] = a # 在开头插入自身
>>> a
[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
上一页 [1] [2] [3] [4] 下一页
>>>
内置函数也使用于列表:
>>> len(a)
8
>>>
可以建立嵌套列表(表的元素也是列表),如:
>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2
>>> p[1].append('xtra') # 列表方法
>>> p
[1, [2, 3, 'xtra'], 4]
>>> q
[2, 3, 'xtra']
>>>
注意这个例子中p[1]?和q实际是同一个对象!也就是说它们只不过是同一个东西的两个名 字(引用)而已。
3.4 编程初步
Python当然不是只能用来把两个数加到一起,它可以完成很复杂的工作。例如,我们可以 写出Fibonacci序列的开始几个:
>>> # Fibonacci 序列:
... # 两个元素的和定义下一个
... a, b = 0, 1
>>> while b < 10:
... print b
... a, b = b, a+b
...
1
1
2
3
5
8
>>>
这个例子介绍了几个新特色。
第一行包含一个多重赋值: 变量a和b同时得到新值0和1。在最后一行又用了多重赋值, 我们可以看出赋值时先把右边都算出后再进行赋值。
while循环当循环条件(这里即: b < 10)成立时不断执行。在Python中和C中一样,非 零整数值为真值,零为假值。条件也可以是字符串或列表或任何序列,长度为非零的为真, 空序列为假。例子中所用的是一个简单比较。标准的比较算符和C一样:
<, >, ==, <=, >= 和 !=。
循环体是缩进的:缩进是Python用来组合语句的方式。Python目前还不能提供智能自动缩 进,所以你需要自己为每个缩进行键入制表符或空格。实际使用中你可以用文本编辑程序为Python 准备复杂的输入,多数文本编辑程序都有自动缩进的功能。在交互输入复合语句时必修附加 一个空行以指示复合语句的完成(因为解释程序无法猜到哪是语句的最后一行)。print语句 显示后面的表达式值。这和直接写出表达式不同,它可以显示多个表达式和字符串,而且可 以用于程序文件中。显示时字符串没有撇号,各项目之间插入一个空格,所以你可以以精美 的格式显示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部写一个逗号可以避免最后换行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行没有结束的话系统在显示提示之前先换行。
Python还提供了和C语言一样的printf格式的输出方式,这是用%实现的,左边是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多个需要输出的项百分号右边的项可以是一个序组,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31
(出处:http://www.sheup.com)
上一页 [1] [2] [3] [4]
... a, b = b, a+b
...
1
1
2
3
5
8
>>>
这个例子介绍了几个新特色。
第一行包含一个多重赋值: 变量a和b同时得到新值0和1。在最后一行又用了多重赋值, 我们可以看出赋值时先把右边都算出后再进行赋值。
while循环当循环条件(这里即: b < 10)成立时不断执行。在Python中和C中一样,非 零整数值为真值,零为假值。条件也可以是字符串或列表或任何序列,长度为非零的为真, 空序列为假。例子中所用的是一个简单比较。标准的比较算符和C一样:
<, >, ==, <=, >= 和 !=。
循环体是缩进的:缩进是Python用来组合语句的方式。Python目前还不能提供智能自动缩 进,所以你需要自己为每个缩进行键入制表符或空格。实际使用中你可以用文本编辑程序为Python 准备复杂的输入,多数文本编辑程序都有自动缩进的功能。在交互输入复合语句时必修附加 一个空行以指示复合语句的完成(因为解释程序无法猜到哪是语句的最后一行)。print语句 显示后面的表达式值。这和直接写出表达式不同,它可以显示多个表达式和字符串,而且可 以用于程序文件中。显示时字符串没有撇号,各项目之间插入一个空格,所以你可以以精美 的格式显示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部写一个逗号可以避免最后换行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行没有结束的话系统在显示提示之前先换行。
Python还提供了和C语言一样的printf格式的输出方式,这是用%实现的,左边是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多个需要输出的项百分号右边的项可以是一个序组,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31
(出处:http://www.sheup.com)
上一页 [1] [2] [3] [4] [5]
...
1
1
2
3
5
8
>>>
这个例子介绍了几个新特色。
第一行包含一个多重赋值: 变量a和b同时得到新值0和1。在最后一行又用了多重赋值, 我们可以看出赋值时先把右边都算出后再进行赋值。
while循环当循环条件(这里即: b < 10)成立时不断执行。在Python中和C中一样,非 零整数值为真值,零为假值。条件也可以是字符串或列表或任何序列,长度为非零的为真, 空序列为假。例子中所用的是一个简单比较。标准的比较算符和C一样:
<, >, ==, <=, >= 和 !=。
循环体是缩进的:缩进是Python用来组合语句的方式。Python目前还不能提供智能自动缩 进,所以你需要自己为每个缩进行键入制表符或空格。实际使用中你可以用文本编辑程序为Python 准备复杂的输入,多数文本编辑程序都有自动缩进的功能。在交互输入复合语句时必修附加 一个空行以指示复合语句的完成(因为解释程序无法猜到哪是语句的最后一行)。print语句 显示后面的表达式值。这和直接写出表达式不同,它可以显示多个表达式和字符串,而且可 以用于程序文件中。显示时字符串没有撇号,各项目之间插入一个空格,所以你可以以精美 的格式显示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部写一个逗号可以避免最后换行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行没有结束的话系统在显示提示之前先换行。
Python还提供了和C语言一样的printf格式的输出方式,这是用%实现的,左边是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多个需要输出的项百分号右边的项可以是一个序组,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31
(出处:http://www.sheup.com/)
上一页 [1] [2] [3] [4] [5] [6]