关闭

用Python来写一个男女相亲小程序|码农的情人节

591人阅读 评论(0) 收藏 举报
分类:

码农的情人节

一年一度的情人节要来啦,这个浪漫温馨的节日,走在大街小巷,走在地铁里,走在商场里,走在电影院,姑娘们手里几乎都捧着一束花,心里都是乐滋滋的,一脸幸福的样子,忽然想起来很多年前我第一次送花的时候,好吧一晃都十几年过去了,在这么一个特别的日子,我也凑个热闹,也来参与一下这个情人节,于是我写一个Python相亲择偶的小程序,算是码农特有的方式过情人节吧~~


码农这个群体,高学历,高工资,高智商,但是不善于交流,圈子也很小,相信很多小伙伴或者周围的小伙伴,都有相亲的经历,或者被父母逼去相亲的经历,一般都是问年龄,你要找什么样的,有的还特讲究生肖匹配,记得网上有一个段子,说男的20-60岁都只喜欢一种类型的女孩,而20岁到60岁的女孩相亲需求却不断的变化,好我们的小程序就实现这样的功能

功能:

你输入你的性别,年龄,生日,我程序就给匹配一下你喜欢的类型,下面我们具体来讲讲怎么用Python写

第一部分:用户输入部分

1.获取用户的输入:我们用raw_input()

args =raw_input('Please input your info:sex[man,woman],age[20..60],birthday[month-day]\n')

我们希望用户输入3个参数,男或者女,年龄在20-60岁之间,生日,这个有3个问题需要解决

1).检查用户的输入,首先是长度

len(args.split())判断一下是不是3个参数

2).若长度对了,检查第一个参数是man还是woman

sexs = ['man', 'woman']

args.split()[0] not in sexs:

3).若第一个参数也对了,检查第二个参数

int(args.split()[1]) < 20 or int(args.split()[1]) > 60

也可以用int(args.split()[1]) not in range(20,61)

有一个要注意,因为输入的都是字符串,所以比如输入的20,其实是字符串'20',必须要强制转换成20才能进行比较,而且range值接受integer

4).若第二个参数读对了,检查第三个参数也就是日期

其实的合法性检查需要用datetime.datetime.strptime()若成功就返回True,否则会报错,然后我们用try/except来捕捉,若捕到了就返回False.

我这边还是很温柔的用if/elif/else这样的判断,当然你也可以暴力的用raise TypeError这样抛出一些错误.

第二部分:生日和星座的映射

2.我们让用户输入的是性别,年龄和生日,我们需要把生日转换成星座,然后才好进一步调用

1).生日和星座的mapping这个很简单,构造2个表格

constellation_name_list = [u'摩羯座',u'水瓶座',u'双鱼座',u'白羊座',

u'金牛座',u'双子座',u'巨蟹座',u'狮子座',

u'处女座',u'天秤座',u'天蝎座',u'射手座']

constellation_date_range = [(1,20),(2,19),(3,21),(4,21),

(5,21),(6,22),(7,23),(8,23),

(9,23),(10,23),(11,22),(12,22)]

2),判断生日落在哪个区间

这个解法有很多种,有一种比较讨巧的解法,是用python自带的列表比较,比如(2,1)<(2,19),利用这一点,再加上filter函数,只需要1行代码搞定,这一点非常巧妙

res=filter(lambdaeach_constellation: each_constellation <= (month,day),constellation_date_range)

会返回一个过滤的序列,比如输入的生日在3.10,那么(3,10)比(3,21)小,这样就过滤得到一个列表是[(1,20),(2,19)],取其长度为2,然后把2作为星座列表index,取constellation_name_list[2]就可以了

return constellation_name_list[len(res) %12]

有一点要注意的是星座的列表长度是12,但是下标最大是[11]

第三部分:男女择偶样本

3.我这边用一个简单的网络段子构造样本,都说男的从20到60岁都一直喜欢一种类型的就是"年轻漂亮的",而女孩喜欢的对象,随着自己年龄和阅读的增长,需求是不断的变的

25岁左右的女孩喜欢=>高大,帅气的

30岁左右的女孩喜欢=>事业有成,潇洒多金

35岁左右的女性喜欢=>成熟稳重,有责任感

40岁左右的女性喜欢=>性格温和,有共同的生活目标

50岁左右的女性喜欢=>身体健康,会照顾家庭的

60岁左右的女性喜欢=>有相同话题的,说的来的

25岁左右的男孩喜欢=>年轻漂亮的

30岁左右的男人喜欢=>年轻漂亮的

35岁左右的男人喜欢=>年轻漂亮的

40岁左右的男人喜欢=>年轻漂亮的

50岁左右的男性喜欢=>年轻漂亮的

60岁左右的男性喜欢=>年轻漂亮的

果然男的很专业~~哈哈

1).我们构造2个函数

一个处理男的择偶需求,一个处理女的择偶需求,程序就是算法+数据结构,我们这边的数据结构用字典,列表都可以,我这边用一个列表构造一下

woman_choice_25 = [u'帅气',u'个子高']

woman_choice_30 = [u'有钱',u'事业有成']

woman_choice_35 = [u'稳重',u'有责任心']

woman_choice_40 = [u'对我好',u'有共同的生活目标']

woman_choice_50 = [u'身体健康',u'顾家']

woman_choice_60 = [u'有共同语言']

woman_chocies = [woman_choice_25,woman_choice_30,woman_choice_35,

woman_choice_40,woman_choice_50,woman_choice_60]

woman_ages = [25,30,35,40,50,60]

2).逻辑部分

入口肯定是自己的年龄了,内部逻辑很简单,一个age判断就可以了

但是这样有点麻烦,我用了一个filter函数,把age的判断封装到filter里面去,看上去会简单一点filter(lambda age: age < your_age, woman_ages)

第四部分: 男女星座的匹配

4.星座的匹配网上有成熟的mapping关系,我们直接写死在一个字典里面,当然是字典套字典的

constellation_mapping_dict = {u'白羊座': [u'狮子座',u'白羊座',u'金牛座'],

u'金牛座': [u'处女座',u'摩羯座',u'巨蟹座'],

u'双子座': [u'水瓶座',u'射手座',u'天秤座'],

u'巨蟹座': [u'双鱼座',u'天蝎座',u'摩羯座'],

u'狮子座': [u'射手座',u'白羊座',u'水瓶座'],

u'处女座': [u'摩羯座',u'金牛座',u'双鱼座'],

u'天秤座': [u'双子座',u'水瓶座',u'狮子座'],

u'天蝎座': [u'双鱼座',u'处女座',u'射手座'],

u'射手座': [u'白羊座',u'狮子座',u'双子座'],

u'摩羯座': [u'金牛座',u'处女座',u'双鱼座'],

u'水瓶座': [u'天秤座',u'双子座',u'狮子座'],

u'双鱼座': [u'天蝎座',u'巨蟹座',u'摩羯座']}

我们只要输入一个星座,然后查这个表就可以得到匹配的星座

第五部分:程序的交互输出(中英文版)

5.一般程序的输出不外乎,终端打印,文件输出,GUI,网页

1).我们这个是小程序,就简单的用打印输出吧

2).为了让用户体检好一些,我用中英文两个版本

大家要注意输出中文的时候,一定要用下面两行

reload(sys)

sys.setdefaultencoding('utf-8')

3).用户交互

我这边用了一个while来hold住死循环,里面不断的打印输出结果,然后提示一些信息,用户根据提示,输入相应的信息,若是q就退出

好最后看一下结果:


总结:

其实这个程序比较简单了,但是这个话题其实很有趣,真正要调查研究挖掘一下的话,需要用爬虫去婚恋网爬几千几万个样本数据,然后数据清洗之后,存到数据库里面,再把这些数据抽取特征值,用一些数据挖掘,机器学习的算法进行分析,然后画出一些直观的柱状图,圆饼图,这样才过瘾~~哈哈,放心后面我们会实例讲数据分析的~~

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

利用python程序浪漫安慰失恋妹纸

目的:昨天在朋友圈看到组里的一个妹纸貌似失恋了。于是想写个脚本程序安慰妹纸。 思路:把txt文件内容读取出来,打印心形等 # -*- coding:utf-8 -*- import sys impor...
  • qq1124794084
  • qq1124794084
  • 2016-04-28 18:40
  • 6852

用python对ACM最长情的表白

girigirieye~终于表白成功了好开心! 不同于我才刚学习的c、c++语言,python这个家伙可是一开始就把我搞晕了啊啊啊,什么在cmd中打开,下载python哪个版本,着实弄糊了,所以这篇...
  • qwer56208
  • qwer56208
  • 2016-09-26 19:53
  • 1819

程序员表白程序

作为程序员,我们时常被外界误认为很闷、不浪漫、没创意……等等这一类人,这让我们实在有些感伤啊,我得为程序员呐喊一声: 我们也能可以欢快、浪漫、有创意…… 朋友,你向女生表白过吗? …… 这...
  • gaoxuelin
  • gaoxuelin
  • 2013-07-30 10:49
  • 6725

程序员表白程序,开放源码,不断更新(第三篇:第二弹)

首先感谢hackerzhou同志,是他给了我激情和想法,感谢他的开源精神,造福大家。 这一波主要内容集中在网页这里,我一直在找一个通用或简易办法,能使大部分人都能使用“表白”这份礼物,如果使用网页,那...
  • wuxia2001
  • wuxia2001
  • 2015-05-18 22:01
  • 107882

python love 字样

  • 2014-12-01 17:58
  • 1KB
  • 下载

python学习—几个简单小程序

python初阶学习
  • lcr_happy
  • lcr_happy
  • 2016-12-28 13:41
  • 11894

程序员相亲二三事

都说程序猿工作很体面、薪水很高、对待感情就像是对待自己编写的代码一样认真专一,可为啥单身的总是他们呢?没错,因为他们大部分都是男士,整个公司没有姑娘员工你遇到过吗?高智商低情商是他们的普遍现象,现在让...
  • Jijiahao95
  • Jijiahao95
  • 2017-03-05 21:12
  • 322

一位夜深人静后码农的心里独白

此时是2016年4月7日0点整, 当你看到了这篇文章时候,我已经在心里默默感谢你了,你也许是求学路上的良师,也许是我生活中的朋友,也许是工作中的同事,不管你是谁,只要出现在我的生命中,我知道都有你出现...
  • sxb0841901116
  • sxb0841901116
  • 2016-04-07 01:14
  • 811

【科普】码农是程序员吗?码农与真正程序员的区别是啥?

IT界知名段子手,网络红人留几手曾经说:对于那些月薪两万以下,自称程序员的码农们,其实我们从来没有把他们归为我们程序员的队伍。他们虽然总是以程序员自居,只是他们的一厢情愿罢了。 此话一出,不知有...
  • Hey_HelloWorld
  • Hey_HelloWorld
  • 2015-08-11 18:16
  • 4965

码农上海工作2年感悟

不知不觉间已经毕业快2年了,想起2014年大学的最后一段时间,每天就是吃吃喝喝,宣泄着大学最后的时光。在大学的最后一个学期,得知自己保研了,心里面既高兴又很惆怅。高兴的是能够保研,说明自己大学4年确实...
  • polo_longsan
  • polo_longsan
  • 2016-02-27 18:58
  • 1016
    个人资料
    • 访问:323472次
    • 积分:4884
    • 等级:
    • 排名:第6805名
    • 原创:42篇
    • 转载:751篇
    • 译文:9篇
    • 评论:11条