2024-05-18 11:16:09 发布
网友
我在考虑做一副纸牌来玩纸牌游戏。我可以把所有的卡片列一张单子(我不太在乎西装),但我想知道是否有一种更简单的方法可以做到这一点。
cards = ['1','1','1','1'....]
我肯定你可以做一个for循环来创建4张同样值的卡并将其添加到列表中,但我想知道这是否是最好的解决方案。我还不够先进,无法了解或创建一个Class,我已经看到它作为其他解决方案提供,但我愿意接受解释。
for
Class
我已经编了一本字典来定义卡片的价值。
我建议你用一个基本的类用法来解决这个问题。
首先,让我们创建一个Card类:
Card
class Card: def __init__(self, value, color): self.value = value self.color = color
然后,让我们列出颜色列表:
colors = ['heart', 'diamonds', 'spades', 'clubs']
最后,让我们建立一个列表理解你的甲板:
deck = [Card(value, color) for value in range(1, 14) for color in colors]
Card类只是一个包装器,只是用来操作卡片而不是元组,这感觉更自然。
在当前状态下,它几乎等同于重命名tuple类型。。。基本上,它只包含一个设置实例属性的构造函数__init__。
tuple
__init__
因此,当我在列表理解中调用Card(value, color)时,例如Card(11, 'spades'),就会创建Card类的一个新实例,它的value属性设置为11,其color属性设置为'spades'。
Card(value, color)
Card(11, 'spades')
value
11
color
'spades'
我建议您阅读一些关于OOP的教程,以深入理解这些概念。
现在,您可以尝试改进这个想法,例如使用更详细的values列表而不是range(1, 14):
values
range(1, 14)
values = ['ace', '2', ..., 'king']
另一种方法可以使用namedtuplefrom collections模块完成,如以下示例:
namedtuple
collections
from collections import namedtuple Card = namedtuple('Card', ['value', 'suit']) suits = ['hearts', 'diamonds', 'spades', 'clubs'] cards = [Card(value, suit) for value in range(1, 14) for suit in suits]
您可以访问如下值:
print(cards[0]) >>> Card(value=1, suit='hearts') print(cards[0].value, cards[0].suit) >>> 1 hearts
首先是一些实用功能:
import random from random import shuffle def RANKS(): return [ "Ace", "2", "3", "4", "5", "6", "7","8", "9", "10", "Jack", "Queen", "King" ] def SUITS(): return [ "Clubs", "Diamonds", "Hearts", "Spades" ]
然后是卡片类:
class Card: def __init__( self, rank, suit ): self.rank = rank self.suit = suit def __str__( self ): return self.rank + " of " + self.suit
然后是甲板班:
class Deck: def __init__( self ): self.contents = [] self.contents = [ Card( rank, suit ) for rank in RANKS() for suit in SUITS() ] random.shuffle( self.contents )
我建议你用一个基本的类用法来解决这个问题。
首先,让我们创建一个
Card
类:然后,让我们列出颜色列表:
最后,让我们建立一个列表理解你的甲板:
Card
类只是一个包装器,只是用来操作卡片而不是元组,这感觉更自然。在当前状态下,它几乎等同于重命名
tuple
类型。。。基本上,它只包含一个设置实例属性的构造函数__init__
。因此,当我在列表理解中调用
Card(value, color)
时,例如Card(11, 'spades')
,就会创建Card
类的一个新实例,它的value
属性设置为11
,其color
属性设置为'spades'
。我建议您阅读一些关于OOP的教程,以深入理解这些概念。
现在,您可以尝试改进这个想法,例如使用更详细的
values
列表而不是range(1, 14)
:另一种方法可以使用
namedtuple
fromcollections
模块完成,如以下示例:您可以访问如下值:
首先是一些实用功能:
然后是卡片类:
然后是甲板班:
相关问题 更多 >
编程相关推荐