python版亲戚关系计算器

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

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


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


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


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

https://github.com/mumuy/relationship


演示地址:

http://passer-by.com/relationship/


小程序版本


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



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



其他内容回复左侧关键词获取:

python :零基础入门课程目录

新手 :初学者指南及常见问题

资源 :超过500M学习资料网盘地址

项目 :十多个进阶项目代码实例

如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

Python转行 | 爬抖音 | AI名画 | 如何debug | 查天气 | 我用Python | 知乎 | 排序 | 电影票 | 技术宅 | 单词表 | 新手建议 | 如何提问 | 一图学Python | 智能防挡弹幕

相关文章
|
安全 Serverless Python
用Python实现计算器功能
用Python实现计算器功能
207 1
|
Python
如何使用Python编写一个简单的计算器程序
如何使用Python编写一个简单的计算器程序
476 0
|
Python
python tkinter 最简洁的计算器按钮排列
python tkinter 最简洁的计算器按钮排列
284 0
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。
|
开发者 Python
Python 编程入门:从零到一实现简单计算器
【8月更文挑战第31天】在这个数字技术日益发展的时代,编程已成为一项基础技能。本文通过构建一个简单的Python计算器项目,引导初学者步入编程世界的大门。我们将一起学习如何定义函数、处理用户输入以及执行基本算术操作,最终实现一个能够进行加减乘除运算的小工具。无论你是编程新手还是想复习基础知识的开发者,这篇文章都将为你提供一次愉快的编程体验。
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
203 1
|
存储 IDE 数据处理
使用Python构建一个高级计算器
本文介绍如何使用Python和`tkinter`库构建一个高级计算器。该计算器支持基本运算(加、减、乘、除、求整、求余)、科学运算(平方根、幂等)以及简单的图形用户界面(GUI)。通过该项目,您将学习到如何处理用户输入、执行计算并显示结果。适合初学者提升编程技能。
956 0
|
Python
【Leetcode刷题Python】224. 基本计算器
LeetCode上题目“224. 基本计算器”的Python解决方案,通过使用栈来解析和计算包含加减运算及括号的算术表达式。
138 1
|
开发者 Python
Python 编程入门:从零到一实现简单计算器
【8月更文挑战第31天】 在这个数字技术日益发展的时代,编程已成为一项基础技能。本文通过构建一个简单的Python计算器项目,引导初学者步入编程世界的大门。我们将一起学习如何定义函数、处理用户输入以及执行基本算术操作,最终实现一个能够进行加减乘除运算的小工具。无论你是编程新手还是想复习基础知识的开发者,这篇文章都将为你提供一次愉快的编程体验。
|
Python
简单的 Python 计算器程序
【5月更文挑战第1天】这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
303 3

推荐镜像

更多