zoukankan      html  css  js  c++  java
  • python 数值 笔记

    python语言中有3种基本的数值类型,int 类型表示整数;float类型表示浮点数。第三数据类型表示复数

    1 整数

    >>> x=42
    >>> type(x)
    <class 'int'>

    >>> x=int("17") #将字符串转换为整数
    >>> y=int(4.8) #截取把浮点数小数点右边的部分去掉
    >>> print(x,y,x-y)
    17 4 13
    将一个字符串转换为一个整数时,python语言假定该数值使用十进制表示。可以为该数值指定另外一种进制。

    >>> hex_number="a1"
    >>> print(int(hex_number,16))
    161

    可以通过在数值前面加前缀0x指定一个十六进制数。0xa1

    >>> print(10**100)
    10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    >>> type(10**100)
    <class 'int'>

    使用 指数据运算符**来省去输入100个0的麻烦

    int类型所能存储的整数大小不再限制

    2 浮点数

    python中的浮点数用float类型的对象表示。一个浮点数只是一个实数的近似值。

    >>> x=1.111
    >>> x
    1.111
    >>> print(x)
    1.111

    可以使用float构造函数将字符串转换为数值

    >>> x=float("16.4")
    >>> x
    16.4
    >>> type(x)
    <class 'float'>

    特别大和特别小的浮点数使用指数表示法来表示,指数表示法将10的指数单独表示。

    >>> debt=11322188570453.51
    >>> print(debt)
    11322188570453.51
    >>> e=1.1111e+13
    >>> print(e)
    11111000000000.0

    浮点数的精度:浮点数是一个近似值,它只能保证有限数量的精确位数。

    Python使用C语言中的double类型存储float类型的变量,因此如果知道C语言中的double类型在一个平台上的精度,就可以知道在相同平台上运行的python语言中的float类型的精度。大部分系统使用64位存储C语言中的double类型,并提供16位的精确的位数。

    3 格式化数值

    格式化运算符:%

    在一个字符串后使用%,%为字符串格式化运算符,如果在两个数值中间使用%,%为取余运算符。

    格式化整数用:%d 

    格式化浮点数:%f

    如果对一个浮点数使用%d或者对一个整数使用%f,python会将数值转换为转换符号表示的类型

    >>> print("%d"%100)
    100
    >>> print("%d"%101.6)
    101

    用十六进制显示输出内容:使用%x转换符号。如果使用%#x会在输出内容之前加上0x.

    %o 字母o可以产生八进制的输出,%#o可以产生前面带0的八进制输出

    >>> print("%#x"%100)
    0x64
    >>> print("%x"%100)
    64
    >>> print("%o"%100)
    144
    >>> print("%#o"%100)
    0o144

    对于整数,可以通过在格式化字符串%后面增加一个数值来指定输出内容的宽度,如果数值以0开关,输出内容左边的空余位数会用0填满,否则的话会用空格真满。

    >>> print("z is (%6d)"%175)
    z is ( 175)
    >>> print("z is (%06d)"%175)
    z is (000175)

    当格式化浮点数时,可以指定输出内容的总宽度,和 或者 小数点后的数字位数。如果输出内容的总宽度为w,并在小数点后显示p位数字,需要在格式化字符串中使用转换符号%w.pf,总宽度包括了小数点以及小数点后的数字。与将一个浮点转换为整数时处理不同,python对小数点后的最后一位数值采取四舍五入的处理方法。

    >>> x=20.0/3
    >>> print("(%6.2f)"%x)
    ( 6.67)

    如果在格式化字符串中省略掉小数点前面的数字,python会使用输出内容需要的足够空间显示输出内容的整数部分,并且按照格式化字符串中的要求显示小数部分:

    >>> print("(%.4f)"%x)
    (6.6667)

    float类型的精确位数是有限的,一般只包含16位数字左右的信息。

    >>> tt=2.0/3
    >>> print("%.40f"%tt)
    0.6666666666666666296592325124947819858789

    如果省略掉小数点后面的数字或者指定0位小数,python将不会显示小数部分,并且也不会显示小数点:

    >>> print("(%4.f)"%x)
    ( 7)

    def as_percent(num,den):
    if den==0:
    ratio=0
    else:
    ratio=float(num)/den
    return "%5.1f%%"%(100*ratio)

    >>> import num
    >>> print("ratio="+as_percent(6839,13895))
    ratio= 49.2%

     如果在输出内容中显示%,使用两%%

    在转换符号中使用*替代一个数值,python语言从参数元组中一个额外的整形参数(位于被格式化的数值前面)得到*的值。

    def format_dollars(dollars,places):
    return "$%*.2f"%(places+3,dollars)

    >>> print(format_dollars(499.98,5))
    $  499.98

    4 作为数值的字符

    在Python中,一个字符只是一个长度为1的字符串,不能作为一个数值使用。

    python提供了内置函数ord将一个字符转换为它的数值代码,还提供了内置函数asc来将一个数值代码转换为一个字符。数值代码的范围必须在0到255之间。


    def rot13_character(character):
    #look up codes for ends of the alphabet.
    a=ord('a')
    z=ord('z')
    A=ord('A')
    Z=ord('Z')

    code=ord(character)
    # rotate lower-case characters
    if a<=code<=z:
    code=a+(code-a+13)%26
    #rotate upper-case characters.
    elif A<=code<=Z:
    code=A+(code-A+13)%26
    #leave other characters alone.
    else:
    pass
    return chr(code)

    def rot13(plaintext):
    #loop over letters in the text.
    ciphertext=""
    for character in plaintext:
    ciphertext+=rot13_character(character)
    return ciphertext

    >>> import num
    >>> mesage=num.rot13("this is a top-secret encoded message.")#加密
    >>> print(mesage)
    guvf vf n gbc-frperg rapbqrq zrffntr.

    要解密一条使用rot13加密的消息,只需要对加密的消息再应用一次rot13加密即可:

    >>> print(num.rot13(mesage))
    this is a top-secret encoded message.

     5 算术运算

    python语言为数值类型的对象提供了标准的算术运算符,可以混用不同的数值类型,python语言会为运算结果自动选择最具灵活性的类型:

    total==6 即 total=total+6 

    co/=2 即 co=co/2

    当两个整数相除时,python一般使用int类型表示运算结果。但是当运算结果含有小数部分时,不同

    >>> print(13/3)
    4.333333333333333

    下界除法,显示地将商四舍五入为一个整数,下界除法运算符使用//表示。也可以float类型的对象上应用它:

    >>> print(6.6//3.0)
    2.0
    >>> print(10//3)
    3
    >>> print(11//3)
    3

    指数运算符** 计算复利

    def compound(starting_balance,annual_rate,years):
    return starting_balance * ((1+annual_rate)**years)

    >> compound(130000,0.03,10)

    174709.12931473588

    取余运算符%,返回除尘的余数。
    def format_months(months):
    print("%d years,%d months" %(months//12,months%12))

     6 内置函数

    >>> abs(-6.5)
    6.5
    >>> print(min(6,7,2,-8))
    -8
    >>> print(max([0,43.5,-6,7,]))
    43.5

    round函数可以将一个浮点数四舍五入为指定小数位数的数值。

    >>> print(round(1234.56789,2))
    1234.57

    可以指定保留的小数位数为负数,这样将从小数点开始向左边四舍五入指定的位数

    >>> print(round(1234.56789,-2))
    1200.0

    sum对一个序列中的数值求和。结合range函数可以计算出前100个正整数的和:

    >>> print(sum(range(1,101)))
    5050

    def mean(numbers):
    if numbers:
    return float(sum(numbers))/len(numbers)
    else:
    raise ValueError("no numbers specified")

    >>> print(mean([96,90,100,88]))
    93.5

    math模块中包括了标准的超越函数,所有这些函数都使用float类型的参数,并返回float类型的值:

    floor函数和ceil函数是标准的下界函数和上界函数,它们返回的结果为整数,但却以float类型的数值表示。

    from math import sin,cos,pi
    def trajectory(velocity,angle):
    """ compute time of flight and range of a projectile.
    for a projectile with initial 'velocity' in meters/sec launched at 'angle' from
    horizontal in degrees,returns time of flight in sec and range in meters ,
    meglecting friction."""
    #gravitational acceleration in meters/sec^2.
    g=9.8
    #convert 'angle' to radians.
    angle=angle * pi /180
    #compute horizontal and vertical components of velocity.
    v_h=velocity * cos(angle)
    v_v=velocity*sin(angle)
    #compute the time of flight and range.
    tof=2*v_v/g
    range=tof*v_h
    return tof,range

    >>> tof,range=trajectory(40,45)
    >>> print ("time of flight:%.1f sec,range:%.0f meters "%(tof,range))
    time of flight:5.8 sec,range:163 meters

    7 复数 实数与虚数的和。

    虚数是虚数单位的倍数,虚数单位是指-1的平方根。数学家通常使用i表示虚数部分,而工程师通常使用j.

    python中,虚数用一个数值以及数值后面的j来表示(数值和j之间不能有空格):

    >>> imaginary_number=16j

    要创建一个复数,将一个实数和一个虚数相加 或者相减:

    >>> complex_number=6+4j

    python将复数作为单个对象来存储,使用的类型为complex类型:

    >>> print(complex_number)
    (6+4j)

    >>> type(complex_number)
    <class 'complex'>

    可以使用complex构造函数来构造复数对象

    >>> complex_number=complex(6,4)
    >>> complex_number
    (6+4j)

    >>> print(1j**2)
    (-1+0j)

    不能直接用j来表示虚数单位,而必须使用1j,单独的j表示名称为j的变量。

    复数对象的实数部分和虚数部分都被存储为浮点数

    >>> print((1+0j)/3)
    (0.3333333333333333+0j)

    >>> print(2*(10+3j)*(6.5-4j)/(1-1j)+30)
    (127.5+56.5j)

     数学运算Re和Im分别返回一个复数的实数部分和虚数部分。在python中可以使用每个complex类型的对象都具有的real属性和imag属性得到这两种运算的结果。每个结果都是float类型:

    >>> x=5-6j
    >>> print(x.real)
    5.0
    >>> print(x.imag)
    -6.0

    内置的abs函数返回 int 类型、long类型 或double类型的对象的绝对值,对于复数,abs函数返回量值 magnitude,即实数部分与虚数部分的平方和的平方根。

    >>> print(abs(x))
    7.810249675906654
    >>> import math
    >>> print(math.hypot(x.real,x.imag))
    7.810249675906654

    每个complex类型的对象都有一个名为conjugate的方法,这个方法返回复数的共轭值。共轭复数指拥有相同实数部分和相反虚数部分的两个复数。 

    >>> print(x.conjugate())
    (5+6j)

     python提供了一个称作cmath的模块,这包含了相同函数的复数版本,即它们应用在复数上并返回复数。这个模块中的平方根函数可以处理-1

    >>> import cmath
    >>> print(cmath.sqrt(-1))
    1j

    python语言将复数的实数部分和虚数部分都存储为相同精度的浮点值,在绝大多数系统上是16位的精度。

    8 数组

    列表可以被修改,元组不能被修改

    from math import sqrt
    def stddev(numbers):
    n=len(numbers)
    sum=0
    sum_of_squares=0
    for number in numbers:
    sum+=number
    sum_of_squares+=number*number
    return sqrt(sum_of_squares/n-(sum/n)**2)

    >>> print(stddev((5.6,3.2,-1.0,0.7)))
    2.501374622082826

    pythonu将列表中的每个元素都表示为一个对象。

    array 模块 ,用来表示一维数值数组。这个模块中的array类型将数组中的所有数值作为一个对象存储在内存中,并且要求所有数值必须是同一数值类型。可以存储int/float类型值 ,还可以存储其他大小的整数以及其他精度的浮点数。但不能存储非常大的值,而且完全不能存储复数。

    当创建一个数组时,需要指定存储在数组中的数值的数值类型。数值类型可用一个字符指定。如果要存储python中的int类型的对象,使用l;对于float类型的对象,使用d.如果不做其他任何指定,则将得到一个空数组。

    >>> import array

    >>> a=array.array("l")
    >>> print(a)
    array('l')

    >>> a.append(15)
    >>> print(a)
    array('l', [15])

    >>> a.extend([20,17,0])
    >>> print(a)
    array('l', [15, 20, 17, 0])

    >>> a[1]=42
    >>> print(a)
    array('l', [15, 42, 17, 0])

    >>> del a[2]
    >>> print(a)
    array('l', [15, 42, 0])

    通过将一个列表或元组作为参数传递给数组类型的构造函数,可以把它们转换为一个数组对象:

    >>> t=(5.6,3.2,-1.0,0.7)
    >>> a=array.array("d",t)
    >>> print(a)
    array('d', [5.6, 3.2, -1.0, 0.7])

    如果把一个数组类型的对象转换回一个普通的元组或列表,只需要将这个数组类型的对象传递给tuple或list类型的构造函数。

    >>> back_again=tuple(a)
    >>> print(back_again)
    (5.6, 3.2, -1.0, 0.7)

    数组对象的所有元素必须是相同类型;与列表相同,数组对象是一维的;

    array模块是python标准库的一部分;数组对象不能自动被存储;

    数组对象存储值的效率比数值列表高。

    总结:

    表示数值数组最简单的方法是使用数值列表或数值元组。为使存储更有效率,需要使用python语言中的array模块。

    与python语言中的其他对象一样,每个数值都有类型。python有3种基本的数值类型。int类型表示整数,float类型表示浮点数。第三种数值类型是复数。

    可以使用str构造函数将python中 任何数值转换为一个字符串,这产生了字符串类型的文本,可以被print语句打印出来。

    要格式化一个整数,在格式化字符串中使用%d转换符号。对于浮点数,使用%f,如果对浮点数使用%d,或者对整数使用%f,python会将数值转换为转换符号表示的类型。

    python为各种数值类型都提供了标准的算术运算符:+-*/

    array模块中的array类型将数组中的数值在内存中存储为一个对象,这些数值必须有相同的类型。

    math模块包含函数:sqrt平方根函数 exp指数函数,log log10自然对数函数和以10为底的对数函数,sin con tan三角函数,asin/acos/atan反三角函数,以及sinh/cosh/tanh双曲函数。

    def format_bytes(number):
    gbnum=number//(1024*1024*1024)
    leave=number-(gbnum*1024*1024*1024)
    mbnum=leave//(1024*1024)
    leave2=leave-(mbnum*1024*1024)
    kbnum=leave2//(1024)
    bbnum=leave2-(kbnum*1024)
    return ("%d GB+%d MB+%d KB+%d bytes"%(gbnum,mbnum,kbnum,bbnum))

    >>> print(format_bytes(9876543210))
    9 GB+203 MB+5 KB+746 bytes

    def rgb_to_html(red,green,blue):
    red=int(round(red*255))
    green=int(round(green*255))
    blue=int(round(blue*255))

    return("#%02x%02x%02x"%(red,green,blue)) #02 两位 如果有一位则前面显示0

    >>> print(rgb_to_html(0.0,0.0,0.0))
    #000000

    def normalize(arr):
    sum_of_squares=0
    for num in arr:
    sum_of_squares+=num*num
    result=list(arr)
    scale=1/sqrt(sum_of_squares)
    for i in range(len(result)):
    result[i]*=scale
    return result

    >>> normalize([1.0,1,2])
    [0.4082482904638631, 0.4082482904638631, 0.8164965809277261]

  • 相关阅读:
    位或( | )
    学习进度笔记7
    学习进度笔记6
    学习进度笔记5
    学习进度笔记4
    学习进度笔记3
    学习进度笔记2
    学习进度笔记1
    周总结13
    《黑客与画家》阅读笔记6
  • 原文地址:https://www.cnblogs.com/caojuansh/p/11806715.html
Copyright © 2011-2022 走看看