一、编码问题回顾
在以后的工作中应该会遇到有关编码的问题,下面看一下有关于编码的描述:
编码相当于密码本,关系到二进制与看懂的文字的的对应关系.
最早期的密码本:
ascii码:只包含英文字母,数字,特殊字符.
0000 0001:
'fjdskal 我发'
字符:组成你看到的内容的最小单位就是字符.
位:二进制中占有的位置,就是位.
字节:8位表示一个字节.
对于ascii码,一个字符是用8位一个字节去表示.
A: 01000001
unicode 万国码:将全世界所有的文字都给我汇总到一起.
起初:unicode:
一个字符用16位表示.
A: 0000 0000 0000 0010
中:0000 0000 1000 0010
最终unicode:
一个字符用32位表示.
A: 0000 0000 0000 0010 0000 0000 0000 0010
中:0000 0000 1000 0010 0000 0000 1000 0010
浪费,占用资源.
utf-8: 最少用8位表示一个字符.对unicode升级,
A: 01000001
欧洲文字: 0000 0000 1000 0010
亚洲文字: 0000 0010 0000 0000 1000 0010
gbk: 国标
英文字母:一个字节表示.中文两个字节表示.
A: 01000001
中:0000 0000 1000 0010
前提:
文件的存储和传输 不能用unicode编码
除了unicode 剩下的编码方式不能直接识别.
python3x版本.
int
str ----> 在内存中用的unicode
bytes类型
list
bool
dict
set
tuple
英文:
str:
表现形式: s = 'oldboy'
内部编码: unicode
bytes:
表现形式: b1 = b'oldboy'
内部编码: 非unicode
中文:
str:
表现形式: s = '中国'
内部编码: unicode
bytes:
表现形式: b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
内部编码: 非unicode
相互间的转化关系:
二、递归函数
递归:自己调用自己。
默认递归次数:998
可设置递归次数:
import sys
sys.setrecursionlimit(100000)
1 def func(x): 2 x += 1 3 print(x) 4 func(x) 5 n = 0 6 func(n) 7 8 ''' 9 alex 比 佩奇 大两岁 n = 4 10 佩奇 比 文周 大两岁 n = 3 11 文周 比 太白 大两岁 n = 2 12 太白 26岁 n = 1 13 ''' 14 def age(n): 15 if n == 1: 16 return 26 17 else: 18 return age(n-1) + 2 19 print(age(4))
三、二分查找算法
算法,最经典最简单的算法。
前提:有序的不重复的数字序列。
1 # 第二版 原列表不发生改变,你的min_index = (end - start) // 2 + start 2 l1 = [2, 3, 5, 10, 15, 16, 18] 3 4 def two_find(l,aim,start=0,end=None): 5 end = len(l) - 1 if end is None else end 6 mid_index = (end - start) // 2 + start 7 ''' 8 第一次: aim:15 start: 0 end: 6 min_index: 3 中间值:10 aim > 10 9 第二次: aim:15 start: 4 end: 6 min_index: 5 中间值:16 aim < 16 10 第三次: aim:15 start: 4 end: 5 min_index: 4 中间值:15 aim = 15 11 ''' 12 if start <= end: 13 if aim > l[mid_index]: 14 return two_find(l, aim, start=mid_index+1, end=end) 15 elif aim < l[mid_index]: 16 return two_find(l, aim, start=start, end=mid_index) 17 elif aim == l[mid_index]: 18 return mid_index 19 else: 20 return None 21 else: 22 return None 23 print(two_find(l1,15))