美文网首页python学习笔记
速撸《python学习手册》--第5章-数字

速撸《python学习手册》--第5章-数字

作者: DamaoShao | 来源:发表于2018-08-15 20:35 被阅读0次

    python的数字类型

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

    数字常量

    十六进制:以0x或者0X开头,后面是十六位是0-9和A-F。

    八进制:以0o或者0O开头,后面0-7。

    python表达式操作符

    混合操作的优先级

    注意多加括号

    python表达式通常是从左到右来组合的,但是也有例外,比如幂运算是从右向左组合的。

    括号分组表达式

    括号内的运算都是优先级最高的。

    混合类型的优先升级

    当混合类型做操作的时候,python会把简单类型先升级成复杂类型。

    在实际应用中的数字

    数字显示格式

    交互命令行打印的是repr

    print命令打印的是str

    固定小点位数,可以使用格式化工具

    In [67]: num=1/3.0
    
    In [68]: num
    Out[68]: 0.3333333333333333
    
    In [69]: print(num)
    0.3333333333333333
    
    In [70]: '{0:4.2f}'.format(num)
    Out[70]: '0.33'
    

    比较:一般和连续

    In [71]: x=2
    
    In [72]: y=4
    
    In [73]: z=6
    
    # 下面两种方法是相等的,而且第一中方法更快
    In [74]: x<y<z
    Out[74]: True
    
    In [75]: x<y and y<z
    Out[75]: True
    
    # -------
    In [76]: x<y>z
    Out[76]: False
    
    In [77]: x<y and y>z
    Out[77]: False
    

    传统除法、Floor除法和真除

    x/y 为传统除法和真除:无论如何都会返回浮点数

    x//y 为Floor除法:向下取整数,可以取到浮点数也可以取到整数,取决于除数和被除数

    In [79]: (5/2),(5/2.0),(5/-2.0),(5/-2)
    Out[79]: (2.5, 2.5, -2.5, -2.5)
    
    In [80]: (5//2),(5//2.0),(5//-2.0),(5//-2)
    Out[80]: (2, 2.0, -3.0, -3)
    
    In [82]: (9/3),(9.0/3),(9//3),(9//3.0)
    Out[82]: (3.0, 3.0, 3, 3.0)
    

    整数 精度

    支持无穷大

    复数

    将j或J当虚部后缀,即可成为复数。

    十六进制 八进制 二进制

    • oct():十进制转八进制
    • hex(): 十 -> 十六
    • bin(): 十 -> 二

    可以使用int函数来转化,也可以使用eval函数,当然更慢。

    In [87]: int('64'),int('100',8),int('40',16),int('1000000',2)
    Out[87]: (64, 64, 64, 64)
    

    位操作

    其他内置数学工具

    • math.trunc
    • math.round

    其他数字类型

    小数对象

    In [88]: from decimal import Decimal
    
    In [89]: Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.4')
    Out[89]: Decimal('-0.1')
    

    分数类型

    集合

    集合时唯一、不可变对象的(集合的元素必须课hash)、无需序列。

    In [90]: x=set('abcde')
    
    In [91]: y=set('bdxyz')
    
    In [92]: x
    Out[92]: {'a', 'b', 'c', 'd', 'e'}
    
    In [93]: y
    Out[93]: {'b', 'd', 'x', 'y', 'z'}
    
    In [94]: e in x
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-94-a0d4ffcd0863> in <module>()
    ----> 1 e in x
    
    NameError: name 'e' is not defined
    
    In [95]: 'e' in x
    Out[95]: True
    
    In [96]: x-y
    Out[96]: {'a', 'c', 'e'}
    
    In [97]: x | y
    Out[97]: {'a', 'b', 'c', 'd', 'e', 'x', 'y', 'z'}
    
    In [98]: x & y
    Out[98]: {'b', 'd'}
    
    In [99]: x ^ y
    Out[99]: {'a', 'c', 'e', 'x', 'y', 'z'}
    
    In [100]: x > y , x < y
    Out[100]: (False, False)
    
    In [101]: z=x.intersection(y)
    
    In [102]: z
    Out[102]: {'b', 'd'}
    
    In [103]: z.add('SPAM')
    
    In [104]: z
    Out[104]: {'SPAM', 'b', 'd'}
    
    In [105]: z.update(set(['X','Y']))
    
    In [106]: z
    Out[106]: {'SPAM', 'X', 'Y', 'b', 'd'}
    
    In [107]: z.remove('b')
    
    In [108]: z
    Out[108]: {'SPAM', 'X', 'Y', 'd'}
    
    In [109]:  for i in z:
         ...:     print(i)
         ...:
    d
    SPAM
    Y
    X
    

    集合解析

    • {x **2 for x in [1,2]} # {1, 4}

    为什么使用集合

    • 去重复L=list(set(L))
    • 利用集合运算快速运算

    布尔型

    bool现在是一种明确的类型,其值为True和False,是预先定义好的。bool其实是int的子类。他们的行为和0和1是一样的。

    数字扩展

    使用numpy库

    习题

    如何截断或舍去浮点数的小数部分?

    In [116]: a=3.1
    
    In [117]: b=3.9
    
    In [119]: int(a),int(b)
    Out[119]: (3, 3)
    
    In [120]: import math
    
    In [121]: math.trunc(a),math.trunc(b)
    Out[121]: (3, 3)
    
    In [122]: round(a,1),round(b,1)
    Out[122]: (3.1, 3.9)
    
    In [123]: round(a,0),round(b,0)
    Out[123]: (3.0, 4.0)
    
    In [124]: math.floor(a),math.floor(b)
    Out[124]: (3, 3)
    

    相关文章

      网友评论

        本文标题:速撸《python学习手册》--第5章-数字

        本文链接:https://www.haomeiwen.com/subject/wmhgbftx.html