簡體   English   中英

檢查以特定字符串開頭的列表

[英]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_orderingdoc ),因此只需__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM