文章大纲
在 Python 中对数字进行运算是非常简单的,以下是演示在 Python 解释器中进行数字运算。
四则运算
从最简单的四则运算开始:
>>> 1+1
2
>>> 4-3
1
>>> 2*2
4
但是进行除法运算的时候,可能会有所不同:
>>> 4/2
2.0
预期返回的应该是 2
,但实际返回的是 2.0
,虽然在数学中 2
=2.0
,但是在编程中一个是整数一个是浮点数,除法默认返回的是浮点数。
如果想要返回整数,可以使用整除(\
)运算:
>>> 4//2
2
当然跟数学一样,使用 ( )
可以提高计算的优先级,例如:
>>> 2*(1+2)
6
求余(求模)
求余用的运算符是 %
,例如:
>>> 10%3
1
上述结果等于 10 - 10//3 3
:
>>> 10 - 10//3 * 3
1
求余和整除也可用于浮点数和负数(对,负数,虽然不太好理解):
>>> 10//-3
-4
>>> 10%-3
-2
数学运算常用的函数或模块
使用 **
来求乘方:
>>> 2**3
8
除此之外,Python 提供了一个内部函数 pow()
来处理。
函数可以理解为编写好的小程序,只需调用以及根据情况传递值(实参),就可以返回对应的结果。
>>> pow(2,3)
8
在解释器中查看函数或模块的用法可以通过 help('name')
来查看:
>>> help('pow')
Help on built-in function pow in module builtins:
pow(base, exp, mod=None)
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
...
从上述帮助中可以看到该函数支持 3
个参数,其中第三个参数是对乘方后的值进行求余,默认是 None
,也就是不做求余。例如:
>>> pow(2,3,3)
2
abs
函数可以计算数值的绝对值:
>>> abs(-100)
100
除此之外,Python 还可以导入模块,模块可以扩展 Python 功能。
导入模块使用的命令是 import
,以下例子是调用 math
模块中的 floor
函数,该函数的功能是向下取整:
>>> import math
>>> math.floor(12.12)
12
>>> math.floor(12.99)
12
如果想直接使用 floor
函数的话,可以单独具体的指定该函数进行导入,如:
>>> from math import floor
>>> floor(12.12)
12
建议只导入需要使用的模块以及函数。
如果想知道一个模块当中有哪些函数以及对应的功能,可以使用 help('module_name')
,如:
>>> help('math')
是字符还是数值?
在 Python 当中,可能需要获取用户的输入的数字进行运算,获取输入使用的是内置函数 input()
,它的用法是:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
它可以传递一个 prompt
参数,用于输入前的提示。
例如:
>>> num = input('输入一个数字:')
输入一个数字:10
>>> num
'10'
>>> num % 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
用户输入的“数字”赋予了 num
变量,当对 num
求余的时候,Python 发生了报错,TypeError
表示类型出错了,前面打印的 num
返回的是 '10'
可以看到用单引号括起来了,所以 num
其实是一个字符串,对于字符串肯定不能够求余了,需要转换类型,将字符串转换为数值类型,可以使用 int()
内置函数:
>>> int(num) % 3
1
不同进制
有时候会用到除十进制以外的进制。
二进制:
>>> 010
File "<stdin>", line 1
010
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
直接输入二进制会报错,错误提示也告诉了解决方法,添加一个 0b
前缀:
>>> 0b010
2
八进制:
八进制使用 0o
前缀:
>>> 0o010
8
十六进制:
十六进制使用 0x
前缀:
>>> 0x10
16
不同进制的转换
每种进制转换都对应了一个函数:
int
:将目标进制转换为十进制oct
:将目标进制转换为八进制hex
:将目标进制转换为十六进制
例如:
>>> num = 256
>>> print(oct(num))
0o400
>>> print(hex(num))
0x100
>>> hex_num = 0x100
>>> print(int(hex_num))
256