python-fullstack-s13-day16-python基础

一、编码问题回顾

  在以后的工作中应该会遇到有关编码的问题,下面看一下有关于编码的描述:

  编码相当于密码本,关系到二进制与看懂的文字的的对应关系.
  最早期的密码本:
    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))

  

猜你喜欢

转载自www.cnblogs.com/bug-ming/p/9213934.html