• 吴裕雄--天生自然python学习笔记:python 用firebase实现英汉词典进阶版


    用 post 方法创建的数据会自动产生一个 id (Key ),但有时也常常为了取得这个
    id 而让程序难以处理 。 以英汉词典标准版来说,它的数据结构如下:

    如果将每条数据都改为{eword:cword }结构,则会让代码更简化。 也就是 id( Key) 
    就是英文单词,而数据内容( Va lue )就是中文翻译 。 如下 :

    要完成这个要求,则需要用到 put 方法 。 例如 : 在 English_adv 节点创建{’agree:同意’}这条数据。

    导入程序数据
    “ 3. 显示单词”的功能中,加
    入了以英文单词由小到大排序的功能 。
    def CkeckKey(no):
        key_id=""
        if datas != None:
            for key in datas:
                if no==key: # 读取键名
                    key_id = key
                    break  
        return key_id
            
    ### 主程序从这里开始 ###
            
    from firebase import firebase
    
    url = 'https://chiouapp01-74bde.firebaseio.com/English_adv/'
    fb = firebase.FirebaseApplication(url, None)
    datas=fb.get(url, None)
    
    with open('eword_less.csv','r', encoding = 'gbk') as f:
        for line in f:
            eword,cword = line.rstrip('
    ').split(',')
            if CkeckKey(eword) == "":      # 判断键是否存在
                fb.put(url,data=cword,name=eword)
                print(eword,":",cword)
        print("
    转换完毕!")         
    def menu():
        os.system("cls")
        print("英 汉 词 典")
        print("-------------------------")
        print("1. 翻  译  单  词")
        print("2. 输  入  单  词")
        print("3. 显  示  单  词")
        print("4. 修  改  单  词")
        print("5. 删  除  单  词")
        print("0. 结  束  程  序")
        print("-------------------------")
        
    def CkeckKey(no):
        key_id=""
        if datas != None:
            for key,value in datas.items():
                if no==key: # 读取键名
                    key_id = key
                    break  
        return key_id   
        
    def input_data():  
        global datas      
        while True:
            eword =input("请输入英文单字(Enter==>停止输入)")
            if eword=="": break
            key_id = CkeckKey(eword)   
            if key_id != "":      # 判断键是否存在
                print("{} 单词已存在!".format(datas.get(key_id)))
                continue
            cword=input("请输入中文翻译:")
            fb.put(url, data=cword,name=eword)
            time.sleep(2)
            if datas == None: datas = dict()
            datas[eword]=cword
            print(eword,":",cword," 已存储完毕!")
    def disp_data():
        global datas
        datas=fb.get(url, None)
        if datas != None:
            dc_sort = sorted(datas.items(),key = operator.itemgetter(0))
            n,page=0,15
            for item in dc_sort:
                if n % page ==0:
                      print("单词	中文翻译")
                      print("======================")
                key=item[0]      
                print("{}	{}".format(key,item[1]))
                n+=1
                if n == page:
                    c=input("请按 Enter 显示下一页,Q 键返回主菜单") 
                    if c.upper() == "Q":return
                    n=0
            c=input("请按任意键返回主菜单") 
    将 datas 字典根据字母进行排序后赋给 dc_sort 列表变茧, key=operator.
    itemgetter(O)表示按第 0 个字段( Key 字段)排序。
    def search_data():
        while True:
            eword =input("请输入要翻译的英文单词(Enter==>停止输入)")
            if eword=="": break
            key_id = CkeckKey(eword)
            if key_id != "":      # 判断键是否存在
                print("中文翻译:{}".format(datas[key_id]))
            else:
                print("{}单词不存在!
    ".format(eword))  
            input("请按任意键继续翻译…") 
    def edit_data():
        while True:
            eword =input("请输入要修改的英文单词(Enter==>停止输入)")
            if eword=="": break
            key_id = CkeckKey(eword)
            if key_id != "":      # 判断键是否存在
                print("原来中文翻译:{}".format(datas[key_id]))  
                cword=input("请输入中文翻译:")
                datas[key_id]=cword 
                fb.put(url + '/', data=cword, name=key_id)       
                time.sleep(2)
                print(eword,":",cword," 已修改完毕!
    ")         
            else:
                print("{} 单词不存在!
    ".format(eword)) 
    把 key_id 的内容赋给 Key, 同时通过 datas[key_i d] =cword 更新 datas
    字典中的该条数据。
    def delete_data():
        while True:
            eword =input("请输入要删除的英文单词(Enter==>停止输入)")
            if eword=="": break
            key_id = CkeckKey(eword)   
            if key_id != "":      # 判断键是否存在
                print("确定删除 {} 的数据!".format(datas[key_id]),end="")
                yn=input("(Y/N)?")
                if (yn=="Y" or yn=="y"):
                    fb.delete(url + '/' + key_id,None)
                    datas.pop(key_id)
                    print("数据删除完毕
    ")
            else:
                print("{} 单词不存在!
    ".format(eword))
    ### 主程序从这里开始 ###
    
    import time,os
    from firebase import firebase
    import operator
    
    url = 'https://chiouapp01-dedce.firebaseio.com/English_adv'
    fb = firebase.FirebaseApplication(url, None)
    datas=fb.get(url, None)
    
    while True:
        menu()
        choice = input("请输入您的选择:")
        try:
            choice = int(choice)
            print()
            if choice==1:
                search_data()
            elif choice==2:
                input_data()
            elif choice==3:
                disp_data()
            elif choice==4:
                edit_data()
            elif choice==5:
                delete_data()
            else:
                break
        except:    
            print("非常按键!")
            time.sleep(1)
    print("程序执行完毕!")
  • 相关阅读:
    iOS开发笔记18:一些编译、开发调试、打包的细节整理
    iOS开发笔记17:自定义相机拍照
    iOS开发笔记15:地图坐标转换那些事、block引用循环/weak–strong dance、UICollectionviewLayout及瀑布流、图层混合
    iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付
    iOS开发笔记13:顶部标签式导航栏及下拉分类菜单
    iOS开发笔记12:iOS7上UITextField限制字数输入导致崩溃问题
    iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging
    iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏
    iOS开发笔记9:NSUserDefaults存储自定义实体对象
    iOS开发笔记8:Remote Notification远程消息推送处理
  • 原文地址:https://www.cnblogs.com/tszr/p/12034945.html
Copyright © 2020-2023  润新知