简介
本节讨论数学计算。
本节讨论数学计算。
Python 有 4 种数字类型:
布尔值有两个值:True(真)、False(假)。
a = True
b = False
在数值上,它们被评估为值为 1、0 的整数。
c = 4 + True ## 5
d = False
if d == 0:
print('d 为 False')
但是,不要这样写代码。这会很奇怪。
具有任意大小和基数的有符号值:
a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8 ## 十六进制
d = 0o253 ## 八进制
e = 0b10001111 ## 二进制
常见操作:
x + y 加法
x - y 减法
x * y 乘法
x / y 除法(产生浮点数)
x // y 整除(产生整数)
x % y 取模(余数)
x ** y 幂运算
x << n 按位左移
x >> n 按位右移
x & y 按位与
x | y 按位或
x ^ y 按位异或
~x 按位取反
abs(x) 绝对值
使用十进制或指数记数法来指定浮点数:
a = 37.45
b = 4e5 ## 4 x 10**5 或 400,000
c = -1.345e-10
浮点数使用原生 CPU 表示法 IEEE 754 以双精度表示。这与编程语言 C 中的 double 类型相同。
17 位精度
指数范围从 -308 到 308
请注意,在表示小数时,浮点数是不精确的。
>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>
这 不是 Python 的问题,而是 CPU 底层的浮点硬件问题。
常见操作:
x + y 加法
x - y 减法
x * y 乘法
x / y 除法
x // y 整除
x % y 取模
x ** y 幂运算
abs(x) 绝对值
这些运算符与整数的运算符相同,除了按位运算符。更多数学函数可在 math 模块中找到。
import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)
以下比较 / 关系运算符可用于数字:
x < y 小于
x <= y 小于或等于
x > y 大于
x >= y 大于或等于
x == y 等于
x!= y 不等于
你可以使用 and(与)、or(或)、not(非)来构成更复杂的布尔表达式。
以下是一些示例:
if b >= a and b <= c:
print('b 在 a 和 c 之间')
if not (b < a or b > c):
print('b 仍然在 a 和 c 之间')
类型名称可用于转换值:
a = int(x) ## 将 x 转换为整数
b = float(x) ## 将 x 转换为浮点数
试试看。
>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' ## 它也适用于包含数字的字符串
>>> float(b)
3.14159
>>>
提醒:这些练习假设你在 ~/project 目录中工作。查找文件 mortgage.py。
戴夫决定向吉多的房贷、股票投资与比特币交易公司申请一笔 50 万美元的 30 年期固定利率房贷。年利率为 5%,每月还款额为 2684.11 美元。
以下是一个计算戴夫在房贷存续期内总共需支付金额的程序:
## mortgage.py
principal = 500000.0
rate = 0.05
payment = 2684.11
total_paid = 0.0
while principal > 0:
principal = principal * (1+rate/12) - payment
total_paid = total_paid + payment
print('Total paid', total_paid)
输入此程序并运行它。你应该会得到一个答案 966279.5999999957。
假设戴夫在房贷的前 12 个月每月额外还款 1000 美元,情况会怎样?
修改程序以纳入这笔额外还款,并让它打印出总共支付的金额以及所需的月数。
当你运行新程序时,它应该报告在 342 个月内总共支付了 929965.6199999959 美元。
修改程序,以便能更通用地处理额外还款信息。实现让用户可以设置这些变量:
extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000
让程序查看这些变量并相应地计算出总共支付的金额。
如果戴夫在已经支付了前五年之后开始,每月额外支付 1000 美元,持续 4 年,他将支付多少钱?
修改程序,使其打印出一个表格,显示月份、到目前为止总共支付的金额以及剩余本金。输出应如下所示:
1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3478.83
309 877389.99 809.21
310 880074.10 -1871.53
Total paid 880074.10
Months 310
当你在做这件事的时候,修复程序以纠正最后一个月出现的多付情况。
int() 和 float() 可用于转换数字。例如:
>>> int("123")
123
>>> float("1.23")
1.23
>>>
考虑到这一点,你能解释这种行为吗?
>>> bool("False")
True
>>>
恭喜你!你已经完成了数字实验。你可以在 LabEx 中练习更多实验来提高你的技能。