第一次发布自己写的代码,特附上个人的详细说明。如有错误,在所难免,欢迎指正。
备注:此作品借鉴了一下我们老师的代码,进行了仿写。
这个是一个简单的《非诚勿扰》游戏。
思路:1.随机设置假人的姓名、性别(2代表男生,3代表女生)、城市、薪水。采用split+通过random函数实现
2.采用循环了1000个假人,生成采用了列表嵌套字典及列表中存放了1000条字典数据
4.通过双重循环随机配对,配对成功即break(破出循环),其它复杂情况留着以后玩
5.在配对过程中要注意男-女配对的问题,将(1-sex)即可得到需要的另外一个性别
6.格式化输出配对成功的假人
7.输出配对成功的人数
#个人根据老师的配对程序仿写了部分代码,并对原代码进行了一些简化。以帮助同学们扩展思路.
from random import random,choice,randint
#---从随机模块(random)引入三个函数(随机random函数,choice函数,randint函数)
xxx=[] #-----建立空列表
#----下面用for循环语句生成含字典成员的xxx列表
for x in range(0,1000): #---执行1000次下面的代码
name=["苗惠文","黄士豪","林彦海","丁文欣","陈慈云","张雅臻","黄慧萍","冯茹琬","林凡洁","倪欣颖","林重伯","张哲绿","曾诗涵","邱冠儒","张水蓉","杨秀慧","刘意霖","陈怡哲","戈怡萍","常伦怡","郭均冰","陈怡侑","杨智嘉","吴冠伦","刘彦莲","怀得祯","江美惠","刘依婷","李千紫","萧健铭","黄惠白","赵静怡","梁淑娟","邓圣文","吴静吟","黄冠勋","杨雅茹","杨佩芬","罗羽江","黎志杰","陈永贤","张水英","黄阳任","郭骏凡","林洁慈","曾克雄","林华山","陈玉翰","沈荣嘉","甯国华","王志杰","严芸豪","陈宛娥","林上盈","张志文","王昱宏","程柏儒","谢欣洁","陈建苹","黄柏政","侯左顺","张顺雪","吴志容","谢宛梦","王怡阳","刘任玮","张宛君","吴俊定","刘雅文","伍骏维","杨佳颖","林乔齐","李莹茜","李慧勇","周俊逸","王天芬","陈淑惠","杨雅旺","金志瑞","王恭吟","苏辛辉","赵国君","吴雅芬","王嘉祥","郑雅泉","陈雅婷","王凤珠","郭康芝","陈孟菁","林承江","黄依婷","黄山颖","杨人名","李淑芬","吴威德","王圣义","黄娇旭","朱宜欣","陈振江","郭智强","许翰芸","钱雯升","陈柏德","谢文祥","陈婉君","林玉桦","隆馨妤","刘伦齐","张珊郁","王妙睿","李威珮","邓富勋","杨舒原","谢佳嘉","张明名","王志铭","李采威","刘爱惠","吴筱芸","刘依婷","赵俊嘉","黄志法","陈友汉","杨映维","谢佳宏","王惠雯","廖宏达","黄怡祯","陈世英","马志文","谢欣青","林钧娇","钟雅雯","张贞依","阮佩璇","刘威廷","黎靖凯","黄晏辉","古馨文","黄盈甄","吴佳皓","赖玉婷","李珮君","张哲嘉","蔡仪谕","林建坚","张莉海","李庭俊","吴维伦","吴盈甄","陈怡秀","林玮真","张孟颖","蔡明幸","许淑芳","李伟伦","张文达","吴思义","吴宗妃","徐盈如","蔡承祥","洪雅娟","林淑芳","阮呈信","涂彦均","张薇芳","戴任发","黄子友","丁昆来","王成茹","陈展忠","李雅惠","陈萱翰","苏士铭","庾思婷","连俊明","黄明心","陈蓉育","冯宇翔","吴欣美","李佩坚","李雅玲","陈左绮","黄千惠","姜懿书","林诗宁","谢泓圣","赵宛乔","袁巧尧","赵文欣","张玉宣","林财洁","吴芳如","吴琼慧","刘力靖","陈志治","毛蕙行","谢雅琪","刘礼纬","张崇维","罗翔欣","陈伟辉","夏允仲","郭真发","袁思涵","刘右德","周承翰","黄莉定","赖汉白","张怡桦","王俊旺","陈亦升","钟可欣","萧雅珍","李馨名","蔡馨伟","李淑纬","黄芳仪","李莉婷","荀淑敏","朱欣怡","李雅花","林诗麟","陈慧菱","赵崇秀","彭雅竹","赵奕君","林君均","张良合","蔡雅筠","周桂荣","边倩季","王珊杰","林侑圣","蔡宜欣","张志芸","黄美慧","王定星","徐俊维","蒋素仪","李政新","廖永芬","张淑梦","郑哲凡","陈佳颖","刘依婷","陈信志","李佳学","黄珮纯","赵天旭","周慧桦","陈允钰","罗志祥","潘宛靖","叶尚霖","刘哲豪","林冠美","吴采舜","卢美舜","陈瑞昀","王泓志","郑志豪","管廷盛","李志文","穆俊明","柳博易","黎逸书","何冠宏","杨晋仲","陈玫卿","邱力俊","黄儒礼","蔡倩亚","谢明宪","王静怡","吴宣一","陈俊筠","郭秀娟","周美云","倪婉玲","徐均俐","郭文豪","杨予季","吴岳淳","蔡昱一","陈怡雯","林子元","李素男","徐俊云","陈芝凡","苏雅芳","徐雅惠","林于真","黄士弘","李定劭","刘静宜","吴美宇","张维凡","王志翔","张嘉雯","谢佩祯","陈欣瑄","赖明儒","黎馨仪","林晓霖","林怡君","李建廷","李怡伶","王丽仲","郑仕麟","周志嘉","黄海娇","陈民盈","陈石岳","李圣英","叶雅萍","黄伟智","翁若昌","璩美惠","李昀绍","柳昌凯","李宗秋","李美华","马姿吟","赵佳静","程成兴","蔡育菁","陈俊宪","郭绿豪","林士法","王韵如","艾美娟","黄清宜","曹冠志","颜丽辉","刘慧娟","蔡秉孝","王怡松","庾皓治","黄育玮","吴湘生","许皓吉","蔡姿婷","陈晓纶","杨火行","罗宜珊","曾钰婷","钱杰意","金倩均","潘意书","谢冠宇","林崇东","陈千惠","林瑞妃","杨筱英","许雅雯","黄小竹","蔡惠雯","吴俊霖","王美泉","邱淑贞","吴志嘉","赖彦豪","陈映汉","苏纬萍","蔡怡君","潘淑珍","余子杰","黄进如","温佳蓉","高俊逸","郑文松","王雅蓉","林佩玲","林佩雯","陈之映","王博文","苗杰慈","郭姿颖","高雅芬","萧怡安","朱雅芳","李世杰","江雅雯","温怡孜","吕伟诚","余得火","奚淑惠","陈正齐","吴政紫","杨庭舜","陈淑玲","杨郁翔","邱士贤","蔡家维","陈义成","张珊和","李政达","卢家瑜","黄珮俊","黄圣梦","张怡伶","王怡君","杨琬翰","杜伟来","谢胜瑞","强琳任","邱育治","刘秀娟","林秀佳","周筱婷","陈若臻","刘佩淑","鲁俊贤","马怡臻","黄健铭","洪贞仪","钱惠雯","张淳湖","袁宛臻","李绍辛","邱欣怡","陈宛臻","钟伦勇","刘钰雯","钱子紫","赵志伟","苏庆昆","洪晋凯","沈佳仪","陈秀娟","许家海","李建宇","林秋生","刘玉娟","黄秀慧","蒋明哲","林智竹","张秀乔","黄婉婷","陈盈韦","黄美斌","吴书玮","陈伟杰","谢秀娟","黄启靖","林威友","张维梅","林诗康","李丽珠","杜惠如","别必斌","李明珠","邱欣怡","王志劭","高旭光","郭怡安","林湘桦","颜建辉","萧冠中","吴智强","刘健毓","林怡恩","刘佳雯","张雅萍","刘上荣","童明辉","李宜俊","黄名伦","傅国妃","陈盈花","蔡建德","李淑梅","许名侑","倪协菁","邱淑惠","周小珮","倪昌萍","吴婉菁","刘美玲","吕奕君","张庭惟","李明治","王丽芬","林俊雅","陈雅如","倪富爱","李威伦","王嘉怡","蔡宗毅","黄山蓁","张诗哲","黄凯婷","文诗香","简少霞","葛彦廷","蔡原士","白家慧","黄心怡","王木盛","施纬原","张家智","李彦志","陈玉婷","王信来","郑玲德","陈伟诚","苏建添","司俊宏","陈品旺","罗力惟","林玉珊","李慧君","傅欣怡","杨奇士","林雅婷","张贤坚","王朝佩","吴昀春","李政映","刘右峰","林志颖","胡铭育","黄钰婷","王淑真","林勇意","谢玲伶","陈柔裕","李玮婷","林家琴","陈怡璇","姚兰妤","陈致威","那镇宇","黄柏义","郑念宝","任莉婷","张俊玮","吴雨绍","郑佑瑶","杨羽福","蔡明均","徐意学","张雯坚","姜季亚","陈伟茹","杨雯泰","陈健白","林国苹","崔巧娟","陈雅萍","张美淑","吴梅育","陈美君","陈怡如","陈志玉","黄任靖","蔡舒婷","张文贤","谢彦廷","许惠贤","邓秀芬","袁芳仪","刘星峰","游政勋","王雅萍","张惠义","赵兰紫","卢雨行","陈雅婷","鞠彦宇","黄志平","谢美珍","孙志豪","许美玲","刘千慧","林国舜","吴建秀","苏俊谚","李志伟","郑俊毅","蓝绍良","吴家铭","陈郁雯","江慈舜","张凯玲","蔡美玲","许姿莹","林美华","郭玟旺","余兆美","王力璇","罗振玮","赖怡君","许怡菁","李宜威","吴懿珮","林奕蓁","刘志轩","林坚岳","温怡菁","郑洁娟","陈淑君","吴佳琪","蔡玉芳","蓝裕中","许毅雪","侯雅玲","王珍俐","谢文宇","周惠敏","谢文泉","张信韦","陈嘉琪","王俊贤","汪筱冰","杨志瑞","李珮喜","林雅婷","林羽泰","邱雅筑","李采霖","杨雅雨","黄怡伶","白峻豪","黄桂雪","林以合","叶凯钧","陈嘉萱","陈亦谕","陈茂尧","方文杰","李政璇","王嘉维","林左祥","刘竣柔","陈小薇","林宜铭","黄筱杰","陈志文","赵忠君","赖静宜","杨俊安","吴柏云","黄嘉琪","罗雅如","林馨仪","王嘉睿","郑宗璇","张怡君","杨舒东","张奇妹","李欢任","赵明慧","吴坤娥","蔡欣成","周定升","刘明秀","韩可玮","王钰竹","陈毅婷","彭丽卿","郭勇尧","丁静怡","刘上启","郭冠翰","罗靖欣","李怡慈","郑家贤","邓芸鸿","谢心湖","张博琇","张朝志","陈姿吟","陈行嘉","李威亚","黄勇志","廖淑玲","朱嘉玲","刘怡辰","张维青","李威文","吴婷婷","韩仁杰","张真心","蔡宥木","何怡君","萧协吉","林宜欣","宋智翔","李珮民","李彦霖","吴姵仪","徐梦财","陈淑芬","杜巧莹","吴勋妃","杨柏豪","刘惟恭","谢海尧","白可欣","李之升","黄世豪","王素玟","蔡明恭","张毓依","陈静昌","赵静怡","蓝宏儒","王志纬","王雅婷","郭建安","王明恭"]
#----上面这句建立一个名为name的列表,包含所有人的姓名作为列表成员。
n=choice(name) #----使用choice函数从name列表中随机返回一个姓名赋值给n
city =["成都市","广安市","德阳市","乐山市","巴中市","内江市","宜宾市","南充市","绵阳市","眉山市","遂宁市","雅安市","阆中市","攀枝花市","广汉市","绵竹市","万源市","华蓥市","江油市","西昌市","彭州市","简阳市","崇州市","什邡市","峨眉山市","邛崃市","双流县"]
#-----上面这句建立一个名为city的列表,包含所有城市的名称作为列表成员。
c=choice(city) #----使用choice函数从city列表中随机返回一个城市名赋值给c
sex=[0,1] #---建立一个含0,1成员的列表作为性别区分
sex1=choice(sex) #---从sex列表中随机返回一个值(0或者1)赋值给变量sex1
s=randint(24000,600000)#----使用randint函数产生一个24000至600000之间的随机数作为人员收入赋值给变量s
age=randint(18,65) #----使用randint函数产生一个18至65之间的随机数作为年龄赋值给变量age
people={
"姓名":n,"城市":c,"年龄":age,"收入":s,"性别":sex1,"配对目标":c+','+str(s)+','+str(1-sex1)}
#----上面这句是根据前面随机产生的姓名、城市名、性别、年龄、收入等数据生成一个字典,
#----比如{'姓名': '陈怡如', '城市': '绵阳市', '年龄': 30, '收入': 175849, '性别': 0, '配对目标': '绵阳市,175849,1'}
#----字典最后一项“配对目标”:后面是含城市名+收入+性别的一个以逗号分隔的整体字符串。用逗号隔开是为了后面用split函数进行分隔成列表成员。以方便比对。
#----1-sex1表示要配对的性别要刚好相反。用str(1-sex1)把结果字符串化是为了字符串相加,形成一个字符串整体,方便后面使用。
xxx.append(people)#把上一句生成的字典用append函数追加到第二行代码的空列表xxx中。把该字典作为列表的一个成员
#print(xxx)#----该语句可以显示xxx列表的所有字典成员。
#--上面的每一次循环生成一个随机的字典添加到xxx的列表中作为列表成员。循环1000次后,说明列表中添加了1000个字典成员。
#下面开始配对程序,把xxx列表进行双循环比对。
total = 0 #---统计配对成功的人数初始值为0赋值给total
for i in xxx: #---以列表xxx中的第一个成员(字典)到最后一个成员(字典)作为基础数据,在下面的内层循环中进行配对比较
for j in xxx: #---把列表xxx中的所有成员(字典)分别与上面一层循环中的基础数据进行比对
if j == i: #---如果内外循环比对的列表成员(字典)一致。
continue #---自动忽略本轮内循环的剩余语句,跳转到下一轮内循环,用下一个(字典)成员继续比对
else: #---否则、即:如果列表成员(字典)不一致
if i["配对目标"].split(",")[0] == j["城市"] and int(i["配对目标"].split(",")[1])-int(j["收入"])<=10000 and int(i["配对目标"].split(",")[2]) == j["性别"] :
#----i["配对目标"]表示字典里面“配对目标”冒号后面的字符串,比如上例'绵阳市,175849,1'
#----i["配对目标"].split(",")表示把字符串按照逗号分隔生成列表,比如'绵阳市,175849,1'变成["绵阳市","175849","1"]
#----i["配对目标"].split(",")[0]表示取第一个成员。比如["绵阳市","175849","1"]取第一个成员为“绵阳市”
#----int(i["配对目标"].split(",")[1])表示取第二个成员,且变成整型数据。比如["绵阳市","175849","1"]取第二个成员为“175849”,用int()函数把它变为175849
#----int(i["配对目标"].split(",")[2])表示取第三个成员,且变成整型数据。比如["绵阳市","175849","1"]取第三个成员为“1”,用int()函数把它变为数字1
#----把外循环中的基础数据和内循环中数据进行比较,如果满足多项条件,程序用and把每个比较连接在一起
print("姓名:{}与姓名:{}配对成功".format(i["姓名"],j["姓名"]))
#----用格式语言{}显示配对成功的人名信息
total +=1 #----统计成功人数加1个
break #----#跳出此次内循环。避免一个人配对成功几个人。即每个人只有一次配对成功的机会。
print("%d配对成功"%total)
#用格式语言%d显示成功的人数。
'''
运行结果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201129005831847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUyNjQyMTgz,size_16,color_FFFFFF,t_70#pic_center)