python 多线程实现洗牌算法(一)

第一次写洗牌代码,代码很多复用了

#-*- coding:cp936 -*-
import random,time
import threading

mylock=threading.RLock()
huase=['黑桃','红杏','梅花','方块']
species=['3','4','5','6','7','8','9','10','J','Q','K','A','2']
lidandan=[]
zhangqi=[]
fanfan=[]
li=[]
zh=[]
fa=[]
pai=[i for i in range(54)]
dizhu=random.randint(0,2)
num=53

class puke(threading.Thread):
    def __init__(self,name):
        threading.Thread.__init__(self)
        self.name=name
        self.list=[]

    def run(self):
        global lidandan,zhangqi,fanfan,dizhu,num
        while len(self.list)<17:
            mylock.acquire()
            random.shuffle(pai) #每次打乱顺序,增加随机性
            rd=random.randint(0,num)
            self.list.append(pai[rd])
            pai.remove(pai[rd])
            num=num-1
            mylock.release()
        if self.name=='lidandan':
            lidandan=self.list
        elif self.name=='zhangqi':
            zhangqi=self.list
        elif self.name=='fanfan':
            fanfan=self.list
    #def printpai():
        #for i in self.list:
            #print (i),
        #print
   
def dizhuadd():
        global lidandan,zhangqi,fanfan,dizhu
        if dizhu==0:
                banbie=int(input("lidandan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        lidandan.append(item)
                    pai.clear()
                    return
                banbie=int(input("zhangqi 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        zhangqi.append(item)
                    pai.clear()
                    return
                banbie=int(input("fanfan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        fanfan.append(item)
                    pai.clear()
                    return
                print("没人叫地主,重新开始!\n")
        if dizhu==1:
                #lidandan=self.list
                banbie=int(input("zhangqi 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        zhangqi.append(item)
                    pai.clear()
                    return
                banbie=int(input("fanfan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        fanfan.append(item)
                    pai.clear()
                    return
                banbie=int(input("lidandan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        lidandan.append(item)
                    pai.clear()
                    return
                print("没人叫地主,重新开始!\n")
        if dizhu==2:
                #lidandan=self.list
                banbie=int(input("fanfan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        fanfan.append(item)
                    pai.clear()
                    return
                banbie=int(input("lidandan 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        lidandan.append(item)
                    pai.clear()
                    return
                banbie=int(input("zhangqi 你要地主吗?要请输入1,不要请输入0\n"))
                if(banbie==1):
                    for item in pai:
                        zhangqi.append(item)
                    pai.clear()
                    return
                print("没人叫地主,重新开始!\n")

def zhuanhua(i):
    global huase,species
    if i==52:
         return('小王')
    if i==53:
         return('大王')
    key=int(i/13)
    value=i%13    
    return (huase[key]+species[value])
        
def cunpai():
    global li,zh,fa
    for i in lidandan:
        li.append(zhuanhua(i))
    for i in zhangqi:
        zh.append(zhuanhua(i))
    for i in fanfan:
        fa.append(zhuanhua(i))
        
def printpai():
    print('lidandan:')
    for i in li:
        print (i,end=' ')
    print()
    print()
    print('zhangqi:')
    for i in zh:
         print(i,end=' ')
    print()
    print()
    print('fanfan:')
    for i in fa:
             print(i,end=' ')
    print()
    print()
A=puke('lidandan')
B=puke('zhangqi')
C=puke('fanfan')
A.start()
B.start()
C.start()
cunpai()
printpai()
dizhuadd()
cunpai()
printpai()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值