python版亲戚关系计算器

栏目: Python · 发布时间: 6年前

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

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

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

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

目前我看到比较好的版本是:

https://github.com/mumuy/relationship

python版亲戚关系计算器 python版亲戚关系计算器 小程序版本

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

  1. 定义最基本的原子关系,比如: f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
  2. 通过关系链,表示复合关系,比如:爷爷就是 f,f ,伯父就是 f,ob
  3. 讲前两点对应关系用字典的方式预先整理好,就是所有关系链到称谓的直接映射
  4. 定义可简化的关系,比如:哥哥的姐姐就是自己的姐姐,即 xb,xs 就是 xs ;母亲的丈夫 m,h 就是父亲 f 。这一步的作用是为了将复杂的关系链转化成可查找到的直接关系链
  5. 为了处理性别、长幼带来的影响,作者还额外定义了一些修饰符: 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
  6. 定义好以上信息好,当获取用户的输入后,将其转化成关系符号,再递归简化关系链,直到不可再简化为止,再去映射关系中查找称呼。

这个版本的算法是网上相对最完善的,并且被MIUI自带亲戚计算器功能所采用。

作者的详细解读:

https://www.jianshu.com/p/74290f1ae838

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

python版亲戚关系计算器

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

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

════


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Analytics 2.0

Web Analytics 2.0

Avinash Kaushik / Sybex / 2009-10-26 / USD 39.99

The bestselling book Web Analytics: An Hour A Day was the first book in the analytics space to move beyond clickstream analysis. Web Analytics 2.0 will significantly evolve the approaches from the fir......一起来看看 《Web Analytics 2.0》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具