最新消息:历时半年,永住昨天下来了

Python学习(3) 数字和布尔型

在Python中,数字和布尔型属于不可变对象。在定义后,不能修改实例值。在Python中,所有变量名都是对指向实例的指针。

在Python中,数字没有其它语言那么多种类,但却多了一个复数和分数类型,这个在数学中还是比较有用的。至于布尔型,在Python2中是没有布尔型的,它用数字0表示False,用1表示True。到Python3中,把True和False定义成关键字了,但它们的值还是1和0,它们可以和数字相加。

数字的种类

在Python中,基本的数字类型有三种,整数型(无限精度)、浮点型(8byte,和Java的double一样)、以及复数型。
另外通过引用,可以引入十进度数字和分数,它们的类路径分别为decimal.Decimal和fractions.Fraction。

数字的写法

Python的整数型有四种写法:二进制、八进制、十进制、十六进制
Python的浮点型有两种写法:直接写数字或者科学计数法
Python的复数型只有一种写法:a+bj,其中a为0时可以写成bj,b为1时也必须写,比如:3+j是错误的,要写成3+1j。

如下代码

Python
from decimal import Decimal
from fractions import Fraction

#整数型写法
intvalb = 0b1111        # 15
intvalb = 0B1111        # 15 B的大小写不区别
intvalo = 0o12          # 10
intvalo = 0O12          # 10 O的大小写不区别
intvald = 12            # 12
intvalh = 0x12          # 18
intvalh = 0X12          # 18 X的大小写不区别

#浮点型写法
floata = 123.0          # 123.0 整数值想定义成浮点数要在后面加小数点和0
floatb = 123.0          # 123.0
floatc = 123.0e12       # 1230000000000.0
floatc = 123.0E12       # 1230000000000.0
floatc = 1.23e12        # 1230000000000.0
floatc = 1.23E12        # 1230000000000.0

#复数写法
wa = 1 + 2j
wa = 1 + 1j
wa = 2j
wa = 1j

#十进度数写法
d = Decimal("1234.12")

#分数写法
f = Fraction(1, 4)                                # 1/4
f = Fraction(Fraction(1, 4), Fraction(1, 3))      # 3/4
f = Fraction(Fraction(1, 4), 3)                   # 1/12
f = Fraction("0.1")                               # 1/10
f = Fraction(0.5)                                 # 1/2
f = Fraction("1/2")                               # 1/2

数字的运算符

以上的五种数字都支持以下运算符:负号(-),加法(+),减法(-),乘法(),除法(/),平方(*)
以上的五种数字都支持以下布尔运算符:或(or) 与(and) 取反(not) 等于(==)
复数以外的四种支持以下运算符:真除运算符(//),大于(>),小于(<)
整数支持所有位运算符:按位于(&),按位或(|),按位异或(^),按位取反(~),位左移(<<),位右移(>>)

注意:
1. 因为Python自动支持大整数,所以在整数位移操作中,不会出现符号变换(Java和C中会出现)
2. 布尔运算符的计算法则可以参考最下面的“布尔型的介绍部分”

真除介绍

真除是指除数除以被除数后,结果取其整数部分。其中如果除数或者被除数为浮点数,其结果为浮点数;除数和被除数为十进制数。浮点数,分数,十进数之间好像没有实现整除。如:

Python
from decimal import Decimal
from fractions import Fraction

print (3 // 2)                              # 1
print (3 // 2.0)                            # 1.0
print (3 // Fraction(2, 3))                 # 4
print (Fraction(2, 3) // Fraction(2, 5))    # 1
print (3 // Decimal("1.3"))                 # 2
print (Decimal("2.7") // Decimal("1.3"))    # 2

精度问题

因为整数是无限长度的,所以不存在精度问题。
浮点数有精度问题,但当只做浮点数运算时,精度问题也可以忽略不计。但当浮点数转十进制数或者分数时,精度问题就要考虑了,可以先把浮点数转成字符串,再转为十进制数或者分数。
至于十进度数字,我们可以自己定义精度。

Python
import decimal
from fractions import Fraction

f = 1.2
print(Fraction(f))
print(Fraction(str(f)))
print(decimal.Decimal(f))
print(decimal.Decimal(str(f)))
#自定义十进制精度
decimal.getcontext().prec = 100
print(decimal.Decimal("1") / decimal.Decimal("3"))

数字相关的方法

数字相关的方法主要在Math模块中,可以通过Python的API来查看相关方法。比如Python3.4的API地址如下:https://docs.python.org/3.4/library/math.html

布尔型的介绍

Python的布尔值有两个True和False,但Python的If语句和布尔运算符不仅仅支持布尔型,也支持其它类型。

比如数字0会做为False处理,0以外的值做为True处理(浮点数因为精度问题,判断时要小心,比如0.3-0.1-0.2的结果就不是0);字符串空串做为False处理,空串以外为True。字典、列表、元组的元素为0时做为Flase处理,元素个数大于0时,做为True处理。自己定义的类里,可以通过定义__bool__函数,来实现布尔值的判断。

布尔运算符的取反(not)和等于(==)总返回布尔型。或(or)运算符,当第一个值为True时返回第一个值,否则返回第二个值。与(and)运算符,当第一个值为False时,返回第一个值,否则返回第二个值。

转载请注明:宇托的狗窝 » Python学习(3) 数字和布尔型

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址