Python - Day5

廖雪峰: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个字节。

Python - Day5_第1张图片
ASCII和Unicode和UTF-8.png

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

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

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

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

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

Python - Day5_第2张图片
ord&chr.png

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

Python - Day5_第3张图片
字节字符字符串.png
Python - Day5_第4张图片
bytes类型.png

11.encode()decode()

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

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

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

Python - Day5_第6张图片
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()

Python - Day5_第7张图片
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

Python - Day5_第8张图片
input输出的是str.png

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

Python - Day5_第9张图片
int()将str转换为整数.png

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

Python - Day5_第10张图片
1+2+3+到100.png
Python - Day5_第11张图片
while.png

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

①方法1

Python - Day5_第12张图片
获取1-10中的所有奇数方法1.png

continue的一大坑

Python - Day5_第13张图片
continue一大坑.png

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

Python - Day5_第14张图片
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

Python - Day5_第15张图片
如果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),可以重复添加,但无效果。
Python - Day5_第16张图片
使用add()往set中添加元素.png

④如何删除set中的元素?

  • remove(key)
Python - Day5_第17张图片
使用remove方法删除set中的元素.png

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

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

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

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

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

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

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

Python - Day5_第19张图片
abs()只接收一个参数.png

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

max()函数.png

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

Python - Day5_第20张图片
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这个函数
Python - Day5_第21张图片
从哪个文件中导入哪个函数.png

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

def nop():
    pass

⑤空函数有什么用?

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

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

  • 缺少参数检查。
Python - Day5_第22张图片
内置abs函数和自定义的my_abs函数的区别.png

②完善以下my_abs函数

Python - Day5_第23张图片
为自定义的函数添加参数检查.png

isinstance()怎么用的?

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

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

Python - Day5_第25张图片
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)