计算机程序一般包括顺序结构、选择结构和循环结构。其中顺序结构是最简单的一种结构,是按照语句的顺序执行,分支和循环是根据一定的条件控制和改变程序执行的顺序,用以完成特定的功能。
一、程序常用语句:
一个程序通常包括数据输入、数据处理和数据输出三个部分,其中输入输出为程序的交互部分,而数据处理是对数据进行操作和运算。
1. 赋值语句:
一个变量通过赋值可以指向不同类型的对象,“=”称为赋值号。赋值号左边必须是变量,右边是表达式,赋值的含义是先计算表达式的值,然后使该变量指向该数据对象。变量可以理解为该数据对象的别名。
Python是动态型语言,即不需要预先定义变量类型,变量类型和值在赋值时被初始化。Python的赋值并不是直接将一个值赋给一个变量,而是通过引用传递。
1)复合赋值语句:
程序中经常会遇到在变量已有值的基础上做修正的运算,其中变量既是运算对象,又是赋值对象,Python提供了12种复合赋值运算符,包括+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、|=、^=。其中后面5种是基于位运算的复合赋值语句。
使用复合赋值语句时,右边的运算视为一个整体。比如x*=y+5等价于x=x*(y+5)。
2)链式赋值:
变量1=变量2=......=变量n=表达式
链式赋值用于为多个变量赋同一个值。
3)同步多变量赋值:
变量1,变量2, ......, 变量n=表达式1, 表达式2, ......, 表达式n
其中,赋值号左边变量的个数要与右边表达式的个数一致,首先会计算右边n个表达式的值,然后同时将表达式的值赋给左边的n个变量。
一般要交换两个变量的值需要中间变量,而使用这种同步赋值方式可以在一个语句完成:
a,b=b,a
2. 标准输入语句:
input([提示字符串])
此函数从标准输入设备读取一行数据,并返回一个字符串。示例:
name=input('what\'s your name?')
然后会输出提示字符串what's your name?,可以键入'Tom',这时输入字符串被赋值给变量name。当使用print("my name is "+name+".")后,输出为:my name is Tom.
Python 2.x有raw_input()函数,把读入的数据转换成字符串,而input()函数读入的为数值。
3. 标准输出语句:
Python可以直接使用表达式以输出该表达式的值。但常见的输出方法是使用print()函数:
print([输出项1, 输出项2, ......, 输出项n][, sep=分隔符][, end=结束符])
print()函数可以一次输出多个项目,输出项之间以逗号分隔,没有输出项时输出空行。参数sep表示输出时各输出项之间的分隔符,默认为空格;参数end表示结束符,默认为回车换行符。
1)格式化输出语句:
一些情况下需要格式化输出,就需要使用格式化字符串。格式化字符串由普通字符和格式说明符组成,普通字符原样输出,格式说明符决定所对应输出项的输出格式。格式说明符以“%”开头,后接格式标志符:
代码
含义
代码
含义
%%
百分号
%x或%X
带符号整数(十六进制,用小写或大写字母)
%c
字符ASCII码
%e或%E
浮点数字,科学计数法用小写e或大写E
%s
字符串
%f或%F
浮点数字,用小数点表示
%d
带符号整数(十进制)
%g
浮点数字,根据值的大小自动选择%e或%f
%o
带符号整数(八进制)
%G
浮点数字,根据值的大小自动选择%E或%F
%r
使用repr()函数将其他类型转换为字符串类型
%x.yf
其中x和y为整数,表示总共长度为x个字符,小数部分占y位,还可以在x前加0表示位数不足时补0,前面还可以加-、+,-表示左对齐,+表示在正数前加+号
%(k1)s:%(k2)s
对字典类型指定对应的键k1和k2的值
%*.*f
需要在程序运行中确定字符长度,这个长度在输出项中指定*(x,y,num)
可以直接使用格式化字符串输出:格式化字符串%(输出项1,输出项2, ......, 输出项n),也可以使用print语句输出格式化字符串输出。示例:
print('邮箱地址为:%s%s' %(loginname,mail))
如果组值有两个以上的值,需要是小括号括起来,中间用逗号隔开。
2)format()函数:
format()函数可以将一个输出项单独进行格式化。一般格式为:
format(输出项[, 格式字符串])
格式字符串是可选项,省略时等价于str()。此函数把输出项按格式字符串中的格式说明符进行格式化,基本的格式控制符有:
·d、b、o、x或X分别按十进制、二进制、八进制、十六进制输出一个整数;
·f或F、e或E、g或G按小数形式或科学计数形式输出一个整数或浮点数
·c输出以整数为编码的字符
·%输出百分号
示例:
print(format(15, 'X'), format(65, 'c'), format(3.145, 'f'))# 输出 F A 3.145000
print(format(3.145, '6.2f'))# 输出3.15
格式字符串还可以指定填充字符、对齐方式、符号,其中表示右对齐、^表示居中、=表示填充字符位于符号和数字之间、+表示正号、-表示负号。
print(format(3.145,'0=+10'),format(3.14159,'05.3'))# 输出+00003.145 03.14
print(format('test','^20'))# 居中显示
5)format()方法:
Python 3.x中使用字符串类的format()方法来格式化字符串,调用格式为:
str.format(输出项1, 输出项2, ......, 输出项n)
格式字符串中可以包含普通字符和格式说明符,普通字符原样输出,格式说明符决定对应项的转换格式。格式说明符使用大括号括起来,形式为:{[序号或键]:格式说明符}
其中,可选的序号对应于要格式化的输出项的位置,从0开始,0表示第一个输出项,1表示第二个输出项,以此类推;序号全部省略则按输出项的自然顺序输出;可选的键对应于要格式化的输出项的名字或字典的键;格式说明符同format()内置函数。示例:
'{0:.2f},{1}'.format(3.145,500)# 输出'3.15,500'
其中的格式说明符{0:.2f}中,0表示该格式说明符决定了format中第一个输出项的格式,':.2f'是格式说明符,进一步说明对应的输出项格式化方式,即小数占2位。后面的{1}会传递给format()方法的第二个输出项。其他示例:
print('I\'m {},{}').format('Brenden','Welcome to my space!')
print('{0},I\'m {1}.My E-mail is {2}'.format('Hello','Brenden','brenden@csu.edu.cn')
print('Hi,{nm},{ms}'.format(nm='Brenden',ms='How are you?'))
print({1},{0},{ms}'.format('Brenden','Hi',ms='How are you?'))
print('{0:<15}'.format(1234567890))
print('{0:*^15}'.format(1234567890))
print('{0:10b}'.format(65))# 以二进制形式输出
print('{0:10x}'.format(65))# 以十六进制形式输出
二、控制语句:
控制语句决定程序的运行顺序,包括分支语句、循环语句等。为了实现控制,往往要判断表达式的值,这就需要用到一些关系运算、逻辑运算、测试运算等,需要使用真值表。
1. 真值表:
逻辑表达式,常常需要使用逻辑运算符,包括and、or、nor,用于将两个逻辑量连接起来。进行逻辑运算需要使用真值表:
P
Q
P and Q
P or Q
not P
False
False
False
False
True
False
True
False
True
False
True
False
False
True
False
True
True
True
True
False
在计算机内部,以1表示True,0表示False,参与判断的分量也可以是其他类型的数据。一些特殊情况下的真值表为:
表达式
""
"string"
0
1
()空元素
[]空列表
{}空字典
None
返回值
假
真
假
真
假
假
假
假
比如,bool('My name is Tom')、bool(45)、bool(" ")解析后得到的值均为True;而bool('')、bool(0)、bool("")、bool([])、bool(())、bool({})解析后得到的值是False。
2. 测试运算:
1)成员测试:
Python支持成员运算符,包括in和not in,in运算符用于在指定的序列中查找某个值是否存在,存在就返回True,否则返回False,格式为x in y。示例:
3 in (8,25,7,3,9)
not in含义为,如果指定的序列中没有找到值返回True,否则返回False。示例:
3 not in (8,25,7,3,9)
2)相同测试:
相同测试使用is,用于测试两个变量是否指向同一个对象。示例:
a is b
3. 条件运算:
Python的条件运算有3个伊运算量,其一般格式为:
表达式1 if 表达式 else 表达式2
运算规则是,先计算if后面的表达式,如果值为True,则求表达式1,并以表达式1的值为条件运算的结果;如果if后面的表达式的值为False,则求表达式2,并以表达式2的值为条件运算的结果。示例:
z=x if x>y else y
条件运算构成一个表达式,可以作为一个运算量出现在其他表达式中,而不是一个语句。使用条件表达式可以简化程序。
4. if语句:
使用if判断的条件语句,返回的结果是True或False,根据返回的结果来决定要执行的代码,常用于对数值或者表达式的比较运算。格式为:
if 表达式1:
代码块1
elif 表达式n:
代码块n
else:
代码块n+1
在if...elif...else条件语句中,需要对应的分句缩进,否则程序执行时会报错。if语句可以嵌套使用,嵌套使用时尤其要主要缩进,否则会出现逻辑错误。
5. while循环语句:
while循环是当指定的条件为true时,循环执行while块中的语句。格式为:
while 条件:
代码块1
else
代码块2
其中else语句块是可选的,这部分语句在while执行完成后会执行,但在使用break语句中断循环时则不被执行。
6. for循环:
可以使用for...in循环来遍历几个集合或遍历字典元素等,也可以用于字符串和元组。
for 迭代变量 in 迭代对象:
代码块1
if 条件1:
break
if 条件2:
continue
else:
代码块2
for语句在后台自动调用迭代器的next方法,捕获stopIteration异常并结束循环。迭代对象可以是序列、迭代器或其他支持迭代的对象。每次循环时,迭代变量表示可迭代对象的当前元素,一次循环结束,再表示迭代对象的下一个元素,直至所有元素迭代完毕。示例:
⑴对集合:
array=['a','b','c','d','e']
for alpha in array:
print(alpha)
⑵对字典:
value={'key1':'a', 'key2':'b', 'key3':'c', 'key4':'d', 'key5':'e'}
for key in value:
print('键为:'+key+'==>对应的值为:'+value[key])
⑶对字符串:
string='this is a string'
for s in string:
print(s)
⑷对元组:
group=[(1,2),(3,4),(5,60)]
for (a,b) in group:
print(a,b)
如果代码改为:
for a in group:
print(a)
输出方式与上面的有差别。
7. 迭代器:
for循环还可用于任何可迭代对象。可迭代对象都有一个next方法,调用后会返回下一个条目,所有条目迭代完成后会引发stopIteration异常以结束循环。
1)文件迭代器:
对于已经打开的文件对象,具有readline和next两个方法,其中readline方法是从文件中一次读取一行文本,到文件尾返回空字符串;next方法到文件尾时引发异常StopIteration。
示例:
for readline in open('forgroup.py'):
print(readline)
2)iter()内置函数:
iter()函数可以返回一个迭代器,然后就可以使用迭代工具将其输出。示例:
array=['a','b','c','d','e']
for alpha in iter(array):
print(alpha)
3)range()函数:
可以使用range()函数对两个列表进行迭代。示例:
names=['tom','john','marry','alan','nell']
ages=[22,19,23,24,20]
for i in range(len(names)):
print(names[i],'的年龄为:',ages[i])
4)zip()函数:
使用zip()函数可进行并行迭代,zip()函数把两个序列压缩在一起,返回一个元组列表。
names=['tom','john','marry','alan','nell']
ages=[22,19,23,24,20]
for name,age in zip(names,ages):
print(name,'的年龄为:',age)
5)enumerate()函数:
用enumerate()函数进行编号迭代,在提供索引的地方迭代索引值对。示例:
fruits=['apple','peach','pear','plum','grapy','litchi']
for index,fruit in enumerate(fruits):
print(fruit)
8. 跳转语句:
在使用while或for语句时,想提前中断该循环,需要跳转语句。
1)break语句:
循环语句中break表示会跳出整个循环,在嵌套循环中break表示跳出此嵌套循环。
2)continue语句:
continue语句结束当前迭代,立刻跳到循环顶端。
9. 其他语句:
1)pass语句:
类似一个占位符,什么事都不做。
2)del语句:
用来删除不再使用的对象的名称。格式:
del name
也可以作为函数使用del(name)。
3)exec语句:
用来动态创造Python代码,然后将其作为语句执行,新版本中是作为函数使用。示例:
exec("print('exec示例')")
如果程序将用户提供的内容作为代码执行,很可能会失去对代码执行的控制,有潜在危险。