直接上代码
global count
count=0
def cal(arr):
p=0
addsub=0
muldiv=0
muldivindex=0
while arr.find('sqrt')>=0:
arr=cal_sqrt(arr)
while arr.find('^')>=0:
arr=cal_power(arr)
for i in range(len(arr)-1,-1,-1):
if arr[i]=="(":
p+=1
elif arr[i]==")":
p-=1
elif (arr[i]=="+" or arr[i]=="-") and p==0:
addsub+=1
break
elif (arr[i]=="*" or arr[i]=="/") and p==0 and muldiv==0:
muldiv=+1
muldivindex=i
if p==0 and addsub==0 and muldiv==0 and arr[0]=="(" and arr[len(arr)-1]==")":
return cal(arr[1:len(arr)-1])
if p==0 and arr.find('+')==-1 and arr.find('-')==-1 and arr.find('*')==-1 and arr.find('/')==-1:
return float(arr)
if addsub!=0:
if arr[i]=="+":
return cal(arr[0:i])+cal(arr[i+1:len(arr)])
elif arr[i]=="-":
return cal(arr[0:i])-cal(arr[i+1:len(arr)])
if muldiv!=0:
if arr[muldivindex]=="*":
return cal(arr[0:muldivindex])*cal(arr[muldivindex+1:len(arr)])
elif arr[muldivindex]=="/":
if cal(arr[muldivindex+1:len(arr)])==0:
return 60000
else:
return cal(arr[0:muldivindex])/cal(arr[muldivindex+1:len(arr)])
def build_card(card):
arr_card=[0,"+",0,"+",0,"+",0]
for i in range(4):
arr_card[0]=card[i]
for j in range(4):
if j!=i:
arr_card[2]=card[j]
for k in range(4):
if k!=j and k!=i:
arr_card[4]=card[k]
for l in range(4):
if l!=k and l!=j and l!=i:
arr_card[6]=card[l]
build_sign(arr_card)
def build_sign(card_sign):
sign=["+","-","*","/"]
arr_sign=card_sign
for i in range(4):
arr_sign[1]=sign[i]
for j in range(4):
arr_sign[3]=sign[j]
for k in range(4):
arr_sign[5]=sign[k]
build_brackets(arr_sign)
def build_brackets(card_brackets):
s=""
a=0
global count
arr=list(card_brackets)
for i in range(11):
if i==0:
arr[0]="("+str(arr[0])
arr[2]=str(arr[2])+")"
elif i==1:
arr[2]="("+str(arr[2])
arr[4]=str(arr[4])+")"
elif i==2:
arr[4]="("+str(arr[4])
arr[6]=str(arr[6])+")"
elif i==3:
arr[0]="("+str(arr[0])
arr[2]=str(arr[2])+")"
arr[4]="("+str(arr[4])
arr[6]=str(arr[6])+")"
elif i==4:
arr[0]="("+str(arr[0])
arr[4]=str(arr[4])+")"
elif i==5:
arr[2]="("+str(arr[2])
arr[6]=str(arr[6])+")"
elif i==6:
arr[0]="("+"("+str(arr[0])
arr[2]=str(arr[2])+")"
arr[4]=str(arr[4])+")"
elif i==7:
arr[0]="("+str(arr[0])
arr[2]="("+str(arr[2])
arr[4]=str(arr[4])+")"+")"
elif i==8:
arr[2]="("+"("+str(arr[2])
arr[4]=str(arr[4])+")"
arr[6]=str(arr[6])+")"
elif i==9:
arr[2]="("+str(arr[2])
arr[4]="("+str(arr[4])
arr[6]=str(arr[6])+")"+")"
s=""
for j in range(len(arr)):
s+=str(arr[j])
a=cal(s)
if a==24:
count=1
print(s)
arr=list(card_brackets)
import sys
card=[0,0,0,0]
s=""
for i in range(4):
s=input("输入卡牌"+str(i+1)+"的值(1-13,不能0开头):")
while s.isdigit()==0:
s=input("输入错误,重新输入卡牌"+str(i+1)+"的值(1-13,不能0开头):")
card[i]=int(s)
while (card[i]<1 or card[i]>13):
card[i]=int(input("输入错误,重新输入卡牌"+str(i+1)+"的值(1-13,不能0开头):"))
build_card(card)
if count==0:print("无解")