目录 | 上一节 (1.2 第一个程序) | 下一节 (1.4 字符串)
1.3 数字
本节探讨数学计算。
数字类型
Python 有 4 种类型的数字:
- 布尔型
- 整型
- 浮点型
- 复数(虚数)
布尔型(bool)
布尔型数字有两个值:True
,False
。
a = Trueb = False
在数值上,它们被计算成值为 1
,0
的数。
c = 4 + True # 5d = Falseif d == 0: print('d is False')
然而,不要像下面这样写代码,这会很奇怪。
整型(int)
任意大小的有符号值,或者以任意数为基数的有符号值。
a = 37b = -299392993727716627377128481812241231c = 0x7fa8 # Hexadecimald = 0o253 # Octale = 0b10001111 # Binary
罕用操作:
x + y Addx - y Subtractx * y Multiplyx / y Divide (produces a float)x // y Floor Divide (produces an integer)x % y Modulo (remainder)x ** y Powerx << n Bit shift leftx >> n Bit shift rightx & y Bit-wise ANDx | y Bit-wise ORx ^ y Bit-wise XOR~x Bit-wise NOTabs(x) Absolute value
浮点型(float)
应用十进制或者指数表示法来指定浮点数的值:
a = 37.45b = 4e5 # 4 x 10**5 or 400,000c = -1.345e-10
应用浮点数示意 IEEE 754 规范的双精度。这与 C 语言中的 double
类型雷同。
17 digits of precision
Exponent from -308 to 308
请留神,当代表小数时,浮点数是不准确的。
>>> a = 2.1 + 4.2>>> a == 6.3False>>> a6.300000000000001>>>
这不是 Python 的问题,而是 CPU 硬件上底层浮点硬件的问题。
罕用操作:
x + y Addx - y Subtractx * y Multiplyx / y Dividex // y Floor Dividex % y Modulox ** y Powerabs(x) Absolute Value
除了按位运算符之外,浮点数的运算符与整数的运算符是一样的。
其它数学函数能够在 math
中找到。
import matha = math.sqrt(x)b = math.sin(x)c = math.cos(x)d = math.tan(x)e = math.log(x)
比拟
上面的比拟/关系运算符能够利用于数字:
x < y Less thanx <= y Less than or equalx > y Greater thanx >= y Greater than or equalx == y Equal tox != y Not equal to
能够应用 and
, or
,not
组成更简单的布尔表达式。
这里有一些例子:
if b >= a and b <= c: print('b is between a and c')if not (b < a or b > c): print('b is still between a and c')
转换数字
类型名能够被用来将其它数据转换为数字。
a = int(x) # Convert x to integerb = float(x) # Convert x to float
试试上面这些操作:
>>> a = 3.14159>>> int(a)3>>> b = '3.14159' # It also works with strings containing numbers>>> float(b)3.14159>>>
习题
揭示:这些习题假设你正在 practical-python/Work
目录中操作,具体在 mortgage.py
文件。
习题 1.7:戴夫的抵押贷款
戴夫决定从 Guido 的抵押贷款、股票投资和比特币交易公司取得 50 万美元的 30 年期固定利率抵押贷款。利率是 5%,每月还款额是 2684.11 美元。
上面这个程序用于计算戴夫在抵押期内须要领取的总金额:
# mortgage.pyprincipal = 500000.0rate = 0.05payment = 2684.11total_paid = 0.0while principal > 0: principal = principal * (1+rate/12) - payment total_paid = total_paid + paymentprint('Total paid', total_paid)
输出该程序并执行,你应该会失去答案为 966,279.6
。
习题 1.8:额定付款
假如戴夫在抵押期的前 12 个月每月额定领取 1000 美元。
批改程序以蕴含这部分额定的付款,并且输入已领取的总金额以及所需的月数。
当你执行这个新程序时,它应该报告 342 个月的总付款额是 929,965.62
。
习题 1.9:制作一个额定的付款计算器
批改程序,以便能够更个别地解决额定的付款信息。做到这一点,以便用户能够设置上面这些变量:
extra_payment_start_month = 61extra_payment_end_month = 108extra_payment = 1000
使程序查看这些变量,并适当地计算总付款额 。如果戴夫从抵押期的第五年开始,每月额定领取 1000 每月并领取 4 年,那么他将要领取多少?
习题 1.10:制作表格
批改程序,使其显示迄今为止领取的月数,领取的总金额和残余的本金。输入看起来应该像上面这样:
1 2684.11 499399.222 5368.22 498795.943 8052.33 498190.154 10736.44 497581.835 13420.55 496970.98...308 874705.88 3478.83309 877389.99 809.21310 880074.1 -1871.53Total paid 880074.1Months 310
习题 1.11:奖金
应用该程序时,请修复程序以纠正产生在上个月的超额领取。
习题 1.12:一个谜
int()
函数和 float()
函数能够将其它类型的数据转换为数字类型。示例:
>>> int("123")123>>> float("1.23")1.23>>>
思考到这一点,你是否解释上面这种行为?
>>> bool("False")True>>>
目录 | 上一节 (1.2 第一个程序) | 下一节 (1.4 字符串)
注:残缺翻译见 https://github.com/codists/practical-python-zh