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# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic
例子 返回一个LIst<oject>类型 而oject含有 30个字段 而我只需要两个字段.这里实用dynamic 和 linq. 上代码: 注意select new {} 为匿名类型,这 ...
- 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏
解决方法:进入BIOS(按什么键进入bios,需要看你用什么电脑),把Intel Virtualization Technology 设置enabled 然后是黑屏解决方法:管理员模式 ...
- eslint 代码缩进 报错及解决
一.背景 使用vue在VScode中正常写的代码,报了一堆的错误,仔细检查,发现都是缩进要么多了要么少了,总之是代码不规范的的报错. 二.原因 百度查了发现代码规范默认缩进2个空格,而VScode默认 ...
- Java 基本文件操作
Java 文件操作 , 这也是基于Java API 操作来实现的. 文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制. 所谓文件, 是具有符号名而且在逻辑上具有完整意义的 ...
- 015_python原生在线调试工具
一.pdb https://docs.python.org/3/library/pdb.html
- QTableWidgetItem class
Help on class QTableWidgetItem in module PyQt5.QtWidgets: class QTableWidgetItem(sip.wrapper) | QT ...
- dos命令的使用
echo 百度欢迎您 >d:\1.txt F7查看执行过的命令 直接进入 D盘 d: 创建目录 md fox 在fox目录下创建子目录user md fox\user\hello1 进入到use ...
- 深入理解SpringIOC容器
转载来源:[https://www.cnblogs.com/fingerboy/p/5425813.html] 前言: 在逛博客园的时候突然发现一篇关于事务的好文章,说起spring事物就离不开AOP ...
- js 时间格式,加减
Date.prototype.Format = function (fmt) { //author: rixiao var o = { "M+": this.getMonth() ...
- sql 查询 以结果集为对象左连接