Python 学习的第五天
写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享
一、课堂笔记
1.字符编码
二进制
---->ASKII:只能存储英文和拉丁字符。一个字符占一个字节,占8位。
------>Gb2312:只能存6700多个中文字符,1980
-------->gbk1.0:存了两万多字符,1995
---------->gb18030:27000中文,2000
------------->unicode:utf-32: 一个字符占4个字节
------------->unicode:utf-16:一个字符占2个字节或2个以上,65535
------------->unicode:utf-- 8:一个英文用ASKII码来存,一个中文占3个字节
转成unicode叫做编码,从unicode转成别的语言叫做解码
GBK能显示的中文,Unicode也能显示。Unicode向下兼容GBK。虽然都能显示中文,但字符编码不一样。(基于Python2来说)
Python3 :
所有的字符默认是 Unicode in Python 3
encode 在编码的同时,会把数据转成字节类型(英文数字还是按照ASKII码来,但中文就转成代码了)
decode 在解码的同时,会把 bytes 类型转成字符串
b = byte = 字节类型 = [ 0 - 255 ]
Python 3 中的encode 和 Python 2 中的encode不一样
二、实践学习
需求: 打印省、市、县三级菜单。 可以随时返回上一级。 可以随时退出程序,不用exit来实现。
思路:(初步思路) 通过字典的嵌套来实现三级菜单的构建。 三级菜单的打印使用了if x=1? 然后进行打印,很麻烦,麻烦到令人发指。 返回上一级就是从底层while循环退出到上一层while循环。 随时退出程序暂时没有想法。 后期思路: 层层嵌套一定要用到循环来寻找便捷 代码实现:
1 china = { 2 ‘黑龙江‘:{‘佳木斯‘:[‘桦川‘,‘桦南‘,‘汤圆‘], 3 ‘哈尔滨‘:[‘松北‘,‘南岗‘,‘平房‘], 4 ‘鸡西‘:[‘鸡蛋‘,‘鸭蛋‘,‘鹅蛋‘] 5 }, 6 ‘吉林‘:{ ‘长春‘:[‘四平‘,‘松原‘,‘白城‘], 7 ‘吉林市‘:[‘吉北‘,‘吉南‘,‘吉东‘], 8 ‘通化‘:[‘东昌‘,‘集安‘,‘辉南‘] 9 }, 10 ‘广东‘:{‘广州‘:[‘海珠‘,‘天河‘,‘白云‘], 11 ‘深圳‘:[‘福田‘,‘罗湖‘,‘南山‘], 12 ‘珠海‘:[‘香洲‘,‘斗门‘,‘金湾‘] 13 } 14 15 } 16 # 重复率很高 代码效率很差 17 back_flag = False # 为了让程序可以输入b返回上一层循环 18 exit_flag = False 19 while not back_flag and not exit_flag: 20 for key in china: #遍历china字典中的Keys 21 print(key) 22 choice = input("1>>").strip() 23 if choice == ‘b‘: 24 back_flag = True 25 if choice == ‘q‘: # 输入q退出程序 26 exit_flag = True 27 if choice in china: #判断输入的城市在不在菜单当中 28 while not back_flag and not exit_flag: #这一层循环是为了让即便输入错误仍停留在第二层当中 29 for key2 in china[choice]:# [choice] 是非常出巧的地方,避免了使用if去进行傻瓜判断 嵌套的非常巧妙 30 print(key2) 31 choice2 = input("2>>").strip()#choice2 是第二次输入的值,也就是市级菜单的值 32 if choice2 == ‘b‘: 33 back_flag = True 34 if choice2 == ‘q‘: # 输入q退出程序 35 exit_flag = True 36 37 if choice2 in china[choice]: 38 while not back_flag and not exit_flag: #也是为了即便输入错误的值仍停留在该层等待 39 for key3 in china[choice][choice2]:#这里字典的遍历挺精彩的!!!!!!! 40 print(key3) 41 choice3 = input("3>>").strip() 42 if choice3 == ‘b‘: #输入b返回上一层循环 43 back_flag = True 44 if choice3 == ‘q‘: # 输入q退出程序 45 exit_flag = True 46 47 else: 48 back_flag = False 49 50 else: 51 back_flag = False
以上代码为第一次写出来的笨重版本代码,具体笨重在代码循环的方式以及输入变量判断上,很是繁琐。
之后的代码为改进版本。
1 china = { 2 ‘黑龙江‘:{‘佳木斯‘:{‘桦川‘,‘桦南‘,‘汤圆‘}, 3 ‘哈尔滨‘:{‘松北‘,‘南岗‘,‘平房‘}, 4 ‘鸡西‘:{‘鸡蛋‘,‘鸭蛋‘,‘鹅蛋‘} 5 }, 6 ‘吉林‘:{ ‘长春‘:{‘四平‘,‘松原‘,‘白城‘}, 7 ‘吉林市‘:{‘吉北‘,‘吉南‘,‘吉东‘}, 8 ‘通化‘:{‘东昌‘,‘集安‘,‘辉南‘} 9 }, 10 ‘广东‘:{‘广州‘:{‘海珠‘,‘天河‘,‘白云‘}, 11 ‘深圳‘:{‘福田‘,‘罗湖‘,‘南山‘}, 12 ‘珠海‘:{‘香洲‘,‘斗门‘,‘金湾‘} 13 } 14 15 } 16 17 exit_flag = False 18 current_layer = china 19 20 layers = [china] 21 22 while not exit_flag: 23 for k in current_layer: 24 print(k) 25 choice = input(">>:").strip() 26 if choice == "b": 27 current_layer = layers[-1] 28 #print("change to laster", current_layer) 29 layers.pop() 30 elif choice not in current_layer:continue 31 else: 32 layers.append(current_layer) 33 current_layer = current_layer[choice]
三、心得
代码写的还不是很顺手,包括最初那到需求的时候所思考的方式,有点死,所以导致代码量复杂,很多傻瓜代码,然后在Python的编码学习部分学习的不是很透彻,学的很浅薄,主要还是亲手写代码这部分,很欠练。今天的学习更多都是在写这篇代码,其次学习了编码部分。T_T 编码部分的学习有点蒙比,有点乱学的,可能需要一段时间在代码上沉浸,才能慢慢感悟这些东西。
原文地址:https://www.cnblogs.com/jinzejun/p/8444125.html