如何开发亲戚计算器

这是M小白实验室第一篇娱乐性科普文章

笔者博客:mwhitelab.com

笔者公众号:技术杂学铺

又到了过年的时候,每到这个时候,你总是能见到自己几乎没印象但父母就是很熟的亲戚。

而且关系凌乱到你自己都说不清。

不信?那就来几道测试题。

2019年亲戚关系测试题正式开始。请完成如下填空。

  1. 爸爸的姐姐的女儿的女儿 = ________
  2. 妈妈的姐姐的弟弟的女儿 = ________
  3. 爷爷的弟弟的女儿的儿子 = ________
  4. 妈妈的妈妈的弟弟的儿子 = ________

参考答案如下:

  1. 表外甥女
  2. 舅表姐/舅表妹
  3. 堂姑表兄/堂姑表弟
  4. 舅表舅父

啥?

由于不知道该如何称呼,面对陌生的亲戚时,我们只能说一句“您好”,附带一个尴尬又不失礼貌的微笑。

BUT! 作为21世纪的资深网民(手机重度依赖患者),我们应该使用新时代的技术来解决这个尴尬的局面。那就是使用软件——亲戚关系计算器。

在微信小程序中搜索“亲戚计算器”会显示很多类似的程序。

操作界面和普通的计算器类似,不过数字和加减乘除键都变成了“父” “母” “兄” “姐” 这样的关系。

以后遇见类似有不确定该如何称呼的亲戚,直接这样用程序就可以了。

再BUT! 作为21世纪的新型人才(这个词是我现想的,我也不知道是啥意思),我们不能只能满足于使用,更应该探求其本质,了解亲戚关系计算器是如何实现的。

实现方法一:死记硬背法

关系称谓
父亲的父亲爷爷
父亲的母亲奶奶
父亲的姐姐姑妈
父亲的妹妹姑妈
…………

该方法尝试记下所有亲戚关系的结果,当用户想要查询某一种关系时,直接查表。

假设亲戚之间的关系只有父、母、兄、弟、姐、妹、子、女八种。(先不考虑夫妻关系)

那么像父亲的父亲,哥哥的女儿这样简单的 “XX的XX” 的关系有 8*8 = 64种可能,而 “XX的XX的XX” 有8*8*8 = 512种可能,四个关系的有4096种可能!如此大量的关系,光是把这些可能一个一个地列举出来就会让程序员精神崩溃。

然而这样的死记硬背法是可行的,之前我们看到的微信小程序(其源代码已公布在github上)就是用这个方法来实现的:

我们先对关系进行简化,比如在 ‘我’ 是男性的情况下,那么‘我的儿子的父亲的XX’在正常情况下就可以化简成 ‘我的XX’。

再比如 母亲的丈夫 = 我的父亲,兄弟的父母=我的父母,姐姐的姐姐 = 姐姐等等。

接着,我们人为给出六七百条最常用的关系和其对应的称谓。任何一条用户输入的关系,其化简后如果在已知的六七百条关系中,我们则返回其对应的称谓,否则,返回不知道。

实现方法二:网状图

在亲戚关系中,所有的名词可以分为两类。

一类是称谓,也就是我们如何称呼其他人的,如父亲、母亲、爷爷、姑姑、舅舅等。

另一类是基础关系,是称谓的子集,由父亲、母亲、儿子、女儿、哥哥、弟弟、姐姐、妹妹、丈夫、妻子,这十个词组成。任何一个称谓都可以由基础关系来表达。

如 爷爷 = 父亲的父亲;姥爷 = 母亲的父亲;太爷爷 = 父亲的父亲的父亲。

圆角长方形框内为称谓,箭头为基础关系(先不考虑丈夫与妻子这两个关系)。我们可以用如下图来表示“我”的亲戚关系:

我们对图中的每一个圆角长方形(称谓)计算其八种关系(父母儿女兄弟姐妹)。

比如,对于上图,我们接着计算父亲和母亲的八种关系对应的人,获得如下图:

之后对于得到的这张图,接着计算每个圆角长方形(称谓)对应的关系, 不断地画下去,可以得到一张巨大的网状图。

这张网状图可以无限延伸(如父亲 的 父亲 的 父亲 的 父亲……),我们根据实际情况,将网状图扩展到足够用的地步就行了。

关系网

网状图的每一个称谓和关系都是我们人为确定了。不过其工作量远远小于“死记硬背法”。因为对于一个经过四个关系的问题,如:父亲的儿子的父亲的父亲=爷爷,母亲的母亲的女儿的父亲=姥爷,一个很小的网状图就能确定这个问题的结果。而“死记硬背法”则需要记录下所有 “XX的XX的XX的XX” 对应的结果才行。

网状图如何实现

不懂编程的朋友可跳过本节往下看。

C语言可以使用结构体来表示称谓,用指针来表示关系(这里没有考虑父亲的儿子可能是自己,哥哥,弟弟多种可能)。

struct node {struct node *father; struct node *mother; struct node *big_bro; struct node *small_bro; struct node *big_sister; struct node *small_sister; struct node *son; struct node *daughter; 
};

python可以使用字典。这里主要用python写一个简单的示意程序,具体代码见github:

1.建立数据库(该工作量十分庞大,这里只展示几个例子):

me = {'f':'父亲','m':'母亲','bb':'哥哥','sb':'弟弟','bs':'姐姐','ss':'妹妹','son':'儿子','dau':'女儿'}
father = {'f':'爷爷','m':'奶奶','bb':'伯父','sb':'叔叔','bs':'姑妈','ss':'姑妈','son':['我','哥哥','弟弟'],'dau':['我','姐姐','妹妹']}
mother = {'f':'姥爷','m':'姥姥','bb':'大舅','sb':'小舅','bs':'大姨','ss':'小姨','son':['我','哥哥','弟弟'],'dau':['我','姐姐','妹妹']}
…………

2.建立中文名与变量的对应关系:

name2var = {'我':me,'父亲':father,'母亲':mother,'哥哥':big_bro,\'弟弟':small_bro,'姐姐':big_sister,'妹妹':small_sister,\'儿子':son,'女儿':daughter}
relation2char =  dict(zip(me.values(), me.keys()))import numpy as np# 考虑返回值可能不止一个 如父亲的儿子可能为[‘我’,‘哥哥’,‘弟弟’]
def returnNext(names,relation):return_name = []for name in names:return_name.append(name2var[name][relation2char[relation]])return list(set(np.array(return_name).flatten()))

3.使用一个函数,封装所有操作:

def getName(relation_name):relationships = relation_name.split('的')name = [relationships[0]]for relation in relationships[1:]:name = returnNext(name,relation)return name

4. 使用:

输入输出
getName(‘我的父亲的儿子’)[‘哥哥’, ‘我’, ‘弟弟’]
getName(‘我的母亲的女儿’)[‘姐姐’, ‘我’, ‘妹妹’]
getName(‘我的父亲的儿子的父亲’)[‘父亲’]

 

一些细节

首先,是性别:如果‘我’是女性,那么‘我的父亲的儿子’可以为[‘哥哥’,‘弟弟’],而不可以包含‘我’。(上述代码没实现)

另外,关于夫妻关系:在正常情况下,男性称谓只可以有‘妻子’,女性称谓只可以有‘丈夫’。(上述代码没实现)

第三,多种可能:‘我的父亲的儿子’ 可以是[‘我’,‘哥哥’,‘弟弟’],再若是再往后计算,如‘我的父亲的儿子的儿子’ ,需要同时考虑‘我的儿子’,‘哥哥的儿子’,‘弟弟的儿子’这三种可能。(上述代码已实现)

 

最后,给出一个线上的亲戚关系计算器。该计算器为开源代码,由mumuy开发。

参考资料

  • “亲戚关系计算器”算法实现
  • “亲戚关系”程序github源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/64471.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一款学生、工程师多功能计算器

下 载 ​【软件名称】:全能计算器 【软件语言】:简体中文 【软件大小】:10.1M 【安装环境】:Android 【下载方式 】: 百度网盘链接 链接:https://pan.baidu.com/s/1xJvFQ7Qp_AYIDs0DvNsfpg 提取码&a…

仅200行代码实现科学计算器,Antlr真是太强大了

由于最近参加的Talent Plan,需要自己实现一个基于Raft的KV引擎,所以之前说的分布式事务的内容,还要再鸽一段时间,所以为了补偿大家,我们来学学antlr吧,这次我们不在外部维护变量表,而是通过设置…

学生专用计算机多少人,怎么使用学生专用计算器?

计算机是大家生活常用的辅助设备,但普通计算器只能够计算加减乘除等基础需要,学生专用计算器是可以满足高难度的计算需求,其中的一些功能可能大家不太清楚,下面就来讲解一下它的是使用方法。 基本按键 学生专用计算器采用的是双行…

小狗为什么敢对大狗挑衅?原来有这几个“原因”

相信很多人都见过小型犬对着大型犬吠叫得很凶,“挑衅”大狗的行为。明明双方都不是一个量级的,难道小狗就没有自知之明,真的敢和大狗开战吗? 其实小狗对大狗凶,是有几个原因的!如果没有这些因素了&#xf…

威洛特:狗狗乱咬东西都是有原因的

有的时候,主人回到家中,发现狗狗把沙发、拖鞋都啃了个遍,看到这种场景是不是都想原地爆炸呢?不过狗狗出现这种行为都是有原因的,有些时候主人自身也有责任的。狗狗为什么会喜欢咬东西呢?威洛特这就带你来了…

威洛特:导致狗狗食欲不振的原因有哪些

狗狗食欲不佳可以先观察它的精神状态怎么样,有没有呕吐腹泻的症状,如果除了食欲不好之外没有其他症状表现可以给狗狗喂食益生菌调理一下肠胃。如果有出现呕吐腹泻的现象的话则需要进行对症治疗。接下来可以跟着威洛特一起来了解狗食欲不好的常见原因&…

狗狗出现这五种“现象”,多半是讨厌主人了,而你还不自知?

现在养狗的人很多,有时候在饲养的过程中,主人做了一些让狗狗不喜欢的事情,但是主人还不自知。当狗狗出现这五种“现象”时,多半是讨厌主人了。 第一种:不对你摇尾巴 摇尾巴是狗狗最常见的一种示好方式,尤其…

每日一犬 · 哈瓦那犬

哈瓦那犬 是一种坚强的短腿小型犬 具有柔软而厚密的未经修剪的毛发 它的多毛尾巴弯曲翘向后背 是一种富有感情令人喜欢的犬 哈瓦那犬 身 高:21cm-26cm 体 重:3kg-6kg 寿 命: 10年-14年 习 性:温和、惹人喜爱 喜 食:适当的饲…

小狗7岁了

变量就是在程序的运行过程中数值可变的数据,用来记录运算中间结果或保存数据。程序会为变量在内存中开辟一个存储区域,该区域有自己的名称(变量名),类型(数据类型),该区域的数据可以…

争当“猫狗”爹妈,“它经济”成流量引擎

随着国民收入水平的逐步提高、消费观念升级以及宠物观念的日益成熟,宠物经济发展迅猛且潜力大。 无论是之前"金毛siri被托运致死“登上各平台热搜,还是疫情封控期间大家分享宠物在家等主人回家的各类视频,都印证了现今宠物地位的大幅度提…

日语中动物的叫声是怎样的-狗子怎么叫的

在日文中动物的一些叫声是怎么样的,用日文怎么形容呢 动物的叫声(动物の鸣き声) 大象(ぞう):パオーンパオーン paon paon 猴子(さる):ウキーキー uki kii 熊&#xf…

四、狗狗大全应用实战

传送门 《一、Android Studio的安装和使用》 《二、Android界面开发》 《三、Android网络开发》 《四、狗狗大全应用实战》 视频教程 https://space.bilibili.com/249229063/channel/seriesdetail?sid1930119 学习目标 综合前面学习内容,完成狗狗大全App&…

网络对大学生影响的调查研究报告

作者:倪宇轩,王伟燃,卢锴,徐新顺, 胡大宸(排名不分先后) 摘要:现在大多数大学生由于在高中时期,对网络接触的十分少,进入大学之后难以端正对待网络的态度,并且…

设计《大学生暑期社会实践调查问卷》

1.设计“大学生暑期社会实践调查问卷”页面,如下图所示。 2.调查表前导语的内容如下所示: 大学生暑期社会实践调查问卷 亲爱的同学:大家好! 为了更好的了解人们对近年来计算机类专业填报火热现象的看法,特制定本问…

关于大学生寝室点外卖的调研报告

关于大学生点外卖的调研报告 调研人:陈劲涛 李清安 潘瑞祥 苏洸远(名字不分先后) 这次的分析的主要对象是大一学生,课题主要是关于大学生在寝室里点外卖的情况;从数据分析中看到的本质问题;以及出现这些…

大学生对于外卖和食堂之间的抉择的调查报告 新生研讨课校内调查

电子科技大学 张成卓,熊浩宇,郭子畅 2018年末 引言 随着科技的进步,快递行业在电商的刺激下蓬勃发展,一定程度上改变了很多行业的运营情况,其中餐饮业受到的影响可以说是很大的。身边越来越多的人足不出户就能吃到自…

【报告分享】2021大学生消费行为洞察报告-校果研究院(附下载)

摘要:中国在校大学生群体不断扩大,目前大学生人数已达4183万人。同时,随着家庭结构带来消费力的变化。「421」的家庭结构,即双方老人及父母孩子,意味着独一代的大学生将获得更多的“家庭资源”,月均可支配现金超2000。…

UQPSK调研报告

目录 研究现状国外研究现状国内研究现状 基本原理BPSKDQPSKQPSKUQPSK 调制实现QPSK 调制正交调相法相位选择法 QPSK 解调UQPSK 调制UQPSK 解调 技术优点技术局限性 研究现状 数字相位调制又称为相移键控(Phase Shift Keying, PSK),是一种十分重要的调制技术。PSK 是…

大学生外卖市场需求状况调查数据可视化报告

最近我们被客户要求撰写关于外卖市场需求可视化的研究报告,包括一些图形和统计输出。 随着社会经济的发展,饮食生活已经逐渐融入了我们的日常生活世界,每天都不可避免地在 "吃 "的问题上有更多的考虑,吃好、吃多已经不再…

大学生月生活费调研报告

调研报告 调研人:尉子谦,王奎元,王臻,周路尧 课题:格拉斯哥学院学生月生活费情况 调查形式:线上匿名填写调查问卷现场采访; 任务分配:每人去校园采访至少五人 问卷填写结果&…