Python学习笔记(四)——数字

发布时间:2019-06-30 15:27:19编辑:auto阅读(1930)

    数字

    在Python中,数字并不是一个真正的对象类型,而是一组类似类型的分类。Python不仅支持通常的数据类型(整数和浮点数。),而且能够通过常量去直接创建数字以及处理数字的表达式。

     整数和浮点数
     复数
     固定精度的十进制数;
     有理分数
     集合
     布尔类型
     无穷的整数精度
     各种数字内置函数和模块。

    数字常量:
    数字 常量
    123,-23,0,99999…… 整数(无穷大小)
    1.23,1.,3.14e-10,4E210 浮点数
    0o177,0x9ff,0b11000 Python3.0中的八进制、十六进制和二进制常量
    3+4j,3j 复数产量

    Python表达式操作符:
    Python学习笔记(四)——数字

    数字变量表达式:
     变量在它第一次赋值时创建
     变量在表达式中使用将被替换为它们的值
     变量在表达式中使用之前必须已赋值
     变量像对象一样不需要在一开始进行声明

    >>> a=3
    >>> b=4
    >>> a,b
    (3, 4)

    数字的转换:

    >>> int('100')          #将数字从文本转换为数字
    100
    >>> str(100)            #将数字从数字转换为文本
    '100'

    数字显示格式:

    >>> num=1/3.0
    >>> num
    0.3333333333333333
    >>>
    >>>
    >>>
    >>> print(num)
    0.3333333333333333
    >>>
    >>> '%e'%num
    '3.333333e-01'
    >>> '%4.2f'%num
    '0.33'
    >>> '{0:4.2f}'.format(num)
    '0.33'
    >>>

    数字比较:一般的和连续的
    一般的比较操作数相对大小,并且返回一个布尔类型的结果。

    >>> 1<2
    True
    >>>
    >>> 2.0>=1
    True
    
    >>> 2.0==2.0
    True
    >>> 2.0!=2.0
    False

    连续比较:

    >>> x=10
    >>> y=20
    >>> z=30
    >>>
    >>>
    >>> x<y<z
    True
    >>> x<y>z
    False
    

    获取数字最大值和最小值的函数:

    >>> max(x,y,z)
    30
    >>> min(x,y,z)
    10
    >>>

    除法:

    传统除法、Floor除法和真除法:

    传统除法:
    X / Y
    传统除法和真除法,在Python2.6及之前的版本中,这个操作对于整数部分会省去小数部分,对于浮点数会保持小数部分。在Python3.0版本中为真除法(无论任何类型都会保持小数部分)。

    Floor除法:
    X // Y
    在Python2.2中新增操作,在Python2.6和Python3.0均能使用。操作不考虑操作对象类型,总会省略结果的小数部分,剩下最小的能整除的整数部分。

    在Python3.0中取消了传统除法,/和//分别实现真除法和floor除法。

    >>> 10 / 4
    2.5
    >>>
    >>> 10 // 4
    2
    >>>
    >>> 10 / 4.0
    2.5
    >>>
    >>> 10 // 4.0
    2.0
    >>>
    >>> 5 / 2.0
    2.5
    >>> 5 // 2.0
    2.0
    >>>
    >>> 5 / -2.0
    -2.5
    >>> 5 // -2.0
    -3.0
    >>>
    

    整数精度:
    Python3.0整数支持无穷的大小,Python2.6长整数在末尾显示一个“L”。

    复数:
    复数分为两个浮点数(实部和虚部)并在虚部增加了j或J的后缀。可以把非零实部的复数写成由+连接起来的两部分。

    >>>
    >>> 1j*1j
    (-1+0j)
    >>> 2+3j*3
    (2+9j)
    >>> (5+6j)**2
    (-11+60j)
    >>>
    

    十六进制、八进制和二进制常量

    >>>
    >>> 0o1,0o20,0o377
    (1, 16, 255)
    >>>
    >>> 0x01,0x10,0xFF
    (1, 16, 255)
    >>>
    >>> 0b1,0b10000,0b11111111
    (1, 16, 255)
    >>>
    
    >>>
    >>> oct(64),hex(64),bin(64)
    ('0o100', '0x40', '0b1000000')
    >>>
    

    Int将数字按照进制进行转换:

    >>>
    >>> int('64')
    64
    >>> int('100',8)
    64
    >>> int('40',16)
    64
    >>> int('1000000',2)
    64
    >>>
    >>> int('0o100',8),int('0x40',16),int('0b1000000',2)
    (64, 64, 64)
    

    Eval函数:

    >>>
    >>> eval('64'),eval('0o100'),eval('0x40'),eval('0b1000000')
    (64, 64, 64, 64)
    >>>
    

    通过字符调用转换进制:

    >>> '{0:o},{1:x},{2:b}'.format(64,64,64)
    '100,40,1000000'
    >>>
    >>>
    >>> '%o,%x,%X' % (64,255,255)
    '100,ff,FF'
    >>>
    

    位操作

    把整数当作二进制位串进行位移及布尔操作。

    >>>
    >>> x=1
    >>>
    >>> x<<1
    2
    >>> x<<2
    4
    >>> x<<3
    8
    >>> y=8
    >>>
    >>> y>>1
    4
    >>> y>>2
    2
    >>> y>>3
    1
    >>> y>>4
    0
    >>> y>>5
    0
    >>>
    
    >>>
    >>> x=0b0001
    >>>
    >>> x
    1
    >>> bin(x<<1)
    '0b10'
    >>> bin(x<<2)
    '0b100'
    >>> bin(x<<3)
    '0b1000'
    >>> bin(x<<4)
    '0b10000'
    >>>
    >>>
    >>> bin(x | 0b0010)
    '0b11'
    >>>
    >>>
    >>> bin(x ^ 0b0010)
    '0b11'
    >>>
    >>> bin(x & 0b0010)
    '0b0'
    >>>
    

    显示数字二进制的位数:

    >>> X=100
    >>>
    >>> bin(X),X.bit_length()
    ('0b1100100', 7)
    >>>
    >>> Y=101
    >>>
    >>> bin(Y),Y.bit_length()
    ('0b1100101', 7)
    

    小数
    小数是固定精度的浮点值。
    小数对象:小数是通过导入decimal模块调用函数后创建的。拥有固定的位数和小数点。

    浮点数字缺乏精确性,因为存放数值的空间有限。

    >>>
    >>> 0.1+0.1+0.1-0.3
    5.551115123125783e-17
    >>>
    
    >>>
    >>> from decimal import Decimal
    >>>
    >>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
    Decimal('0.0')
    >>>
    

    当小数对象中的字符串小数位数多时,会自动调整。

    >>> Decimal('0.1') + Decimal('0.1') + Decimal('0.100') - Decimal('0.3')
    Decimal('0.000')
    

    全局精度设置:

    >>>
    >>> import decimal
    >>>
    >>> decimal.Decimal(1) / decimal.Decimal(7)
    Decimal('0.1428571428571428571428571429')
    >>>
    >>> decimal.getcontext().prec = 4
    >>>
    >>> decimal.Decimal(1) / decimal.Decimal(7)
    Decimal('0.1429')
    >>>
    

    分数
    分数在Python中以类似小数的方式使用,也存在于模块中,导入其构造函数并传递一个分子和分母就可以产生一个分数。

    >>>
    >>> from fractions import Fraction
    >>>
    >>> x=Fraction(1,3)
    >>> y=Fraction(4,6)
    >>>
    >>> x
    Fraction(1, 3)
    >>>
    >>> y
    Fraction(2, 3)
    >>>
    >>> print(x,y)
    1/3 2/3
    >>>
    

    分数的数学表达式:

    >>>
    >>> x+y
    Fraction(1, 1)
    >>> x-y
    Fraction(-1, 3)
    >>> x*y
    Fraction(2, 9)
    >>>
    

    通过浮点字符串创建分数对象:

    >>>
    >>> Fraction('.25')
    Fraction(1, 4)
    >>>
    >>> Fraction('1.25')
    Fraction(5, 4)
    >>>
    >>> Fraction('.25')+Fraction('1.25')
    Fraction(3, 2)
    >>>
    
    >>>
    >>> z=2.5
    >>>
    >>> o=Fraction(*z.as_integer_ratio())
    >>>
    >>> o
    Fraction(5, 2)
    

    内置数学工具:

    >>>
    >>> import math
    >>>
    >>> math.pi,math.e
    (3.141592653589793, 2.718281828459045)
    >>>
    >>> math.sin(2*math.pi / 180)
    0.03489949670250097
    >>>
    >>> math.sqrt(144),math.sqrt(3),math.sqrt(4)
    (12.0, 1.7320508075688772, 2.0)
    >>>
    >>> pow(2,4),pow(2,5),2**4,2**5
    (16, 32, 16, 32)
    >>>
    >>> abs(-42.0),sum((1,2,3,4,5,6))       #求绝对值,求和
    (42.0, 21)
    >>>
    >>> min(3,1,2,4,5)                      #求最小数
    1
    >>> max(3,1,2,4,5)                  #求最大数
    5
    >>>
    

    小数截断方式:

    >>>
    >>> math.floor(2.567),math.floor(-2.567)
    (2, -3)
    >>> math.trunc(2.567),math.trunc(-2.567)
    (2, -2)
    >>>
    >>> int(2.567),int(-2.567)
    (2, -2)
    >>>
    >>> round(2.567),round(2.467),round(2.567,2)
    (3, 2, 2.57)
    >>>
    >>> '%.1f' % 2.567,'{0:.2f}'.format(2.567)
    ('2.6', '2.57')
    >>>
    

    range-----生成随机数函数

    >>>
    >>> import random
    >>>
    >>> random.random()
    0.6746601025987419
    >>> random.random()
    0.569446993489575
    >>> random.random()
    0.31398115374410795
    >>>
    >>>
    >>> random.randint(1,10)
    10
    >>> random.randint(1,10)
    4
    >>> random.randint(1,10)
    1
    >>>
    >>> random.choice(['banane','apple','orange'])
    'banane'
    >>>
    >>> random.choice(['banane','apple','orange'])
    'orange'
    >>> random.choice(['banane','apple','orange'])
    'orange'
    >>> random.choice(['banane','apple','orange'])
    'apple'
    >>>
    

    集合

    集合(set),是唯一的、不可变的对象的一个无序集合(collection),支持与数学集合理论相对应的操作。一个项,无论在集合中添加多少次,都只能出现一次。
    集合是无序的,并且不会把键匹配到值,既不是序列也不是映射类型。

    >>>
    >>> x = set('abcde')
    >>> y = set('bdxyz')
    >>>
    >>> x,y
    ({'a', 'e', 'd', 'b', 'c'}, {'y', 'x', 'd', 'b', 'z'})
    >>>
    >>> 'e' in x
    True
    >>> 'g' in x
    False
    >>>
    >>> x - y
    {'c', 'e', 'a'}
    >>>
    >>> x | y
    {'a', 'e', 'y', 'x', 'd', 'b', 'c', 'z'}
    >>>
    >>> x & y
    {'b', 'd'}
    >>>
    >>> x ^ y
    {'c', 'a', 'y', 'e', 'x', 'z'}
    >>>
    >>> x > y,x < y
    (False, False)
    
    >>> #Add方法插入项、update按位置求集、remove根据值删除一个项目。
    >>>
    >>> z = x.intersection(y)       #  same as x & y
    >>>
    >>> z
    {'b', 'd'}
    >>>
    >>> z.add('yert')
    >>>
    >>> z
    {'b', 'd', 'yert'}
    >>>
    >>> z.update(set('ace'))
    >>>
    >>> z
    {'b', 'c', 'e', 'a', 'd', 'yert'}
    >>>
    >>> z.remove('b')
    >>>
    >>> z
    {'c', 'e', 'a', 'd', 'yert'}
    >>>
    >>>
    
    >>>
    >>> a=set('123')
    >>>
    >>> a=set([1,2,3])
    >>>
    >>> a
    {1, 2, 3}
    >>>
    >>> a.union([3,4])
    {1, 2, 3, 4}
    >>>
    >>> a.intersection((1,3,5))
    {1, 3}
    >>>
    >>> a.issubset(range(-5,5))
    True
    >>>
    

    在Python中{}仍然是一个字典,空的集合必须通过内置函数set创建,并且以同样方式显示。

    >>> b={1,2,3}
    >>> b
    {1, 2, 3}
    >>>
    >>>
    >>> type(b)
    <class 'set'>
    >>>
    >>>
    >>> type({})
    <class 'dict'>
    >>>
    >>> a={}
    >>>
    >>> a
    {}
    >>> c={}
    >>>
    >>>
    >>> type(c)
    <class 'dict'>
    >>>
    >>>
    >>> d=set()
    >>>
    >>> d
    set()
    >>>
    >>> type(d)
    <class 'set'>
    >>>
    

    集合与列表的转换:

    >>>
    >>> L=[1,2,1,3,4,5,6,7,8.7]
    >>>
    >>> set(L)
    {1, 2, 3, 4, 5, 6, 7, 8.7}
    >>>
    >>> L=list(set(L))
    >>>
    >>> L
    [1, 2, 3, 4, 5, 6, 7, 8.7]
    >>>
    

关键字