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),不包 ...
 
随机推荐
- c/c++ 继承与多态 文本查询的小例子(非智能指针版本)
			
问题:在上一篇继承与多态 文本查询的小例子(智能指针版本)在Query类里使用的是智能指针,只把智能指针换成普通的指针,并不添加拷贝构造方法,会发生什么呢? 执行时,代码崩掉. 分析下面一行代码: Q ...
 - Status bar could not find cached time string image. Rendering in-process?
			
在开发中,控制台经常输出“Status bar could not find cached time string image. Rendering in-process?” 在 Info.plist ...
 - 浅析C#中new、override、virtual关键字的区别
			
Virtual : virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写. 默认情况下,方法是非虚拟的.不能重写非虚方法. virtual 修饰符不能与 stati ...
 - Linux 下的 python 虚拟环境  +  vim快捷方式
			
day04虚拟环境 https://www.cnblogs.com/pyyu/p/9015317.html 博客 关闭防火墙: systemctl stop firewalld # 关闭防火前 sys ...
 - MyEclipse 的智能提示设置 使开发写代码的速度更快
			
MyEclipse 是学习java 的人 最经常使用的IDE ,经常看到非常多人写代码的速度非常快.事实上他们大多数都使用了代码提示功能,代码提示有好有坏,好的方面就是使在项目开发中速度更快,不用去记 ...
 - 【网站公告】请大家不要发表任何涉及“得到App”的内容
			
大家好,今天我们收到来自杭州某某网络科技有限公司的维权骑士团队的邮件,说他们受某某(天津)文化传播有限公司委托,展开维权.园子里有些博主因为学习“得到App”的课程在博客中记了一些笔记,也被维权. 为 ...
 - 使用栈实现队列(1)(Java)
			
class MyQueue { private Stack s1; private Stack s2; public MyQueue(int size) { this.s1 = new Stack(s ...
 - 【刷题】【LeetCode】007-整数反转-easy
			
[刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接-空 007-整数反转 方法: 弹出和推入数字 & 溢出前进行检查 思路: 我们可以一次构建反转整数的一位 ...
 - [转帖]Windows 上面IE的历史
			
微软向Chrome举手投降 这么多代IE你都用过吗 2019年04月20日 18:48 4030 次阅读 稿源:太平洋电脑网 2 条评论 这个清明假节,很多人过得波澜不惊,然而一个曾被万千网民挂在口中 ...
 - elasticsearch补全功能之只补全筛选后的部分数据context suggester
			
官方文档https://www.elastic.co/guide/en/elasticsearch/reference/5.0/suggester-context.html 下面所有演示基于elast ...