题解 | #24点运算#
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
我就是那种纯纯的怨种,用的最傻最笨的方法呜呜呜呜!!!!!
没看大佬的代码前还不知道eval结合括号的妙用,我就傻乎乎的先算前两位,再算第三位,再算第四位;
想排列组合想了好久,去搜了一下之后,学到了一个排列组合的函数:itertools库中的permutations函数;
不过里面的每种组合是元组格式,所以我又转换成列表了,不过好像影响不大;
import itertools cardvalue=[1,2,3,4,5,6,7,8,9,10,11,12,13] #用来存储牌的计算值 card=['A','2','3','4','5','6','7','8','9','10','J','Q','K'] #用来存储牌面 caway=['+','-','*','/'] #存储运算符 def jok(li): #判断是否包含大小王 if 'joker' in li or 'JOKER' in li: return 'ERROR' else: #不包含 tmp=[] for i in li: tmp.append(cardvalue[card.index(i)]) a=itertools.permutations(tmp) # 存储所有排列组合 tmp1=[list(i) for i in a] #将每种可能列表化 return ca(tmp1) def ca(tmp): #计算是否能达到24 for li in tmp: #每个li都是一种组合 #前两位数计算: tmp1=[] for j in caway: if j == '+': val1=li[0]+li[1] elif j== '-': val1=li[0]-li[1] elif j=='*': val1=li[0]*li[1] else: val1=int(li[0]/li[1]) tmp1.append(val1) #前两位的计算值与第三位 tmp2=[] for i in range(len(tmp1)): for j in caway: if j == '+': val2=tmp1[i]+li[2] elif j== '-': val2=tmp1[i]-li[2] elif j=='*': val2=tmp1[i]*li[2] else: val2=int(tmp1[i]/li[2]) tmp2.append(val2) #前三位的计算值与第四位 tmp3=[] for i in range(len(tmp2)): for j in caway: if j == '+': val3=tmp2[i]+li[3] elif j== '-': val3=tmp2[i]-li[3] elif j=='*': val3=tmp2[i]*li[3] else: val3=int(tmp2[i]/li[3]) tmp3.append(val3) tmp4=[] #存储达到24时的运算符 for x,y in enumerate(tmp3): if y ==24: inde2=int(x/4) inde22=x%4 #最后一个运算符索引 inde1=int(inde2/4) inde11=inde2%4 #倒数第二个运算符索引 inde00=inde1%4 #第一个运算符索引 tmp4.extend([caway[inde00],caway[inde11],caway[inde22]]) #将运算符存储到一个列表中 result=card[li[0]-1]+tmp4[0]+card[li[1]-1]+tmp4[1]+card[li[2]-1]+tmp4[2]+card[li[3]-1] return result return 'NONE' while True: try: n=input().split() print(jok(n)) except: break