用python编写运行一个传统的“hello world”程序。通过它,你将学会如何编写、保存和运行python程序。
有两种使用python运行你的程序的方式
字符串是 字符的序列 。字符串基本上就是一组单词。
在每个python程序中都要用到字符串,所以请特别留心下面这部分的内容。下面告诉你如何在python中使用字符串。
使用单引号(')
你可以用单引号指示字符串,就如同<code>'quote me on this'</code>这样。所有的空白,即空格和制表符都照原样保留。
使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如<code>"what's your name?"</code>。
使用三引号('''或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:
转义符
假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是<code>what's your name?</code>。你肯定不会用<code>'what's your name?'</code>来指示它,因为python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过转义符 来完成这个任务。你用<code>\'</code>来指示单引号——注意这个反斜杠。现在你可以把字符串表示为<code>'what\'s your name?'</code>。
另一个表示这个特别的字符串的方法是<code>"what's your name?"</code>,即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符<code>\\</code>来指示反斜杠本身。
值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:
自然字符串
如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀<code>r</code>或<code>r</code>来指定。
unicode字符串
unicode是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持unicode的编辑器。类似地,python允许你处理unicode文本——你只需要在字符串前加上前缀<code>u</code>或<code>u</code>。例如,<code>u"this is a unicode string."</code>。
记住,在你处理文本文件的时候使用unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
字符串是不可变的
一旦你创造了一个字符串,你就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么我们说它不是一个缺点。
空白在python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。
你需要记住的一样东西是错误的缩进会引发错误。例如:

<code></code>
注意,在第二行的行首有一个空格。python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。
如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用单个制表符 或两个或四个空格 。
选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。
运算符与它们的用法
运算符
名称
说明
例子
+
加
两个对象相加
3 + 5得到8。'a' + 'b'得到'ab'。
-
减
得到负数或是一个数减去另一个数
-5.2得到一个负数。50 - 24得到26。
*
乘
两个数相乘或是返回一个被重复若干次的字符串
2 * 3得到6。'la' * 3得到'lalala'。
**
幂
返回x的y次幂
3 ** 4得到81(即3 * 3 * 3 * 3)
/
除
x除以y
4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333
//
取整除
返回商的整数部分
4 // 3.0得到1.0
%
取模
返回除法的余数
8%3得到2。-25.5%2.25得到1.5
<<
左移
把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)
2 << 2得到8。——2按比特表示为10
>>
右移
把一个数的比特向右移一定数目
11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。
&
按位与
数的按位与
5 & 3得到1。
|
按位或
数的按位或
5 | 3得到7。
^
按位异或
数的按位异或
5 ^ 3得到6
~
按位翻转
x的按位翻转是-(x+1)
~5得到6。
<
小于
返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量true和false等价。注意,这些变量名的大写。
5 < 3返回0(即false)而3 < 5返回1(即true)。比较可以被任意连接:3 < 5 < 7返回true。
>
大于
返回x是否大于y
5 > 3返回true。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回false。
<=
小于等于
返回x是否小于等于y
x = 3; y = 6; x <= y返回true。
>=
大于等于
返回x是否大于等于y
x = 4; y = 3; x >= y返回true。
==
等于
比较对象是否相等
x = 2; y = 2; x == y返回true。x = 'str'; y = 'str'; x == y返回false。x = 'str'; y = 'str'; x == y返回true。
!=
不等于
比较两个对象是否不相等
x = 2; y = 3; x != y返回true。
not
布尔“非”
如果x为true,返回false。如果x为false,它返回true。
x = true; not y返回false。
and
布尔“与”
如果x为false,x and y返回false,否则它返回y的计算值。
x = false; y = true; x and y,由于x是false,返回false。在这里,python不会计算y,因为它知道这个表达式的值肯定是false(因为x是false)。这个现象称为短路计算。
or
布尔“或”
如果x是true,它返回true,否则它返回y的计算值。
x = true; y = false; x or y返回true。短路计算在这里也适用。
运算符优先级
描述
lambda
lambda表达式
not x
in,not in
成员测试
is,is not
同一性测试
<,<=,>,>=,!=,==
比较
<<,>>
移位
+,-
加法与减法
*,/,%
乘法、除法与取余
+x,-x
正负号
~x
指数
x.attribute
属性参考
x[index]
下标
x[index:index]
寻址段
f(arguments...)
函数调用
(experession,...)
绑定或元组显示
[expression,...]
列表显示
{key:datum,...}
字典显示
'expression,...'
字符串转换
在python中有三种控制流语句——<code>if</code>、<code>for</code>和<code>while</code>
<code><code>使用if语句</code></code>
注意
我们使用了缩进层次来告诉python每个语句分别属于哪一个块。这就是为什么缩进在python如此重要的原因。<code>elif</code>和<code>else</code>从句都必须在逻辑行结尾处有一个冒号,下面跟着一个相应的语句块(当然还包括正确的缩进)。
使用while语句
我们把<code>raw_input</code>和<code>if</code>语句移到了<code>while</code>循环内,并且在while循环开始前把<code>running</code>变量设置为<code>true</code>。首先,我们检验变量<code>running</code>是否为<code>true</code>,然后执行后面的while-块 。在执行了这块程序之后,再次检验条件,在这个例子中,条件是<code>running</code>变量。如果它是真的,我们再次执行while-块,否则,继续执行可选的else-块,并接着执行下一个语句。
当<code>while</code>循环条件变为<code>false</code>的时候,<code>else</code>块才被执行——这甚至也可能是在条件第一次被检验的时候。如果<code>while</code>循环有一个<code>else</code>从句,它将始终被执行,除非你的<code>while</code>循环将永远循环下去不会结束!
<code>true</code>和<code>false</code>被称为布尔类型。你可以分别把它们等效地理解为值<code>1</code>和<code>0</code>。在检验重要条件的时候,布尔类型十分重要,它们并不是真实的值<code>1</code>。
else块事实上是多余的,因为你可以把其中的语句放在同一块(与<code>while</code>相同)中,跟在<code>while</code>语句之后,这样可以取得相同的效果。
使用for语句
我们所做的只是提供两个数,<code>range</code>返回一个序列的数。这个序列从第一个数开始到第二个数为止。例如,<code>range(1,5)</code>给出序列<code>[1, 2, 3, 4]</code>。默认地,<code>range</code>的步长为1。如果我们为<code>range</code>提供第三个数,那么它将成为步长。例如,<code>range(1,5,2)</code>给出<code>[1,3]</code>。记住,range向上 延伸到第二个数,即它不包含第二个数。
<code>for</code>循环在这个范围内递归——<code>for i in range(1,5)</code>等价于<code>for i in [1, 2, 3, 4]</code>,这就如同把序列中的每个数(或对象)赋值给i,一次一个,然后以每个<code>i</code>的值执行这个程序块。在这个例子中,我们只是打印i的值。
记住,<code>for..in</code>循环对于任何序列都适用。这里我们使用的是一个由内建<code>range</code>函数生成的数的列表,但是广义说来我们可以使用任何种类的由任何对象组成的序列!