元组,字典

29 篇文章 0 订阅

1.列表构建栈的数据结构(先进后出FILO)

栈,又叫堆栈,是一种运算受限的线性表,其限制仅允许在表的进行插入和删除运算。这一端叫做栈顶相应的,另一端叫栈尾或栈底,向一个栈中插入新元素又叫入栈,进栈,压栈。它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又叫做出栈退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

#!/usr/bin/env python
# coding=utf-8
#列表存放栈元素
stack = []
info = """
            栈操作
        1.入栈
        2.出栈
        3.栈长度
        4.栈顶元素
        5.退出
"""
print info
while 1:
    choice = raw_input("请选择:")
    if choice == "1":
        in_value = raw_input('入栈元素:')
        stack.append(in_value)
        print "元素%s入栈成功" %(in_value)
        print stack
    elif choice == '2':
        if not stack:
            print "stack栈为空"
        else:
            out_value = stack.pop()
            print "%s出栈成功" %out_value
            print stack
    elif choice == '3':
        print "栈长度为%s" %len((stack))
    elif choice =='4':
        if stack:
            print "栈顶元素%s" %stack[-1]
        else:
            print "栈为空"
    elif choice == '5':
        exit(0)
    else:
        print "请输入正确选择"

这里写图片描述

这里写图片描述

2.队列是一种特殊的线性表,它只允许再表的前端进行删除操作,而再表的后端进行插队操作,进行插入操作的端称作队尾,进行删除的一端成为队头。

#!/usr/bin/env python
# coding=utf-8
quen = []

info = """
                队列
            1.添加队列元素
            2.删除队列元素
            3.队长度
            4.队头元素
            5.队尾元素
            6退出
"""
print info
while True:
    choice = raw_input("请输入选择:")

    if choice =='1':
        in_value = raw_input("输入元素:")
        quen.append(in_value)
        print '元素%s添加成功' % in_value
        print quen
    elif choice == '2':
        if quen:
            quen.pop(0)
            print '删除队列元素%s' %quen[0]
            print quen
        else:
            print '队列为空'
    elif choice == '3':
        print '队列长度%s' % len(quen)
    elif choice == '4':
        if quen != "":
            print "队头元素%s" %quen[0]
        else:
            print "队列为空"
    elif choice =='5':
        if quen:
            print "队尾元素%s" %quen[-1]
    elif choice =='6':
        exit(0)
    else:
        print "请输入正确选择"

3.is和等于号(==)的区别

这里写图片描述

4.浅拷贝与新拷贝(需要加载copy模块)

直接赋值, 只是把新的变量指向li的内存空间, 没有复制;当li改变, li1也随之改变;

这里写图片描述

浅拷贝: 拷贝出一份副本, 但是没有拷贝子对象(列表里面的列表对象);不完全拷贝

浅拷贝方法一:切片实现li2=li[:]
这里写图片描述
浅拷贝方法二:copy.copy实现
这里写图片描述

深拷贝: 里面的所有对象重新拷贝, 包括子对象;开辟了新的内存空间

这里写图片描述

5.元组tuple

1.元组的定义,元组元素可以是多种不同数据类型

list = [1, 2, 3]  ##列表
t = (1, 2, 3, 4)  ##定义元组t,初始元素1,2,3,4
t1 = (1)      ##这是一个int型数据类型,不是元组
t2 = ('hello')    ##这是一个字符串类型

这里写图片描述

2. 定义元组, 只有一个元素, 必须加逗号;

t3 = (1, )      ##定义元组t3,只有一个元素3
t4 = tuple()    ##定义空元组t4

这里写图片描述

3.远足的特性

和列表一样,有索引, 切片, 连接, 重复,成员操作符
这里写图片描述

4.元组属于可迭代数据类型

t = (1, 1.0, 1L, 1+2j, ‘hello’, [1,2])

for i in t:
print i
这里写图片描述

6.端口扫描服务器雏形

扫描172.25.254.0/24 这个网络所有主机的ftp, ssh, http, mariadb, samba(21, 22, 80, 3306,3020)

#!/usr/bin/env python
# coding=utf-8

ips = []

for i in range(1, 255):
    # ip = '172.25.254.'+str(i)
    ips.append('172.25.254.' + str(i))

ports = (21, 22, 80, 3306, 3020)

for ip in ips:
    for port in ports:
        print '[+] Scanning %s:%d' % (ip, port)

7.元组方法

元组是不可变的数据类型,仅有t.count 统计某一元素再元组中出现的次数,t.index查询某一元素第一次出现的索引号
这里写图片描述
这里写图片描述

8.变量的交换

c语言中变量交换需要借助中间变量
x = 1
y = 2
temp = x
x = y
y = temp

对于python来说不需要:

x=1
y=2
x,y = y,x
print x,y

1). 先计算右边的表达式y,x, 在内存中开辟内存空间, 生成元组t = (y,x);
2). 将x = t[0]; y = t[1]

测试两种数据值交换的时间对比;

from timeit import Timer

print Timer(‘temp = x;x = y;y = temp’, ‘x=2;y=1’).timeit()
print Timer(‘x,y = y,x’, ‘x=2;y=1’).timeit()

后者用时更短

8.字典

dict = {} ##列表方[]括号,元组圆()括号,字典{}花括号

8.1字典的简单定义
d = {
   # :前面的称为键,key
   # :后面的称为值,value
   # 键值对(key-value)
    'name': 'root',
    'passwd':'westos'
 }
 print d['name']
 print d['passwd']
字典的复杂定义
 info = {
     'root':{
         'name': 'root',
         'passwd':'westos',
         'age':18,
         'eamil':['westos@qq.com', 'redhat@qq.com']
     },

     'student': {
         'name': 'student',
         'passwd': 'westos',
         'age': 18,
         'eamil': ['westos@qq.com', 'redhat@qq.com']
     },
 }

 print info['root']
8.2字典的三种创建方法
通过工厂函数创建字典
d = dict()
print type(d)

d = dict(a=1, b=2, c=3)
print d, type(d)
fromkeys方法创建字典
d = {}.fromkeys(['user1', 'user2', 'user3']) 
print d
8.3字典的特性

不可行的特性: 索引, 切片, 连接, 重复, (因为dict是无序的数据类型;)
可行的特性: 成员操作符;
这里写图片描述

8.4字典的增加

d.update(key=value, …..)
- 如果key值存在, 更新该key对应的value值;
- 如果key不存在, 添加key-value值;
这里写图片描述
d.setdefault(key,value)
- 如果key值存在, 不操作;
- 如果key不存在, 添加key-value值;
这里写图片描述

8.5字典的查看
d.keys()      ##用于查看字典的key
d.values()    ##用于查看字典的value
d.items()     ##用于查看字典的key-value
    for i,j in d.items():
        print i,j
d.has_key('a') ##用于判断字典的key是否存在

这里写图片描述

8.6字典的修改包括了字典元素的添加删除和更新
8.7字典元素的删除

pop

d.pop(k[,d]):
   - 如果key存在, 删除key-value;
   - 如果key不存在,判断d是否存在:
         - 如果d不存在, 报错KeyError;
         - 如果d存在, 返回d;

这里写图片描述

popitem()随机删除key-value对;当字典为空时报错;

这里写图片描述

8.8字典自身的删除

d.clean()删除字典中所有元素key-values对

这里写图片描述
del d 删除字典
这里写图片描述

练习题1

#!/usr/bin/env python
# coding=utf-8
useinfo = {
     'root':{
         'name':'root',
         'passwd':'root',
         'gender':'M',
         'age':'19',
         'email':'qq@.com'
    }
 }
info = """
                           用户管理系统
            1.注册
            2.登陆
            3.删除用户
            4.查看用户信息
            5.退出
"""
print info
while 1:
    choice = raw_input("请选择:")
    if choice == '1':
        print "注册系统界面".center(50,"*")
        username = raw_input("注册名:")
        if username in useinfo:
            print "%s 用户存在" %username
        else:
            passwd =raw_input("注册密码:")
            gender = raw_input("性别M/F:")
            if gender == "":
                gender = None
            age = raw_input("年龄:")
            if age == "":
                age = None
            email = raw_input("邮箱:")
            if email == "":
                email = None
            useinfo [username] ={
                    'name':username,
                    'passwd':passwd,
                    'gender':gender,
                    'age':age,
                    'email':email,
            }
    elif choice == "2":
        trycount = 0
        while trycount <3:
            trycount+=1
            print "欢迎进入登陆界面".center(50,"*")
            username = raw_input("登陆用户:")
            if username not in useinfo:
                print "没有%s该用户,清注册" %username
                break
            else:
                passwd = raw_input("登陆密码:")
                if passwd == useinfo[username]['passwd']:
                    print '登陆成功'
                    break
                else:
                    print '密码错误'
        else:
            print "密码错误输入大于3次"

    elif choice == '3':
        usedel = raw_input("想删除的用户:")
        if usedel not in useinfo:
          print  "%s该用户不存在:" %usedel
        else:
            passwddel = raw_input("请输入密码:")
            if passwddel not in useinfo[usedel]['passwd']:
                print "删除%s该用户的密码不正确" % usedel
            else:
                print "删除%s用户成功" % usedel
    elif choice == '4':
        usercheck = raw_input("请输入要查看用户名:")
        if usercheck not in useinfo:
            print "无%s用户" % usercheck
        else:
            cat = useinfo.get(usercheck)
            print cat
    elif choice == '5':
        print 'bye'
        exit(0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值