Python程序设计基础教程(慕课版)
上QQ阅读APP看书,第一时间看更新

2.4 输入与输出

输入与输出

有些时候程序会与用户交互。例如,希望获取用户的输入内容,并向用户打印出返回的结果。可以分别通过input()函数与print()函数来实现这一需求。

2.4.1 input()函数

在程序的执行过程中向程序输入数据的过程称为输入操作,在Python中使用input()函数来实现该功能。例如,编写一个程序让计算机能够记住用户的名字,就会用input()函数提示用户输入他的名字,并把用户的输入存放在变量中,程序如下。

name=input("请输入您的名字:")

上述代码的作用是提示用户从键盘上输入自己的姓名,input()函数后面括号中的内容是留给用户的提示信息,它是一个字符串,所以请用双引号把它括起来,在执行input()函数时,提示信息将会打印在屏幕上,然后程序将会暂停,等待用户的输入,直到用户输入了自己的名字并按下回车键,程序才会继续运行,input()函数会获得用户的输入并将其通过赋值号存放到变量name中。

需要提醒的是,使用input()函数获得的数据一律都是以字符串类型存放的,哪怕用户输入的是一个数字,这个数字也是以字符串的形式存放在计算机中。例如,输入以下程序代码。

# 例 2.3 从键盘上接收用户输入,并进行计算 
num=input(" 请输入一个数字:") 
x=100+float(num) 
print(x) 

这个程序的功能是获取用户从键盘上输入的数字,然后加上100。当程序运行到input()函数时,暂停下来,并提示用户输入一个数字,输入完毕后,程序继续运行,并在下一行中使用float()函数将用户输入的一个数字从字符串类型转换成实数类型,然后和100相加。读者可以试着把float函数去掉,并运行程序,观察Python的报错信息。

2.4.2 print()函数

与输入的功能相似,将程序中的数据输出到屏幕或者是打印机上的工作,称为输出,在Python中,可以使用print()函数来完成向屏幕输出的功能。如果想将2.4.1节中获取的关于姓名的信息打印在屏幕上,可以使用如下语句。

>>>print("你好!"+name)

这段代码的作用是将字符串“你好”和变量name中的内容连接在一起,然后通过print()函数将连接后的字符串输出到屏幕上。

还可以在使用print()函数时指定输出对象间的分隔符、结束标志符和输出文件。如果缺省这些参数,则分隔符是空格,结束标志符是换行符,输出目标是显示器。如果要加入自定义的分隔符和结束标志,则可以使用如下格式。

>>> print(1,2,3,sep="***",end='\n') 
1***2***3 

2.4.3 格式化字符串

格式化字符串

在处理各种数据的过程中,经常会把一系列的数据组合到一个包含各种信息的字符串中,此时,需要使用format,format不仅可以将各类型数据组合到字符串中,还可以对数据进行格式化。

将以下内容保存为str_format.py文件,并运行程序观察运行结果。

# 例 2.4 利用format 进行字符串的格式化操作 
age = 20 
name = 'Swaroop' 
print('{0} was {1} years old when he wrote this book'.format(name, age)) 
print('Why is {0} playing with that python?'.format(name)) 

输出:

Swaroop was 20 years old when he wrote this book 
Why is Swaroop playing with that python? 

可以指定一个字符串使用某些特定的格式(Specification),在调用format方法的过程中,将使用预先定义的格式来修改数据输出时的样式。

请注意在Python中使用序号0表示第一个参数,这意味着索引中的第一位是0,第二位是1,依此类推,所以,此处{0}对应的是变量name,它是该格式化方法中的第一个参数。与之类似,第二个格式{1}对应的是变量age,它是格式化方法中的第二个参数。

虽然,也可以通过字符串的连接运算来达到相同的效果。

name + 'is' +str(age) + 'years old' 

但这种实现方式看起来并不简单,而且非常容易出错。其次,我们更希望将其他数据类型转换至字符串的工作由format方法自动完成,而不是如这般需要使用特定的函数明确转换至字符串。再次,当使用format方法时,可以直接改动文字而不必与变量打交道。

同时该表示参数序号的数字只是一个可选选项,所以同样可以写成以下形式。

# 例 2.5 格式字符串中的参数序号可以省略 
age = 20 
name = 'Swaroop' 
print('{} was {} years old when he wrote this book'.format(name, age)) 
print('Why is {} playing with that python?'.format(name))

这样做同样能得到与前面程序相同的输出结果。

python中format方法所做的事情便是将每个参数值替换至格式所在的位置。这其中可以有更详细的格式。例如:

# 例 2.6 常见的格式化字符串用法举例 
# 对于浮点数 '0.333' 保留小数点(.) 后三位 
print('{0:.3f}'.format(1.0/3)) 
# 定义'hello'字符串长度为 11,使用下画线填充文本,并保持文字处于中间位置 
print('{0:_^11}'.format('hello')) 
# 基于关键词输出 'Swaroop wrote A Byte of Python'   
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python')) 

输出:

0.333 
___hello___ 
Swaroop wrote A Byte of Python 

由于正在讨论格式问题,所以会发现print总是会以一个不可见的“换行”字符(\n)结尾,因此重复调用print将会在相互独立的一行中分别打印。如果不希望输出的字符串以默认的换行方式结尾,可以指定参数end的内容为输出的字符串加上其他结尾字符。例如:

print('a', end='') 
print('b', end='')

输出结果如下。

ab

或者通过end指定以空格结尾。

print('a', end=' ') 
print('b', end=' ') 
print('c')

输出结果如下。

a b c

2.4.4 续行符

当编写的程序越来越复杂时,有时可能会在一行中输入一条很长的语句,为了保证程序的美观和易读,可以使用续行符\将这条很长的语句分别摆放在连续的多行中。例如:

>>>print("我是一个程序员,\ 
我刚开始学习Python") 

Python在运行这两条语句时,会把它们连接在一起当作一条完整的语句来执行,效果如下。

我是一个程序员,我刚开始学习Python