
2.5 基本输入和输出
数据的输入与输出操作是计算机最基本的操作。本节主要讲述基本的输入与输出,基本输入是指从键盘上输入数据的操作,基本输出是指在屏幕上显示输出结果的操作。
常用的输入与输出设备有很多,比如摄像机、扫描仪、话筒、键盘等都是输入设备,然后经过计算机解码后在显示器或打印机等终端进行输出显示。
通常,一个程序都会有输入/输出,Python可以用input函数进行输入,print函数进行输出。
2.5.1 基于input函数输入
输入语句可以在程序运行时从输入设备获得数据。标准输入设备就是键盘。在Python中可以通过input函数取键盘输入数据。一般格式为:

input函数首先输出提示字符串,然后等待用户键盘输入,直到用户按〈Enter〉键结束,函数最后返回用户输入的字符串(不包括最后的回车符),保存于变量中,系统继续执行input函数后面的语句。例如:

系统会弹出字符串“请输入您的专业:”,等待用户输入,用户输入相应的内容并按〈Enter〉键,输入内容将保存到name变量中。
在Python 3.x中,无论输入的是数字还是字符都将被作为字符串读取。如果想要接收数值,需要把接收到的字符串进行类型转换。例如,想要接收整型的数字并保存到变量num中,可以使用下面的代码。

因此,如果需要将输入的字符串转换为其他类型(如整型、浮点型等),调用对应的转换函数即可。
【例2-10】 根据输入的年份,计算年龄大小。
实现根据输入的年份(4位数字,如1981),计算目前的年龄,程序中使用input函数输入年份,使用datetime模块获取当前年份,然后用获取的年份减去输入的年份,就是计算的年龄。

运行程序,提示输入出生年份,其中出生年份必须是4位,如1981。输入年份,如输入1978,按﹤Enter﹥键,运行结果为:

在Python中,其输入主要有以下特点。
1)当程序执行到input,等待用户输入,输入完成之后才继续向下执行。
2)在Python中,input接收用户输入后,一般存储到变量,方便使用。
3)在Python中,input会把接收到的任意用户输入的数据都当作字符串处理。
2.5.2 基于print函数输出
1.print函数的基本语法
在Python中,使用内置的print函数可以将结果输出到IDLE或者标准控制台上。一般格式为:

通过print函数可以将多个输出值转换为字符串并且输出,这些值之间以sep分隔,最后以end结束。sep默认为空格,end默认为换行。其中,输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将计算结果输出。
在Python中,默认情况下,一条print语句输出后会自动换行,如果想要一次输出多个内容,而且不换行,可以将要输出的内容使用英文半角的逗号分隔。
【例2-11】 输出语句示例。

运行结果:

上述两行输出是两个print函数执行的结果。输出结果“abc 123”,是由本例代码第1条语句print(‘abc’,123)输出的。可以看出,两个输出项之间自动添加了空格,这是因为print函数的参数sep默认值为空格。如果希望输出项之间是逗号,则可以采用第二种输出方式。
2.print函数的格式化输出
Python的print函数中还可以使用字符串格式化控制输出形式。
在Python中,要实现格式化字符串,可以使用“%”操作符。语法格式如下。

参数说明如下。
●-:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号。
●+:可选参数,用于指定右对齐,正数前方加正号,负数前方加负号。
● 0:可选参数,表示右对齐,正数前方无符号,负数前方加负号,用0填充空白处(一般与m参数一起使用)。
● m:可选参数,表示占有宽度。
● n:可选参数,表示小数点后保留的位数。
● 格式化字符:用于指定类型,常见的格式化字符如表2-2所示。
● exp:要转换的项。如果要指定的项有多个,需要通过元组的形式进行指定,但不能使用列表。
在实际开发中,数值类型有多种显示方式,比如货币形式、百分比形式等,使用format方法可以将数值格式化为不同的形式。
表2-2 常见格式化字符

例如,语句:print('我的名字是%s'%'李二毛')
执行后的输出结果为:“我的名字是李二毛”,即%s的位置使用“李二毛”代替。
如果需要在字符串中通过格式化字符输出多个值,则将每个对应值存放在一对圆括号()中,值与值之间使用英文逗号隔开。例如:

输出结果:A monkey has 4 legs
表2-3中列出了一些格式化辅助指令,可进一步规范输出的格式。
表2-3 格式化辅助指令

(续)

m.n格式常用于浮点数格式、科学记数法格式以及字符串格式的输出。对于前两种格式而言,%m.nf、%m.nx或%m.nX指输出的总宽度为m(可以省略),小数点后面保留n位(四舍五入)。如果变量值的总宽度超出m,则按实际输出。%m.ns指输出字符串的总宽度为m,输出前n个字符,前面补m-n个空格。
Python 3还支持用格式化字符串的函数str.format进行字符串格式化。该函数在形式上相当于通过{}来代替%,但功能更加强大。
format函数还可以用接收参数的方式对字符串进行格式化,参数位置可以不按显示顺序,参数也可以不用或者用多次。
【例2-12】 格式化输出字符串示例。

运行结果:

3.f-strings格式化输出
f-strings是Python 3.6开始加入标准库的格式化输出新的写法,这个格式化输出比之前的%s或者format效率高并且更加简化,非常好用。
【例2-13】 f-strings格式化输出示例。

运行结果:

【例2-14】 结合表达式的f-strings格式化输出示例。


运行结果:

字符串对象的format方法的详细使用将会在后续章节讲述。
4.print函数输出到文件
使用print函数,不但可以将内容输出到屏幕,还可以输出到指定文件。
【例2-15】 将一个字符串“生活就像一盒巧克力 你永远不知道下一颗是什么味道。”输出到“c:\pythonpractice\data.txt”中。

执行上面的代码后,将在“c:\pythonpractice\”目录下生成一个名称为“data.txt”的文件,该文件的内容为文字“生活就像一盒巧克力 你永远不知道下一颗是什么味道。”,如图2-8所示。

图2-8 data.txt文件的内容
5.输出ASCII码字符
在编程时,输入的符号可以使用ASCII码的形式输入。ASCII码是美国信息司信息交换标准码,最早只有127个字母被编码到计算机里,也就是英文大小写字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母a的编码是97。通过ASCII码表示字符,需要使用chr函数进行转换。例如:print(chr(65)),显示内容为A。如果字符显示ASCII值,需要使用ord函数进行转换。例如:print((‘a’)),显示内容为97。
【例2-16】 编写程序,实现在键盘输入相应字母、数字或符号,输出其ASCII的状态值,即十进制的数字值。如:输入B,则输出显示为66:输入*,则输出显示为42。

运行结果:
