Python学习笔记 4--字典、集合、函数(python的乐高积木一)

字典

  • 又称为(# hash,映射,关联数组)
  • “字” —> 先找首字母,查到这个字的解释所在的页数;

字典的定义:

d = {}
d = {"key1":"value1"}
d = {"key1":"value1","key2":"value3"}

a=("name","age")
b=("hallo","18")
d=dict(zip(a,b))
d           ##{'name': 'hallo', 'age': '18'}

字典的特性

  • 字典是可变数据类型;可使用len(d)内置函数,计算字典的长度;
  • 字典是无序的,与序列(str,list,tuple)不同的是,不支持索引,切片,连接与重复。只能通过key值获取对应的value值;
  • 字典支持异构,支持嵌套;

python字典的一些方法:

dict.clear      ##清空字典
dict.get        ##查询是否存在某个key
dict.iteritems   
dict.keys        
dict.setdefault  
dict.viewitems   
dict.copy       ##拷贝字典,id会改变  
dict.has_key     
dict.iterkeys   
dict.pop        ##根据key删除值     
dict.update     ##更新字典,往字典里添加元素  
dict.viewkeys    
dict.fromkeys   
dict.items      
dict.itervalues 
dict.popitem            ##随机删除 
dict.values     
dict.viewvalues
del(dict['key'])        ##删除指定的key  
del(dict)               ##删除字典

字典的增加

d.update()
d.setdefault(key[,value])
## 如果key存在,不更改;如果key不存在,添加key-value到字典中;
## 如果key值有,并不存在d字典中,默认value值为None;  

字典的删除

d.pop(key)      ## 根据某个key值删除字典中的key-value值;
d.popitem()     ## 随机删除key-value值
d.clear()       ## 清空字典的所有内容,字典还存在
del(d["key"])   ## 删除指定的key值
del(d)          ## 删除字典d,d直接不存在

字典的修改

d["key2"]="value3"

字典信息的查看

d.get("key")        # 如果key存在,返回value值;如果不存在,返回None;
d["key"]        # 如果key存在,返回value值;如果不存在,直接报错;
d.has_keys("key")   # 如果key存在,返回True;如果不存在,返回False; 
d.items()
d.keys()
d.values()

注意:如何遍历字典的所有key-value值:

for key,value in d.items():
    print key, value

字典的复制

d.copy()

In [105]: d1 = d.copy()

In [106]: id(d)
Out[106]: 20314528

In [107]: id(d1)
Out[107]: 20338192

In [108]: d2 = d

In [109]: id(d2)
Out[109]: 20314528

字典支持异构、嵌套

d = {

    "172.25.254.143":
        {
        "user":"root",
        "password":"westos",
        "command":"hostname"
        },

    "172.25.254.243":
        {
        "user":"westos",
        "password":"westos1",
        "command":"hostname"
        }
}

常用用法示例

a=("name","age")
b=("hallo","18")
d=dict(zip(a,b))
d           ##{'name': 'hallo', 'age': '18'}
d.items()       ##[('name', 'hallo'), ('age', '18')]
d.values()      ##['hallo', '18']
d.keys()        ##['name', 'age']
d.update("weight","65")
d           ##{'name': 'hallo', 'age': '18', 'weight': '65'}
for key,value in d.items():
    print "k=",key,"v=",value
##  k= name v= hallo
##  k= age v= 18
##  k= weight v= 65
i=d.iteritems()
i.next()        ##('name', 'hallo')
i.next()        ##('age', '18')
del(d)          ##删除字典

函数(python的乐高积木一)

内置函数(BIF,built-in function)

min,max,sum,zip,abs,
int,float,str,list,tuple,bool,

函数实质上是一个变量;函数名是一个指向函数对象的引用,完全可以把函数赋值给一个变量,相当于给这个函数起了个别名;

In [59]: a = abs    # a变量指向abs函数

In [60]: a(-1)      # 可以通过a实现abs的功能;
Out[60]: 1

In [61]: abs(-1)
Out[61]: 1

定义与调用函数

def 函数名([形式参数]):    ##函数定义
    函数体         ## 函数要执行的程序
    return 返回值  ## 如果没有return返回,默认返回值为None;

函数名([实参])       ##调用函数

注意:有返回值 的函数,用print fun()可以打印出返回值;

函数的返回值

  • 在函数中,一旦遇到return关键字,函数就执行结束;
  • 函数返回值只能返回一个,如果想间接返回多个值,返回值实际是一个元组;
def maxSum(num1,num2,num3):
        print num2
        return max(num1,num2,num3),sum([num1,num2,num3])
        num1 += 2
        print num1


print type(maxSum(1,4,2))
print maxSum(1,4,2)

函数的参数传值

  • 必选参数:形参与实参的个数必须相同,否则直接报错;
  • 默认参数:在定义函数时,给形参一个默认值;
  • 可变参数:传入的参数个数是可变的,可以是1-n个,也可以是0个;一般实参中用*args来表示可变参数;
    args接收的是一个元组(tuple),例如:
def func(*arg):
    print "len=\t",len(arg)
    for i in arg:
        print"i=\t", i
func(1,2,3,4)

这里写图片描述

变量的作用域

  • 全局参数:在函数外定义的函数
  • 局部参数:在函数内部定义的函数;
  • global:声明局部变量为全局变量;
name = "westos"
def fun():
    name="hello"

fun()
print "name=",name      ##westos
++++++++++++++++++++++++++++++++++++++
name = "westos"
def fun():
    global name
    name="hello"

fun()
print "name=",name              ##hello

这里写图片描述
这里写图片描述

编程练习:

  • 实现一个简单的用户管理系统,有用户的注册、登录、退出、注销、查看,并且设置一定的用户权限。

示例代码如下:

def UserManage():
    print"""
            欢迎来到用户管理系统
               请选择你的操作
  #########################################
             (A|a) :添加一个用户
             (D|d) :删除一个用户
             (V|v) :查看用户信息
             (I|i) :用户登陆
             (O|o) :用户登出
             (Q|q) :退出系统
    """
    flag = True
    UserLogin = False
    UserName = ''
    UserDict={'student':{'password':'student','level':'student'}}
    while flag:
        Operation = input('请选择: ')
        if Operation.lower == 'a':
            username = input('请输入用户名: ')
            if UserDict.get(username):
                print('用户 {} 已存在!'.format(username))
                continue
            password = input('请输入密码: ')
            userinfo={}
            userinfo.setdefault('password',password)
            userinfo.setdefault('level', 'user')
            userDict.setdefault(username,userinfo)
        elif userInput in 'dD':
            username = input('请输入用户名: ')
            if userDict.get(username) and userDict[username]['level'] != 'student':
                userDict.pop(username)
            else:
                print('用户不存在或不能被删除!')
        elif Operation.lower == 'v':
            if UserLogin == True and UserDict[userName]['level'] == 'student':
                print(UserDict)
            else:
                print('只有登陆的用户才能查看!')
        elif Operation.lower == 'i':
            if userName != '':
                print('用户 {} 已登陆, 请先登出!'.format(userName))
                continue
            username = input('请输入用户名: ')
            password = input('请输入密码: ')
            if not userDict.get(username):
                print('用户不存在!')
                continue
            if password == userDict[username]['password']:
                print('登陆成功!')
                userLogin = True
                userName = username
            else:
                print('用户名或者密码不正确!')
        elif Operation in 'oO':
            print('用户 {} 已登出!'.format(userName))
            userLogin = False
            userName = ''
        elif Operation in 'qQ':
            goon = False
        else:
            print('输入有误,请重新输入!')
    print('欢迎再来!')
UserManage()

优化后的代码:

#!user/bin/env python
#coding:utf-8
"""
file:       UserManage
date:       2017 - 08 - 30  22:14
author:     fang
version:    1.0
desc:
"""
db = {
    "root": "westos",
    "kiosk": "redhat",
}


def isUserExist(user):
    if db.has_key(user):
        return True
    else:
        print "{} 用户不存在!".format(user)
        return False


def register():
    user = raw_input("请输入你要注册的用户名:")
    if isUserExist(user):
        return "%s 已经存在,请重新输入" % user
    else:
        password = raw_input("请输入{}的密码:".format(user, ))
        db[user] = password
        return "{} 用户注册成功!".format(user, )


def login():
    trycount = 0
    while True:
        if trycount == 3:
            return "你已经登陆超过三次"

        user = raw_input("输入登陆用户名:")
        password = raw_input("密码:")

        if isUserExist(user):
            if db[user] == password:
                return "login ok"
            else:
                print  "用户密码错误"
        trycount += 1


def deleteUser():
    user = raw_input("输入你要删除的用户:")
    if isUserExist(user):
        del (db[user])
        return "{} 用户删除成功".format(user, )
    else:
        return "{} 用户不存在".format(user, )


def userInfo():
    a = "user\tpassword\n"
    for key, value in db.items():
        s = "%s\t%s\n" % (key, value)
        a += s
    return a + s
def main():
    pro = """
            用户管理系统
    1. 用户注册
    2. 用户登陆
    3. 用户注销
    4. 用户信息显示
    5. 退出

    请输入你的选择:"""

    dic = {
        1: register,
        2: login,
        3: deleteUser,
        4: userInfo,
        5: exit,
    }

    while True:
        choice = input(pro)
        print dic.get(choice)()

main()

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值