![](/img/trans.png)
[英]Check if a string starts with the a specific word, if True then print word - PYTHON
[英]Check a list that starts with a specific string
我打算創建一個稱為ordered的方法,該方法需要以下功能。
對列表或排序的卡片組進行排序時,它從最低到最高為2C(2個三葉草)。
import random
class Card(object):
def __init__(self, num, suit):
self.num = num
self.suit = suit
er.num)返回t1 == t2
def num_rank(num):
if num[0] == "A":
return 14
if num[0] == "J":
return 11
if num[0] == "Q":
return 12
if num[0] == "K":
return 13
return int(num)
class Deck(object):
def __init__
self.m for s in self.suit]
def isOrdered(self):
if self. str('2C'):
return True
您可以將self.deck
的列表與sorted(self.deck)
。 如果它們相等,則對甲板進行排序:
from functools import total_ordering
@total_ordering
class Card(object):
def __init__(self, num, suit):
self.num = num
self.suit = suit
def __str__(self):
return '%s%s' % (self.num,
self.suit)
def __repr__(self): return str(self)
def __lt__(self, other):
t1 = self.suit, self.num_rank
t2 = other.suit, other.num_rank
return t1 < t2
def __eq__(self, other):
t1 = self.suit, self.num_rank
t2 = other.suit, other.num_rank
return t1 == t2
@property
def num_rank(self):
if self.num[0] == "A":
return 14
if self.num[0] == "J":
return 11
if self.num[0] == "Q":
return 12
if self.num[0] == "K":
return 13
return int(self.num)
class Deck(object):
def __init__(self):
self.num = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
self.suit = ['C', 'D', 'H', 'S']
self.deck = [Card(r, s) for r in self.num for s in self.suit]
def isOrdered(self):
print('My deck :', self.deck)
print('My sorted deck :', sorted(self.deck))
return self.deck == sorted(self.deck)
d = Deck()
print('Deck.isOrdered() ==', d.isOrdered())
印刷品:
My deck : [2C, 2D, 2H, 2S, 3C, 3D, 3H, 3S, 4C, 4D, 4H, 4S, 5C, 5D, 5H, 5S, 6C, 6D, 6H, 6S, 7C, 7D, 7H, 7S, 8C, 8D, 8H, 8S, 9C, 9D, 9H, 9S, 10C, 10D, 10H, 10S, JC, JD, JH, JS, QC, QD, QH, QS, KC, KD, KH, KS, AC, AD, AH, AS]
My sorted deck : [2C, 3C, 4C, 5C, 6C, 7C, 8C, 9C, 10C, JC, QC, KC, AC, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D, 10D, JD, QD, KD, AD, 2H, 3H, 4H, 5H, 6H, 7H, 8H, 9H, 10H, JH, QH, KH, AH, 2S, 3S, 4S, 5S, 6S, 7S, 8S, 9S, 10S, JS, QS, KS, AS]
Deck.isOrdered() == False
注意:
我使用了functools.total_ordering
( doc ),因此只需__eq__
和__lt__
即可實現
使num_rank
通過財產@property
裝飾
排序現在通過(suit, num_rank)
-這就是__eq__
和__lt__
的定義方式。 也許應該考慮參數isOrdered()
參數isOrdered()
isOrdered(by suit or by num etc...)
因此,您可能需要做的是在卡座中循環瀏覽,看看是否有任何卡故障。 換一種說法,
in_order = True
for c in range(len(self.deck)-1):
if self.deck[c] > self.deck[c+1]:
in_order = False
break
return in_order
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.