Python 3 学习的第五天——Python基础

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

时间: 2024-08-30 13:43:27

Python 3 学习的第五天——Python基础的相关文章

Python 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作

Clam AntiVirus是一个免费而且开放源码的防毒软件,软件与病毒库的更新由开源社区免费发布,目前ClamdAV主要为Linux.Uinux系统提供病毒扫描查杀pyClamad是一个python的第三方模块,可让python直接使用ClamAV病毒扫描守护进程clamd来实现一个高效的病毒检测功能. 一.实现集中式的病毒扫描 1.安装clamavp clamd 服务的相关程序包 yum install clamav clamd clamav-update -y chkconfig clam

Python学习笔记(五)Python动态类型和引用

动态类型以及由他提供的多态性是Python语言简洁性.灵活性的基础.Python中,类型是在运行过程中自动决定的,没有必要事先声明变量.记住,Python中变量和对象是划分开来的,这样才能能清楚的理解动态类型.再记住,赋值生成的是变量到对象的引用,而非拷贝. 1,单个变量引用 以a=3为例说明Python中单个变量引用的处理过程, 1)创建一个对象代表值3,此处是整型数字对象 2)如果变量a还没有被创建的话,创建变量a(已创建则无此步骤) 3)将变量与新的对象3连接 实际效果如下图所示,变量a和

python数据结构学习笔记(五)

5 Array-Based Sequence 5.2.1 referential arrays 5.2.2 compact arrays in python array.array 5.3 dynamic arrays and amortization 5.3.1 implementing a dynamic array 5.4 efficiency of python's sequence types constant-time operation 字符串拼接 5.6 multidimensi

python 学习二十五天(python内置模块之序列化模块)

今日主要内容 1.python内置模块-序列化模块 python中的序列化模块 json 所有的编程语言都通用的序列化格式....它支持的数据类型非常有限 数字 字符串 列表 字典 pickle 只能在python语言的程序之间传递数据用的..pickle支持python中所有的数据类型 shelve python3.* 之后才有的 2.摘要模块---hashlib 3.一道经典面试题 第一.python内置模块---序列化 ***所有的导入模块都需要把import放在文件首位 什么叫序列化 能

Python 3 学习笔记(五)----变量、递归和高阶函数

一.变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.2.全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.3.当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用:在其它地方全局变量起作用. 1 country = "China" #全局变量 2 3 def change_name(name): 4 global country #如果要在函数中更改全局变量,只有一种方法在函数中声明global+变量名.永远不要用这种方法

python系统学习:第五周之数据分析1

# 打开文件path = 'D:\\操作软件\\pydata-book-2nd-edition\\pydata-book-2nd-edition\\datasets\\bitly_usagov\\example.txt'# json格式处理import json records = [json.loads(line) for line in open(path)]# 校验 print(records[0])# tz时区计数from pandas import DataFrame, Seriesi

python cookbook 学习系列(一) python中的装饰器

简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,我们也称之为AOP(面向切面编程) 原理 实现装饰器的最主要的原因是python中一切皆为对象,我们会把方法看做一个对

Python 3 学习的第三天——Python基础

Python 学习的第三天 写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享 一.课堂笔记 1.(上节回顾) 多行注释  ''' --还有一个作用是打印多行: "   " --这种引号只能打印单行的.  加一个变量它就是多行,不加变量它就是多行注释.在 Python 中单双引号意义是一样的. 2.Pycharm 的使用:开发工具的使用 IDE--Intergrated Development Environment VIM  # 经典的Linux下的文本编辑器   小白

Python高手之路【五】python基础之正则表达式

下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print(result) 字符^:匹配以什么开头 import re st = 'python' result = re.findall('^py',st) print(result) 字符$:匹配以什么结尾 import re st = 'python' result = re.findall('n$',s