❶ 求大神救命啊,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()