3.1 数字类型:int
, float
,
complex
Python 有几种数值类型,每种类型适合不同的任务和数据处理。我们已经提到过数据类型 int
、float
、complex
以及布尔类型 bool
,它们是整数的子类。现在我们来详细分析一下这些类型。
int
(整数):
这可能是 Python 中最常用的数值类型。整数可以是正数或负数,并且没有小数点。Python 支持任意精度,这意味着除了你的机器内存限制外,几乎没有限制你可以处理的数字大小。
float
(浮点数):
这些数字用于表示实数,可以包含小数点。Python 根据 IEEE 754 双精度标准实现浮点数,这提供了大约 15 位小数的精度。
complex
(复数):
复数有实部和虚部。两者都用浮点数表示。在 Python 中,虚部用后缀 j
或 J
表示。例如,可以这样创建复数:
complex_number = 3 + 5j
bool
(布尔值):
在 Python 中,True
和 False
是整数的特化版本,分别表现为 1 和 0。这使得它们可以在算术运算和其他数学表达式中使用。
算术运算:
Python 支持所有主要的算术运算,包括加法、减法、乘法、除法、整除、取余以及幂运算。例如:
- 加法: 3 + 2
- 减法: 5 - 2
- 乘法: 2 * 3
- 除法: 7 / 2
- 整除: 7 // 2
- 取余: 7 % 2
- 幂: 2 ** 3
类型转换:
我们已经讨论过类型转换(或称为类型强制转换)。可以使用类型转换函数将一种数字转换为另一种,例如 int()
、float()
和 complex()
。
我们之前已经介绍了一些数值类型的转换问题,其他问题将在接下来的讲座中更详细地讨论。
3.2 伪随机数
有时候程序员会遇到一些看似简单的任务:“从特定列表中挑选晚上看的随机电影”,“选择彩票中奖者”,“在晃动智能手机时随机播放歌曲列表”,“为加密消息选择随机数”。每次都会问一个非常合理的问题:如何获得这个随机数?
获得“真正的”随机数是相当困难的。甚至在计算机中内置了专门的数学协处理器,这些协处理器能够生成这样的数字,并满足“真正随机性”的所有要求。
因此程序员想出了自己的解决方案——伪随机数。伪随机数是一种序列,其中的数字乍一看似乎是随机的,但专家通过详细分析可以找到其中的特定规律。对于加密机密文件来说,这样的数字不合适,但用于模拟游戏中掷骰子就足够了。
有很多生成伪随机数序列的算法,并且几乎所有算法都通过基于前一个和一些辅助数字生成下一个随机数。
例如,以下程序将在屏幕上输出1000个不重复的数字:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
顺便说一下,我们说的是伪随机数序列。因为看着一个数字你不可能知道它是否随机。
可以通过不同的方法获得随机数:
def get_random_number():
return 4 # 这绝对是随机数(z 用骰子掷出来的),看“关于骰子的笑话”
3.3 random
库
Python 里有一个内建的random 库,你会很乐意使用它。正如你可能已经从它的名字中猜到的那样,用这个库可以生成[伪]随机数。
random
库,尽管是内建的,仍然是一个独立的库,所以在使用它之前需要导入我们的代码。通过使用关键字 import
来做到这一点。示例:
import random
random 库有很多有趣的方法,但今天我们只会介绍其中的两个:random()
方法和 randint()
方法。它们执行的任务虽然相似但不同:
random.random() 方法:
这个方法返回一个介于 0.0 和 1.0 之间的随机浮点数。数字在这个范围内均匀生成。这意味着间隔内的每个数字都有相同的选择概率。
import random
probability = random.random()
print("随机概率:", probability)
random.randint(a, b) 方法:
这个函数返回在 a
到 b
之间的随机整数(包括 a 和 b)。与 random.random()
返回的一个在0到1之间的随机浮点数不同,randint()
用于当你需要选择一个整数时。例如,random.randint(1, 10)
可以返回从 1
到 10
(包括两个端点)中的任意整数。
import random
dice_roll = random.randint(1, 6) # 模拟掷骰子
print("掷出的点数:", dice_roll)
这些是非常有用和有趣的方法,所以使用愉快。
3.4 math
库
既然我们已经进入了这个话题,那么让我再给你介绍一个有趣的库。这是 math 库。它包含了基本的数学函数和常量,比如 π 和 e。
和 random 库 一样,在使用之前你需要导入它:
import math
下面是 Python 中 math
库的主要函数和常量的表格:
函数/常量 | 描述 |
---|---|
math.pi | 常量 π,大约等于 3.14159 |
math.e | 自然对数的底数,大约等于 2.71828 |
math.sqrt(x) | 返回 x 的平方根 |
math.exp(x) | 返回 e 的 x 次幂 |
math.log(x[, base]) | 返回以 base 为底的 x 的对数,如果没有指定 base,则返回自然对数。 |
math.cos(x) | 返回 x 的余弦,x 以弧度表示 |
math.sin(x) | 返回 x 的正弦,x 以弧度表示 |
math.tan(x) | 返回 x 的正切,x 以弧度表示 |
math.ceil(x) | 向上舍入到最近的整数 |
math.floor(x) | 向下舍入到最近的整数 |
math.factorial(x) | 返回 x 的阶乘 |
即使你不太喜欢数学,也不打算在未来 10 年内使用这些功能,这里至少有三个非常实用的:
sqrt()
— 计算一个数的平方根ceil()
— 向上舍入到最近的整数floor()
— 向下舍入到最近的整数
示例:
import math
number = 9.7
rounded_up = math.ceil(number) # 向上舍入,结果是 10
rounded_down = math.floor(number) # 向下舍入,结果是 9
print("向上舍入的数:", rounded_up)
print("向下舍入的数:", rounded_down)
GO TO FULL VERSION