测试题:
0.python的字典是否支持一键(key)多值(value)?
不支持
1.在字典中,如果试图为一个不存在的键(key)赋值会怎么样?
会增加字典项,自动创建相应的key,并添加相应的value进去
2.成员资格操作符(in和not in)可以检查一个元素是否存在序列中,当然也可以用来检查一个键(key)是否存在字典中,那么请问那种的检查效率更高些?为什么?
检查键的效率更高些,因为字典的原理是使用哈希算法存储,一步到位,不需要使用查找算法进行匹配,因此时间复杂度是O(1),效率非常高。
3.python对键(key)和值(value)有没有类型限制?
key不可以是不确定的值
答案:key必须是可哈希的对象,不能使可变类型(包括变量,列表,字典等)
4.请目测下边代码执行后,字典dict1的内容是什么?
dict1.fromkeys((1,2,3),('one','two','three'))
dict1.fromkeys((1,3),'数字')
{1:('one','two','three'),2:('one','two','three'),3:('one','two','three')}
{1:'数字',3:'数字'}
注意:fromkeys是创建一个字典,而不是对原字典进行修改
5.如果你需要将字典dict1={1:'one',2:'two',3:'three'}拷贝到dict2,你应该怎么做?
dict2=dict1.copy()
dict2=dict2.update(dict1)
答案:可以利用字典的copy()方法,在其他语言转移到python的小伙伴刚开始可能会习惯性的直接是使用赋值的方法(dict2=dict1),这样子做再python中只是将对象的引用拷贝过去而已
动动手:
0.尝试些一个用户登录程序(这次尝试将功能封装成函数)
user_data={}
def new_user():
prompt='请输入用户名:'
while true:
name=input(prompt)
if name in user_data:
prompt='次用户名已经被使用,请重新输入:'
continue
else:
break
passwd=input('请输入密码:')
user_data[name]=passwd
print('注册成功,赶紧试试登录吧^_^')
def old_user():
prompt='请输入用户名:'
while true:
name = input(prompt)
if name not in user_data:
prompt='您输入的用户名不存在,请重新输入:'
continue
else:
break
passwd=input('请输入密码:')
pwd=user_data.get(name)
if passwd == pwd:
print('欢迎进入XXOO系统,请点击右上角的X结束程序!')
else:
print('密码错误!')
def shoumenu():
prompt='''
|--- 新建用户:N/n ---|
|--- 登录账号:E/e ---|
|--- 退出程序: Q/q ---|
|--- 请输入指令代码:'''
while true:
chosen = false
while not chosen:
choice=input(prompt)
if choice not in 'NnEeQq':
print('您输入的指令代码错误,请重新输入:')
else:
chosen=true
if choice=='q' or choice=='Q':
break
if choice=='n' or choice=='N':
new_user()
if choice=='e' or choice=='E':
old_user()
showmenu()