Python 如何直接从元组中获取字符串?
是否直接从元组访问这四个值中的一个并存储它?这样我就可以创建一个类型为Card的新对象,然后将其设置为tuple中四个值中的一个Python 如何直接从元组中获取字符串?,python,python-2.7,Python,Python 2.7,是否直接从元组访问这四个值中的一个并存储它?这样我就可以创建一个类型为Card的新对象,然后将其设置为tuple中四个值中的一个 我想用一个字符串作为输入参数,例如myCard=Card(HEARTS)在您的类中,您需要在SUITS前面加上Card(或self)这样的前缀: class Card: def __init__(self, suit): self.suit = SUITS[suit] SUITS = ("HEARTS", "SPADES", "DIAM
我想用一个字符串作为输入参数,例如myCard=Card(HEARTS)在您的类中,您需要在
SUITS
前面加上Card
(或self
)这样的前缀:
class Card:
def __init__(self, suit):
self.suit = SUITS[suit]
SUITS = ("HEARTS", "SPADES", "DIAMONDS", "CLUBS")
我不会费心去验证
suit
参数;如果提供了无效值Card.SUITS[suit]
如果超出范围,将引发索引器
;如果提供了非整数参数,将引发类型错误
。如果您愿意,您可以捕获任一异常并提出自己的异常。您可以根据诉讼进行验证。
如果给出的诉讼无效,您是否可以提出ValueError
class Card:
def __init__(self, suit):
self.suit = Card.SUITS[suit] # N.B. specify the class
SUITS = ("HEARTS", "SPADES", "DIAMONDS", "CLUBS")
>>> for i in range(len(Card.SUITS)):
... c = Card(i)
... print(c.suit)
HEARTS
SPADES
DIAMONDS
CLUBS
现在可以通过以下方式创建实例:
class Card:
SUITS = ("HEARTS", "SPADES", "DIAMONDS", "CLUBS")
def __init__(self, suit):
if suit not in self.SUITS:
raise ValueError('invalid argument suit. must be: {}'.format(
', '.join(self.SUITS)
))
self.suit = suit
另一种方法是在此处使用:
如果要将
self.suit
赋值给给定的名称,如果该值在可接受的值中,则将其赋值给默认值
from enum import Enum
class Suits(Enum):
HEARTS = 0
SPADES = 1
DIAMONDS = 2
CLUBS = 3
class Card:
def __init__(self, suit):
assert(type(suit) is Suits)
self.suit = suit
snurz = Card(Suits.CLUBS)
注:我同意@keksnicoh的方法(向上投票),这引发了一个例外
另一种方法是将默认值作为参数传递(显式优于隐式,记得吗?)
但是,您仍然应该检查默认值是否在可能的值中,并在此时引发和异常(或根据您的目标将其添加到这些值中)您的意思是喜欢,
SUITS[2]
SUITS[3]
或其他什么?是的,但我想使用字符串作为输入参数,例如myCard=Card(HEARTS)你应该提到你想在你的\uuuu init\uuuuu()
中接受字符串,或者你应该提供一个示例用法。class Card:def\uuuu init\uuuuuuuuuuu(self,suit):self.suit=Card.SUITS[SUITS]\N.B.为范围(len(Card.SUITS))中的i指定类SUITS=(“红桃”、“黑桃”、“钻石”、“梅花”):c=Card(“SPADES”)print(c.suit)我不确定,但它不起作用。你能给我一个例子吗?op在注释中指定,\uuuuuu init\uuuu()
应该接受表示suit的字符串,使这个答案无效。@Mark:for循环就是示例用法。但是,正如我在前面的评论中所说的,这个答案由于额外的字符串参数要求而无效。有没有其他方法不抛出错误?e、 我更喜欢这样,因为我可以定义干净的消息,所以开发人员(包括我自己)可以得到一些提示,当出现问题时会发生什么(哪些有效值可用)。我不知道如果元素不在列表中,是否可以直接强制python引发异常。您可以这样做:self.suit=dict({k:True代表self.SUITS中的k})[self.suit]
但是它有点加密,错误可能会误导您。您可以使用assert。看我的第二个例子。您也可以在第一个示例中使用它:assert(suit in self.SUITS)
from enum import Enum
class Suits(Enum):
HEARTS = 0
SPADES = 1
DIAMONDS = 2
CLUBS = 3
class Card:
def __init__(self, suit):
assert(type(suit) is Suits)
self.suit = suit
snurz = Card(Suits.CLUBS)
>>> class Card:
... SUITS = {"HEARTS", "SPADES", "DIAMONDS", "CLUBS"} # you can still use the tuple if you prefer
... def __init__(self, suit):
... self.suit = suit if suit in self.SUITS else 'HEARTS' # default_value
...
>>> c=Card('abc')
>>> c.suit
'HEARTS'
>>> c=Card('DIAMONDS')
>>> c.suit
'DIAMONDS'
>>> class Card:
... SUITS = ("HEARTS", "SPADES", "DIAMONDS", "CLUBS")
... def __init__(self, suit, default='HEARTS'):
... self.suit = suit if suit in self.SUITS else default
...
>>> c=Card('abc')
>>> c.suit
'HEARTS'
>>> c=Card('abc', 'DIAMONDS')
>>> c.suit
'DIAMONDS'