Python的程序结构

本篇主要介绍Python程序的顺序结构与选择结构、循环结构的用法。顺序结构这里主要补充一些基础的知识,如格式化输出等,选择结构主要讲if语句,循环结构主要讲for语句和while语句。

顺序结构

和C程序的入口是main函数不同,Python是一种脚本语言。它从上到下执行各条语句,可以把在命令行中分开执行的语句整合到一个Python脚本中。

语句行

  1. Python命令行中的语句必须从解释器提示符的第一列开始,前面不能有空格,不然会报错。

    Untitled

  2. Python脚本中的每行代码也必须顶格(tab的除外),每个语句行以回车符结束。

  3. 可以在同一行中写多条语句,语句之间使用分号分隔
  4. 如果一条语句写在一行太长,可以使用反斜杠(续行符)换行

    Untitled

  5. 如果在括号内需要换行,则不需要使用续行符,如

    1
    2
    def func(
    ):return 120

    就是一个正确的函数定义。

注释

Python中的注释包括单行注释和多行注释。

  1. 单行注释以#开头,后面的内容全是注释。
  2. 多行注释其实就是多行的字符串。它常常作为函数或类的说明,可以通过调用 函数名.__doc__ 来查看这个多行字符串说明。一般的编辑器也会将它作为函数或类的提示。而如果将多行注释放在脚本的地方,就会将它作为字符串输出

    Untitled

  3. 多行注释也可以采用每行开始一个#的方式。2和3两种注释方式的适用场景不同。

  4. 注释的添加也需要遵守一定的规范:
    1. 一目了然的代码,不需要添加注释
    2. 一个代码可能不是那么一目了然,如链式赋值,则在行后添加注释#
    3. 一系列复杂的操作,应该在操作开始前写上相应的注释

Python代码注释规范代码实例解析

赋值语句

  1. 使用=进行赋值。Python的赋值其实就是将变量指向解释器为相应值分配的空间。所以Python的赋值是动态的:①不需要声明变量类型 ②变量的类型随着值动态变化。
  2. 复合赋值。复合赋值运算符包括:+=、-=、*=、/=、//=、%=、**=、 <<=、>>=、&=、|=、^=
  3. 多变量赋值。链式赋值的写法:var1=var2=var3=……=值。它的作用是为多个变量赋同一个值。这种赋值方式的优点是所有变量都指向同一个值(地址相同),这样可以减少空间的开销。

    Untitled

  4. 同步赋值。它的格式为var1,var2...=值1,值2...。赋值的规则是先计算出右边的值,再将右边的值从值1开始一一对应地赋值给左边的变量。这种赋值方式与按顺序拆分为多条简单的赋值语句不同:

    Untitled

标准输入

使用 input([提示字符串]) 的方式实现标准输入,它接收到用户来自键盘的输入后,以字符串的形式返回这个输入。

Untitled

后续的处理有两种:

  1. 对返回的字符串进行强制类型转换
  2. 使用eval函数获取原生的输入

    Untitled

两种处理方式的区别是eval的适用面更广,如可以将一个表达式作为输入。

标准输出与格式化输出

标准输出使用到的函数为print()。它的格式为print(输出项1,输出项2,……,sep=[分隔符],end=[结束符])

  1. 输出项可以是变量,也可以是数字、字符串甚至表达式。
  2. 分隔符就是各输出项之间分隔的符号。默认的分隔符是空格
  3. 结束符就是输出结束的符号。默认的结束符是回车

    Untitled

print可以实现要求比较低的格式化,但是格式化要求比较高的时候,就要使用专门的格式化输出。

  1. 使用字符串格式化运算符%

    这是比较旧的格式化输出方式,一方面用的人还比较多,另一方面正在逐渐被淘汰。不建议使用,但需要明白用法。

    • 使用%分隔格式字符串与输出项,格式为 格式字符串%(输出项1,输出项2……)
    • 格式字符串由普通字符格式说明符组成,类似于C语言printf函数的格式控制字符串。
    • 格式说明符以%开头,后面接格式标识符。常用的有%s、%d、%o、%x、%f。一般情况下,若无特殊要求,使用%s即可

    Untitled

  2. 使用format()内置函数

    format函数的作用是将一个单独的输出项进行格式化,返回一个格式化后的字符或字符串。它的格式为 format(输出项,格式字符串)

    • 格式字符有d、b、o、x、f、c等,与格式化运算符的格式说明符相对应。之所以说是字符串是因为可以添加修饰,如6.2f表示6位有效数字且小数位数为2的浮点数。

      Untitled

  3. 使用字符串的format()方法

    基本格式为 格式字符串.format(输出项1,输出项2……)

    1. 格式字符串中的{}表示一个槽位置,用于填充输出项的值。从左到右一一匹配。
    2. {}中可以增加控制,格式为{序号:格式说明符}。序号表示匹配输出项的第几个,从0开始计数。格式说明符就是d、b、o、x、f、c等。

      Untitled


选择结构

Python使用if语句来实现分支结构。包括单分支if、双分支if…else…、多分支if…elif…elif…else。基本格式为:

1
2
3
4
5
6
7
8
if 表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
else:
语句块

要实现分支,就要判断表达式是否成立。表达式中的运算可以是关系运算、逻辑运算和测试运算。

关系运算

使用关系运算符<、<=、>、>=、==、!=。关系运算的结果是一个逻辑值True或False。

逻辑运算

使用逻辑运算符and、or、not对关系运算的结果进行逻辑运算。需要注意与或非三个运算的优先级:非>与>或。这个很容易忽略,所以该加括号时就要加括号!

Untitled

测试运算

  1. 成员测试

    使用成员运算符innot in。前者是一个具体的值,后者是一个数组。

  2. 身份测试

    使用身份运算符isis not。它用于测试两个变量是否指向同一个对象(区别=!=)

Untitled


循环结构

Python中的循环包括for循环与while循环。相比而言for循环比while循环更智能。

while循环

  1. 基本格式

    while循环的格式为:

    1
    2
    while [表达式]:
    [语句块]

    当表达式的结果为True时,执行下面的语句块(循环体)。需要注意的是语句块中一般有修改表达式值的语句,让循环结束,避免无限循环。

    当循环体比较小时,也可以使用语句行的格式写在一行: while [表达式]:[语句行]

  2. 使用else子句

    和C++不同,Python在循环中也可以使用else语句,它的作用是当循环正常执行完(包括没有执行)而不是break退出时执行else中的语句块。

    Untitled

  3. 使用range对象

    range()函数的格式为range([start],[end],[step])。可以将range的结果看成一个序列,如果i的值在序列内,则执行循环体。i的值需要在循环体中改变,避免无限循环:

    Untitled

for循环

  1. for循环是通过遍历序列中的元素来建立循环的。for循环会自动将序列中的元素依次赋值给循环变量。
  2. 这里的“序列”可以是列表、元组、字符串、集合。遍历列表、元组和字符串的顺序都是从左往右,而遍历集合的顺序是无序的
  3. 循环的次数就是序列中的元素个数。所以可以通过改变序列的元素个数来控制循环的次数。
  4. for循环也可以使用else子句。
  5. for循环的序列也可以是range对象。和while循环中使用range不同,不管i之前的值如何,for循环的操作是先获得可迭代对象的迭代器,然后依次将next([迭代器])的值赋值给循环变量

    Untitled

循环控制语句

循环控制语句包括常用的break、continue、pass

  1. break终止所在循环,执行循环体后面的语句。
  2. continue提前结束本次循环,重新开始下一轮循环。
  3. pass语句是Python中新引入的语句,它的作用是占位。因为Python和C语言不一样,循环体不能什么都不写,不然编辑器就会报错。所以就要用pass占位,之后再在循环体中添加内容。