一摞Python风格纸牌
2021/9/5 22:09:38
本文主要是介绍一摞Python风格纸牌,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import collections # 引入collections模块 Card = collections.namedtuple('Card', ['rank', 'suit']) # 用namedtuple创造了一个简单的类Card class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list('JQKA') # 使用列表操作生成字符串类型数字组成的列表,然后加上列表['J','Q','K','A'] suits = 'spades diamonds clubs hearts'.split() # split()函数不输入参数,默认使用空格来分割字符串,分割出黑桃、方块、梅花、红桃 def __init__(self): # 初始化类 self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] # 通过两个循环分别遍历ranks和suits来组成52张牌 def __len__(self): # 定义特殊方法__len__ return len(self._cards) # 通过len()函数来返回类属性_cards的长度 def __getitem__(self, position): # 定义特殊方法__getitem__ return self._cards[position] # 根据索引position返回self._cards中该索引位置的字符串
beer_card = Card('7', 'diamonds') # 实例化类Card
beer_card
Card(rank='7', suit='diamonds')
deck = FrenchDeck() len(deck) # 调用类中__len__方法来查看一摞牌有多少张
52
deck[0] # 有__getitem__方法来根据索引获取字符串
Card(rank='2', suit='spades')
from random import choice # 从模块random中引入一个随机选出一个元素的函数choice for i in range(3): print(choice(deck)) # 将choice函数在这一摞纸牌上实例化,来随机抽选一张纸牌
Card(rank='5', suit='diamonds') Card(rank='8', suit='spades') Card(rank='7', suit='spades')
deck[:3] # 类的__getitem__方法将[]操作交给了self._cards,所以实例化的deck类自动支持切片操作
[Card(rank='2', suit='spades'), Card(rank='3', suit='spades'), Card(rank='4', suit='spades')]
for card in deck: # 实现了__getitem__方法,这一摞牌就变成了可迭代的 print(card) break for card in reversed(deck): # 也可以进行反向迭代 print(card) break
Card(rank='2', suit='spades') Card(rank='A', suit='hearts')
迭代通常是隐式的,如果一个集合类型没有实现__contain__方法,那么in运算符就会按顺序做一次迭代搜索
in运算符可以用在FrenchDeck类上,因为它是可迭代
Card('Q', 'hearts') in deck
True
用点数来判定扑克牌的大小。2最小,A最大;同时还要加上对花色的判定,黑桃最大、红桃次之、方块再次、梅花最小。
suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) # 创建点数列表 def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) # FrenDeck类的属性ranks的index方法来获取卡片的rank的索引,返回索引越大,牌也就越大 return rank_value * len(suit_values) + suit_values[card.suit] # 将返回的牌的索引*4(len(suit_values)=4)然后加上花色的大小就等于牌的大小 for card in sorted(deck, key=spades_high): # 使用参数key来使用排序方法spades_high print(card)
Card(rank='2', suit='clubs') Card(rank='2', suit='diamonds') Card(rank='2', suit='hearts') Card(rank='2', suit='spades') Card(rank='3', suit='clubs') Card(rank='3', suit='diamonds') Card(rank='3', suit='hearts') Card(rank='3', suit='spades') Card(rank='4', suit='clubs') Card(rank='4', suit='diamonds') Card(rank='4', suit='hearts') Card(rank='4', suit='spades') Card(rank='5', suit='clubs') Card(rank='5', suit='diamonds') Card(rank='5', suit='hearts') Card(rank='5', suit='spades') Card(rank='6', suit='clubs') Card(rank='6', suit='diamonds') Card(rank='6', suit='hearts') Card(rank='6', suit='spades') Card(rank='7', suit='clubs') Card(rank='7', suit='diamonds') Card(rank='7', suit='hearts') Card(rank='7', suit='spades') Card(rank='8', suit='clubs') Card(rank='8', suit='diamonds') Card(rank='8', suit='hearts') Card(rank='8', suit='spades') Card(rank='9', suit='clubs') Card(rank='9', suit='diamonds') Card(rank='9', suit='hearts') Card(rank='9', suit='spades') Card(rank='10', suit='clubs') Card(rank='10', suit='diamonds') Card(rank='10', suit='hearts') Card(rank='10', suit='spades') Card(rank='J', suit='clubs') Card(rank='J', suit='diamonds') Card(rank='J', suit='hearts') Card(rank='J', suit='spades') Card(rank='Q', suit='clubs') Card(rank='Q', suit='diamonds') Card(rank='Q', suit='hearts') Card(rank='Q', suit='spades') Card(rank='K', suit='clubs') Card(rank='K', suit='diamonds') Card(rank='K', suit='hearts') Card(rank='K', suit='spades') Card(rank='A', suit='clubs') Card(rank='A', suit='diamonds') Card(rank='A', suit='hearts') Card(rank='A', suit='spades')
这篇关于一摞Python风格纸牌的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南