Python学习day03 字典与函数

来源:互联网 发布:淘宝拍卖翡翠手镯被骗 编辑:程序博客网 时间:2024/05/20 22:26

  • 函数
    • 内置函数BIFbuilt-in function
    • 定义与调用函数
    • 函数的返回值
    • 函数的参数传值
    • 变量的作用域
  • 字典
    • 字典的定义
    • 字典的特性
    • 字典的增加
    • 字典的删除
    • 字典的修改
    • 字典信息的查看
    • 字典的复制
  • 课后作业
    • test01
    • test02

函数

(python的乐高积木)

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

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

In [56]: bool(1)Out[56]: TrueIn [57]: bool("")Out[57]: False

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

In [59]: a = abs    # a变量指向abs函数In [60]: a(-1)      # 可以通过a实现abs的功能;Out[60]: 1In [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 num1print type(maxSum(1,4,2))print maxSum(1,4,2)

函数的参数传值

必选参数:形参与实参的个数必须相同,否则直接报错;
默认参数:在定义函数时,给形参一个默认值;
可变参数:传入的参数个数是可变的,可以是1-n个,也可以是0个;一般实参中用*args来表示可变参数;args接收的是一个元组(tuple);
关键字参数:允许传入0个或多个包含参数名的参数,传进来的参数自动封装为一个字典.

如果四种函数参数同时存在,参数定义的顺序必须是: 必选参数,默认参数,可变参数,关键字参数.

解包:
- 把一个序列元素依次传入带有可变参数的函数时,可通过fun(*l)来解包;
- 把一个字典元素依次传入带有关键字参数的函数时,可通过fun(**d)来解包;

变量的作用域

  • 全局参数:在函数外定义的函数
  • 局部参数:在函数内部定义的函数;
  • global:声明局部变量为全局变量;
global namename = "westos"

字典

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

字典的定义:

d = {}
d = {“key1”:”value1”}
d = {“key1”:”value1”,”key2”:”value3”}

d = {

"172.25.254.1":    {    "user":"root",    "password":"westos",    "command":"hostname"    },"172.25.254.2":    {    "user":"westos",    "password":"westos1",    "command":"hostname"    }

} # 支持异构,嵌套

dict(zip(user,passwd))
“”.fromkeys([“a”,”b”],”1000”)

字典的特性

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

字典的增加

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

课后作业

test01

题目1:用户管理系统V2:

用户功能如下:
welcome to xxxx system

  • 1.注册:若用户存在,直接报错”name 已经存在”,若用户不存在,将用户信息保存起来,显示”注册成功”;
  • 2.登陆:若用户存在,判断密码是否正确,若用户不存在,报错”name 不存在”;
  • 3.注销:若用户存在,删除用户信息;若不存在,报错报错”name 不存在;
  • 4.退出:break

def login(username):
if not d.has_key(username):
print “no username”
else :
password = raw_input(“>>password: “)
if not password == d.get(username):
print “wrong password”
else :
print “login in”

def register(username):
if d.has_key(username):
print “%s had exist” %(username)
else :
password = raw_input(“>>password: “)
d[username] = password
print “success!”
print “user\tpasswd”
print “%s\t%s” %(username,password)

def logoff(username):
if not d.has_key(username):
print “%s is not exist” %(username)
else:
password = raw_input(“>>password: “)
if password == d.get(username):
del(d[username])
print “user %s has deleted success” %(username)
else:
print “failed! wrong password!”

d = {“root”:”westos”} print “””
1.注册
2.登陆
3.注销
4.退出 “”” oper = raw_input(“>>your operation: “) if oper == “4”:
print “exit”
exit() else:
if oper == “1”:
username = raw_input(“>>username: “)
login(username)
elif oper == “2”:
username = raw_input(“>>username: “)
register(username)
elif oper == “3”:
username = raw_input(“>>username: “)
logoff(username)
else :
print “wrong operation”

test02

题目2:用户管理系统V3:
d = {“name”:[]}

初始化有一个系统管理员:
用户分为两种:
用户登录:
- 登陆
- 退出

判断用户类型:
系统管理员功能:
- 1.添加用户
- 4.查看所有用户信息
- 5.退出:
普通用户功能:
- 1.查看个人信息
- 2.注销
- 2.退出

要求:
1. 根据用户身份,进入不同的管理界面;
2. 系统初始化一个系统管理员帐号;
3. 只有系统管理员可以添加用户和查看用户所有信息;
4. 普通用户只能查看个人信息,和注销帐号;

def superuser():
print “root”
print “””
1 tianjia
2 chakan
3 tuichu
“””
oper = input(“>>oper: “)
if oper == 1:
username = raw_input(“>>username: “)
if d.has_key(username):
print “username has exist!”
else:
password = raw_input(“>>password: “)
d[username] = password
print “user\tpasswd”
print “%s\t%s” % (username, password)
elif oper == 2:
print “%s” % (d) def normaluser(username):
print “normaluser”
print “””
1 chakan
2 zhuxiao
3 tuichu
“””
oper = input(“>>oper: “)
if oper == 1:
print username
print “%s” %(d.get(username))
elif oper == 2:
del(d[username])
else:
print “logout”

def login(username):
if not d.has_key(username):
print “%s is not exist” % (username)
else:
password = raw_input(“>>password: “)
if d[username] == password:
print “login in”
if username == “root”:
superuser()
else:
normaluser(username)
else:
print “wrong password”

d = {“root”: “westos”} def oper():
print “””
1.登陆
2.退出
“””
oper = input(“>>your operation: “)
if oper == 1:
username = raw_input(“>>username: “)
login(username)
elif oper == 2:
print “logout”
else:
print “wrong” for i in range(1,4):
oper()