资讯专栏INFORMATION COLUMN

python版亲戚关系计算器

qujian / 2263人阅读

摘要:于是就有机智的程序员开发出了亲戚关系计算器,可以通过指定关系的叠加,计算出互相之间的关系称谓,有的还可以通过称呼来倒推关系。这个版本的算法是网上相对最完善的,并且被自带亲戚计算器功能所采用。

春节到了,免不了要去七大姑八大姨家拜年,顺便接受长辈们的关怀。有时偶然遇到许久没见过的远房亲戚,叫不出合适的称谓就尴尬了;或者即便被家人提示了叫法,但依然不知道和自己是什么关系。

于是就有机智的程序员开发出了 亲戚关系计算器 ,可以通过指定关系的叠加,计算出互相之间的关系称谓,有的还可以通过称呼来倒推关系。这种工具网上已经有了不少版本,网页、App、微信小程序,都能搜到不少。不过讲真,考虑到实际中能遇上的复杂关系以及东西南北各地称呼不一样,其实算不上实用。

但对于程序员来说,解决问题本身就具有挑战的乐趣。

目前我看到比较好的版本是:
https://github.com/mumuy/relationship

演示地址:
http://passer-by.com/relationship/

小程序版本

这个问题看似简单,其实处理起来也并不是几行代码就能解决的。简单介绍下 mumuy 这个版本的原理:

定义最基本的原子关系,比如:f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹

通过关系链,表示复合关系,比如:爷爷就是f,f,伯父就是f,ob

讲前两点对应关系用字典的方式预先整理好,就是所有关系链到称谓的直接映射

定义可简化的关系,比如:哥哥的姐姐就是自己的姐姐,即 xb,xs 就是 xs;母亲的丈夫 m,h 就是父亲 f。这一步的作用是为了将复杂的关系链转化成可查找到的直接关系链

为了处理性别、长幼带来的影响,作者还额外定义了一些修饰符:1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列

定义好以上信息好,当获取用户的输入后,将其转化成关系符号,再递归简化关系链,直到不可再简化为止,再去映射关系中查找称呼。

这个版本的算法是网上相对最完善的,并且被MIUI自带亲戚计算器功能所采用。
作者的详细解读:
https://www.jianshu.com/p/74290f1ae838

我本来也打算挑战一下,后来发现其实蛮复杂,估计等我写好,《难忘今宵》都唱完了,于是作罢。就在此版本的基础上,做了个 python 版本的移植(原版是 js)。

本来打算尝试用 jiphy 等自动工具来把 js 转成 python,结果发现效果差到不能看,所以最后是手动转的。原项目在文本和关系链处理时用了大量的正则计算,而我在转代码时也靠 SublimeText 的正则替换省了很多事。但同样是正则,js 和 python 的写法又有不少区别,可以说这个项目让我对 正则表达式 的熟练度又 +1 了。

python 版代码:https://gitee.com/crossin/snippet/tree/master/relationship

════

其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉 | 字符播放器 | 一图学Python | 智能防挡弹幕

欢迎搜索及关注公众号: Crossin的编程教室

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43141.html

相关文章

  • 从养猪户转行测试一步步晋升为测试经理实现财富自由,我是如何做到的...

    摘要:本人已从养猪转行软件测试,聊聊当年的经历我的老家在农村,虽然现在家里已经不养猪了,但是父母每逢春节还是会买两头大肥猪。每年年底这两头大肥猪卖的一万元钱,能顶他们半年的收入了。用粮食喂养的猪,它们是非常精神的,肉质也很香嫩。 ...

    gyl_coder 评论0 收藏0
  • OpenStack和Docker不能,ServerLess能决定云计算胜负吗?

    摘要:彼时,从虚拟化管理到公有云,热闹异常。虽然年才明显放弃公有云的全面竞争,但在年决定发起和开源项目是,不说明确,至少已经隐隐觉得肯定搞不过亚马逊了。年前卖的多火,被视为虚拟主机的升级版。当然不是新堆栈,而是传统堆栈。 还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值460亿美元的Saa...

    gitmilk 评论0 收藏0
  • 被领导拒绝涨薪申请,跳槽后怒涨8.5K,这是我的心路历程~

    摘要:可能是被领导拒绝涨薪给刺激了,就一直想着跳槽涨薪。还有就是那个不肯涨薪的领导,辞职以后,所有的都是,却连都不愿意给我涨。 毕业1年时间,从2k涨到15k,转行测试承...

    BothEyes1993 评论0 收藏0

发表评论

0条评论

qujian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<