Python 练习讲解 · 01 / 25

数学库函数:绝对值与取整

从输入两个数开始,熟悉导入模块、数值类型转换和常用数学函数。

要学习的知识点

取整方向按数轴理解:-3.7 向下是 -4,向上是 -3;它不是简单删除小数部分。

题目

输入两行数据:第一行是实数 x,第二行是非负整数 n。依次输出 x 的绝对值、向下取整值、向上取整值,以及 n 的平方根。

输入示例:

-3.7
9

对应程序:ex01.py。

完整代码

下面直接展示 ex01.py 的全部内容。颜色区分关键字、模块、函数、字符串和注释。

"""练习 1:输入实数 x 和非负整数 n,输出 |x|、floor(x)、ceil(x) 和 sqrt(n)。
输入:第一行 x,第二行 n。

学习说明:
- import math 载入 Python 数学工具;math.floor 向负无穷取整,ceil 向正无穷取整。
- input() 读入的是字符串,所以先保存文本,再用 float() 和 int() 转成数值。
- abs(x) 求绝对值;sqrt(n) 求平方根。注意平方根输入不能是负数。
- print() 将标签和结果一起显示,便于区分四个计算结果。
"""
import math

x_text = input()
x = float(x_text)

n_text = input()
n = int(n_text)

absolute_value = abs(x)
floor_value = math.floor(x)
ceil_value = math.ceil(x)
square_root = math.sqrt(n)

print("abs:", absolute_value)
print("floor:", floor_value)
print("ceil:", ceil_value)
print("sqrt:", square_root)

进阶写法

这版与初学版解决同一道题,写法更精炼。先读代码,再看下面的简要说明。

进阶源码文件:ex01_adv.py

"""练习 1 进阶版:使用较精炼的输入转换和函数调用。"""
import math

x = float(input())
n = int(input())

print("abs:", abs(x))
print("floor:", math.floor(x))
print("ceil:", math.ceil(x))
print("sqrt:", math.sqrt(n))

float(input()) 可以直接把输入文本转换为小数,省去单独保存文本的变量;math 函数结果直接放进 print(),适合熟悉函数嵌套后阅读。

运行结果

示例输入:

-3.7
9

程序输出:

abs: 3.7
floor: -4
ceil: -3
sqrt: 3.0

逐个认识函数

下面只列出本程序实际用到的写法;先看参数如何传入,再看返回值怎样保存或输出。

函数/写法功能与返回值注意事项
input()读取一行并返回字符串。返回文本,要计算时先转换成数值。
float(text)把数字文本转换为浮点数。无效文本会产生 ValueError。
int(text)把整数文本转换为整数。像 9.0 这样的文本不能直接用 int 转换。
abs(x)返回 x 的绝对值。内置函数,不会修改 x。
math.floor(x)返回不大于 x 的最大整数。向负无穷取整,例如 -3.7 得 -4。
math.ceil(x)返回不小于 x 的最小整数。向正无穷取整,例如 -3.7 得 -3。
math.sqrt(n)返回 n 的平方根,结果为浮点数。n 不能为负数。
print(...)把对象输出到终端;返回 None。可以同时输出标签和结果。

代码如何运行

  1. 运行到 input() 时,程序等待输入第一行;float() 将文本转换成浮点数并保存到 x。
  2. 第二次调用 input() 读取 n;int() 将文本转换为整数。
  3. 程序从上到下执行四个 print。每个 print 先算出函数结果,再将标签和结果输出。
  4. math.floor(x)、math.ceil(x)、math.sqrt(n) 通过 math. 调用数学模块中的函数。

平方根要求 n 非负;若输入负数,math.sqrt 会产生 ValueError。题目已经限定 n 为非负整数。

自己动手试一试

import math

x = float(input("请输入 x:"))
n = int(input("请输入非负整数 n:"))
print(abs(x))
print(math.floor(x), math.ceil(x))
print(math.sqrt(n))

给这段代码添加输入提示。试试 x 为 4.2、-4.2,观察取整方向;再试 n=0。