美文网首页
Python - Day5

Python - Day5

作者: 姚屹晨 | 来源:发表于2017-09-27 14:00 被阅读8次

    廖雪峰:Python教程

    1.因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特bit作为一个字节,所以,一个字节能表示的最大整数就是255,如果要表示更大的整数,就需要更多的字节。

    2.处理中文时一个字节显然是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所有,中国制定了GB3212(国标)编码,用来把中文编进去。

    3.各国有各国的标准,就会不可避免地出现冲突,因此,Unicode(万国码)应运而生,Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题。Unicode标准中,最常用的使用两个字节表示一个字符(如果用到非常偏僻的字符,则需要4个字节)。

    4.ASCII编码和Unicode编码的区别:
    ASCII编码是1个字节。
    Unicode编码通常是2个字节。

    5.UTF-8编码诞生的原因?
    ①字符AASCII编码是十进制的65,二进制的01000001。如果把ASCII编码的AUnicode编码,只需要在前面补80即可。

    ②如果统一换成Unicode编码,乱码的问题就迎刃而解了。但是,如果你写的文本基本上都是英文的话,用Unicode编码会比用ASCII编码多一倍的存储空间,在存储和传输上就非常的不划算。

    UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

    ASCII和Unicode和UTF-8.png

    6.小结:现在计算机系统通用的字符编码工作方式。
    ①在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或需要传输的时候,就转换为UTF-8编码。

    7.Python3版本中,字符串是以Unicode编码的,也就是说Python的字符串支持多语言。

    8.如何将十进制数转换为十六进制:

    十进制转换为十六进制.png

    9.ord()chr()函数 - ordinal & character

    ord&chr.png

    10.bytes类型
    ①存在的原因?

    字节字符字符串.png bytes类型.png

    11.encode()decode()

    纯英文encodeDecode.png 中文的编码和解码.png
    • 含有中文的str可以用UTF_8编码为bytes
    • 含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围。

    12.要计算str包含多少个字符,可以用len()函数。

    ①如果换成byteslen()函数就计算字节数

    len字符数和字节数.png
    • 可见一个中文字符经过utf-8编码后通常会占用3个字节,而一个英文字符只占用1个字节。

    13.小结

    • strbytes互相转换时,需要指定编码。最常用的就是utf-8

    14.list - 列表
    listPython内置的一种数据类型,是一种有序的集合,可以随时添加和删除其中的元素。

    ②获取列表最后一个元素的两种方式:

    获取列表中最后一个元素的两种方式.png

    ③不止-1喔,还可以-2,-3... a[-i] = a[len(a)+(-i)]

    不止-1喔.png

    ④list是一个可变的有序表,因此,可以往list中追加元素到末尾:

    list的append().png

    ⑤那怎么删除list末尾的元素呢? - pop()

    list的pop()方法.png

    pop(i)还可以删除指定位置的元素喔:

    pop(i)删除指定位置的元素.png

    ⑦要把某个元素换成别的元素,可以直接复制给对应的索引位置:

    asan换shoushan.png

    15.tuple
    ①是什么?另一种有序列表,叫元组。

    ②和list的区别?

    • tuple一旦初始化就不能修改。也就不能用append(),insert()pop()这样的方法。

    tuple的存在的意义?

    • 因为tuple不可变,所以代码更安全。

    tuple是如何表示的?

    tuple用圆括号()表示.png

    ⑤这样表示存在一种歧义:如果tuple内仅有1个数据,注意要加个逗号,喔!!!

    当tuple中只有一个数据时注意逗号喔.png
    • 因为圆括号()既可以表示tuple,也可以表示数学公式中的小括号。因此,Python规定,在这种情况下,按小括号进行计算,计算结果为1。

    tuple所谓的"不变",是指:指向永远不变。即指向'a',就不能改成'b',指向一个list,就不能改成指向其他对象,但是指向的这个list本身是可变的!

    tuple中的list本身是可变的.png

    16.小结
    listtuplePython内置的有序集合,一个可变,一个不可变。

    17.if语句执行的特点,从上到下,如果在某个判断是True,则执行该判断对应的语句,就忽略掉剩下的elifelse

    if x:   //x为0,空字符串,空list时,判断为False
    

    18.input()返回的数据类型是str

    input输出的是str.png

    解决:用int()str转换为整数

    int()将str转换为整数.png

    19.计算1+2+...+100

    1+2+3+到100.png while.png

    20.我想打印1-10中的所有奇数?

    ①方法1

    获取1-10中的所有奇数方法1.png

    continue的一大坑

    continue一大坑.png

    ③正确使用continue获取1-10中的奇数

    continue就是跳过本次循环.png

    21.小结
    break语句可以在循环过程中直接退出循环。

    continue语句可以提前结束本轮循环(本轮循环continue之后的语句将不再执行),直接开始下一轮循环。

    ③命令行模式下,如果死循环了,Ctrl+C或直接关闭窗口。

    22.dict
    Python内置了字典:dict的支持dictionary,其他语言中也称为map,使用键-值key-value存储,具有极快的查找速度。

    dictlist的区别?

    • 假设我们需要在一本字典中找到一个字,dict的做法是在字典的索引列表中找到这个字对应的页码,然后直接翻到该页;而list是从第一页开始,一页一页往后翻。

    ③由于一个key只能对于一个value,所以,"长江后浪推前浪"

    dict中长江后浪推前浪.png

    ④如果key不存在,dict就会报错 - KeyError

    如果dict中没有该Key就会报错.png

    ⑤为了避免这种情况,就需要提前判断该key是否存在?

    • 方法一:in操作符
    in操作符判断key是否存在.png
    • 方法二:dict提供的get()方法
    dict自带的get方法判断.png

    - 注意:返回None时,Python交互式命令行不显示结果。

    ⑥如何删除一个key?

    • pop(key),对于的value也会从dict中删除。
    pop(key)删除dict中的key和对应的value.png

    ⑦注意:dict内部存放的顺序和key放入的顺序是没有关系的。

    ⑧和list相比,dict有的特点:速度 & 内存

    • 查找和插入的速度极快,不会随着key的增加而变慢。
    • 但是需要占用大量的内存,内存浪费多。

    list的特点:

    • 查找和插入的时间随着元素的增加而增加。
    • 占用空间小,消耗的内存很少。

    dictkey必须是不可变的对象。

    • 因为dict是根据key来计算value的存储位置。在Python中,字符串、整数都是不可变的,而list是可变的,因此它不能作为key

    23.set
    ①是什么?

    • setdict类似,也是一组key的集合。由于key不能重复,所以,在set中,没有重复的key

    ②如何创建一个set

    • 需要提供一个list作为输入集合。
    创建一个set.png

    ③如何往set中添加元素?

    • add(key),可以重复添加,但无效果。
    使用add()往set中添加元素.png

    ④如何删除set中的元素?

    • remove(key)
    使用remove方法删除set中的元素.png

    set可以看成数学意义上的无需和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

    两个set之前的交集并集.png

    24.不可变对象
    ①是什么?

    • 调用对象自身的任何方法,都不会改变对象自身的内容。
    list是可变对象因为该对象调用自己的方法改变了对象本身.png
    • 注:列表list是可变对象,因为,当它调用自身的sort()方法时改变了其本身。
    字符串是不可变对象.png
    • 注:字符串s1本身不变,永远是"Hello"s1本身只是一个变量,它指向的对象的内容才是"Hello"。当我们调用s1.replace('H','h')时,实际上调用方法replace()是作用在字符串对象"Hello"上的,它并没有改变字符串"Hello"的内容,而是创建了一个新的字符串"hello"并返回。此时,变量s2指向该新的字符串对象"hello"

    25.借助抽象,我们不用关系底层的具体计算过程,而直接在更高层次上思考问题(高级程序语言)。

    • 函数,就是一种基本的代码抽象方式。

    26.导致TypeError错误的原因?
    ①调用函数时,传入的参数数量不对。

    abs()只接收一个参数.png

    27.max()函数可以接收任意多个参数,并返回最大的那个。

    max()函数.png

    28.数据类型转换
    int() | float() | str() | bool()

    int&float&bool&str.png

    ②函数名实际上就是指向函数对象的一个引用,完全可以把函数名赋给一个变量,相当于给这个函数起了个"别名"

    函数名其实就是指向函数对象的一个引用.png

    29.小结
    ①调用Python的函数,需要根据函数定义,传入正确的参数。

    30.定义函数
    ①如果定义的函数中没有return语句,函数执行完毕后也会返回结果,只是结果是None

    return None可以简写为return

    from exercise1 import my_abs
    //1.注意文件exercise1不加后缀py
    //2.从exercise1文件中引入my_abs这个函数
    
    从哪个文件中导入哪个函数.png

    ④如果你想定义一个什么事也不做的空函数,可以用pass语句。

    def nop():
        pass
    

    ⑤空函数有什么用?

    • pass可以用来当做占位符,比如现在还没想好怎么写函数的代码,就可先放个pass占个坑。

    31.参数检查
    ①自己定义的my_abs和内置的abs函数的区别?

    • 缺少参数检查。
    内置abs函数和自定义的my_abs函数的区别.png

    ②完善以下my_abs函数

    为自定义的函数添加参数检查.png

    isinstance()怎么用的?

    isinstance(object,classinfo) //用来判断一个对象是否是一个已知的类型
    //object - 实例对象
    //classinfo - 可以是直接或间接类名、基本类型或者它们组成的元组。
    
    isinstance.png

    注:type()isinstance()的区别?
    type()不考虑继承。
    isinstance()考虑继承。

    isinstance继承而type不考虑继承.png

    raise怎么用的?

    • 当程序出现错误,Python会自动引发异常,也可以通过raise显式地引发异常。一旦执行了raise语句,raise后面的语句将不能执行(同continue)。

    32.小结
    ①定义函数时,需要确定函数名和参数个数。
    ②最好先对参数的数据类型做检查。
    ③函数体内部可以用return随时返回函数结果。
    ④函数执行完毕也没有return语句时,自动return None
    ⑤函数可以同时返回多个值,其实就是一个tuple

    33.设置一个函数,求ax^2+bx+c = 0的解。
    import math - math.sqrt

    mathSqrt.png

    ②只有当a,b,c全部满足intfloat时,才进行下一步,否则异常。

    if not isinstance(a,(int,float)) and isinstance(b,(int,float)) and 
       isinstance(c,(int,float)) //从右往左
    //若满足以上条件
        raise TypeError("Bad operand Type!")
    

    ③当b*b-4*a*c >= 0

    x1 = (-b + math.sqrt(b*b-4*a*c))/(2*a)
    x2 = (-b - math.sqrt(b*b-4*a*c))/(2*a)
    return x1,x2
    //否则无解
    else:
        print("无解")
    

    相关文章

      网友评论

          本文标题:Python - Day5

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