为了写洗牌函数,可能需要回顾命令式编程的第二节和第五节内容。
首先介绍一个小知识:我们说过Python3的编码支持很多种语言,其实它也支持很多种特殊符号,包括扑克牌花色的符号,它们的编码分别是:
>>> classes = ['\u2660', '\u2661', '\u2662', '\u2663'] >>> for c in classes: print(c) ♠ ♡ ♢ ♣
关于编码更详细的内容以后会涉及,现在复制粘贴用就好,当然你可以坚持用汉字来代替花色…
去掉大小王的扑克牌共有52张,是由四中花色和13种牌面组合而成的。我先建立两个列表,用来储存所有的花色和牌面:
classes = ['\u2660', '\u2661', '\u2662', '\u2663'] ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
接着,我打算建立一个空列表来存放52张牌:
deck = []
下面,我准备利用for循环嵌套,生成52张扑克牌,并全部放到deck里面:
for r in ranks: for c in classes: deck.append(c + r)
接着,我需要把deck这个列表中元素的顺序随机打乱:
import random random.shuffle(deck)
好啦,最后,我把上述所有的东西整理在一个函数里面,函数取名叫:shuffled_deck吧:
def shuffled_deck(): '生成包含随机顺序52张牌的列表' deck = [] classes = ['\u2660', '\u2661', '\u2662', '\u2663'] ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] for c in classes: for r in ranks: deck.append(c + r) import random random.shuffle(deck) return deck #最后还加上这个函数返回的内容,即生成好的deck列表
保存,运行试试:
============= RESTART: C:\Users\MSI\Desktop\BlackJ\functions.py ============= >>> deck = shuffled_deck() >>> deck ['♣3', '♡9', '♠2', '♡A', '♠K', '♠8', '♣7', '♡8', '♣Q', '♢3', '♣2', '♢6', '♠J', '♡4', '♠3', '♡2', '♠7', '♢5', '♡3', '♢7', '♡6', '♣A', '♣10', '♢A', '♣5', '♣J', '♢10', '♡K', '♣4', '♠9', '♣8', '♠4', '♠10', '♣9', '♢9', '♢2', '♢4', '♣6', '♠A', '♣K', '♢Q', '♢J', '♡J', '♠5', '♠Q', '♢8', '♡Q', '♡7', '♡10', '♡5', '♠6', '♢K']
耶
如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~