python学习——阶段总结
1.解释型和编译型编程语言
编译型:先把代码编译成机器码-->计算机寄存器取运行 :c
先把代码编译成XXX-->计算机找虚拟机执行代码-->代码变成机器码交给计算机机去运行:c、java、c#
解释型:边解释边执行:python
2. 位和字节的关系:
8位1个字节
3.b、B、KB、MB、GB的关系:
8b=1B、1024B=1KB。。。。
4.字符串和列表如何相互转换:
列表转字符串:''.join(['xx','ff'])
字符串转列表:list('xxxxx')/split
5.写代码实现字符串反转,如v = ‘oldboy’
a. 反切:v[::-1]
b.将字符串转换成列表使用reverse方法,在转换回字符串
6.python递归的最大层数
官网:1000
7.python2 和python3的区别
a.编码&字符串
字符串
py2:3种类型:unicode v = u'root' 本质上用Unicode存储(万国码)
str/bytes(它俩一样 ) v = 'root' 本质用字节存储
py3:2种类型:str v = 'root' 本质上用unicode存储(万国码)
bytes v = b'root' 本质上用字节存储
编码
py2:ascii 文件头可以修改:#-*- encoding:utf-8 -*-
py3:utf-8 文件头可以修改:#-*- encoding:gbk -*-
b.py2:经典类/新式类;新式类找继承关系采用深度优先
py3:新式类(继承object):找继承关系采用c3算法
c.范围
py2:range(100):生成100个数,且显示/xrange(100)用一个创建一个数
py3: range(100)用一个创建一个数
d.py2除法是底板除
py3有小数
e.输入
py2:v1 = raw_input('请输入:')
py3:v2 = input('请输入:')
f.print:
py2:print 'xx'
py3:print(123)
8.用一行代码实现数值交换:
a = 1 b = 2 a,b = 2,1
9.比较:a =[1,2,3]和b = [(1),(2),(3)]以及c = [(1,)(2,)(3,)]的区别
a == b ;c中是3个元组
以后写元祖必须在后面加,
v = (1,2,3,)
Django框架静态文件配置元组必须这么写
10.求结果:
v = [lambda:x for x in range(10)] print(v) # 10个函数 print(v[0]) # 第一个函数 print(v[0]()) # 9(此时x=9)
本题推导过程:
1.puthon中函数是一个作用域; for i in range(10): pass print(i)#9 报错 def func(): for i in range(10): pass func() print(i) #9 2.lambda表达式 f1 = lambda x:x+1 func_list = [] for i in range(10): func_list.append(f1) # i = 9 # 执行函数:内部调用函数代码 func_list[0](7) 3.列表生成式 val = [lambda x:x+i for i in range(10)] ret = val[2](6) print(ret)
11.re的match和search的区别
match是从头开始找
search在里面能找到就可以
12.如何实现“1,2,3”变成['1','2','3']
str = '1,2,3' lst = str.split(',') print(lst)
13.msg = '123.33.sdhf3424.34fdg323.324'计算字符串中所有数字的和
本题结果应为:123.33+3424.34+323.32
14.创建一个闭包函数需要满足哪几点?
在内层函数中访问外层函数的局部变量
15.面向对象三大特性
继承、封装、多态
16.列举面向对象所有成员并用代码表示
17.看代码写结果
class StarkConfig(object): def __init__(self,num): self.num = num def run(self): self() def __call__(self, *args, **kwargs): print(self.num) class RoleConfig(StarkConfig): def __call__(self, *args, **kwargs): print(345) def __getitem__(self, item): return self.num[item] v1 = RoleConfig('alex') v2 = StarkConfig("wupeiqi")
print(v1[1]) print(v2[2])
print(v1[1])# v1对象后面有[]自动执行__getitem__方法,输出l print(v2[2])# v2对象后面有[]自动执行__getitem__方法,输出p
18.看代码写结果
class UserInfo(object): pass class Department(object): pass class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) class AdminSite(object): def __init__(self): self._registry = {} def register(self,k,v): self._registry[k] = v(k) site = AdminSite() site.register(UserInfo,StarkConfig) site.register(Department,RoleConfig) for k,row in site._registry.items(): row.run()
<class '__main__.UserInfo'> 999 666 <class '__main__.Department'>
19.看代码写结果
class F3(object): def f1(self): ret = super().f1() print(ret) return 123 class F2(object): def f1(self): print('123') class F1(F3,F2): pass obj = F1() obj.f1()
123
None
20.如何将一个对象编程一个可迭代对象
类里要写__iter__方法,并且返回迭代器iter([11,22,33,])
21.接口作用,约束派生类中要有那些方法
22.模拟cs游戏
1.人物角色分为警察和匪徒两种,定义成两个类
·所有的警察角色都是police
·每个警察都有自己的名字,生命,武器,性别
·每个都可以开枪攻击敌人,且攻击目标不能是police
·所有匪徒的角色都是terrorist
·每个匪徒都有自己的名字,生命,武器,性别
·每个都可以开枪攻击敌人,且攻击目标不能是terrorist
2.实例化一个警察,一个匪徒,警察攻击风土,匪徒掉血
3.提取警察类和匪徒类相似之处定义成一个父类,使用继承的方式减少代码重复
class Base(object): def __init__(self,name,gender,life_value,weapon): self.name = name self.gender = gender self.life_value = life_value self.weapon = weapon class Police(Base): def introduction(self): '''自我介绍''' tpl = '我是警察,我叫:%s' %(self.name) print(tpl) def attack(self,other): ''' 警察攻击匪徒,每次攻击自己生命值-0,匪徒生命值-100 :param other: 匪徒对象 ''' if isinstance(other,Police): print('警察自己人,别打!') return print('警察%s 要打匪徒 %s' %(self.name,other.name,)) self.life_value -= 0 other.life_value -= 100 class Terrorist(Base): def introduction(self): '''自我介绍''' tpl = '我是匪徒,我叫%s' %(self.name) print(tpl) def attack(self,other): ''' 匪徒攻击警察,每次攻击自己生命值-10;警察生命值-100 :param other: 警察对象 ''' if isinstance(other,Terrorist): print('匪徒自己人,别打!') return self.life_value -= 10 other.life_value -= 100 p1 = Police('周杰伦','男',1000,'枪') p2 = Police('吴彦祖','男',1000,'枪') t1 = Terrorist('李杰','男',1000,'刀') t2 = Terrorist('无配齐','男',1000,'刀') p1.attack(p2) t1.attack(t2) p1.attack(t1)