用于处理数字的 Python 3 内置函数

简介

Python3附带了许多内置函数,您可以在您正在使用的任何程序中轻松使用这些函数。一些函数使您能够转换数据types,,而其他函数则特定于特定类型,如strings.

本教程将介绍一些可用于Python3中的数字数据类型的内置函数。我们将介绍以下函数:

  • abs()表示绝对值
  • divmod()同时求商和余数
  • pow()将数字提升到一定的幂
  • round()将数字四舍五入到某个小数点
  • sum()计算可迭代数据类型中项的总和

熟悉这些方法可以为您在编程时提供更大的灵活性,以便您在决定使用什么运算符和函数时做出明智的决定。在本教程中,我们将通过示例来介绍其中的一些函数。

前提条件

您应该安装了Python3,并在您的计算机或服务器上设置了编程环境。如果您尚未设置编程环境,您可以参考本地编程environment]的安装和设置指南,或参考适用于您的操作系统(Ubuntu、CentOS、Debian、等)

绝对值

内置函数abs()将返回您传递给它的数字的绝对值。在数学中,绝对值 是指一个数字从0到数字线上的距离。绝对值不考虑数字从零开始的方向,这意味着负数将用正数表示。

举个例子,15的绝对值是15-74的绝对值是740的绝对值是0

绝对值对于微积分和实数分析来说是一个重要的概念,但当我们考虑像旅行距离这样的日常情况时,它也是有意义的。例如,如果我们试图到达58英里以外的地方,但我们却旅行了93英里,那么我们就超过了原来的目的地。如果我们现在想要计算还有多少英里可以到达预定的目的地,我们最终会得到一个负数,但我们不能旅行负数。

让我们使用abs()来解决这个问题:

<$>[信息] 信息: 要学习本教程中的示例代码,请运行python3命令,在您的本地系统上打开一个Python交互外壳。然后,您可以通过在>提示符后添加它们来复制、粘贴或编辑示例。 <$>

1[label destination_miles.py]
2miles_from_origin = 58	# Miles destination is from origin
3miles_travelled = 93	# Miles travelled from origin to destination (too many)
4
5# Calculate how many miles destination is from current location:
6miles_to_go = miles_from_origin - miles_travelled	
7
8print(miles_to_go)		# Print how many miles left (a negative number)
9print(abs(miles_to_go))	# Use absolute value to account for negative number
1[secondary_label Output]
2-35
335

在输出中,我们看到如果不使用abs()函数,在本例中我们有一个负数-35。尽管我们所处的位置可能是Miles_Travelled小于Miles_From_Origin,但包括abs()函数都会考虑负数的可能性。

对于负数,abs()将返回正数,因为绝对值总是正数或零。

让我们使用一个正数和零的abs()

1print(abs(89.9))
2print(abs(0))
1[secondary_label Output]
289.9
30

在仅查找正数的实例中,我们最有可能使用变量为正数或负数的abs()。为了说明负的输入或结果,我们将使用abs()修改返回的正数。

求一个函数的商和余数

因为底除法(返回商)和模除法(返回余数)都是密切相关的,所以使用同时组合这两种运算的函数会很有用。

Python内置函数divmod()将两者结合在一起,首先返回地板除法得到的商,然后返回余数。

因为divmod()将处理两个数字,所以我们需要向它传递两个数字。

1divmod(a,b)

使用此功能,我们基本上执行以下操作:

1a // b
2a & b

假设我们写了一本8万字的书。对于我们的出版商,我们可以选择每页300或250字,我们希望了解每种情况下我们将有多少页。使用divmod(),我们可以立即看到我们将有多少页,以及有多少字将溢出到另一页上。

1[label words_per_page.py]
2words = 80000		# How many words in our book
3per_page_A = 300	# Option A, 300 words per page
4per_page_B = 250	# Option B, 25- words per page
5
6print(divmod(words,per_page_A))	# Calculate Option A
7print(divmod(words,per_page_B))	# Calculate Option B
1[secondary_label Output]
2(266, 200)
3(320, 0)

在选项A中,我们将有266页填满单词,剩下200个单词(一页),总计267页,而在选项B中,我们将有一本320页的书。如果我们想要环保,我们可以选择选项A,但如果我们想要一本更大尺寸的书看起来更令人印象深刻,我们可能会选择选项B。

因为函数divmod()可以接受整数和浮点数,让我们也来看看一个使用浮点数的例子:

1a = 985.5
2b = 115.25
3
4print(divmod(a,b))
1[secondary_label Output]
2(8.0, 63.5)

在本例中,8.0是985.5除以115.25的底商,63.5是余数。

请记住,您可以使用除法运算符//和模运算符%来验证divmod()做了什么:

1print(a//b)
2print(a%b)
1[secondary_label Output]
28.0
363.5

在使用Python中的divmod()函数时。我们得到除法发生的整数次,并返回剩余的次数。

电源

在Python语言中,您可以使用operator**将一个数字乘以一个指数,也可以使用内置的pow()函数,该函数接受两个数字。

为了了解`pow()‘函数是如何工作的,让我们假设我们正在研究细菌,并且想要看看如果我们从1开始,一天结束时我们会有多少细菌。我们正在处理的特定细菌每小时翻一番,所以我们将计算2(加倍)到总小时数的幂(在我们的例子中是24)。

1[label bacteria.py]
2hours = 24
3total_bacteria = pow(2,hours)
4
5print(total_bacteria)
1[secondary_label Output]
216777216

我们将两个整数传递给`pow()‘函数,并确定到这24小时结束时,我们将有超过1600万个细菌。

在数学中,如果我们想要计算3的幂,一般是这样写的:

3&sup3;

我们要完成的计算是3x3x3,等于27。

要在Python中计算3&sup3;,我们需要输入pow(3,3)

函数pow()将接受整数和浮点数,并且当您打算将数字提升到某个幂时,它提供了使用**运算符的替代方案。

舍入数字

在处理有很多小数位的浮点数时,能够快速、轻松地对数字进行舍入变得很重要。内置的Python函数round()接受两个数字,一个要四舍五入,另一个指定要包括的小数位数。

我们将使用函数获取小数位数超过10位的浮点数,并使用round()函数将小数位数减少到4位:

1i = 17.34989436516001
2print(round(i,4))
1[secondary_label Output]
217.3499

在上面的例子中,浮点数17.34989436516001四舍五入为17.3499,因为我们已经指定小数位数限制为4位。

另请注意,round()函数将数字向上舍入,因此它没有提供17.3498作为输出,而是提供了17.3499,因为小数8后面的数字是数字9。任何后面跟数字5或更大的数字都将向上舍入到下一个整数。

让我们来分析一下round()的语法:

1round(number to round,number of decimal places)

在日常生活中,舍入数字经常发生,特别是在与金钱打交道的时候;我们不能在几个朋友之间平均分配一分钱。

让我们来看一个可以计算小费的程序的例子。这里我们将提供数字,但我们可以重写程序以引入用户提供的数字。在这个例子中,三个朋友去了一家餐馆,他们想平均分摊87.93美元的账单,并增加20%的小费。

 1[label bill_split.py]
 2bill = 87.93				# Total bill
 3tip = 0.2					# 20% tip
 4split = 3					# Number of people splitting the bill
 5
 6total = bill + (bill * tip)	# Calculate the total bill
 7
 8each_pay = total / split	# Calculate what each person pays
 9
10print(each_pay)				# What each person pays before rounded
11
12print(round(each_pay,2))	# Round the number — we can’t split pennies
1[secondary_label Output]
235.172000000000004
335.17

在这个程序中,我们在计算总账单加上小费除以3之后,首先要求输出数字,结果是一个有很多小数位的数字:35.172000000000004。由于这个数字作为货币数字没有意义,我们使用round()函数并将小数位限制为2,这样我们就可以提供3个朋友实际可以使用的输出:35.17

如果您希望舍入到一个十进制值仅为0的数字,则可以通过使用0作为round()函数的第二个参数来实现:

1round(345.9874590348545304636,0)

这将计算为`346.0‘。

如果您收到的是整型而不是浮点型的用户输入,您也可以将整型传入round(),而不会收到错误。当整数作为第一个参数传递时,将返回一个整数。

计算求和

sum()函数用于计算数字复合数据类型的和,包括liststuples,和dictionaries.

我们可以将一个列表传递给sum()函数,以便按照从左到右的顺序将列表中的所有项目相加:

1some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
2print(sum(some_floats))
1[secondary_label Output]
249.5

这将与元组和字典的工作方式类似:

1print(sum((8,16,64,512)))	# Calculate sum of numbers in tuple
2print(sum({-10: 'x', -20: 'y', -30: 'z'}))	# Calculate sum of numbers in dictionary
1[secondary_label Output]
2600	# Sum of numbers in tuple
3-60	# Sum of numbers in dictionary

sum()函数最多可以接受2个参数,因此您可以在构成第一个位置的参数的数字上添加一个整数或浮点数形式的额外数字:

1some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
2
3print(sum(some_floats, 0.5))
4print(sum({-10: 'x', -20: 'y', -30: 'z'},60))
1[secondary_label Output]
250.0
30

当您不包括第二个参数时,sum()函数默认为将0加到可迭代复合数据类型。

结论

本教程介绍了一些内置方法,您可以在Python编程语言中对数字数据类型使用这些方法。

要了解有关使用数字的更多信息,请阅读《如何使用Operators,在Python3中计算数学并了解有关列表的更多信息,请查看》[了解Python3中的列表》[了解3](https://andsky.com/tech/tutorials/understanding-lists-in-python-3).中的列表

Published At
Categories with 技术
comments powered by Disqus