Python 3内置了许多可在任何正在开发中的程序中方便使用的函数。一些函数使您能够转换数据类型,而其他函数则专用于特定类型,比如字符串。
本教程将介绍一些可用于Python 3 中的数字数据类型的内置函数。我们将详细介绍以下函数:
abs()
用于获取绝对值divmod()
同时查找商和余数pow()
将一个数提升到某个幂round()
将数字四舍五入到指定的小数点sum()
计算可迭代数据类型中项目的总和熟悉这些方法可以使您在编程时更加灵活,从而可以在决定使用哪些运算符和函数时做出明智的决策。在本教程中,我们将通过一些示例详细介绍这些函数。
内置函数abs()
将返回您传递给它的数字的绝对值。在数学中,绝对值是指数字在数轴上距离0的距离。绝对值不考虑数字相对于零的方向,这意味着负数将以正数表示。
举个例子,15
的绝对值是15
,-74
的绝对值是74
,0
的绝对值是0
。
绝对值是微积分和实分析的重要概念,但在我们思考诸如行驶距离之类的日常情况时,它也是有道理的。例如,如果我们试图到达距离我们58英里的某处,但我们实际上走了93英里,我们超过了最初的目的地。如果我们现在想要计算到达预期目的地还需要多少英里,我们将得到一个负数,但我们不能行驶负数英里。
让我们使用abs()
来解决这个问题:
miles_from_origin = 58 # 目的地距离起点的英里数
miles_travelled = 93 # 从起点到目的地的英里数(太多了)
# 计算目的地离当前位置的英里数:
miles_to_go = miles_from_origin - miles_travelled
print(miles_to_go) # 打印剩下多少英里(一个负数)
print(abs(miles_to_go)) # 使用绝对值来处理负数
-35
35
在输出中,我们看到如果我们不使用abs()
函数,在这种情况下我们有一个负数-35
。尽管我们可能处于miles_travelled
小于miles_from_origin
的位置,但包括abs()
函数可以考虑到负数的可能性。
对于负数,abs()
将返回一个正数,因为绝对值始终是正数或零。
让我们通过一个正数和零使用abs()
的例子:
print(abs(89.9))
print(abs(0))
89.9
0
我们最有可能使用abs()
的是在变量可能是正数或负数的情况下,特别是当我们仅寻找正数时。为了处理负数输入或结果,我们将使用abs()
修改返回的值为正数。
由于地板除法(返回商)和模除法(返回余数)都紧密相关,因此使用一个同时结合这两种操作的函数可能很有用。Python内置函数divmod()
结合了这两种操作,首先返回地板除法的商,然后返回余数。
由于divmod()
将使用两个数字,我们需要将两个数字传递给它。
divmod(a, b)
通过这个函数,我们基本上执行以下操作:
a // b
a % b
假设我们写了一本有80000字的书。我们的出版商可以选择每页300字或250字,我们想知道在每种情况下会有多少页。通过divmod()
,我们可以立即看到我们将有多少页,以及多少字会溢出到另一页。
words = 80000 # 书中的字数
per_page_A = 300 # 选项A,每页300字
per_page_B = 250 # 选项B,每页250字
print(divmod(words, per_page_A)) # 计算选项A
print(divmod(words, per_page_B)) # 计算选项B
(266, 200)
(320, 0)
在选项A中,我们将有266页填满文字,还剩下200个字(?页),总共267页;而在选项B中,我们将有一个整齐的320页的书。如果我们想要对环境负责,我们可以选择选项A,但如果我们想要通过一个更大的书看起来更令人印象深刻,我们可能会选择选项B。
由于divmod()
函数可以接受整数和浮点数,让我们也通过使用浮点数的例子:
a = 985.5
b = 115.25
print(divmod(a, b))
(8.0, 63.5)
在此示例中,8.0
是985.5除以115.25的地板商,63.5
是余数。
请记住,您可以使用地板除法运算符//
和模运算符%
来验证divmod()
的工作:
print(a // b)
print(a % b)
8.0
63.5
使用Python中的divmod()
函数时,我们得到的是除法发生的整数次数和余数。
在Python中,您可以使用运算符**
来将一个数提升到某个指数,或者您可以使用内置函数pow()
,它接受两个数字。
为了了解pow()
函数的工作原理,假设我们正在研究细菌,并想看看如果我们从1开始,一天结束时我们会有多少细菌。我们正在研究的特定细菌每小时翻一番,因此我们将计算2(翻一番)的总小时数(在我们的案例中为24小时)。
hours = 24
total_bacteria = pow(2, hours)
print(total_bacteria)
16777216
我们向pow()
函数传递了两个整数,并确定到这24小时结束时,我们将有超过1600万个细菌。
在数学上,如果我们想计算3的3次方,通常会这样写:
33
我们正在进行的计算是3 x 3 x 3,等于27。
要在Python中计算33,我们会键入pow(3, 3)
。
pow()
函数接受整数和浮点数,并提供了在打算将数字提升到某个幂时使用**
运算符的替代方法。
在处理具有许多小数位数的浮点数时,能够快速而方便地进行四舍五入变得很重要。内置的Python函数round()
接受两个数字,一个要四舍五入的数字,一个指定要包含的小数位数。
我们将使用该函数来获取具有超过10位小数的浮点数,并使用round()
函数将小数位数减少到4:
i = 17.34989436516001
print(round(i, 4))
17.3499
在上面的例子中,浮点数17.34989436516001
被四舍五入为17.3499
,因为我们指定小数位数应该限制为4。
还请注意,round()
函数会将数字四舍五入,因此它提供的输出不是17.3498
,而是17.3499
,因为小数后面的数字是9。任何后面跟有数字5或更大的数字都将四舍五入到下一个整数。
让我们拆分一下round()
的语法:
round(要四舍五入的数字, 小数位数)
在日常生活中,经常进行四舍五入,尤其是在处理货币时;我们不能将一分钱均匀地分给几个朋友。
让我们通过一个可以计算小费的程序示例。在这里,我们提供了一些数字,但我们可以重写程序以引入用户提供的数字。在这个例子中,去了一家餐馆的3个朋友想均分87.93美元的账单,还要加上20%的小费。
bill = 87.93 # 总账单
tip = 0.2 # 20%的小费
split = 3 # 分账人数
total = bill + (bill * tip) # 计算总账单
each_pay = total / split # 计算每个人支付的金额
print(each_pay) # 在四舍五入之前输出每个人支付的金额
print(round(each_pay, 2)) # 四舍五入数字 - 我们不能平均分分
35.172000000000004
35.17
在这个程序中,我们首先要求计算出总账单加小费除以3的结果,这将得到一个有很多小数位数的数字:35.172000000000004
。由于这个数字作为货币数字是没有意义的,我们使用round()
函数,并将小数位数限制为2,以便提供一个3个朋友实际可以使用的数字:35.17
。
如果您更喜欢将数字四舍五入为仅包含0作为小数值的数字,您可以通过在round()
函数中使用0作为第二个参数来实现:
round(345.9874590348545304636, 0)
这将计算为346.0
。
您还可以将整数传递到round()
中,而不会收到错误,以防接收到用户输入的整数而不是浮点数时。当整数作为第一个参数传递时,将返回一个整数。
sum()
函数用于计算数值复合数据类型的总和,包括列表、元组和字典。
我们可以将列表传递给sum()
函数,以便从左到右将列表中的所有项目相加:
some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
print(sum(some_floats))
49.5
这将类似地用于元组和字典:
print(sum((8, 16, 64, 512))) # 计算元组中数字的总和
print(sum({-10: 'x', -20: 'y', -30: 'z'})) # 计算字典中数字的总和
600 # 元组中数字的总和
-60 # 字典中数字的总和
sum()
函数最多可以接受2个参数,因此您可以添加一个额外的整数或浮点数作为第一个位置的参数中数字的总和:
some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
print(sum(some_floats, 0.5))
print(sum({-10: 'x', -20: 'y', -30: 'z'}, 60))
50.0
0
当不包含第二个参数时,sum()
函数默认将0添加到可迭代的复合数据类型。
本教程涵盖了在Python编程语言中使用数字数据类型的一些内置方法。