热门标签 | 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


推荐阅读
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
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社区 版权所有