最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)有趣的親戚關(guān)系計(jì)算器

 更新時(shí)間:2023年01月29日 11:33:33   作者:奧怪的小棧  
每年的春節(jié),都會(huì)有一些自己幾乎沒印象但父母就是很熟的親戚,關(guān)系凌亂到你自己都說不清。本文就來用Python制作一個(gè)有趣的親戚關(guān)系計(jì)算器,感興趣的可以了解一下

每年的春節(jié),都會(huì)有一些自己幾乎沒印象但父母就是很熟的親戚,關(guān)系凌亂到你自己都說不清。

今年趁著春節(jié)在家沒事情干,正好之前知道有中國(guó)親戚關(guān)系計(jì)算器,想著自己實(shí)現(xiàn)一下,特此記錄。

介紹

由于本人能力有限,只完成了基本功能....

需求

計(jì)算親戚關(guān)系鏈得出我應(yīng)該怎么稱呼的結(jié)果

數(shù)據(jù)定義

1.定義關(guān)系字符和修飾符

【關(guān)系】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹

【修飾符】 &o:年長(zhǎng),&l:年幼,#:隔斷,[a|b]:并列

2.關(guān)系對(duì)應(yīng)數(shù)據(jù)集合、關(guān)系過濾數(shù)據(jù)集合(data.json 和 filter.json)

原來參考的作者的關(guān)系過濾數(shù)據(jù)集合json有點(diǎn)問題,改了一下

filter 數(shù)據(jù)集的用途:比如 m,h 是我的媽媽 的丈夫就是爸爸,也就是 f。 filter 的作用是去重和簡(jiǎn)化,需要把 exp 用 str 進(jìn)行替換

算法實(shí)現(xiàn)

需要解決的情況基本有以下三種:

  • 我的爸爸 = 爸爸,
  • 我的哥哥的弟弟 = 自己/弟弟/哥哥,
  • 我的哥哥的老公 = ?

分析

三種結(jié)果:1.單結(jié)果 2.多結(jié)果 3.錯(cuò)誤提示 ,那么我們的算法要兼容以上三種情況,下面我們來一步步實(shí)現(xiàn)。

算法主要函數(shù)一:transformTitleToKey

該函數(shù)主要負(fù)責(zé)將文字轉(zhuǎn)換成關(guān)系符號(hào)

# 將文字轉(zhuǎn)換成關(guān)系符號(hào)
def transformTitleToKey(text):
    result = text.replace("的", ",").replace("我", "").replace("爸爸", "f").replace("父親", "f").replace("媽媽","m").replace("母親", "m").replace("爺爺","f,f").replace("奶奶", "f,m").replace("外公", "m,f").replace("姥爺", "m,f").replace("外婆", "m,m").replace("姥姥", "m,m").replace("老公","h").replace("丈夫", "h").replace("老婆", "w").replace("妻子", "h").replace("兒子", "s").replace("女兒", "d").replace("兄弟", "xd").replace("哥哥", "ob").replace("弟弟","lb").replace("姐妹","xs").replace("姐姐", "os").replace("妹妹", "ls").strip(",")
    return result

這里簡(jiǎn)化了原參考作者的寫法,更 簡(jiǎn)單(不是) 符合計(jì)算器設(shè)定

算法主要函數(shù)二:FilteHelper

該函數(shù)主要負(fù)責(zé)去重和簡(jiǎn)化

# 去重和簡(jiǎn)化
def FilteHelper(text):
    result = text
    filterName = '/filter.json'  # filter.json文件路徑
    if not os.path.isfile(filterName):
        return "filterName文件不存在"
    with open(filterName, "r") as f:
        obj = list(ijson.items(f, 'filter'))
    for i in range(len(obj[0])):
        users = obj[0][i]['exp']
        if users == result:
            return obj[0][i]['str']
        elif re.match(obj[0][i]['exp'], result):  # 符合正則
            result1 = re.findall(obj[0][i]['exp'], result)  # 返回string中所有與pattern匹配的全部字符串,返回形式為數(shù)組
            print(result1)
            a = 0
            result2 = ""
            if len(result1)>1:
                try:
                    for i in len(result1):
                        result = result.replace("$" + str(a + 1), result1[a])
                        a = a + 1
                    if result.find("#") != -1:
                        result_l = result
                        resultList = list(set(result_l.split("#")))  # # 是隔斷符,所以分割文本
                        for key in resultList:
                            result = FilteHelper(key.strip(","))
                            if (result.find("#") == -1):  # 當(dāng)關(guān)系符號(hào)不含#時(shí)加入最終結(jié)果中
                                result2 = result2 + result
                        return result2
                    else:
                        return text
                except Exception as e:
                    return text
            else:
                return str(result1).replace("[\'", "").replace("\']", "")
        elif re.match(obj[0][i]['exp'], strInsert(result, 0, ',')):  # 符合正則
            result1 = re.findall(obj[0][i]['exp'], strInsert(result, 0, ','))  # 返回string中所有與pattern匹配的全部字符串,返回形式為數(shù)組
            a = 0
            result2 = ""
            if len(result1)>1:
                try:
                    for i in len(result1):
                        result = result.replace("$" + str(a + 1), result1[a])
                        a = a + 1
                    if result.find("#") != -1:
                        result_l = result
                        resultList = list(set(result_l.split("#")))  # # 是隔斷符,所以分割文本
                        for key in resultList:
                            result = FilteHelper(key.strip(","))
                            if (result.find("#") == -1):  # 當(dāng)關(guān)系符號(hào)不含#時(shí)加入最終結(jié)果中
                                result2 = result2 + result
                        return result2
                    else:
                        return text
                except Exception as e:
                    return text
            else:
                return str(result1).replace("[\'", "").replace("\']", "")
    return text

這里原參考作者解釋的有點(diǎn)亂,我就以我個(gè)人見解參考著寫了出來...能跑....有錯(cuò)歡迎指出

個(gè)人測(cè)試單結(jié)果,多結(jié)果都能實(shí)現(xiàn),建議多結(jié)果實(shí)現(xiàn)參考輸出和代碼詳細(xì)理解

算法主要函數(shù)三:dataValueByKeys

該函數(shù)主要負(fù)責(zé)從數(shù)據(jù)源中查找對(duì)應(yīng) key 的結(jié)果

# 從數(shù)據(jù)源中查找對(duì)應(yīng) key 的結(jié)果
def dataValueByKeys(data_text):
    if(isChinese(data_text)):  # 判斷是否含有中文,含有的是特殊回復(fù)
        return data_text
    dataName = '/data.json'  # data.json文件路徑
    if not os.path.isfile(dataName):
        return "data文件不存在"
    fo = open(dataName, 'r', encoding='utf-8')
    ID_Data = demjson.decode(fo.read())
    fo.close()
    try:
        if ID_Data[data_text]:
            cityID = ID_Data[data_text]
            text = ""
            for key in cityID:
                text = text + key + '\\'
            return text.strip("\\")
        else:
            return "未找到"
    except Exception as e:
        result = ""
        resultList = FilteHelper(strInsert(data_text, 0, ',')).split(",")
        for key in resultList:
            result = result + dataValueByKeys(key)
        return result

輸出與效果

基本達(dá)到效果

一些細(xì)節(jié)與已知問題

首先,是性別:如果‘我’是女性,那么‘我的父親的兒子’可以為[‘哥哥’,‘弟弟’],而不可以包含‘我’。(上述代碼沒實(shí)現(xiàn))

另外,關(guān)于夫妻關(guān)系:在正常情況下,男性稱謂只可以有‘妻子’,女性稱謂只可以有‘丈夫’。(上述代碼已實(shí)現(xiàn))

第三,多種可能:‘我的父親的兒子’ 可以是[‘我’,‘哥哥’,‘弟弟’],再若是再往后計(jì)算,如‘我的父親的兒子的兒子’ ,需要同時(shí)考慮‘我的兒子’,‘哥哥的兒子’,‘弟弟的兒子’這三種可能。(上述代碼已實(shí)現(xiàn))

已知問題:某些涉及自己的多重可能還存在莫名BUG

以上就是Python實(shí)現(xiàn)有趣的親戚關(guān)系計(jì)算器的詳細(xì)內(nèi)容,更多關(guān)于Python親戚關(guān)系計(jì)算器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解用python寫一個(gè)抽獎(jiǎng)程序

    詳解用python寫一個(gè)抽獎(jiǎng)程序

    這篇文章主要介紹了用python寫一個(gè)抽獎(jiǎng)程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python?Flask?+?Redis?程序練習(xí)

    Python?Flask?+?Redis?程序練習(xí)

    這篇文章主要給大家分享Python?Flask?+?Redis?程序的練習(xí),準(zhǔn)備一個(gè)Python文件,名字為?app.py?提供一個(gè)web服務(wù),可以訪問地址,返回一個(gè)Hello?Container?World!并且記錄訪問的次數(shù),下面來看看有趣的練習(xí)過程吧
    2022-01-01
  • 使用python requests模塊發(fā)送http請(qǐng)求及接收響應(yīng)的方法

    使用python requests模塊發(fā)送http請(qǐng)求及接收響應(yīng)的方法

    用 python 編寫 http request 消息代碼時(shí),建議用requests庫(kù),因?yàn)閞equests比urllib內(nèi)置庫(kù)更為簡(jiǎn)捷,requests可以直接構(gòu)造get,post請(qǐng)求并發(fā)送,本文給大家介紹了使用python requests模塊發(fā)送http請(qǐng)求及接收響應(yīng)的方法,需要的朋友可以參考下
    2024-03-03
  • Python入門教程之pycharm安裝/基本操作/快捷鍵

    Python入門教程之pycharm安裝/基本操作/快捷鍵

    這篇文章主要介紹了Python入門教程之pycharm安裝/基本操作/快捷鍵,Python是一門非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    今天小編就為大家分享一篇使用Python畫出小人發(fā)射愛心的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-09-09
  • 解決python訪問報(bào)錯(cuò):jinja2.exceptions.TemplateNotFound:index.html

    解決python訪問報(bào)錯(cuò):jinja2.exceptions.TemplateNotFound:index.html

    這篇文章主要介紹了解決python訪問報(bào)錯(cuò):jinja2.exceptions.TemplateNotFound:index.html,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • python基礎(chǔ)之類屬性和實(shí)例屬性

    python基礎(chǔ)之類屬性和實(shí)例屬性

    這篇文章主要介紹了python類屬性和實(shí)例屬性,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • Python驗(yàn)證的50個(gè)常見正則表達(dá)式

    Python驗(yàn)證的50個(gè)常見正則表達(dá)式

    這篇文章主要給大家介紹了關(guān)于利用Python驗(yàn)證的50個(gè)常見正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)

    Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)

    最近根據(jù)領(lǐng)導(dǎo)布置的學(xué)習(xí)任務(wù),開始學(xué)習(xí)python中的matplotlib,朋友告訴我這個(gè)很簡(jiǎn)單,然而剛踏入安裝的門檻,就遇到了安裝不成功的問題,下面這篇文章主要給大家介紹了關(guān)于Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下
    2022-08-08
  • pygame實(shí)現(xiàn)貪吃蛇游戲(上)

    pygame實(shí)現(xiàn)貪吃蛇游戲(上)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評(píng)論

松桃| 尉氏县| 平湖市| 连南| 鄂伦春自治旗| 衡山县| 桂阳县| 屯留县| 红桥区| 体育| 揭西县| 永城市| 枣阳市| 家居| 金川县| 永宁县| 平湖市| 弋阳县| 永靖县| 黑山县| 北安市| 郑州市| 古丈县| 泾川县| 读书| 井陉县| 临汾市| 乐亭县| 保德县| 兰州市| 台北市| 封丘县| 香河县| 昆山市| 皋兰县| 富民县| 贵阳市| 通州市| 华宁县| 新沂市| 礼泉县|