程序的工作流程一般为输入数据、处理数据、输出结果。顺序结构是一种最简单的流程控制结构,其特点是程序中的各个操作是按照它们在源代码中的排列顺序依次执行的。
Python是一种动态类型语言,用户无需事先声明变量的数据类型,变量的数据类型和值在首次赋值时被确定,在以后重新赋值时有可能发生变化。通过赋值可将数据传送到变量所对应的内存单元中,可使一个变量指向不同数据类型的对象。
在Python中,赋值语句分为简单赋值语句、复合赋值语句和多变量赋值语句。下面分别对它们加以介绍。
1.简单赋值语句
简单赋值语句用于对单个变量赋值,其一般语法格式如下:
变量=表达式
其中“=”为赋值运算符,其左侧必须是变量,右侧必须是表达式。
系统执行简单赋值语句时,首先计算右侧表达式的值并由此创建一个数据对象,然后使左侧变量指向该数据对象,此时这个表达式的值就是变量被赋的值。
请看下面的例子。通过执行赋值语句,使变量x先后指向整数对象和字符串对象,这两个数据对象分别存储在不同内存地址。
>>> x=123
>>> x
123
>>> type(x)
<class′int′>
>>> id(x)
1535147296
>>>x=″Hello″
>>> type(x)
<class′str′>
>>> id(x)
2687578061992
注意: 在交互模式下,可以直接使用表达式本身来输出表达式的值。例如,在Python命令提示符下输入变量“x”,就相当于输入函数“print(x)”。在Python中,赋值运算是没有返回值的,赋值运算只有操作结果,也就是将数据对象的引用(并不是值)赋予变量,使变量指向数据对象。例如,如果在程序中使用表达式“(x=3)+5”,将会引发SyntaxError错误。
2.复合赋值语句
复合赋值语句是利用复合赋值运算符对变量当前值进行某种运算后执行赋值操作的,变量既是运算对象又是赋值对象。一般地,如果用op表示一个需要两个运算对象的运算符,则复合赋值语句的语法格式可以表示为以下形式:
变量op=表达式
其中op可以是一个算术运算符或位运算符,它与赋值运算符(=)一起构成了复合赋值运算符。Python 提供了 12 种复合赋值运算符,包括+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、|=、^=,其中前面 7 种为算术运算的复合赋值运算符,后面 5 种为位运算的复合赋值运算符。所有复合赋值运算符的优先级均与赋值运算符相同。
与复合赋值语句功能相同的简单赋值语句如下:
变量=变量op(表达式)
例如,下面的复合赋值语句“x*=x+y”在功能上等价于简单赋值语句“x*=x*(x+y)”。
>>> x=5
>>> y=6
>>> x*=x+y
>>> x
55
3.多变量赋值语句
在Python中,可以使用赋值语句的变化形式对多个变量赋值。赋值语句有两种变化形式,即链式赋值语句和同步赋值语句。
链式赋值语句用于对多个变量赋予同一个值,其一般语法格式如下:
变量1=变量2=…=变量n=表达式
它在功能上等价于以下简单赋值语句:
变量n=表达式
…
变量1=变量2
例如,下面使用链式赋值语句对变量x、y和z赋予同一个整数的引用。
>>> x=y=z=123
>>> x
123
>>> y
123
>>> z
123
系统执行上述链式赋值语句时,将创建一个数值为10的整数对象,并将该对象的同一个引用值赋予变量x、y和z。
同步赋值语句使用不同表达式的值来分别对不同变量赋值,其一般语法格式如下:
变量1,变量2,…,变量n=表达式1,表达式2,…,表达式n
其中赋值运算符左侧变量的数目与右侧表达式的数目必须相同。同步赋值语句运行时系统首先计算右侧表达式的值,然后同时将各个表达式的值赋予左边的对应变量。
例如,下面的同步赋值语句同时为3个变量赋值。
>>> x,y,z=100,200,300
>>> x
100
>>> y
200
>>> z
300
【例2.1 】 简单赋值语句、复合赋值语句、链式赋值语句以及同步赋值语句的应用。
【程序代码】
#简单赋值语句
a=10
b=20
print(″a=″,a,″,b=″,b,sep=″″)
#复合赋值语句
a+=b
print(″执行a+=b之后,a=″,a,sep=″″)
b-=a-30
print(″执行b-=a之后,b=″,b,sep=″″)
a*=a+b
print(″执行a*=a+b之后,a=″,a,sep=″″)
a/=b+50
print(″执行a/=b+50之后,a=″,a,sep=″″)
#链式赋值语句
c=d=e=1213
print(″c=″,c,″,d=″,d,″,e=″,e,sep=″″)
#同步赋值语句
name,age,gender,major=″张三丰″,19,″男″,″计算机″
print(name,age,gender,major)
x1,x2,x3,x4,x5,x6=″Python″
print(x1,x2,x3,x4,x5,x6)
#对变量同时赋值
x,y=2,3
print(″交换之前:x=″,x,″,y=″,y,sep=″″)
#交换变量的值
x,y=y,x
print(″交换之后:x=″,x,″,y=″,y,sep=″″)
【运行结果】
a=10,b=20
执行a+=b之后,a=30
执行b-=a之后,b=20
执行a*=a+b之后,a=1500
执行a/=b+50之后,a=21.428571428571427
c=1213,d=1213,e=1213
张三丰 19 男 计算机
P y t h o n
交换之前:x=2,y=3
交换之后:x=3,y=2
为了让用户通过程序与计算机进行交互,程序通常应具有数据的输入/输出功能。在Python程序中,可以使用键盘输入数据,也可以从文件中读取数据,然后由程序对输入的数据进行处理,处理结果可以输出到屏幕上,也可以保存到文件中。在实际应用中,最常见的情形是从键盘输入数据并通过屏幕输出数据,这是标准的控制台输入/输出模式。
1.标准输入
在Python中,标准输入可以通过内置函数input()来实现,其调用格式如下:
input([提示字符串])
其中提示字符串为可选项,用于提示用户输入数据。
input()函数首先令系统显示提示字符串,然后等待用户通过键盘输入数据,直到用户按〈Enter〉键,系统才将输入的数据以字符串形式(不包括结尾的换行符)返回。
在编程中,编程者通常将input()函数的返回值保存到变量中,以备后用。例如:
name=input(″请输入您的姓名:″)
如果需要将输入的字符串转换为其他数据类型,调用相应的类型转换函数即可。例如:
age=int(input(″请输入您的年龄:″))
【例2.2 】 利用标准输入/输出编写一个简单的成绩录入程序。
【算法分析】
Python的内置函数eval()用于接收一个字符串参数并将该参数作为表达式进行计算,其返回值就是被计算的表达式的值。当通过同步赋值语句同时输入姓名和性别时,需要对输入的姓名和所对应的性别分别加上引号,否则会出现NameError错误,因为未加引号时,Python解释器会将所输入的姓名和性别视为一个未定义变量。
【程序代码】
name,gender,age=eval(input(″请输入姓名、性别和年龄:″))
chn,math,eng=eval(input((″请输入语文、数学和英语成绩:″)))
avg=(chn+math+eng)/3
print(″姓名:″,name,″;性别:″,gender,″;年龄:″,age,sep=″″)
print(″语文:″,chn,″;数学:″,math,″;英语:″,eng,sep=″″)
print(″平均成绩:″,avg,sep=″″)
【运行结果】
2.标准输出
在Python中,标准输出可以通过两种方式来实现,一种方式是在交互模式下使用表达式语句(即表达式本身)来输出表达式的值,但这种方式不能在脚本模式下使用;另一种方式是使用内置print()函数,这种方式在交互模式和脚本模式下均可使用。
内置函数print()可用于输出多个输出项的值,其调用格式如下:
print([输出项1],[输出项2,…,输出项n] [,sep=分隔符] [,end=结束符])
其中输出项之间用逗号分隔;sep参数用于指定各输出项之间的分隔符,默认值为空格;end参数用于指定结束符,默认值为按〈Enter〉键换行符。print()函数从左到右依次计算各个输出项的值,并将计算结果显示在屏幕的同一行。
例如,下面的语句用于显示用户的姓名和年龄:
print(″姓名:″,name,″;年龄:″,age,sep=″″)
3.格式化输出
在Python中,可以使用字符串格式化运算符%将输出项格式化,然后调用print()函数,按照一定格式输出数据,具体调用格式如下:
print(格式字符串%(输出项1,…,输出项n))
其中格式字符串由普通字符和格式说明符组成,普通字符按原样输出,格式说明符则用于指定对应输出项的输出格式。格式说明符以百分号(%)开头,后面跟格式标志符。例如,“%d”表示十进制整数,“%s”表示字符串等。更多的格式说明符详见表2-1。
表2-1 常用格式说明符
当输出单个输出项时,将输出项放在字符串格式化运算符%后面即可。例如:
print(″姓名:%s″%″李明″)
在输出结果中,格式说明符%s将被字符串“李明”替换。
如果有多个输出项,则应在字符串格式化运算符%后面添加一对圆括号,并将这些输出项放在圆括号内,输出项之间用半角逗号分隔。例如:
print(″姓名:%s;年龄:%d″%(″李明″,19))
为了进一步规范输出格式,还可以在格式说明符中使用表2-2中列出的格式化辅助指令。
表2-2 格式化辅助指令
【例2.3 】 利用字符串格式化运算符实现数据的格式化输出。
【程序代码】
#输出编码对应的字符
print(″%c%c%c%c%c%c%c%c%c%c″%(80,121,116,104,111,110,31243,24207,35774,35745))
#输出字符串(指定输出宽度)
print(″语言:%8s;版本号:%8s″%(″Python″,″3.6.4″))
#输出不同数制下的同一个整数
x=123456789
print(″十进制数:%d;八进制数:%#o;十六进制数:%#x″%(x,x,x))
f=123.456789
#输出小数形式表示的浮点数
print(″%f;%12.3f;%-12.3f;%012.3f″%(f,f,f,f))
#输出科学计数法表示的浮点数
print(″%e;%12.3e;%-12.3e;%012.3e″%(f,f,f,f))
【运行结果】
Python程序设计
语言:Python;版本号:3.6.4
十进制数:123456789;八进制数:0o726746425;十六进制数:0x75bcd15
123.456789;123.457;123.457;00000123.457
1.234568e+02;1.235e+02;1.235e+02;0001.235e+02
在Python中,还可以使用str.format()函数来实现输出格式化,这是实现字符串格式化的首选方案。str.format()函数将格式字符串作为一个模板来使用,通过传入参数对输出项进行格式化,具体调用格式如下:
str.format(输出项1,输出项2,输出项n)
其中str.(格式字符串)由普通字符和格式说明符组成。普通字符按原样输出,格式说明符用于设置对应输出项的转换格式。程序运行时,格式字符串中的每个格式说明符将被format()中的相应参数替换。格式说明符使用花括号括起来,其一般形式如下:
{[序号或键名]:格式控制符}
其中“序号”为可选项,用于指定要格式化的输出项位置,0表示第一个输出项,1表示第二个输出项,依此类推。若“序号”全部省略,则按自然顺序输出。“键名”也是可选项,它是一个标识符,对应于输出项的名字或字典(字典的概念详见本书4.4小节)的键值。
格式控制符以半角冒号“:”开头,常用的格式控制符详见表2-3。
表2-3 常用格式控制符
在格式字符串中,可以通过“m.n”形式指定输出宽度和小数部分的保留位数,其中数字m表示输出宽度,数字n表示小数部分的保留位数。在格式字符串中,还可以指定填充字符、对齐方式(“<”表示左对齐,“<”表示右对齐,“^”表示居中对齐,“=”表示填充字符位于正负号与数字之间)以及正负号(+、-)。
【例2.4 】 利用str.format()函数实现数据的格式化输出。
【程序代码】
#输出编码对应的字符,序号全部省略
print(″{:c}{:c}{:c}{:c}{:c}{:c}{:c}{:c}{:c}{:c}″.format(80,121,116,104,111,110,31243,24207,35774,35745))
#输出字符串,指定了输出宽度
print(″语言:{0:8s};版本号:{1:8s}″.format(″Python″,″3.6.4″))
x=123456789
#输出不同数制下的同一个整数
print(″二进制数:{0:b};八进制数:{1:#o};十进制数:{2:d};十六进制数:{3:#X}″.format(x,x,x,x))
f=123.456789
#输出小数形式表示的浮点数,指定对齐方式和填充字符
print(″{0:f};{1:<12.3f};{2:^12.3f};{3:=+012.3f}″.format(f,f,f,f))
#输出科学计数法表示的浮点数,指定对齐方式和填充字符
print(″{0:e};{1:<12.3e};{2:^12.3e};{3:=+012.3}e″.format(f,f,f,f))
name,age=″李明″,19
#在格式说明符中使用键名
print(″姓名:{param1:s};年龄:{param2:d}″.format(param1=name,param2=age))
【运行结果】
Python程序设计
语言:Python;版本号:3.6.4
二进制数:111010110111100110100010101;八进制数:0o726746425;十进制数:123456789;十六进制数:0X75BCD15
123.456789;123.457;123.457;+0000123.457
1.234568e+02;1.235e+02;1.235e+02;+0001.23e+02e
姓名:李明;年龄:19