❶ 求大神救命啊,python實現圖形化,點擊按鈕隨機抽取兩張撲克牌的牌面,並且不能重復,要顯示出圖形
本文實例展示了Python統計列表中的重復項出現的次數的方法,是一個很實用的功能,適合Python初學者學習借鑒。具體方法如下:
對一個列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],現在我們需要統計這個列表裡的重復項,並且重復了幾次也要統計出來。
方法1:
?
1234
mylist = [1,2,2,2,2,3,3,3,4,4,4,4]myset = set(mylist) #myset是另外一個列表,裡面的內容是mylist裡面的無重復 項for item in myset: print("the %d has found %d" %(item,mylist.count(item)))
❷ python經典24點游戲
游戲規則:從一副撲克牌中抽取4張牌,對4張啟歷此牌使用加減乘除中的任何方法使計算結果為24,例如(((4-2)+6)*3) = 24,最快算出24者勝。
實現思路:參照原作者想法,由於設計到了表達式,很自然的想到了用二叉樹來實現。簡單概括為:先列出所有表達式的可能性,然後運用表達式樹,也就是二叉樹計算表達式的值,當然還需要使用遞歸來具體實現各個功能,下面我們具體來實現下吧。
表達式樹的所有葉子節點均為操作數(operand), 其它節點為運算符(operator),本次採用二叉樹來表示表達式中各個屬性的值,這樣也方便我們計算。
首先是遍歷所有表達式的可能情況,這里得到得是操作數所有可能得情況,假如傳入的l是序列[1,2,3,4],count1是4,count2是4,那麼得到的結果就是12個隨機且不重復的[1,2,3,4]序列
同理,產生運算符的不同排列結果
然後根據傳入的表達式的值,構造表達式樹,首先我們創建一個表示節悄迅點的類
然後樹的形式無非兩種,就是上面大家看到的兩種形式,用程序表示出來就是兩種函數,參數分別對應了運算符和爛行運算符,還是比較好理解的,知識涉及一些二叉樹的知識。
然後就是計算表達式樹的值,這里也運用了遞歸。
輸出所有可能的結果,這里注意print_node方法也是使用的遞歸來列印數據,並且使用 end='' 去掉了換行符。
最後在程序的入口調用calculate方法,並傳入數據,也就是你得到的牌。
成果:
❸ 如何用Python將1轉化為撲克牌A,採用if語句
dict1={'1':'A','2':'K','3':'Q'..............................................}
dict1['1']=='A'
❹ 怎樣python 寫一個撲克和骰子的程序,模擬的5骰子的滾動,至多三次,具體要求如下:
參考下面的代碼.
play 可能有問題,主要是沒說清楚在保留牌的時候, 輸入Ace 或者 "Ace Ace" 有什麼區別,到底是輸入一次 Ace 保留手上所有的 Ace 還是只保留一個,這個沒說清楚。看例子,這兩種用法都有,我按照輸入了幾個就保留幾個來做的。
simulate 沒問題,和圖片中的結果完全一樣
必須用 python 3
importrandom
importcollections
_dice_type=['Ace','King','Queen','Jack','10','9']
_hand_mapping=collections.OrderedDict([
('5kind','Fiveofakind'),
('4kind','Fourofakind'),
('full','Fullhouse'),
('straight','Straight'),
('3kind','Threeofakind'),
('2pair','Twopair'),
('1pair','Onepair'),
('bust','Bust'),
])
def_check_hand(dices):
counter=collections.Counter(dices)
iflen(counter)==1:
return'5kind'
sorted5=counter.most_common(5)
ifsorted5[0][1]==4:
return'4kind'
ifsorted5[0][1]==3:
ifsorted5[1][1]==2:
return'full'
else:
return'3kind'
ifsorted5[0][1]==2:
ifsorted5[1][1]==2:
return'2pair'
else:
return'1pair'
iflen(counter)==5:
dtype=sorted5[0][0]
forxinsorted5:
ifdtype!=x[0]:
break
dtype+=1
else:
return'straight'
return'bust'
defplay():
dices=[]
retry=0
whileTrue:
remain=5-len(dices)
ifremain<=0:
break
dices.extend([random.randint(0,5)forxinrange(remain)])
print("Therollis:{}".format(
"".join([_dice_type[d]fordinsorted(dices)])
))
print("Itisa{}".format(_hand_mapping[_check_hand(dices)]))
ifretry>1:
break
prompt="{}roll?".format(
"second"ifretry==0else"third"
)
whileTrue:
answer=input(prompt).lower()
ifanswer=='all':
break
answer=[x.capitalize()forxinanswer.split()]
ifset(answer).issubset(set(_dice_type)):
break
print("Thatisnotpossible,tryagain!")
retry+=1
ifanswer=='all':
print("Ok,done")
break
tmp=dices
dices=[]
forxintmp:
if_dice_type[x]inanswer:
dices.append(x)
answer.remove(_dice_type[x])
defsimulate(n,debug=False):
result=dict.fromkeys(_hand_mapping.keys(),0)
for_inrange(n):
dices=[random.randint(0,5)forxinrange(5)]
ifdebug:
print("DEBUG:","".join([_dice_type[d]fordinsorted(dices)]))
result[_check_hand(dices)]+=1
fork,vin_hand_mapping.items():
cnt=result[k]
print("{:<16s}:{:.2f}%".format(v,100*cnt/n))
❺ 怎麼在python裡面完成隨機輸出撲克牌,要求有J,Q,K,且以後輸出的與前面輸出的不能重復
借用一個當年老大用來寫麻將的思路,把54張牌都初始化對象,裝到一個容器裡面,隨機取一個,刪一個,再寫個重寫隨機放入牌合的初始方法就好
❻ 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()