用Python实现一个小小的通讯录(存储本地json)

好久没写博客了,刚好这些天有个python作业要求完成一个小小的通讯录(使用json)。


我加入了三个信息 name, number, like_music(滑稽),主要涉及到对json文件的操作,顺便对我去年学习语言时的一个小总结。话不多说,上代码~~~~~

import json
import os
import random
 
path = r"xxx.json" # enter your path
if not os.path.exists(path):
    print(1)
    with open(path, 'w') as fp:
        pass
 
 
def show(dic):
    fmt = "{:5}\t|{:^11} |\t{:^10}"
    print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
    print(fmt.format("Name", "Number", "Like_Music"))
    
    for i in dic:
        print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
        print(fmt.format(dic[i]['name'], dic[i]['number'], dic[i]['like_music']))
    print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
    input("enter continue\n")
    
    return True
 
 
def find(dic, name):
    fmt = "{:5}\t|{:^11} |\t{:^10}"
    all_person_no = []
    
    for i in dic:
        if dic[i]['name'] == name:
            print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
            print(fmt.format(dic[i]['name'], dic[i]['number'], dic[i]['like_music']))
            print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
            all_person_no.append(i)
 
    if len(all_person_no) == 0:
        return False, None
    else:
        return True, all_person_no
 
 
def insert(data):
    name = input("Enter the name\n")
    flag, person_no = find(data, name)
    if flag:
        if input("Already exists, whether to change(enter y change||enter n new one)\n") == "y": 
            if len(person_no) > 1:
                if input("same name person numbers >= 2, whether to change them all(enter y)\n") == "y":
                    
                    number = input("Enter the number\n")
                    like_music = input("Enter the like_music\n")
                    for new_person_no in person_no:
                        new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
                        data.update(new_json)
                    with open(path, 'w', encoding='utf-8') as fw:
                        json.dump(data, fw, indent=4, ensure_ascii=False)
                    return True
                else:
                    number = input("Enter the number\n")
                    like_music = input("Enter the like_music\n")
                    
                    while 1:
                        change_no = int(input("enter this person number who you want to change(first is 1, second is 2...)\n"))
                        
                        try:
                            new_person_no = person_no[change_no - 1]
                            
                            new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
                            data.update(new_json)
                            with open(path, 'w', encoding='utf-8') as fw:
                                json.dump(data, fw, indent=4, ensure_ascii=False)
                            return True
                        except:
                            print("please enter right number")
 
            else:
                number = input("Enter the number\n")
                like_music = input("Enter the like_music\n")
                
                new_person_no = person_no[0]
                new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
                
                data.update(new_json)
                
                with open(path, 'w', encoding='utf-8') as fw:
                    json.dump(data, fw, indent=4, ensure_ascii=False)
                return True
 
    number = input("Enter the number\n")
    like_music = input("Enter the like_music\n")
    
    random_number = random.randint(0, 100)

    
    new_person_no = "person" + str(random_number)
    new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
 
    data.update(new_json)
 
    with open(path, 'w', encoding='utf-8') as fw:
        json.dump(data, fw, indent=4, ensure_ascii=False)
    return True
 
 
def delete(data, name):
    flag, person_no = find(data, name)
    
    if flag:
        if input("sure to delete?(enter y)\n") == "y":
            for i in range(len(person_no)):
                data.pop(person_no[i])
                with open(path, 'w', encoding='utf-8') as fw:
                    json.dump(data, fw, indent=4, ensure_ascii=False)
            print("delete succeeded")
    else:
        print("no person named{}, delete error!".format(name))
 
 
while True:
    try:
        with open(path, 'r', encoding='utf-8') as fp:
            data = json.load(fp)
    except:
        data = {}
    print("|---------------|" + "\n"
           "|0:exit        |" + "\n"
           "|1:show        |" + "\n"
           "|2:find        |" + "\n"
           "|3:insert      |" + "\n"
           "|4:delete      |" + "\n"    
           "|--------------|")
    select_number = input("Select the number you entered\n")
    print()
    if select_number == '0':
        print("Welcome to use next time")
        break
 
    elif select_number == '1':
 
        result = show(data)
        if result:
            print("")
        else:
            print("show error")
 
    elif select_number == '2':
        
        name = input("Enter the name of the finder")
        
        result, i = find(data, name=name)
        if result:
            print("Search succeeded")
        else:
            print("no person")
        input("enter continue\n")
 
    elif select_number == '3':
        result_dic = insert(data)
        input("enter continue\n")
 
    elif select_number == '4':
        name = input("Enter the name to delete\n")
        delete(data, name)
        input("enter continue\n")
 
    else:
        print("input right selection number")

欢迎留言联系邮箱2021132070@stu.cuit.edu.cn交流问题或者私信我~~~~(这段时间比较佛系要赶学习了)

好的,我可以帮您写一个简易通讯录Python代码,以下是代码实现: ``` import json file_path = "contacts.json" # 定义通讯录数据存储文件的路径 def load_data(): try: with open(file_path, "r") as f: data = json.load(f) except FileNotFoundError: data = {} return data def save_data(data): with open(file_path, "w") as f: json.dump(data, f) def search_contact(name): data = load_data() if name in data: return data[name] else: return None def delete_contact(name): data = load_data() if name in data: del data[name] save_data(data) def add_contact(name, phone): data = load_data() if name not in data: data[name] = phone save_data(data) else: print("联系人已经存在!") # 主程序入口 while True: print("+=========================+") print("| 简易通讯录 |") print("+=========================+") print("| 1. 查找联系人 |") print("| 2. 删除联系人 |") print("| 3. 添加联系人 |") print("| 4. 退出 |") print("+=========================+") choice = input("请输入您的选择(数字):") if choice == "1": name = input("请输入联系人姓名:") contact = search_contact(name) if contact: print("联系人 %s 的电话号码是:%s" % (name, contact)) else: print("没有找到联系人 %s" % name) elif choice == "2": name = input("请输入联系人姓名:") delete_contact(name) print("联系人 %s 已经被删除!" % name) elif choice == "3": name = input("请输入联系人姓名:") phone = input("请输入联系人电话:") add_contact(name, phone) print("联系人 %s 已经添加成功!" % name) elif choice == "4": break else: print("请输入正确的选项!") print("感谢使用本程序!") ``` 该代码实现了简易的通讯录功能,包含了查找联系人、删除联系人、添加联系人等操作。具体实现可以参考代码中的注释。请注意,该程序并没有进行输入合法性检查等,仅供参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积分安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值