八、python基础:字典(Dictionary)

一:字典

1、字典是一种可变容器模型,可以储存任意类型对象,且字典是无序的  

2、字典的每对键值对用冒号分隔(key:value),每个键值对之间用逗号分隔,整个字典括在花括号中

d = { key1:value1 , key2:value2 ,key3:value3 }

3、字典中的键是唯一的,如果key重复,最后一个key值会替换前面的key值,字典中的key必须是不可变类型,如字符串,数字,元组,字典中的value可以为任何类型的数据

二:字典的增和改:(当key不存在时就是增,当key存在时就是改)

格式:字典名[ " key " ] = value

三:字典的删:

1、del

格式:del  字典名[ " key " ]     删除字典中指定的键值对

2、clear( )

格式:字典名.clear( )        

3、pop( )

格式:字典名.pop( " key " )        pop删除字典的某个键值对后,会返回被删除的value

4、popitem( )

格式:字典名.popitem( )      随机删除字典中的某一对键值对

四:字典的查:

1、字典名 [ " key " ]      这种方法查找时,若key不存在会报错

2、get( )

格式:字典名.get( " key " )          这里使用的是小括号,

五:使用循环遍历字典:

六、keys( )、values( )、items( )

1、在python2中:  字典名.keys( )       将字典所有的key以列表的形式输出

2、在python2中:  字典名.values( )    将字典所有的value以列表的形式输出

3、在python2中:  字典名.items( )      将字典中每一对键值对以列表的形式分别组成元组进行输出

4、在python3中,keys( )、values( )、items( ) 得到的是可迭代对象

七、字典的内置函数与方法

八:字典版名片管理系统

# coding:utf-8

#提示给用户的菜单信息
print("="*50)                            #分割线
print("\t     名片管理系统 v2.0版本")      #显示系统版本信息
print("="*50)                            #分割线
print("请输入序号选择相应操作:")          #提示用户可执行的操作
print(" 1 : 添加名片")                    #选择1,可以添加名片
print(" 2 : 删除名片")                    #选择2,可以删除名片
print(" 3 : 修改名片")                    #选择3,可以修改名片
print(" 4 : 查询指定名片")                 #选择4,可以查询指定名片
print(" 5 : 查询全部名片")                 #选择5,可以查询全部名片
print(" 6 : 退出系统")                    #选择6,则退出系统
print("="*50)                     		   #分割线

# 定义一个列表,用来存储名片
#names = []
pass_name="666"#账号
pass_word="777"#密码
new_pass_name = input("请输入安全账号:")
new_pass_word = input("请输入安全密码:")
i=0#定义个标志位
#调试用的列表
names = [
	{"name": "杨老大", "age": 23, "addr": "公教楼", "tel": "156"},
	{"name": "辛老大", "age": 23, "addr": "电气类", "tel": "158"},
	{"name": "谢老大", "age": 22, "addr": "自习室", "tel": "133"},
	{"name": "王老大", "age": 23, "addr": "图书馆", "tel": "187"}
]
if (new_pass_name==pass_name)and(new_pass_word==pass_word)and (i==0):
	while True:
		# 获取用户所选择的菜单信息
		print()   #空格
		print()   #空格
		num = int(input("请选择您要进行的操作:"))   #将收集到的信息转为int型    t 
			
		# 根据用户所选择的菜单信息执行相应的功能			
		if num == 1:
		# 添加新的名片
			while True: #死循环,当新添名片重名时,确保依旧停留在重新输入新名片信息的界面
				print()			
				print()
				print()
				print("="*50)
				print("\t\t  添加名片")                 #显示当前进行的操作
				print("="*50)
				print()
				new_name = input("请输入姓名:")        #获取新名片的  姓名
				print()
				
				
				#收集到用户输入的信息以后,拼接成想要存储的字典dict数据形式,即此时dict_info这个字典内存放的就是刚刚输入的名片信息			
											
			#遍历数据库列表信息,因为列表内存放的都是字典,所以第一次循环时,item就是字典1
				for item in names: 
					if new_name == item["name"]: #item["name"]此时就是:字典名[键]
					#如果刚刚输入的姓名和names内已有名片的姓名相同 ,则进入该if语句
						print()
						print("该用户已存在,请重新添加") #提示用户名片已存在,要求重新输入
						break                           
				else:									  #如果刚刚输入的姓名和names内已有名片的姓名不同 ,则进入该else语句    
					new_age = input("请输入年龄:")         #获取新名片的  年龄
					print()
					new_addr = input("请输入地址:")        #获取新名片的  地址
					print()
					new_tel = input("请输入电话:")         #获取新名片的  电话
					print()
					dict_info = {"name": new_name, "age": new_age, "addr": new_addr, "tel": new_tel}
					names.append(dict_info)               #将刚刚输入的名片信息存到names中
					print()
					print("添加新名片[%s]成功!\n\n该名片信息为:%s"%(new_name,dict_info) )  #提示用户添加完成
					break                               #添加完成,跳到操作菜单
				
		elif num == 2:
		# 删除一个名片
			print()
			print()
			print()
			print("="*50)
			print("\t\t  删除名片")                 #显示当前进行的操作
			print("="*50)
			print()
			for item in names:                   #打印出所有名片
				print("\n姓名: %s	年龄: %s   地址: %s	  电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
				print()
			else:                          #for in else 语句使用时,只要不在for in语句内加上break语句打断循环,最后都会执行else语句
				print()
				print("以上为全部名片信息")
			print()
			del_name=input("请选择您要删除的名片:")               #获取用户想要删除的名片信息
			print()
			sure_or_no = input("确定删除[%s]吗\t y/n"%(del_name)) 		#再次确认是否要删除
			#if sur_or_no=="y":
			#names.remove(names[del_name])
			for item in names:            #遍历
				if (del_name == item["name"]) and (sure_or_no == "y"): #判断想要删除的名片是否存在,且用户是否决定删除
					names.remove(item)       #存在则删除
					print()
					print("名片[%s]已成功删除!"%del_name) #提示用户删除成功
					break   #跳出
			else:
				print()          
				print("删除失败,请重新尝试")#输入信息有误或名片并不存在,提示用户删除失败
					#break  #跳出
				
		elif num == 3:
		# 修改一个名片
			print()
			print()
			print()
			print("="*50)
			print("\t\t  修改名片")                 #显示当前进行的操作
			print("="*50)
			print()
			for item in names:                   #打印出所有名片
				print("\n姓名: %s	年龄: %s   地址: %s	  电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
				print()
			mod_name=input("请选择您要修改的名片:")               #获取想要修改的名片的信息
			
			for item in names:               #for循环遍历names
				if mod_name == item["name"]:#判断是否存在该名片,存在则执行下面的if语句
					break
					
			else:	
				print()          
				print("您输入的信息有误!请重新尝试")#输入信息有误或名片并不存在,提示用户修改失败
				#break
			#names.index(item)
			if mod_name == item["name"]:
				after_mod_name = input("请输入该名片的新名字: ") 	   #获取修改后名片的新名字
				for items in names:               #for循环遍历names
					if after_mod_name == items["name"]:#判断是否重名,重名则退出
						print()
						print("该用户已存在,请重新输入")
						break
				else:		#若不重名则修改新名片
					after_mod_age = input("请输入该名片的新年龄: ") 	   #获取修改后名片的新年龄
					after_mod_addr = input("请输入该名片的新地址: ") 	   #获取修改后名片的新地址
					after_mod_tel = input("请输入该名片的新电话: ")        #获取修改后名片的新电话
					
					
                   #item此时为想要修改的那个名字所对应的元素(字典),比如想要修改辛老大,那么此时item就是{"name": "辛老大", "age": 23, "addr": "科大电气类", "tel": "158"}
				   #names.index(item)获取这个元素(字典)在nams列表内的下标
                   #names[下标]获取列表内的某一个元素(字典)
				   #字典名[已存在的键]=new_value  修改已存在的键值对
					names[names.index(item)]["name"]=after_mod_name   #修改名片信息
					names[names.index(item)]["age"]=after_mod_age  	  #修改名片信息
					names[names.index(item)]["addr"]=after_mod_addr   #修改名片信息
					names[names.index(item)]["tel"]=after_mod_tel     #修改名片信息
						
					print()
					print()
					print("名片修改成功,\n\n该名片的新信息为:姓名:%s 年龄:%s地址:%s电话:%s"%(after_mod_name,after_mod_age,after_mod_addr,after_mod_tel))
					#提示用户名片已修改成功,并显示出修改后名片的信息
					#break		
			
				
					
		elif num == 4:
		# 查询指定名片
			print()
			print()
			print()
			print("="*50)
			print("\t\t  查询指定名片")                 #显示当前进行的操作
			print("="*50)
			print()
			name = input("请输入要查询的名片名字:")
			for item in names:
				if name == item["name"]:         #打印名片信息
					print()
					print("\n姓名:%s年龄:%s地址:%s 电话:%s"%(item["name"],item["age"],item["addr"],item["tel"]))
					break
			else:
				print()
				print()
				print("查无此人!")		
					
					
		elif num == 5:
			# 查询全部名片
			print()
			print()
			print()
			print("="*50)
			print("\t\t  查询所有名片")                 #显示当前进行的操作
			print("="*50)
			print()
			num=len(names)
			#print("现在有名片%s,\n共%s张"%(names,num))
			for item in names:                   #打印出所有名片
				print("\n姓名:%s年龄:%s地址:%s	电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
				print()
			else:
				print()
				print("共%s张名片"%num)          #显示名片数
				
				
		elif num == 6:
		# 退出系统
			i+=1
			break
		else:
			print()
			print("您输入的信息有误,请重新输入!")

else:
	print()
	print("账号密码错误,退出系统")
	

猜你喜欢

转载自blog.csdn.net/weixin_42834609/article/details/81298187