写点什么

翻译:《实用的 Python 编程》01_03_Numbers

用户头像
codists
关注
发布于: 2021 年 02 月 15 日
翻译:《实用的Python编程》01_03_Numbers

目录 | [上一节 (1.2 第一个程序)]| [下一节 (1.4 字符串)]

1.3 数字


本节讨论数学计算。


数字类型


Python 有 4 种类型的数字:


  • 布尔型

  • 整型

  • 浮点型

  • 复数(虚数)


布尔型(bool)


布尔型数字有两个值:TrueFalse


a = Trueb = False
复制代码


在数值上,它们被计算成值为 10 的数。


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
复制代码


可以使用 andornot 组成更复杂的布尔表达式。


这里有一些例子:


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](../../Work/mortgage.py) 文件。


习题 1.7:戴夫的抵押贷款


戴夫决定从 Guido 的抵押贷款、股票投资和比特币交易公司获得 50 万美元的 30 年期固定利率抵押贷款。利率是 5%,每月还款额是 2684.11 美元。


下面这个程序用于计算戴夫在抵押期内需要支付的总金额:


# mortgage.py
principal = 500000.0rate = 0.05payment = 2684.11total_paid = 0.0
while principal > 0: principal = principal * (1+rate/12) - payment total_paid = total_paid + payment
print('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


发布于: 2021 年 02 月 15 日阅读数: 18
用户头像

codists

关注

公众号:编程人 2021.01.14 加入

Life is short, You need Python

评论

发布
暂无评论
翻译:《实用的Python编程》01_03_Numbers