❶ 求大神!!python程序設計 一個24點紙牌游戲。如圖所示,最好充分利用提示!
你好:
最好是自己寫一點;
不會的部分,再拿出來詢問!
❷ python想做一個24點游戲,請大神幫我做一個。真的感謝。做出來的。我可以給你錢。需要程序 方
#!python
#vim:fileencoding=utf-8
#=weibo.com/niio=
#2016-04-22
#Theme:Python24點智商矯正工具
#Memo:python2.7/開箱即用/玩得開薰XD
######################
importrandom
defbracket_exp(op,a,b):
return(op,a,b)
defremove_op(ops,op):
tmp=list(ops)
tmp.remove(op)
returntmp
defremove_nums(nums,number_combine):
tmp=list(nums)
foriinnumber_combine:
tmp.remove(i)
returntmp
defappend(res_nums,exp):
tmp=list(res_nums)
tmp.append(exp)
returntmp
defevalexp(e):
ifnotisinstance(e,tuple):
returnint(e)
else:
e1=evalexp(e[1])
e2=evalexp(e[2])
ife1==Noneore2==None:
returnNone
ife[0]=='+':
returne1+e2
elife[0]=='-':
returne1-e2
elife[0]=='*':
returne1*e2
elife[0]=='/':
ife2!=0ande1%e2==0:
returne1/e2
else:
returnNone
else:
None
deffmtexp(e):
ifnotisinstance(e,tuple):
returne
else:
e1=fmtexp(e[1])
e2=fmtexp(e[2])
ife[0]=='+':
return'(%s+%s)'%(e1,e2)
elife[0]=='-':
return'(%s-%s)'%(e1,e2)
elife[0]=='*':
return'(%s*%s)'%(e1,e2)
elife[0]=='/':
return'(%s/%s)'%(e1,e2)
else:
None
#r=evalexp(('+','1',('*','4',('-','6','8'))))
#r=fmtexp(('+','1',('*','4',('-','6','8'))))
defiter_all_exp(ops,nums,target):
iflen(nums)==1:
r=evalexp(nums[0])
ifrandabs(r-target)<0.001:
printfmtexp(nums[0]),'='+str(target)
return
fornumber_combineincombinations(nums,2):
foropinops:
res_ops=remove_op(ops,op)
res_nums=remove_nums(nums,number_combine)
exp=bracket_exp(op,number_combine[0],number_combine[1])
iter_all_exp(res_ops,append(res_nums,exp),target)
ifop=='-'orop=='/':
exp=bracket_exp(op,number_combine[1],number_combine[0])
iter_all_exp(res_ops,append(res_nums,exp),target)
print"正在出題"
q=random.sample([1,2,3,4,5,6,7,8,9],4)
printstr(q[0])+"_"+str(q[1])+"_"+str(q[2])+"_"+str(q[3])+"=24"
show=raw_input("題目不一定有解喔!,回車看答案")
ifshow=="":
iter_all_exp(["+","-","/","*"],[q[0],q[1],q[2],q[3]],24)
else:
print""
❸ 24點紙牌游戲的開發 python 各路大神我需要幫助
很久之前自己寫的了,用的就是高級一點的窮舉,還挺快的。
附帶一個gui
求給分啊
兩個文件,cui負責算數gui是界面,親測可運行的
**************************************cui_24point.py
__author__ = 'Administrator'
add = lambda a,b:a+b
minus = lambda a,b:a-b
mul = lambda a,b:a*b
div = lambda a,b:a/b
caldict = {add:"+", minus:"-", mul:"*", div:"/"}
sortlist = [[a,b,c,d] for a in range(4) for b in range(4) for c in range(4) for d in range(4) if a != b != c != d and a != c and b != d and a != d]
class leaf:
def __init__(self, numlist, layer1, layer2, layer3, ans):
self.numlist = map(lambda a:float(a), numlist)
self.layer1 = layer1
self.layer2 = layer2
self.layer3 = layer3
self.ans = ans
def __str__(self):
return "((%s%s%s)%s%s)%s%s=%s" %(self.numlist[0], caldict[self.layer1], self.numlist[1], caldict[self.layer2], self.numlist[2], caldict[self.layer3], self.numlist[3] ,self.ans)
def tree(numlist):
layer1 = "Null"
layer2 = "Null"
layer3 = "Null"
for c1 in [add, minus, mul, div]:
layer1 = c1
for c2 in [add, minus, mul, div]:
layer2 = c2
for c3 in [add, minus, mul, div]:
layer3 = c3
if c3(c2(c1(numlist[0], numlist[1]), numlist[2]), numlist[3]) == 24:
return leaf(numlist, layer1, layer2, layer3, 24)
class Turn():
def __init__(self, numlist):
if len(numlist) == 4:
self.numlist = numlist
def calculate(self):
anslist = []
for i in sortlist:
templist = [self.numlist[i[0]], self.numlist[i[1]], self.numlist[i[2]], self.numlist[i[3]]]
anslist.append(tree(templist))
return anslist
def calc(templist):
ans = Turn(templist).calculate()
ans = [i for i in ans if i != None]
for i in ans:
print i
return ans
if __name__ == "__main__":
templist = []
for i in range(4):
templist.append(int(raw_input("Input No.%s number \n" %i)))
calc(templist)
*****************************************gui.py
# -*- coding: -UTF-8 -*-
__author__ = 'Administrator'
from Tkinter import *
import cui_24point
root = Tk()
root.geometry("800x400+400+400")
root.title("24點計算程式")
numlist = []
ansVar = StringVar()
def initvariable():
for i in range(4):
numlist.append(StringVar())
def drawframe():
entryframe = Frame(root, width = 300, height = 100)
for i in range(4):
Label(entryframe, text = str(i + 1)).grid(row = 1, column = i)
Entry(entryframe, textvariable = numlist[i]).grid(row = 2, column = i)
entryframe.pack()
ansframe = Frame(root, width = 100, height = 66)
anslistbox = Listbox(ansframe, width = 50, listvariable = ansVar)
ansscrollbar = Scrollbar(ansframe, command = anslistbox.yview)
anslistbox.configure(yscrollcommand = ansscrollbar.set)
anslistbox.pack(side = RIGHT)
ansscrollbar.pack(side = LEFT, fill = Y)
ansframe.pack()
def calculate():
templist = map(lambda i:float(i.get()), numlist)
for i in cui_24point.calc(templist):
anslistbox.insert(END, i)
anslistbox.insert(END, "********************")
Button(text = "計算", command = calculate).pack()
initvariable()
drawframe()
❹ python 24點游戲開發,求大神!!!!!!
這個就是一個排列組合 數字的排列組合,字母的排列組合 你給我留聯系方式,我郵箱給你 網路雲自己下
❺ 誰能用Python編一個24點小游戲嗎謝謝!
記得採納
❻ Python編24點游戲
#!/usr/bin/python
#coding:utf8
'''
原始方法編24點游戲
'''
importitertools
importrandom
numlist=[random.randint(1,13)foriinrange(4)] #隨機4個數
printnumlist
nlist=[]
[nlist.append(nl)fornlinlist(itertools.permutations(numlist))ifnlnotinnlist] #4個數排列組合,並在有重復數字時對組合去重
#printnlist
option=['+','-','*','/']
olist=list(itertools.proct(option,repeat=3)) #操作符重復組合3位
#printolist
retlist=[[str(nl[0])+'*1.0']+[ol[0]]+[str(nl[1])+'*1.0']+[ol[1]]+[str(nl[2])+'*1.0']+[ol[2]]+[str(nl[3])+'*1.0']fornlinnlistforolinolist] #拼湊4個數和3個操作符
#printretlist
#括弧的位置
#(0,3)(0,5)
#(2,5)(2,7)
#(4,7)
#(0,3)和(4,7)
lastlist=[]
forretinretlist:
if('*'notinretand'/'notinret)or('*'inretand'/'inret):
lastlist.append(''.join(ret))
else:
lastlist.append(''.join(['(']+ret[:3]+[')']+ret[3:]))
lastlist.append(''.join(['(']+ret[:5]+[')']+ret[5:]))
lastlist.append(''.join(ret[:2]+['(']+ret[2:5]+[')']+ret[5:]))
lastlist.append(''.join(ret[:2]+['(']+ret[2:7]+[')']))
lastlist.append(''.join(ret[:4]+['(']+ret[4:7]+[')']))
lastlist.append(''.join(['(']+ret[:3]+[')']+ret[3:4]+['(']+ret[4:7]+[')']))
#printlastlist
i=0
forllinlastlist:
try:
ifeval(ll)==24:#計算,每位數*1.0,是防止出現12/5=2的情況
printll.replace('*1.0','')+'=24'#去掉'*1.0'
else:
i+=1
exceptZeroDivisionError,e:
#print'除於0錯誤:'+ll.replace('*1.0','')#表達式中有除於0的
i+=1
continue
ifi==len(lastlist):
print'nooutput!'
❼ 求python寫的24點游戲,帶圖形用戶界面最好
寫了個極其粗魯暴力的草稿版窮舉法,生成表達式。當eval執行後的結果是24的話,判定成功。
目前可見的缺陷是,對於相似結果,沒想到好辦法來過濾。求高手指教。
代碼如下,
#coding:utf-8
'''
計算24點
tested@Windows7Pro64-bitENU
'''
try:
importTkinterasTK
except:
importtkinterasTK
fromrandomimportrandint
#GUIEVENT
defEntryUpdate(number_list):
'DisplaythenumberlistinEntry'
inputbox.delete('0',TK.END)
inputbox.insert('0',','.join([str(i)foriinnumber_list]))
defScrolledTextClear():
'ClearcontentinST'
outputbox.delete('1.0',TK.END)
defScrolledTextAppend(message):
'AppendcontentinST'
outputbox.insert(TK.END,message)
#defSetTriggerState(status=1):
#'Setbuttonstatus'
#trigger.config(state='disabled')ifstatus==0elsetrigger.config(state='active')
defMessageProcessor():
'Dealwithmessagequeue'
iflen(MessageQueue)>0:
ret=str(MessageQueue.pop(0))
ScrolledTextAppend('{} '.format(ret))
root.after(30,MessageProcessor)
#CalculatorEvent
defDivisionVerification(number1,number2):
try:
ifnumber1%number2==0:
return0
except:
try:
ifnumber2%number1==0:
return1
except:
return2
defExpression(number1,number2,operator):
'Returntheexpression(s)'
ifoperator=='1':
return['({0}{2}{1})'.format(number1,number2,operator_dict[operator]),
'({1}{2}{0})'.format(number1,number2,operator_dict[operator])]
elifoperator=='3':
ret=DivisionVerification(number1,number2)
ifret==0:
return['({0}{2}{1})'.format(number1,number2,operator_dict[operator])]
ifret==1:
return['({1}{2}{0})'.format(number1,number2,operator_dict[operator])]
ifret==2:
returnNone
else:
return['({0}{2}{1})'.format(number1,number2,operator_dict[operator])]
defJudgement(operation_expression):
'`target`.'
try:
returnTrueifeval(ur'{}'.format(operation_expression))==targetelseFalse
except:
returnFalse
defEnumerateExpression(number_list):
'''
[A,B,C,D]
1.CalculateAandB->[R,C,D]
2.Threescenarios:
type1:
R,CandD
R,DandC
type2:
RandC,D
'''
strategy=[[[(0,1),2,3],
[(0,1),3,2],
[(0,2),1,3],
[(0,2),3,1],
[(0,3),1,2],
[(0,3),2,1],
[(1,2),0,3],
[(1,2),3,0],
[(2,3),0,1],
[(2,3),1,0]],
[[(0,1),(2,3)],
[(0,2),(1,3)],
[(0,3),(1,2)]]]
#type1
foriteminstrategy[0]:
ds=[number_list[item[0][0]],number_list[item[0][1]],number_list[item[1]],number_list[item[2]]]
foriinrange(4):
try:
forsub_exp_phase_oneinExpression(ds[0],ds[1],str(i)):
forjinrange(4):
try:
forsub_exp_phase_twoinExpression(sub_exp_phase_one,ds[2],str(j)):
forkinrange(4):
try:
forsub_exp_phase_threeinExpression(sub_exp_phase_two,ds[3],str(k)):
ifJudgement(sub_exp_phase_three)isTrue:
MessageQueue.append(sub_exp_phase_three)
except:
continue
except:
continue
except:
continue
#type2
foriteminstrategy[1]:
ds=[number_list[item[0][0]],number_list[item[0][1]]],[number_list[item[1][0]],number_list[item[1][1]]]
foriinrange(4):
try:
forsub_exp_leftinExpression(ds[0][0],ds[0][1],str(i)):
forjinrange(4):
try:
forsub_exp_rightinExpression(ds[1][0],ds[1][1],str(j)):
forkinrange(4):
try:
forsub_exp_finalinExpression(sub_exp_left,sub_exp_right,str(k)):
ifJudgement(sub_exp_final)isTrue:
MessageQueue.append(sub_exp_final)
except:
continue
except:
continue
except:
continue
defExecutor():
#preparedata
input_data=[]
foriinrange(4):
input_data.append(randint(minimum_number,maximum_number))
EntryUpdate(input_data)
#mainfunction
ScrolledTextClear()
EnumerateExpression(input_data)
iflen(MessageQueue)>0:
MessageQueue.append('{} Done'.format('-'*32))
else:
MessageQueue.append(str(input_data))
MessageQueue.append('Nothing!')
#settarget
target=24
minimum_number=1
maximum_number=13
operator_dict={
'0':'+',
'1':'-',
'2':'*',
'3':'/',}
#Generatewindow
root=TK.Tk()
root.attributes('-topmost',1)
root.attributes('-alpha',0.85)
root.geometry('+{}+{}'.format(root.winfo_screenwidth()/8,root.winfo_screenheight()/8))
root.title('Generator->24')
#Addoutputbox,
outputbox=ST(root,
width=35,height=20,
font=('CourierNew',13),
fg='yellow',bg='black')
outputbox.pack(expand=1,fill='both')
#Addinputbox,
inputbox=TK.Entry(root,bd=2,bg='yellow')
inputbox.pack(side=TK.LEFT,expand=1,fill='x')
#Addbutton,
trigger=TK.Button(root,
text='Go!',
command=Executor)
trigger.pack(side=TK.RIGHT,expand=1,fill='x')
#.
MessageQueue=[]
root.after(30,MessageProcessor)
#Displaywindow
TK.mainloop()
❽ 求python寫的24點游戲,帶GUI界面
#!/usr/bin/python
#coding:utf8
'''
介紹:24點游戲
'''
importitertools,random
numlist=[random.randint(1,13)foriinrange(4)]#隨機4個數
printnumlist
nlist=[]
[nlist.append(nl)fornlinlist(itertools.permutations(numlist))ifnlnotinnlist] #4個數排列組合,並在有重復數字時對組合去重
#printnlist
option=['+','-','*','/']
olist=list(itertools.proct(option,repeat=3)) #操作符重復組合3位
#printolist
retlist=[str(nl[0])+'*1.0'+ol[0]+str(nl[1])+'*1.0'+ol[1]+str(nl[2])+'*1.0'+ol[2]+str(nl[3])+'*1.0'fornlinnlistforolinolist] #拼湊4個數和3個操作符
#printretlist
forrlinretlist:
ifeval(rl)==24: #計算,每位數*1.0,是防止出現12/5=2的情況
printrl.replace('*1.0','')+'=24' #去掉'*1.0'
運行結果:
[2,11,6,10]
11+6/2+10=24
11+10+6/2=24
6/2+11+10=24
6/2+10+11=24
10+11+6/2=24
10+6/2+11=24
[Finishedin0.3s]
❾ Python編24點游戲,重新開始怎麼編
從圖片上看,就是重新生成4個數據。不知道這個程序對應的卡牌是怎麼選擇的。。。猜測可以用random.randint來生成1到13之間的某個數字,然後貼對應的圖片。