8.18 学习笔记

# #在规范了工程模式以后,文件中的start文件在import时需要注意
# import os
# import sys
# sys.path.append(os.path.dirname(os.getcwd()))
# from core import core:
# if __name__=='__name__':
# core.main()
# #start文件,其他的则在———init————文件中进行import,以这个被打开的文件为基准,进行相对路径

#三级菜单讲解
menu={
'北京':{
"昌平":{
"沙河":["oldboy","test"],
"天通苑":["链家地产","我爱我家"]
},
"朝阳":{
"望京":["奔驰","陌陌"],
"国贸":{"CICC","HP"},
"东直门":{"Advent","飞信"},
},
"海淀":{'ding1','ding2'},
},
'山东':{
"德州":{'dez1','dez2'},
"青岛":{'qd1','qd2'},
"济南":{'jn1','jn2'}
},
'广东':{
"东莞":{},
"常熟":{},
"佛山":{},
},
}
# def tm(dic):
# while 1:
# for k in dic:
# print(k) #输出建值
# key=input('please input:')
# if key=='q' or key=='b':return key #往上一级呈递b或q
# elif key in dic.keys() and dic[key]: #判断每一级中的值是否为输入值
# print(dic[key])
# ret=tm(dic[key]) #往下一层深究****,不是menu【沙河】,而是在已经有的条件上又来一次值:menu【沙河】【oldboy】
# if ret=='q':return q #b在一层以后不被返回,返回一次后循环上一层的地名
# elif (not dic.get(key)) or (not dic[key]):#输错后继续循环,等待正确值
# continue
# tm(menu)
# print(menu['北京'])
'''def tm(dic):
while 1:
for k in dic:
print(k) #北京 山东 广东
key=input('please input:') #北京
if key=='q' or key=='b':return key #
elif key in dic.keys() and dic[key]: #在
ret=tm(dic[key]) #往下一层深究***menu【北京】
if ret=='q':return q #
elif (not dic.get(key)) or (not dic[key]):#
continue
def tm(dic):
while 1:
for k in dic:
print(k) # 昌平 朝阳 海淀 **从新打印
key = input('please input:') # 昌平 **q
if key == 'q' or key == 'b':
return key #
elif key in dic.keys() and dic[key]: # 在
ret = tm(dic[key]) # 往下一层深究***menu【北京】【昌平】 **返回了b值
if ret == 'q': return q # #**不是q ***q,结束
elif (not dic.get(key)) or (not dic[key]): #
continue
def tm(dic):
while 1:
for k in dic:
print(k) # 沙河 天通苑
key = input('please input:') # b
if key == 'q' or key == 'b':
return key #返回b值
elif key in dic.keys() and dic[key]: #
ret = tm(dic[key]) #
if ret == 'q': return q #
elif (not dic.get(key)) or (not dic[key]): #
continue'''
#复习 装饰器
# def wrapper(f):
# def inner(*args,**kwargs):
# print('qian')
# ret=f(*args,**kwargs)
# print('hou')
# return ret
# return inner()
# @wrapper
# def asd(a,b):
# print('现有功能',a,b)
# asd(1,2)
#类
''''''
class Person:
country='china'
def __init__(self,blood,name,sex,att):
self.blood=blood
self.name=name
self.sex=sex
self.att=att
def walk(self,n):
print('%s走了,还tm走了%d步'%(self.name,n))
def attack(self,aim):
aim.blood-=self.att
print('%s打狗,狗剩余hp:%d' % (self.name, aim.blood))
class Dog:
def __init__(self,blood,kind,name,att):
self.blood=blood
self.kind=kind
self.name=name
self.att=att
def walk(self,n):
print('%s走了,还tm走了%d步'%(self.name,n))
def bit(self,aim):
aim.blood-=self.att
print('%s被咬了,剩余hp:%d'%(self.name,aim.blood))
alex=Person(100,'huluwa','m',10)
egon=Person(200,'sdtaizi','m',8)
jin=Dog(1000,'labulad','jin1',50)
# jin.bit(alex)
# alex.attack(jin)
# egon.attack(jin)
# alex.walk(3)
# jin.walk(2)
# print(alex.country)
# print(alex.blood)
# print(Person.__dict__['country']) #查看类里的静态属性,通过字典的调用形式
# print(alex.__dict__) #显示除了静态属性之外的所有属性 实例化后的信息
# #并可以进行修改
# #Person.__dict__['country']='india' 类里的静态属性不可字典式被修改
# Person.country='russia' #只能如此修改
# print(Person.__dict__['country'])
# alex.__dict__['name']='erge'
# print(alex.__dict__)
# 对象 = 类名()
# 过程:
# 类名() 首先 会创造出一个对象,创建了一个self变量
# 调用init方法,类名括号里的参数会被这里接收
# 执行init方法
# 返回self
# 对象能做的事:
# 查看属性
# 调用方法
# __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
# 类名能做的事:
# 实例化
# 调用方法 : 只不过要自己传递self参数
# 调用类中的属性,也就是调用静态属性
# __dict__ 对于类中的名字只能看 不能操作
#异常处理

# 程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
# 使用try和except就能处理异常
#try是我们需要处理的代码
#except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行except中的代码
#except支持多分支
#有没有一个能处理所有错误的类型 : Exception
# 有了万能的处理机制仍然需要把能预测到的问题单独处理
# 单独处理的所有内容都应该写在万能异常之前
# else : 没有异常的时候执行else中的代码
# finally : 不管代码是否异常,都会执行
# finally和return相遇的时候 依然会执行
# 函数里做异常处理用,不管是否异常去做一些收尾工作
try:
l=[]
print(dd)
123
except ValueError as error:print('value err',error) #显示详细错误信息
except IndexError:print('index')
except Exception as error:print('wr',error) #wr name 'dd' is not defined
else:print('no wr')
finally:print('^^^^^^^^^^^^^^')
'''AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的'''
#类2:
# 定义类
# class
# 函数 : 方法 动态属性 # 类中可以定义方法,方法都有一个必须传的参数self
# 变量 : 类属性 静态属性 # 类中可以定义静态属性
# __init__方法 初始化方法
# python帮我们创建了一个对象self
# 每当我们调用类的时候就会自动触发这个方法。默认传self
# 在init方法里面可以对self进行赋值
# self是什么 self拥有属性都属于对象
#在类的内部,self就是一个对象
# alex = Person()
# alex.walk == Person.walk(alex)
# 实例化
# 对象 = 类(参数是init方法的)
# 实例、对象 完全没有区别
# 对象查看属性
# 对象.属性名
# 对象调用方法
# 对象.方法名(参数) #类名.方法名(对象名,参数)
# 类中的静态变量 可以被对象和类调用
# 对于不可变数据类型来说,类变量最好用类名操作
# 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
# 类里的名字有 类变量(静态属性量)+ 方法名(动态属性)
# 对象里的名字 对象属性
# 对象 —— > 类
# 对象找名字 : 先找自己的 找类的 再找不到就报错
# 对象修改静态属性的值
# 对于不可变数据类型来说,类变量最好用类名操作
# 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
python = Course('egon','python','6 months',20000)
linux = Course('oldboy','linux','6 months',20000)
#['chinese']
python.language = ''
# print(python.language) #空
# print(linux.language) #chinese
Course.language = 'Chinese'
print(python.language) #空
print(linux.language) #chinese

猜你喜欢

转载自www.cnblogs.com/shori/p/9503636.html