Python Number
Number(数字)
在编程中,我们经常需要和各种数字打交道,比如统计分数、计算距离、处理金钱等等。Python 为我们提供了简洁而强大的工具来处理这些数字,这就是我们今天要认识的 Number(数字) 数据类型
一、什么是 Python 数字(Number)?
简单来说,Number 数据类型就是用来在计算机中存储和表示数值的。就像我们在纸上写下数字一样,计算机也需要一种方式来记住这些数字,Number 就是干这个的
1.1 数字是“不变的”
一个重要的点,数字类型的值一旦确定,就不能再被改变了。这意味着如果你想给一个数字变量赋新的值,计算机实际上是重新开辟了一块新的内存空间来存储这个新值,而不是在原来的地方修改
比如:
1 | var1 = 1 # 这里创建了一个存储数字 1 的空间,并让 var1 指向它 |
1.2 创建数字
创建数字变量很容易,直接给变量赋值就行
1 | 年龄 = 25 # 这是一个整数 |
1.3 删除数字引用
如果某个数字变量我们以后不再需要了,可以使用 del 语句来删除对它的引用。这样计算机就知道这块内存可以被回收再利用了
1 | del 年龄 # 删除单个变量的引用 |
二、Python 中的数字家族成员
Python 支持四种主要的数字类型,就像一个数字家族一样,各有各的特点和用处
2.1 整数 (Int - Integer)
- 特点:不带小数点的正整数或负整数。
- 例子:
10,-200,0,987654321 - 实际生活联系:人数、年龄、书本页码等
2.2 长整数 (Long integers)
- 特点:无限大小的整数!当普通整数不够用时,就用它。在数字的最后加上一个大写或小写的 L 来表示。建议用大写 L,避免和数字
1混淆 - 例子:
12345678901234567890L,-9876543210987654321L,0L - 注意:在较新版本的 Python 3 中,普通整数
int已经可以表示任意大小的整数,所以long类型基本上被合并到int中了。但了解它对阅读旧代码有帮助
2.3 浮点数 (Floating point real values)
- 特点:带小数点的数,或者用科学计数法表示的数。
- 例子:
- 带小数点:
3.14,-0.001,100.0 - 科学计数法:
2.5e2表示2.5 x 10² = 250,1.23e-3表示1.23 x 10⁻³ = 0.00123
- 带小数点:
- 实际生活联系:身高(1.75米)、体重(62.5公斤)、圆周率(3.14159…)等等
2.4 复数 (Complex numbers)
- 特点:这个有点高级,是由实数部分和虚数部分组成的数
- 表示方法:
- 和高中数学中的学习一样。
a + bj:其中a是实部,b是虚部,j表示虚数单位(满足j² = -1)。 complex(a, b):使用内置函数complex来创建,a和b都是浮点数。
- 和高中数学中的学习一样。
- 例子:
3+4j,-0.5+2.7j,45.j,.876j,complex(2, -3)(表示 2 - 3j) - 实际生活联系:主要用于科学计算、工程领域等。初学者可以先了解一下,后续深入学习时会用到
三、数字类型之间类型转换
有时候,我们需要把一种类型的数字转换成另一种类型,比如把浮点数 3.14 变成整数 3,或者把整数 5 变成浮点数 5.0。Python 提供了方便的变身函数。
3.1 常用的类型转换函数
| 函数名 | 功能描述 |
|---|---|
int(x [, base]) |
将 x 转换为一个整数。base 是可选参数,表示 x 的进制(如 2 进制、10 进制、16 进制)。 |
long(x [, base]) |
将 x 转换为一个长整数。(在 Python 3 中已基本被 int 取代) |
float(x) |
将 x 转换为一个浮点数。 |
complex(real [, imag]) |
创建一个复数,real 是实部,imag 是虚部(可选,默认为 0)。 |
str(x) |
将对象 x 转换为字符串。(字符串我们后面会详细讲) |
repr(x) |
将对象 x 转换为一个表达式字符串,通常看起来更像 Python 代码。 |
eval(str) |
计算字符串 str 中有效的 Python 表达式,并返回计算结果(一个对象)。 |
chr(x) |
将一个整数(ASCII码)转换为对应的字符。 |
ord(x) |
将一个字符转换为对应的ASCII整数。 |
hex(x) |
将一个整数转换为一个十六进制字符串。 |
oct(x) |
将一个整数转换为一个八进制字符串。 |
3.2 转换小示例
1 | # 整数转换 |
math、cmath 模块
在 Python 中,除了我们之前学过的基本数字运算,有时候我们还需要进行更复杂的数学计算,比如开平方、求正弦值、计算圆周率等等。这些高级功能,Python 已经为我们准备好了两个强大的工具箱————**math 模块** 和 cmath 模块
一、math 模块
math 模块 就像是我们做实数数学题时的计算器,里面装满了各种常用的数学函数
1.1 如何使用 math 模块?
要使用 math 模块里的工具,第一步就是要打开这个工具箱,也就是 导入 它
1 | import math # 这行代码的意思是:把 math 这个工具箱拿过来,我们要用里面的东西了。 |
1.2 math 模块里有什么?
导入之后,我们可以用 dir(math) 命令(在 Python 交互式环境里)查看这个工具箱里具体有哪些工具(函数和常量)。
你会看到一长串名字,比如 acos, ceil, cos, e, pi, sqrt 等等。别担心,我会介绍常用的
一些常用的 math 模块函数和常量:
常量 (Constants):
math.pi: 圆周率 π (约等于 3.141592653589793)math.e: 自然常数 e (约等于 2.718281828459045)math.inf: 表示无穷大 (infinity)math.nan: 表示非数字 (Not a Number), 比如 0/0 的结果
基本运算与舍入:
math.ceil(x): 向上取整。比如math.ceil(3.2)结果是4,math.ceil(-1.5)结果是-1。math.floor(x): 向下取整。比如math.floor(3.8)结果是3,math.floor(-1.2)结果是-2。math.fabs(x): 返回x的绝对值,结果是浮点数。比如math.fabs(-5)结果是5.0。math.pow(x, y): 计算x的y次方。比如math.pow(2, 3)结果是8.0(注意结果是浮点数)。math.sqrt(x): 计算x的平方根。比如math.sqrt(16)结果是4.0。
三角函数 (Trigonometric functions): (注意:这些函数的参数是弧度制的角)
math.sin(x): 正弦函数math.cos(x): 余弦函数math.tan(x): 正切函数math.radians(x): 将角度转换为弧度。比如math.radians(180)结果是 π (约 3.1415…)。math.degrees(x): 将弧度转换为角度。比如math.degrees(math.pi)结果是180.0。
对数函数:
math.log(x): 返回x的自然对数 (以 e 为底)。math.log10(x): 返回x的常用对数 (以 10 为底)。
其他常用:
math.factorial(x): 计算x的阶乘 (x! )。比如math.factorial(5)结果是120(54321)。math.gcd(a, b): 计算a和b的最大公约数。比如math.gcd(12, 18)结果是6。
1.3 math 模块使用示例
1 | import math # 导入 math 模块 |
二、cmath 模块
cmath 模块 是 math 模块的兄弟,但它专门用来处理 复数 的运算。复数由实部和虚部组成,比如 3+4j。
2.1 如何使用 cmath 模块?
和 math 模块一样,使用前需要导入:
1 | import cmath # 导入 cmath 模块,用于复数运算 |
2.2 cmath 模块里有什么?
cmath 模块提供的函数名称和 math 模块非常相似,比如 sin, cos, sqrt 等。最大的区别是,cmath 函数的参数和返回值通常都是 复数。
你也可以用 dir(cmath) 查看它的内容。会看到很多和 math 模块相同的函数名,以及一些复数特有的,比如 phase, polar, rect, infj, nanj。
一些 cmath 模块的特点和常用函数:
常量:
cmath.e: 同 math.e (自然常数)cmath.pi: 同 math.pi (圆周率)cmath.inf: 复数的正无穷大 (实部为无穷大,虚部为 0j)cmath.infj: 虚部的正无穷大 (实部为 0.0,虚部为无穷大)cmath.nan: 复数的非数字 (实部为 nan,虚部为 0j)cmath.nanj: 虚部的非数字 (实部为 0.0,虚部为 nan)
常用函数 (与 math 类似,但处理复数):
cmath.sqrt(x): 计算x的平方根。即使x是负数,也能得到复数结果。- 例如:
cmath.sqrt(-1)的结果是1j(这就是虚数单位 i)。 - 例如:
cmath.sqrt(9)的结果是(3+0j)。
- 例如:
cmath.sin(z),cmath.cos(z),cmath.tan(z): 复数的正弦、余弦、正切。cmath.exp(z): 计算 e 的 z 次方。
复数特有函数:
cmath.phase(z): 返回复数z的相位角 (辐角),以弧度表示。cmath.polar(z): 将复数z从直角坐标形式 (a+bj) 转换为**极坐标形式 (r, phi)**,返回一个元组(模长 r, 相位角 phi)。cmath.rect(r, phi): 将复数从极坐标形式 (r, phi) 转换为**直角坐标形式 (a+bj)**。
2.3 cmath 模块使用示例
1 | import cmath # 导入 cmath 模块 |
三、两者的对比
| 特性 | math 模块 | cmath 模块 |
|---|---|---|
| 处理对象 | 主要处理实数 (int, float) | 专门处理复数 (complex) |
| 输入 | 通常接受实数输入 | 可以接受实数或复数输入 |
| 输出 | 通常返回实数 (float 或 int) | 通常返回复数 (complex) |
| 典型用途 | 日常数学计算,科学计算(实数) | 复数相关的数学运算,工程计算等 |
一些提醒
- 如果你尝试用
math.sqrt(-1)计算负数的平方根,Python 会报错!因为math模块不处理复数。这时候就该cmath.sqrt(-1)登场了 - 即使你给
cmath函数传入一个实数,它也会返回一个复数,因为虚部为0
数字函数
一、Python 基础数学函数
这些函数是我们进行日常数学计算的得力助手。记得,大部分函数需要先 import math 才能使用
| 函数名 | 描述 (返回值) | 示例 (假设已 import math) |
|---|---|---|
abs(x) |
返回数字 x 的绝对值。整数、浮点数都可以。 |
abs(-10) → 10, abs(3.14) → 3.14, abs(-2.5) → 2.5 |
math.ceil(x) |
向上取整:返回大于或等于 x 的最小整数。 |
math.ceil(4.1) → 5, math.ceil(4.9) → 5, math.ceil(-3.2) → -3 |
math.floor(x) |
向下取整:返回小于或等于 x 的最大整数。 |
math.floor(4.1) → 4, math.floor(4.9) → 4, math.floor(-3.2) → -4 |
math.fabs(x) |
返回数字 x 的绝对值,但结果一定是浮点数。 abs() 更通用。 |
math.fabs(-10) → 10.0, math.fabs(3) → 3.0 |
math.exp(x) |
返回自然常数 e 的 x 次方 (eˣ)。 | math.exp(1) → 2.718281828459045 (约等于 e), math.exp(0) → 1.0 |
math.log(x) |
返回 x 的自然对数 (以 e 为底)。 |
math.log(math.e) → 1.0, math.log(1) → 0.0 |
math.log10(x) |
返回 x 的常用对数 (以 10 为底)。 |
math.log10(10) → 1.0, math.log10(100) → 2.0, math.log10(0.1) → -1.0 |
max(x1, x2, ...) |
返回给定参数中的最大值,参数可以是多个数字。这是 Python 的内置函数,不需要 math。 |
max(1, 3, 2) → 3, max(-5, -1) → -1 |
min(x1, x2, ...) |
返回给定参数中的最小值,参数可以是多个数字。这是 Python 的内置函数,不需要 math。 |
min(1, 3, 2) → 1, min(-5, -1) → -5 |
math.modf(x) |
返回 x 的小数部分和整数部分,两部分的符号都与 x 相同,并且都是浮点数。返回一个元组 (小数部分, 整数部分)。 |
math.modf(3.14) → (0.14000000000000012, 3.0), math.modf(-2.5) → (-0.5, -2.0) |
math.pow(x, y) |
返回 x 的 y 次方 (xʸ)。结果是浮点数。 |
math.pow(2, 3) → 8.0, math.pow(10, -2) → 0.01 |
round(x [, n]) |
返回浮点数 x 的四舍五入值。如果指定 n,则表示四舍五入到小数点后第 n 位。这是 Python 的内置函数。 |
round(3.1415) → 3, round(3.1415, 2) → 3.14, round(2.5) → 2 (注意:Python 的四舍五入对 .5 的处理是向偶数靠拢) |
math.sqrt(x) |
返回数字 x 的平方根。结果是浮点数。 x 必须是非负数。 |
math.sqrt(16) → 4.0, math.sqrt(2) → 1.4142135623730951 |
小提示: abs(), max(), min(), round() 是 Python 的内置函数,可以直接使用,不需要 import math。其他以 math. 开头的则需要先导入 math 模块。
二、Python 随机数函数
随机数在游戏、模拟、密码学等方面非常有用。使用这些函数前,需要导入 random 模块:import random。
| 函数名 | 描述 | 示例 (假设已 import random) |
|---|---|---|
random.choice(seq) |
从非空序列 seq (如列表、元组、字符串) 的元素中随机挑选一个元素。 |
random.choice([1, 2, 3, 4]) → 可能是 3, random.choice("hello") → 可能是 'e', random.choice(range(10)) → 可能是 7 (从0-9选) |
random.randrange([start,] stop [, step]) |
从指定范围内,按指定基数 (step) 递增的集合中获取一个随机整数。start 可选 (默认0),step 可选 (默认1)。 |
random.randrange(10) → 0-9 间的一个随机整数, random.randrange(1, 10, 2) → 1,3,5,7,9 中随机一个 |
random.random() |
随机生成一个 [0.0, 1.0) 范围内的实数 (包含0.0,不包含1.0)。 | random.random() → 可能是 0.456789... |
random.seed([x]) |
设置随机数生成器的种子。种子相同,每次生成的随机数序列就相同。如果不设置,Python 会用系统时间等作为默认种子。用于复现随机结果。 | random.seed(10), 之后调用的随机函数结果就会固定。 |
random.shuffle(lst) |
将列表 lst 的所有元素原地随机排序 (会修改原列表)。 |
a = [1,2,3]; random.shuffle(a); print(a) → 可能是 [3,1,2] |
random.uniform(x, y) |
随机生成一个 [x, y] 范围内的实数 (包含 x 和 y,x 和 y 可以是整数或浮点数,且 x 可以大于 y)。 | random.uniform(1, 5) → 可能是 3.2, random.uniform(5, 1) → 可能是 2.8 |
示例:
1 | import random |
三、Python 三角函数
三角函数用于计算角度相关的值。所有三角函数的参数和返回值都是以弧度为单位的。使用前需导入 math 模块。
| 函数名 | 描述 | 示例 (假设已 import math) |
|---|---|---|
math.acos(x) |
返回 x 的反余弦弧度值。 x 的取值范围是 [-1, 1]。 |
math.acos(1) → 0.0 (弧度), math.acos(0) → 1.5707963267948966 (π/2 弧度,即90度) |
math.asin(x) |
返回 x 的反正弦弧度值。 x 的取值范围是 [-1, 1]。 |
math.asin(0) → 0.0, math.asin(1) → 1.5707963267948966 (π/2 弧度) |
math.atan(x) |
返回 x 的反正切弧度值。 |
math.atan(0) → 0.0, math.atan(1) → 0.7853981633974483 (π/4 弧度,即45度) |
math.atan2(y, x) |
返回给定坐标 (x, y) 对应的反正切弧度值。它能确定角度所在的象限,比 atan(y/x) 更精确。 |
math.atan2(1, 1) → 0.7853981633974483 (π/4 弧度), math.atan2(1, 0) → 1.5707963267948966 (π/2 弧度) |
math.cos(x) |
返回 x (弧度) 的余弦值。结果范围是 [-1, 1]。 |
math.cos(0) → 1.0, math.cos(math.pi) → -1.0 (π 弧度是180度) |
math.hypot(x, y) |
返回欧几里德范数,即点 (x, y) 到原点 (0,0) 的直线距离,也就是 sqrt(x² + y²)。 |
math.hypot(3, 4) → 5.0 (3-4-5直角三角形) |
math.sin(x) |
返回 x (弧度) 的正弦值。结果范围是 [-1, 1]。 |
math.sin(0) → 0.0, math.sin(math.pi/2) → 1.0 (π/2 弧度是90度) |
math.tan(x) |
返回 x (弧度) 的正切值。 |
math.tan(0) → 0.0, math.tan(math.pi/4) → 0.9999999999999999 (约等于1,π/4弧度是45度) |
math.degrees(x) |
将弧度值 x 转换为角度值。 |
math.degrees(math.pi/2) → 90.0 (π/2 弧度是90度), math.degrees(math.pi) → 180.0 |
math.radians(x) |
将角度值 x 转换为弧度值。 (180度 = π 弧度) |
math.radians(90) → 1.5707963267948966 (π/2 弧度), math.radians(360) → 6.283185307179586 (2π 弧度) |
角度与弧度转换示例:
1 | import math |
三、Python 数学常量
这些是数学中常用的重要常数,同样需要 import math 才能使用。
| 常量名 | 描述 | 示例 (假设已 import math) |
|---|---|---|
math.pi |
圆周率 π (Pi),约等于 3.141592653589793。 | print(math.pi) → 3.141592653589793 |
math.e |
自然常数 e,约等于 2.718281828459045。 | print(math.e) → 2.718281828459045 |
示例:
1 | import math |
练习
基础练习
练习 1:温度转换
编写一个程序,将用户输入的摄氏度温度转换为华氏度,或者将华氏度转换为摄氏度。
- 转换公式:
- 华氏度 = 摄氏度 × 9/5 + 32
- 摄氏度 = (华氏度 - 32) × 5/9
- 要求:
- 首先让用户选择转换方向(1: 摄氏度转华氏度, 2: 华氏度转摄氏度)。
- 然后输入相应的温度值。
- 输出转换后的温度,保留一位小数。
- 使用
input()函数获取用户输入,并进行适当的类型转换。
参考答案
1 | print("温度转换工具") |
练习 2:判断奇偶数
编写一个程序,让用户输入一个整数,然后判断它是奇数还是偶数,并输出结果。
参考答案
1 | num = int(input("请输入一个整数: ")) |
练习 3:最大公约数 (GCD)
编写一个程序,让用户输入两个正整数,计算并输出它们的最大公约数。
- 提示:可以使用 math 模块的
gcd函数,或者自己实现辗转相除法。
参考答案 (使用 math.gcd)
1 | import math |
参考答案 (辗转相除法 - 不使用 math)
1 | num1 = int(input("请输入第一个正整数: ")) |
综合练习
练习 4:简易计算器
编写一个简单的计算器程序,支持加、减、乘、除四种运算。
- 要求:
- 用户输入第一个数字。
- 用户选择运算符号 (+, -, *, /)。
- 用户输入第二个数字。
- 程序计算结果并输出。
- 考虑除法运算中除数不能为零的情况,并给出提示。
- 结果保留两位小数。
参考答案
1 | print("简易计算器 (支持 +, -, *, /)") |
练习 5:猜数字游戏
编写一个猜数字游戏。
- 规则:
- 程序随机生成一个 1 到 100 之间的整数作为答案。
- 用户有最多 7 次猜数字的机会。
- 每次猜完后,程序会提示“太大了”、“太小了”或“恭喜你猜对了!”。
- 如果猜对了或用完了次数,游戏结束。
- 提示:使用
random模块的randint(a, b)函数生成随机数。
参考答案
1 | import random |
练习 6:成绩等级评定
编写一个程序,根据学生的分数(0-100)评定等级。
- 等级划分标准:
- 90-100: A
- 80-89: B
- 70-79: C
- 60-69: D
- 0-59: F
- 分数不在 0-100 范围内:输入无效
- 要求:使用嵌套的
if-elif-else语句或链式if-elif-else语句。
参考答案
1 | score = float(input("请输入学生的分数 (0-100): ")) |
希望这些练习能帮助你更好地理解和运用 Python 的数字类型和条件语句!尝试独立完成,遇到困难再查看参考答案。编程是练出来的,多动手








