用python做了一个斗地主发牌过程,一开始仿照别人的代码
import random
class poke:
pokes = []
player1 = []
player2 = []
player3 = []
last = ()
def __init__(self,flower,nums):
self.flowers = flower
self.nums = nums
def __str__(self):
return '%s%s' % (self.flowers,self.nums)
#初始化牌
@classmethod
def poke_begin(cls):
nums = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
flowers = ['♠','♥','♣','♦']
kings = {'big':'大王','small':'小王'}
for flower in flowers:
for num in nums:
p = poke(flower,num)
cls.pokes.append(p)
cls.pokes.append(poke(kings['big'],''))
cls.pokes.append(poke(kings['small'],''))
#洗牌
@classmethod
def wash_pokes(cls):
for i in range(54):
a = random.randint(0,53)
cls.pokes[i],cls.pokes[a] = cls.pokes[a],cls.pokes[i]
#发牌
@classmethod
def put_pokes(cls):
for i in range(17):
cls.player1.append(cls.pokes.pop(0))
cls.player2.append(cls.pokes.pop(0))
cls.player3.append(cls.pokes.pop(0))
@classmethod
def show(cls):
print('玩家一:')
for i in cls.player1:
print(i,end=' ')
print()
print('玩家二:')
for i in cls.player2:
print(i,end=' ')
print()
print('玩家三:')
for i in cls.player3:
print(i,end=' ')
print()
print('底牌:')
for i in cls.pokes:
print(i,end=' ')
p = poke
p.poke_begin()
p.wash_pokes()
p.put_pokes()
p.show()
后来想改一下 加深记忆
import random
class Poke:
def __init__(self):
self.flowers = None
self.nums = None
#初始化牌
def poke_begin(self):
self.all = []
self.nums = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
self.flowers = ['♠', '♥', '♣', '♦']
for nums in self.nums:
for flowers in self.flowers:
a = '%s%s' % (nums,flowers)
self.all.append(a)
self.all.append('大王')
self.all.append('小王')
return self.all
#洗牌
def wash_pokes(self,all):
self.all = all
random.shuffle(self.all)
#flsh = random.shuffle(self.all)
return self.all
#发牌
def put_pokes(self,wash):
pokes = wash
player1 = []
player2 = []
player3 = []
for i in range(17):
player1.append(pokes.pop(0))
player2.append(pokes.pop(0))
player3.append(pokes.pop(0))
return player1,player2,player3,pokes
def show(self,a,b,c,d):
print('玩家一:'+str(a))
print('玩家二:'+str(b))
print('玩家三:'+str(c))
print('底牌:'+str(d))
def run(self):
all = self.poke_begin()
wash = self.wash_pokes(all)
p1,p2,p3,p_all = self.put_pokes(wash)
self.show(p1,p2,p3,p_all)
if __name__ == '__main__':
p = Poke()
p.run()
一开始不知道如何让列表中的元素随机排列
上网看资料知道了random.shuffle函数可以让列表中的数随机排列
只是一开始这样写flsh = random.shuffle(self.all)时
flsh返回的是空值
所以调用random.shufflle不应该把它附给其他值,而是继续使用括号里的列表
https://blog.csdn.net/hey_man2017/article/details/80021632
一直懒得搞方法中加self和不加self的区别 今天顺便搜来看了看 上面是链接