热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:翻译:《实用的Python编程》01_03_Numbers

篇首语:本文由编程笔记#小编为大家整理,主要介绍了翻译:《实用的Python编程》01_03_Numbers相关的知识,希望对你有一定的参考价值。目录|上一节(1.

篇首语:本文由编程笔记#小编为大家整理,主要介绍了翻译:《实用的Python编程》01_03_Numbers相关的知识,希望对你有一定的参考价值。


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

1.3 数字

本节讨论数学计算。

数字类型

Python 有 4 种类型的数字:

  • 布尔型
  • 整型
  • 浮点型
  • 复数(虚数)

布尔型(bool)

布尔型数字有两个值:TrueFalse

a = True
b = False

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

c = 4 + True # 5
d = False
if d == 0:
print(\'d is False\')

但是,不要像上面这样写代码,这会很奇怪。

整型(int)

任意大小的有符号值,或者以任意数为基数的有符号值。

a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8 # Hexadecimal
d = 0o253 # Octal
e = 0b10001111 # Binary

常用操作:

x + y Add
x - y Subtract
x * y Multiply
x / y Divide (produces a float)
x // y Floor Divide (produces an integer)
x % y Modulo (remainder)
x ** y Power
x <x >> n Bit shift right
x & y Bit-wise AND
x | y Bit-wise OR
x ^ y Bit-wise XOR
~x Bit-wise NOT
abs(x) Absolute value

浮点型(float)

使用十进制或者指数表示法来指定浮点数的值:

a = 37.45
b = 4e5 # 4 x 10**5 or 400,000
c = -1.345e-10

使用浮点数表示 IEEE 754 标准的双精度。这与 C 语言中的 double 类型相同。

17 digits of precision
Exponent from -308 to 308

请注意,当代表小数时,浮点数是不精确的。

>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>

这不是 Python 的问题,而是 CPU 硬件上底层浮点硬件的问题。

常用操作:

x + y Add
x - y Subtract
x * y Multiply
x / y Divide
x // y Floor Divide
x % y Modulo
x ** y Power
abs(x) Absolute Value

除了按位运算符之外,浮点数的运算符与整数的运算符是一样的。

其它数学函数可以在 math 中找到。

import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)

比较

下面的比较/关系运算符可以应用于数字:

x x <= y Less than or equal
x > y Greater than
x >= y Greater than or equal
x == y Equal to
x != y Not equal to

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

这里有一些例子:

if b >= a and b <= c:
print(\'b is between a and c\')
if not (b c):
print(\'b is still between a and c\')

转换数字

类型名可以被用来将其它数据转换为数字。

a = int(x) # Convert x to integer
b = 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.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)

输入该程序并执行,你应该会得到答案为 966,279.6

习题 1.8:额外付款

假设戴夫在抵押期的前 12 个月每月额外支付 1000 美元。

修改程序以包含这部分额外的付款,并且输出已支付的总金额以及所需的月数。

当你执行这个新程序时,它应该报告 342 个月的总付款额是 929,965.62

习题 1.9:制作一个额外的付款计算器

修改程序,以便可以更一般地处理额外的付款信息。做到这一点,以便用户可以设置下面这些变量:

extra_payment_start_mOnth= 61
extra_payment_end_mOnth= 108
extra_payment = 1000

使程序查看这些变量,并适当地计算总付款额 。如果戴夫从抵押期的第五年开始,每月额外支付 1000 每月并支付 4 年,那么他将要支付多少?

习题 1.10:制作表格

修改程序,使其显示迄今为止支付的月数,支付的总金额和剩余的本金。输出看起来应该像下面这样:

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.1 -1871.53
Total paid 880074.1
Months 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


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
大眼仔陈先森
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有