python版亲戚关系计算器

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

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

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

于是就有机智的 程序员 开发出了 亲戚关系计算器 ,可以通过指定关系的叠加,计算出互相之间的关系称谓,有的还可以通过称呼来倒推关系。这种 工具 网上已经有了不少版本,网页、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

════


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

查看所有标签

猜你喜欢:

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

Netty实战

Netty实战

诺曼·毛瑞尔(Norman Maurer)、马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal) / 何品 / 人民邮电出版社 / 2017-5-1 / 69.00

编辑推荐 - Netty之父”Trustin Lee作序推荐 - 阿里巴巴中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Nett......一起来看看 《Netty实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

URL 编码/解码