python中函数是一段子程序_用Python来写一个男女相亲小程序|码农的情人节
功能:
你輸入你的性別,年齡,生日,我程序就給匹配一下你喜歡的類型,下面我們具體來講講怎么用Python寫
第一部分:用戶輸入部分
1.獲取用戶的輸入:我們用raw_input()
args =raw_input('Please input your info:sex[man,woman],age[20..60],birthday[month-day]\n')
我們希望用戶輸入3個參數(shù),男或者女,年齡在20-60歲之間,生日,這個有3個問題需要解決
1).檢查用戶的輸入,首先是長度
len(args.split())判斷一下是不是3個參數(shù)
2).若長度對了,檢查第一個參數(shù)是man還是woman
sexs = ['man', 'woman']
args.split()[0] not in sexs:
3).若第一個參數(shù)也對了,檢查第二個參數(shù)
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).若第二個參數(shù)讀對了,檢查第三個參數(shù)也就是日期
其實的合法性檢查需要用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),判斷生日落在哪個區(qū)間
這個解法有很多種,有一種比較討巧的解法,是用python自帶的列表比較,比如(2,1)<(2,19),利用這一點,再加上filter函數(shù),只需要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.我這邊用一個簡單的網(wǎng)絡段子構造樣本,都說男的從20到60歲都一直喜歡一種類型的就是"年輕漂亮的",而女孩喜歡的對象,隨著自己年齡和閱讀的增長,需求是不斷的變的
25歲左右的女孩喜歡=>高大,帥氣的
30歲左右的女孩喜歡=>事業(yè)有成,瀟灑多金
35歲左右的女性喜歡=>成熟穩(wěn)重,有責任感
40歲左右的女性喜歡=>性格溫和,有共同的生活目標
50歲左右的女性喜歡=>身體健康,會照顧家庭的
60歲左右的女性喜歡=>有相同話題的,說的來的
25歲左右的男孩喜歡=>年輕漂亮的
30歲左右的男人喜歡=>年輕漂亮的
35歲左右的男人喜歡=>年輕漂亮的
40歲左右的男人喜歡=>年輕漂亮的
50歲左右的男性喜歡=>年輕漂亮的
60歲左右的男性喜歡=>年輕漂亮的
果然男的很專業(yè)~~哈哈
1).我們構造2個函數(shù)
一個處理男的擇偶需求,一個處理女的擇偶需求,程序就是算法+數(shù)據(jù)結構,我們這邊的數(shù)據(jù)結構用字典,列表都可以,我這邊用一個列表構造一下
woman_choice_25 = [u'帥氣',u'個子高']
woman_choice_30 = [u'有錢',u'事業(yè)有成']
woman_choice_35 = [u'穩(wěn)重',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函數(shù),把age的判斷封裝到filter里面去,看上去會簡單一點filter(lambda age: age < your_age, woman_ages)
第四部分: 男女星座的匹配
4.星座的匹配網(wǎng)上有成熟的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,網(wǎng)頁
1).我們這個是小程序,就簡單的用打印輸出吧
2).為了讓用戶體檢好一些,我用中英文兩個版本
大家要注意輸出中文的時候,一定要用下面兩行
reload(sys)
sys.setdefaultencoding('utf-8')
3).用戶交互
我這邊用了一個while來hold住死循環(huán),里面不斷的打印輸出結果,然后提示一些信息,用戶根據(jù)提示,輸入相應的信息,若是q就退出
好最后看一下結果:
作者:編程新視野
鏈接:https://www.jianshu.com/p/3d9e3739f279
總結
以上是生活随笔為你收集整理的python中函数是一段子程序_用Python来写一个男女相亲小程序|码农的情人节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 穷人瞧不起的暴利赚钱项目, 富人却在偷偷
- 下一篇: C语言易错点