Python输入输出

在上一节 数学运算 中,我们学会了在 Python 终端计算圆的面积,如下:

1
2
3
>>> pi = 3.14159
>>> pi * 1.5 ** 2
7.065

但是,这样的方式多用于临时计算,不够灵活。 那么,我们能否编写一个完整的程序,根据用户输入的圆半径,计算圆面积并输出到屏幕呢?

首先,我们来对程序进行分解:

  1. 获取用户输入内容,即圆的半径;
  2. 根据输入内容,计算圆的面积;
  3. 输出相应的计算结果;

现在,让我们逐一破解,完成这个程序。

输入

Python 提供了 input 函数,用于获取用户输入的内容,以输入圆半径为例:

1
>>> radius = input('请输入圆的半径:')

注意到,提示语 请输入圆的半径: 作为参数传给了 input 函数。 用户输入后,input 函数返回输入内容,被我们保存到变量 radius

这个语句执行后,Python 先输出提示语,并等待用户输入:

1
2
>>> radius = input('请输入圆的半径:')
请输入圆的半径:

假设圆半径为 2,我们输入 2,并按回车:

1
2
>>> radius = input('请输入圆的半径:')
请输入圆的半径:2

按下回车后,我们输入的内容便保存在变量 radius 了:

1
2
>>> radius
'2'

我们再接再厉,用 radius 变量计算圆的面积:

1
2
3
4
>>> 3.14159 * radius ** 2
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

咦,居然报错了?原来,input 函数返回的数据是 字符串类型 ,不能参与数学运算。

数据类型

Python 中,以单引号 ' 或双引号 " 括起来的数据属于字符串类型:

1
2
>>> radius
'2'

字符串类型一般用来保存文本,不能直接参与数学运算。 如果要参与数学运算,需要将字符串类型转换成 数值类型Python 中的数值类型分为以下几种:

  • 整数 ( int )
  • 浮点数 ( float )
  • 布尔值 ( bool )
  • 复数 ( complex )

不同的数据类型,底层存储结构也不尽相同。 至于选哪种类型,得视具体场景而定。 如果圆半径只有整数,选用 int 即可; 如果圆半径需要支持小数,那就必须选择 float

我们选择浮点类型,以支持小数运算。 调用 float 函数将 raius 变量转换成浮点数:

1
>>> radius = float(radius)

radius 变量作为参数传给 float 函数,完成类型转换,并返回一个浮点数,重新赋值给 radius 变量。 现在,radius 变量已经变成一个浮点数了:

1
2
>>> radius
2.0

如果你不确定变量类型,可调用 type 函数进行检查:

1
2
>>> type(radius)
<class 'float'>

接下来,再计算圆的面积,看结果如何:

1
2
>>> 3.14159 * radius ** 2
12.56636

计算正确!

除了字符串和数值类型,Python 还内置了许多其他数据类型,例如:

  • 列表 ( list )
  • 元组 ( tuple )
  • 集合 ( set )
  • 字典 ( dict )
  • etc

现在先别急,在以后的教程中,我们会逐一接触并掌握它们。

我们趁热打铁,将上述代码整理成一个完整的程序,并保存到文件 circle-area.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# -*- encoding=utf8 -*-

# 提示用户输入半径,获取用户输入内容,并保存到变量 radius
radius = input('请输入圆的半径:')

# 将获取的圆半径从字符串转成浮点数,并更新到变量 radius
radius = float(radius)

# 计算圆的面积
area = 3.14159 * radius ** 2

# 将计算结果输出到屏幕
print(area)

现在打开命令行,执行程序:

1
2
3
$ python circle-area.py
请输入圆的半径:1.5
7.0685775

如我们所料,屏幕上输出了计算结果。

输出

我们使用 print 函数,将计算结果输出到屏幕。 但是只输出一个数字,未免显得太单调。 有什么办法可以使输出内容更丰富吗? 例如,输出 半径为1.5的圆面积是:7.0685775

借助字符串格式化,我们可以将变量以指定格式插入到字符串中。例子如下:

1
2
3
>>> pi = 3.14159
>>> '圆周率是:{}'.format(pi)
'圆周率是:3.14159'

'圆周率是:{}' 是待格式化字符串,其中 {}占位符 ,代表变量插入位置。 format 是字符串格式化方法,为字符串占位符指定替换值。 例子中,我们用变量 pi 的值替换原字符串中的占位符,因此最终的返回结果是 '圆周率是:3.14159'

如果圆周率只需保留小数点后两位,还可以在占位符上下功夫:

1
2
3
>>> pi = 3.14159
>>> '圆周率是:{:.2f}'.format(pi)
'圆周率是:3.14'

占位符 {:.2f} 冒号后是格式描述 .2ff 代表 定点表示法.2 代表小数点后两位。 当然了,待格式化字符串可以包含多个占位符,用多个值进行替换:

1
2
3
4
>>> pi = 3.14159
>>> e = 2.71828
>>> '圆周率是:{:.2f},自然对数是:{:.2f}'.format(pi, e)
'圆周率是:3.14,自然对数是:2.72'

这样一来,我们可以将 circle-area.py 进一步修改成这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# -*- encoding=utf8 -*-

# 提示用户输入半径,获取用户输入内容,并保存到变量 radius
radius = input('请输入圆的半径:')

# 将获取的圆半径从字符串转成浮点数,并更新到变量 radius
radius = float(radius)

# 计算圆的面积
area = 3.14159 * radius ** 2

# 将计算结果输出到屏幕
print('半径为{}的圆面积是:{:.2f}'.format(radius, area))

注意到,圆面积输出只保留小数点后两位。 再次运行程序,结果输出已经像模像样了:

1
2
3
$ python circle-area.py
请输入圆的半径:1.5
半径为1.5的圆面积是:7.07

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: