#!/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 栈 , 队列 , 约束和反射的更多相关文章

  1. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  2. Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  3. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  4. C++实现一个简单的双栈队列

    双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出 此结构类似汉诺塔, 非常经典, 这里 ...

  5. 栈&队列&并查集&哈希表(julyedu网课整理)

    date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...

  6. Leetcode栈&队列

    Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...

  7. python学习day22 面向对象(四) 约束&反射

    1.栈与队列 栈:类似弹夹,先进后出 队列:类似水管,先进先出 class Stack(object): """ 先进后出 """ def ...

  8. 栈 队列 hash表 堆 算法模板和相关题目

    什么是栈(Stack)? 栈(stack)是一种采用后进先出(LIFO,last in first out)策略的抽象数据结构.比如物流装车,后装的货物先卸,先转的货物后卸.栈在数据结构中的地位很重要 ...

  9. 【图解数据结构】 栈&队列

    [TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...

随机推荐

  1. vue 导出xlsx表功能

    详细步骤: 1.需要安装三个依赖: npm install -S file-saver xlsx npm install -D script-loader 两个命令行包含三个依赖. 2.项目中src下 ...

  2. ubuntu环境下实现 多线程的socket(tcp) 通信

    改改就是个小型局域网聊天 服务器端: // File Name: process_server.c // Author: jiujue // Created Time: 2019年03月10日 星期日 ...

  3. jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

    org.hibernate.LazyInitializationException: could not initialize proxy [org.alan.entity.SysUser#1] - ...

  4. Python之Scripy框架

    为什么要用到cmd界面 --- 在这里操作的是Scripy框架的指令,不是Python代码 Parse --- Scripy的回调函数 fiddler --- 用于爬取JS存储数据的页面 项目: 1. ...

  5. linux系统mysql-5.7 修改字符集

    起因:我在网上看修改mysql字符的文章时,都说配置/etc/mysql/my.cnf文件 然而我打开我上述的my.cnf文件时,发现里面的内容跟别人的不一样,我就觉得这个肯定不是正确的文件 经过我在 ...

  6. animation动画案例

    最近一直苦恼做一个banner的进度条,原先用js改变width值,但明显卡顿.后来用了animation,超级好用. <!DOCTYPE html> <html lang=&quo ...

  7. sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file

    sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file 1. 权限问题 ...

  8. flask wtforms组件详解

    一.简介 在flask内部并没有提供全面的表单验证,所以当我们不借助第三方插件来处理时候代码会显得混乱,而官方推荐的一个表单验证插件就是wtforms.wtfroms是一个支持多种web框架的form ...

  9. 服务端返回的json数据,导致前端报错的原因及解决方法

    前言 最近在开发的过程中遇到了一个问题:后端传过来的json字符串不是标准的json字符串 导致报错的原因 后端传过来的json字符串中包含一些不标准的字符或错误的引号嵌套 1)\n 2) \r 3) ...

  10. 分布式唯一ID生成方案是什么样的?(转)

    一.前言 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表.因为数据量巨大一张表无法承接,就会对其进行分库分表. 但一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题, ...