当前位置: 首页 > 后端技术 > Python

趁着老王不在,和隔壁邻居打游戏,比比

时间:2023-03-26 00:52:32 Python

这几天又有空了,手痒痒的,想趁着老王不在家,找隔壁邻居打游戏,打发无聊时间。现在可是每次玩的时候,总是被邻居的衣服打扰。我在想能不能用python玩这个游戏,然后让我关注一下邻居,哦不对,是邻居的牌。.基本规则一副扑克牌由54张牌组成,其中3~A,每2张4张,王1张,王1张。卡片从小到大由以下字符和字符串表示(其中,小写的joker表示小王,大写的JOKER表示大王)。1、每手输入的牌可能是一对、顺子(连续5张牌)、三张、炸弹(四张)和一对K,没有其他情况。2.除了炸弹和双王可以和所有牌比,其他种类的牌只能和同类型的存在比(比如比对对对,三对三比),拆牌是不考虑情况(比如把一对拆成几块)3.尺寸规则和大家平时理解的通用规则一样。大小、对子、三比较牌的大小;将最小牌的大小与顺子进行比较;炸弹比之前所有的牌都大,比较炸弹之间牌的大小;国王是最大的牌;4.输入的两只手不会相等。牌张之间用空格隔开,“-”两边没有空格这里J,Q,K,A,2,joker,JOKER分别是11-17。#将每个J,Q,K,A,2,joker,JOKER转换成具体的数字11-17defreplaceFlower(nums):nums=nums.replace('JOKER','17')nums=nums.replace('joker','16')nums=nums.replace('2','15')nums=nums.replace('A','14')nums=nums.replace('K','13')nums=nums.replace('Q','12')nums=nums.replace('J','11')返回nums2。为了方便计算值,将转换后的数字转为int数组#如何将一个字符串数组转为整型数组,方便比较最大值和最小值firstChange=list(map(int,firstChange))secondChange=list(map(int,secondChange))3.判断是否是炸弹#判断是否是炸弹defisBomb(nums):#如果是4位且数值相同则为abombiflen(nums)==4andmin(nums)==max(nums):returnTrue#如果是2张牌,加上Iflen(nums)==2andsum(nums)==33:returnTruereturnFalse4.如果少于5个数,只有single,pair,three,four是最大值和最小值必须相同才算有效;if有5个数,考虑是否是顺子#判断输入值是否正确defisValidNums(nums):#对于少于5个数,只有single,pair,tripleOne,four,即最大值和最小值mustbethesametobevalidiflen(nums)>0andlen(nums)<5and(max(nums)==min(nums)):returnTrue#5numbers,考虑是否是直eliflen(数字)==5:returnisContinuous(nums)returnFalsedefisContinuous(nums):#对数字进行排序nums.sort()foriinrange(len(nums)-1):#相邻??的两个数相同,肯定不是直数ifnums[i]==nums[i+1]:returnFalse#最后一个比前面的多1,继续执行ifnums[i+1]==nums[i]+1:continueelse:returnFalsereturnTrue5、对每个数组的值进行相应的求和得到这个数组的结果,然后比较两个数组的大小defisContinuous(nums):#对数字进行排序nums.sort()foriinrange(len(nums)-1):#相邻??两个数相同,肯定不是正数ifnums[i]==nums[i+1]:returnFalse#后一个比前一个多1,继续执行ifnums[i+1]==nums[i]+1:continueelse:returnFalsereturnTrue6.最后一步是比较大小的逻辑defcompareNums(firstChange,secondChange,first,second):ifsum(firstChange)>sum(secondChange):print(first)else:print(second)嗯,看起来还是有点复杂。来回需要6个步骤才能完成一个过程。看来,要想和邻居玩好游戏,就得多想想。毕竟我们的门票钱是陪不上的。这与执行大小比较无关。当以上所有步骤拆分完成后,我们现在要做的就是应用拆分代码。是否合法输入,是否经过炸弹过程,是否经过比较过程等。#判断两次输入数据是否相等,如果不相等,需要判断是否炸了,或者直接输出错误iflen(firstChange)!=len(secondChange):ifisBomb(firstChange)orisBomb(secondChange):compareNums(firstChange,secondChange,first,second)else:print("YouinputisError")else:#确定是否合法数据ifisValidNums(firstChange)==False:print("你第一次输入错误"+str(firstChange))elifisValidNums(secondChange)==False:print("你第二次输入错误"+str(secondChange))else:#如果数据有效,则输出结果compareNums(firstChange,secondChange,first,second)现在,请输入几组数据,我们来看看例如对子AVS对子2,顺子34567VS678910AA-2222请输入你要打的牌,用-分隔:34567-678910678910代码安排好了,结果也执行了,心却还飘在隔壁。现在少了一个人……只有这样,我才能感受到自己存在的价值,我才觉得自己活得很有趣。关注公众号“Python专栏”,更多好玩有趣的Python等着你~