PYTHON 120道题目详解(73-75)
73.Python中的random模块可以生成哪些类型的随机数?
Python的random
模块提供了多种生成随机数的方法,这些方法可以生成不同类型的随机数。以下是一些主要的:
-
随机浮点数:
random()
: 返回0 <= n < 1之间的随机浮点数。uniform(a, b)
: 返回a <= n <= b之间的随机浮点数。
-
随机整数:
randint(a, b)
: 返回a <= n <= b之间的随机整数。randrange(start, stop[, step])
: 返回一个从range(start, stop, step)中随机选择的元素。
-
随机选择序列元素:
choice(seq)
: 从非空序列seq中随机选择一个元素。shuffle(seq)
: 就地随机排序序列seq。sample(population, k)
: 从population中随机选择k个不重复的元素,并返回一个新的列表。
-
生成随机字节:
getrandbits(k)
: 返回一个k位长的随机整数。bytes(length)
: 返回一个由随机字节组成的bytes对象。
-
设置随机种子:
seed(a=None, version=2)
: 初始化随机数生成器。如果提供了a,它将被用作随机数生成器的初始种子。如果省略了a或者为None,则将尝试从操作系统读取随机种子。
需要注意的是,由random
模块生成的随机数实际上是伪随机数,也就是说,它们是通过一个确定性算法生成的,该算法产生的数值序列在统计上看起来是随机的,但实际上在给定相同的初始种子的情况下是可以预测的。如果你需要生成加密安全的随机数,你应该使用secrets
模块。
74.Python中的decimal模块与float类型相比有什么优势?
Python中的decimal
模块与float
类型相比,主要有以下优势:
- 精确度高:
float
类型是基于二进制的浮点数表示,由于计算机底层CPU和IEEE 754标准的限制,它并不能精确表示所有的十进制小数。而decimal
模块则是基于十进制的表示,可以精确地表示和计算十进制数,避免了float
类型的精度问题。这在需要高精度计算的金融应用、科学计算等领域特别重要。 - 可控的精度:
decimal
模块允许用户指定所需的精度(即小数点后的位数),并在计算过程中保持这个精度。而float
类型的精度是固定的,无法调整。这使得decimal
模块在处理需要特定精度的计算时更加灵活。 - 舍入模式可选:
decimal
模块提供了多种舍入模式,如四舍五入、向上取整、向下取整等,用户可以根据需要选择合适的舍入模式。而float
类型则使用固定的舍入模式,无法更改。 - 适用于法律和金融计算:由于
decimal
模块的高精度和可控性,它特别适用于需要精确计算和符合法律或金融规定的场合。例如,在处理货币计算时,使用decimal
模块可以避免因精度问题而导致的计算错误或舍入误差。 - 广泛的数学函数支持:
decimal
模块提供了丰富的数学函数和操作,如加减乘除、幂运算、对数运算等,可以满足各种数学计算的需求。虽然float
类型也支持这些操作,但由于其精度限制,可能无法在某些情况下得到准确的结果。
需要注意的是,虽然decimal
模块具有上述优势,但在处理大量数据或进行高性能计算时,float
类型可能具有更高的计算效率。因此,在选择使用哪种类型时,需要根据具体的应用场景和需求进行权衡。
75.Python中如何使用字符串的format方法格式化输出?
在Python中,format
方法是一种非常灵活且强大的方式来格式化字符串。你可以使用它来插入和格式化字符串中的值。
以下是一些基本示例:
使用大括号 {}
作为占位符
s = "Hello, {}" | |
print(s.format("world")) # 输出:Hello, world |
在这个例子中,{}
是一个占位符,它会被 format
方法中的参数替换。
使用索引指定参数
s = "Hello, {0}, you have {1} new messages." | |
print(s.format("Alice", 5)) # 输出:Hello, Alice, you have 5 new messages. |
在这个例子中,{0}
和 {1}
是占位符,它们会被 format
方法中的对应索引的参数替换。
使用关键字参数
s = "Hello, {name}, you have {messages} new messages." | |
print(s.format(name="Alice", messages=5)) # 输出:Hello, Alice, you have 5 new messages. |
在这个例子中,{name}
和 {messages}
是占位符,它们会被 format
方法中的关键字参数替换。
格式化数字
你还可以使用 format
方法来格式化数字。例如,你可以指定小数点的位数,或者将数字转换为百分数等。
x = 123456.789 | |
# 指定小数点位数 | |
s = "The value is {:.2f}".format(x) | |
print(s) # 输出:The value is 123456.79 | |
# 转换为百分数 | |
s = "The value is {:.2%}".format(x/1000) | |
print(s) # 输出:The value is 12345.68% |
在这个例子中,:.2f
和 :.2%
是格式说明符,它们分别指定了小数点后的位数和百分数的格式。