|
|

楼主 |
发表于 2019-5-18 18:34:45
|
显示全部楼层
d1, d2 = {}, {}
def begin(): # 开始
s = "通讯录"
print("{:-^30}".format(s) + "\n本通讯录以名字为媒介添加电话.email.工作单位\
且可进行添加联系人(默认为联系人1)")
print("请按以下方式操作:" + "\n提示:(通讯录可持续执行,退出即结束)" + "\n"+\
"电话:国际冠码-国际电话区号-封闭电话号码" + "(此电话号码仅指封闭电话号码)")
print('"0"键退出通讯录,"1"键查询,"2"键添加,"3"键删除,"4"键全部查询,"5"键拓展知识' + "\n请输入:")
def transfer(): # 中转站
k = eval(input())
s = 0
while k == 1 or k == 2 or k == 3:
if s != 0:
k = eval(input())
if k == 1:
inquire()
execute()
elif k == 2:
e = addinitial()
execute()
elif k == 3:
e = delete(e)
execute()
elif k == 4:
entire()
execute()
elif k == 5:
expand()
execute()
else:
print("输入不符,请重新输入:")
s += 1
if k == 0:
s1 = "已退出"
print("{:*^30}".format(s1))
def inquire(): # 查询
sin = 0
if not d1:
print("通讯录为空!")
else:
i = input("输入查询人:")
# 两字典不能合并,属于并列关系
if i in d1:
for sin in range(len(d1.keys())):
if list(d1.keys())[sin] == i:
print("存在,基本信息:")
print("name:{0:<30}phone:{1:}".format(i, d1[i]) + "\n"+\
"email:{0:<30}工作单位(work unit):{1:}".format(list(d2.keys())[sin], list(d2.values())[sin]))
else:
print("查询未有此人!")
def addinitial(): # 添加
# 此处出现的错误在于不能将值赋给键,要通过str转换字符串,也不能通过变量赋值
# 那样会直接把变量赋给键
e = 1
a = input("请输入联系人名称(name):")
if a == "":
a = "联系人" + str(e)
e += 1
b = input("电话(phone):")
while addinitial1(b):
b = input("输入方式不符题意,请重新输入:")
d1[a] = b
c = input("请输入电子邮箱(email)(一般格式:name@domain.com):")
while addinitial2(c):
c = input("格式不对,请重新输入:")
d = input("工作单位(work unit):")
d2[c] = str(d)
print("已添加")
return e
def addinitial1(a1):
l = 0
for i in a1:
try:
i = eval(i)
except:
break
if type(i) == int:
l += 1
if l != 11:
return True
else:
return False
def addinitial2(a):
for i in a:
if a[-4:] != ".com":
return True
for i in a[:-5]:
if i == "@":
return False
return True
def delete(e): # 删除
cos = 0
if not d1:
print("通讯录已为空!无法删除")
else:
i = input("请输入你要删除的联系人:")
# 提醒键
a = eval(input("你确定要删除该联系人?(True确定或False算了)"))
if a:
if i in d1:
for cos in range(len(list(d1.keys()))):
if list(d1.keys())[cos] == i:
del d1[i]
del d2[list(d2.keys())[cos]]
print("已删除!")
e -= 1
return e
else:
print("此联系人不存在!")
def execute(): # 实现循环执行
print("再次选择:")
transfer()
def entire():
if k in d1:
for tan in range(len(list(d1.keys()))):
print("联系人{0:}:" + "\nname:{1:<30}phone:{2:<15}".format(tan, list(d1.keys())[tan], list(d1.values()[tan])) \
+ "\nemail:{0:<30}工作单位:{1:<15}".format(list(d2.keys())[tan], list(d2.values())[tan]))
def expand():
print("国际电话区号,即国际电信联盟根据E.164标准分配给各国的代码。" + "\n"+\
"所有的号码都是前缀号,也就是说这些号码是用来“拨到”目的国家的。"+\
"\n每一个国家还有一个前缀来“拨出”自所处的国家,这个前缀叫国际" + "\n"+\
"冠码。简言之,拨打国际电话的一般顺序是:国际冠码-国际电话区号-" + "\n"+\
"封闭电话号码,或者:国际冠码-国际电话区号-国内电话区号-开放电话号码。")
print("(区号)如:852 --香港(中华人民共和国特别行政区)" + "\n\t"+\
"853 --澳门(中华人民共和国特别行政区)")
def main():
begin()
transfer()
main()
源代码是这,添加联系人后,全部查询出问题 |
|