day22 栈 , 队列 , 约束和反射
#!/usr/bin/env python
# -*- coding:utf-8 -*- # 1.请使用面向对象实现栈(后进先出)
"""
class Account:
def __init__(self):
self.lst = [] def func(self, x):
self.lst.append(x) def pop(self):
self.lst.pop() obj = Account()
obj.func('a')
print(obj.lst)
obj.func('b')
print(obj.lst)
obj.pop()
print(obj.lst)
obj.pop()
print(obj.lst)
""" # 2.请使用面向对象实现队列(先进先出)
'''
class Account:
def __init__(self):
self.lst = [] def func(self, x):
self.lst.append(x) def pop(self):
self.lst.pop(0) obj = Account()
obj.func('a')
print(obj.lst)
obj.func('b')
print(obj.lst)
obj.pop()
print(obj.lst)
obj.pop()
print(obj.lst)
''' # 3.如何实现一个可迭代对象?
'''
a = '12345'
b = a.__iter__()
print(b.__next__())
''' # 4.看代码写结果
'''
class Foo(object): def __init__(self):
self.name = '武沛齐'
self.age = 100 obj = Foo()
setattr(Foo, 'email', 'wupeiqi@xx.com') v1 = getattr(obj, 'email')
v2 = getattr(Foo, 'email') print(v1, v2)
# wupeiqi@xx.com wupeiqi@xx.com
''' # 5.请补充代码(提:循环的列表过程中如果删除列表元素,会影响后续的循环,推荐:可以尝试从后向前找)
'''
li = ['李杰', '女神', '李杰', '金鑫', '李杰', '李杰', '李杰', '李杰', '李杰', '武沛齐', '李杰', '李杰'] name = input('请输入要删除的姓氏:') # 如输入“李”,则删除所有姓李的人。
# 方法一,正向删除:
"""
while 1:
s = True
for i in li:
if i.startswith(name):
s = li.remove(i)
if s:
break print(li)
"""
# 方法二,反向删除:
"""
for i in li[::-1]:
if i.startswith(name):
li.remove(i)
print(li)
"""
''' # 6.有如下字典,请删除指定数据。
'''
class User(object):
def __init__(self, name, age):
self.name = name
self.age = age info = [User('武沛齐', 19), User('李杰', 73), User('景女神', 16)] name = input('请输入要删除的用户姓名:')
# 请补充代码将指定用户对象再info列表中删除。
for i in info:
obj = i
if name == obj.name:
info.remove(i)
for j in info:
print(j.name)
''' # 7.补充代码实现:校园管理系统。
'''
class User(object):
def __init__(self, name, email, age):
self.name = name
self.email = email
self.age = age def __str__(self):
return self.name class School(object):
"""学校""" def __init__(self):
# 员工字典,格式为:{"销售部": [用户对象,用户对象,] }
self.user_dict = {} def invite(self, department, user_object):
"""
招聘,到用户信息之后,将用户按照指定结构添加到 user_dict结构中。
:param department: 部门名称,字符串类型。
:param user_object: 用户对象,包含用户信息。
:return:
"""
if not self.user_dict.get(department):
self.user_dict[department] = [user_object, ]
print('录入成功!')
print(self.user_dict)
return
self.user_dict.get(department)
self.user_dict[department].append(user_object)
print('录入成功!')
print(self.user_dict)
return def dimission(self, username, department=None):
"""
离职,讲用户在员工字典中移除。
:param username: 员工姓名
:param department: 部门名称,如果未指定部门名称,则遍历找到所有员工信息,并将在员工字典中移除。
:return:
"""
if not department:
status = False
for i in self.user_dict.values():
for j in i[::-1]:
if username == j.name:
status = True
i.remove(j)
print('删除成功!')
print(self.user_dict)
return
if not status:
print('找不到该姓名!')
return if not self.user_dict.get(department):
print('该部门不存在,请重新输入!')
return
yuangong = self.user_dict[department]
yuangong().remove(username)
print('删除成功!')
print(self.user_dict) def run(self):
"""
主程序
:return:
"""
while 1:
print('1.招聘 2.离职')
a = input('请选择功能(N/n退出):')
if a.upper() == 'N':
return
if not a.isdigit():
print('请输入数字!')
continue
if a == '1':
bumen = input('部门名称:')
name = input('姓名:')
email = input('邮箱:')
age = input('年龄:')
ss = User(name, email, age)
self.invite(bumen, ss)
elif a == '2':
us = input('请输入员工姓名:')
bumen2 = input('部门名称(有无皆可):')
self.dimission(us, bumen2)
else:
print('输入有误,请重新输入!') if __name__ == '__main__':
obj = School()
obj.run()
''' # 8.请编写网站实现如下功能。
'''
需求: 实现 MIDDLEWARE_CLASSES 中的所有类,并约束每个类中必须有process方法。 用户访问时,使用importlib和反射 让 MIDDLEWARE_CLASSES 中的每个类对 login、logout、index 方法的返回值进行包装,最终让用户看到包装后的结果。
如: 用户访问 : http://127.0.0.1:8000/login/ ,
页面显示: 【csrf】【auth】【session】 登录 【session】 【auth】 【csrf】 用户访问 : http://127.0.0.1:8000/index/ ,
页面显示: 【csrf】【auth】【session】 登录 【session】 【auth】 【csrf】 即:每个类都是对view中返回返回值的内容进行包装。
''' MIDDLEWARE_CLASSES = [
'utils.session.SessionMiddleware',
'utils.auth.AuthMiddleware',
'utils.csrf.CrsfMiddleware',
] from wsgiref.simple_server import make_server
import importlib class yueshu:
def process(self, a1):
pass class View(object):
def login(self):
return '登陆' def logout(self):
return '等处' def index(self):
return '首页' def func(environ, start_response):
start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
obj = View()
method_name = environ.get('PATH_INFO').strip('/')
if not hasattr(obj, method_name):
return ["123".encode("utf-8"), ]
response = getattr(obj, method_name)()
for path in MIDDLEWARE_CLASSES:
module_path, class_name = path.rsplit('.', maxsplit=1)
module_object = importlib.import_module(module_path) # from utils import redis
cls = getattr(module_object, class_name)
obj = cls()
response = obj.process(response)
return [response.encode("utf-8")] server = make_server('127.0.0.1', 8000, func)
server.serve_forever()
day22 栈 , 队列 , 约束和反射的更多相关文章
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- java面向对象的栈 队列 优先级队列的比较
栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...
- C++实现一个简单的双栈队列
双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出 此结构类似汉诺塔, 非常经典, 这里 ...
- 栈&队列&并查集&哈希表(julyedu网课整理)
date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...
- Leetcode栈&队列
Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...
- python学习day22 面向对象(四) 约束&反射
1.栈与队列 栈:类似弹夹,先进后出 队列:类似水管,先进先出 class Stack(object): """ 先进后出 """ def ...
- 栈 队列 hash表 堆 算法模板和相关题目
什么是栈(Stack)? 栈(stack)是一种采用后进先出(LIFO,last in first out)策略的抽象数据结构.比如物流装车,后装的货物先卸,先转的货物后卸.栈在数据结构中的地位很重要 ...
- 【图解数据结构】 栈&队列
[TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...
随机推荐
- 关于Java中基类构造器的调用问题
在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...
- 仿EXCEL插件,智表ZCELL产品V1.5 版本发布,IE8/9完全兼容
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要解决了IE8/9等低版本浏览器兼容的问题,新增了部分功能,欢迎大家体验使用. 本次版本更新内容如下 ...
- Pytorch实现UNet例子学习
参考:https://github.com/milesial/Pytorch-UNet 实现的是二值汽车图像语义分割,包括 dense CRF 后处理. 使用python3,我的环境是python3. ...
- Riccati方程(微分方程)
形如:$$\frac{dy}{dx}=P(x)y^{2}+Q(x)y+R(x)$$ 其中P(x).Q(x).R(x)是连续可微函数 或形如 $$\frac{dy}{dx}=ay^{2}+\frac{k ...
- 证明与计算(2): 离散对数问题(Discrete logarithm Problem, DLP)
离散对数问题,英文是Discrete logarithm Problem,有时候简写为Discrete log,该问题是十几个开放数学问题(Open Problems in Mathematics, ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- LinkedHashMap源码分析
hashMap源码分析:hashMap源码分析 版本说明:jdk1.7LinkedHashMap继承于HashMap,是一个有序的Map接口的实现.有序指的是元素可以按照一定的顺序排列,比如元素的插入 ...
- vue 中 assets 和 static 的区别
Vue中的静态资源管理(src下的assets和static文件夹的区别)
- asp.net获取当前请求的url
asp.net获取当前请求的url 设当前页完整地址是:http://www.dgshop.com/Home/Manager?id=2¶=ASFDG [1]获取 完整url 代码如下: ...
- SpringBoot+Swagger整合API
SpringBoot+Swagger整合API Swagger:整合规范的api,有界面的操作,测试 1.在pom.xml加入swagger依赖 <!--整合Swagger2配置类--> ...