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

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

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

这个问题看似简单,其实处理起来也并不是几行代码就能解决的。简单介绍下 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 了。

════

其他文章及回答:

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

python生日计算器_python版亲戚关系计算器相关推荐

  1. java亲戚称呼计算器_python版亲戚关系计算器

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

  2. JavaScript,js的亲戚计算器,中国亲戚关系计算器

    JavaScript,js的亲戚计算器,中国亲戚关系计算器 工具简介 由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多.因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬. ...

  3. python版亲戚关系计算器

    2019独角兽企业重金招聘Python工程师标准>>> 春节到了,免不了要去七大姑八大姨家拜年,顺便接受长辈们的关怀.有时偶然遇到许久没见过的远房亲戚,叫不出合适的称谓就尴尬了:或者 ...

  4. Python实现一个简单的中国亲戚关系计算器,可能自己多少都有点混乱吧

    相关文件 对了大家可以关注小编的公众号哟~~ 公众号 Python日志 会不定时的更新一些好玩的资源的哟 导语 每年的春节,都会有一些自己几乎没印象但父母就是很熟的亲戚,关系凌乱到你自己都说不清. 今 ...

  5. 【Python项目】Python实现一个亲戚关系计算器,过年回家再也不要怕叫错人了 | 附带源码

    前言 halo,包子们上午好 一个简单的中国亲戚关系计算器 python实现版本 每年的春节,都会有一些自己几乎没印象但父母就是很熟的亲戚,关系凌乱到你自己都说不清. 今年趁着春节在家没事情干,正好之 ...

  6. Java实战之亲戚关系计算器(JavaFX版)(1)——项目简述

    项目简述: 该项目是一个通过JavaFX实现的计算亲戚关系的小程序,该小程序具有通过亲戚关系链计算称呼的功能.将介绍如何如何通过JavaFX来实现该项目的全部过程. 使用软件: IntelliJ ID ...

  7. Java实战之亲戚关系计算器(swing版)(1)——项目简述

    项目简述: 该项目是一个通过Java实现的计算亲戚关系的小程序,该小程序具有通过亲戚关系链计算称呼的功能.将介绍如何如何通过Java来实现该项目的全部过程. 使用软件: IntelliJ IDEA 2 ...

  8. Java实战之亲戚关系计算器(swing版)(6)——实现计算功能

    实现计算功能 在map包下创建RelationshipMap.java,其中内容如下: package map;import java.util.HashMap; import java.util.M ...

  9. js计算器代码加减乘除_理不清亲戚关系,程序员直接写了一个亲戚关系计算器,来试试?...

    Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 春节到了,免不了要去七大姑八大姨家拜年,顺便接受长辈们的关怀.有时偶然遇到许久没见过的远房亲戚,叫不出合适的称谓就尴尬了:或者即便被家人 ...

最新文章

  1. 信息与计算机科学考研学校排名,计算机科学与技术考研学校排名
  2. 【正一专栏】老夫老妻了,你还会说我爱你吗?
  3. 专注jQurey的博客【2012年度IT博客大赛分类推荐】
  4. 说说emit(上)基本操作
  5. RxJAVA notes
  6. android中的四种基本动画
  7. linux内核声卡管理,linux下声卡驱动简介
  8. 解决 uniapp 打包次数限制
  9. java mysql体检管理系统源码
  10. 显卡更新显示计算机无法识别,显卡驱动更新不了怎么办 显卡驱动更新不了解决方法...
  11. drupal html5,基于Drupal 7HTML5布局模板二次开发.doc
  12. 【笔记整理】网络攻防技术
  13. 测试基础(三)No Risk, No Test,证实和证伪相结合
  14. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
  15. C语言 -指针 与解引用*
  16. windows 命令行切换目录
  17. winter 老师前端面试直播总结
  18. 自定义控件实现(淘宝头条/京东快报)垂直循环滚动栏目
  19. 【计算机网络】第三部分 数据链路层(11) 数据链路控制
  20. 牛客网 玩泥巴 Wasserstein Distance

热门文章

  1. webhook技术快速了解
  2. FileMaker Pro 2017使用JavaScript加载百度地图并与数据库记录同步切换
  3. win7打开计算机没盘符,计算机U盘盘符不显示怎么办?Win7系统U盘不显解决办法...
  4. 三分钟教你文档怎样翻译
  5. 那些年的java游戏_那些年我们曾为之痴迷的经典JAVA游戏(3)
  6. proe导出为html文件怎么打开,Proe组件另存为stp文件的注意事项
  7. 索尼平板sgp321android,Sony Xperia Tablet Z SGP321 LTE 16GB
  8. mysql 中添加索引的三种方法(一)
  9. 项目3-食物图片分类
  10. 初识do while语句