如何根据顺序比较两组列表?

2024-05-19 10:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决一个问题,我得到两张牌,我应该比较哪一张更高。我试着把清单摊开,但不知道如何比较。因此,目的是找出第一对是否高于其他对;如果第一对高于它,则返回true,如果第二对高于它,则返回false。 这是目前为止的基本代码:

RANK_ORDER = '34567890JQKA2'
SUIT_ORDER = 'DCHS'
def is_higher_pair(pair1, pair2): 
  dev1 = RANK_ORDER.find(pair1[0][0]) 
  dev2 = SUIT_ORDER.find(pair1[0][1])
  dev3 = RANK_ORDER.find(pair1[1][0]) 
  dev4  = SUIT_ORDER.find(pair1[0][1])
  your_answer = False
  if dev1 > dev3:
    your_answer = True 
  if dev1 == dev3:
    if dev2 > dev4:
      your_answer = True
  return your_answer //compares the card in the first pair but i dont know how to compare two pairs.
if __name__ == '__main__':
  print(is_higher_pair(['AH', 'AD'], ['8D', '8S']))
  print(is_higher_pair(['JS', 'JD'], ['2D', '2S']))
  print(is_higher_pair(['6D', '6S'], ['6H', '6C']))
  print(is_higher_pair(['KH', 'KS'], ['KD', 'KC']))
  print(is_higher_pair(['0H', '0D'], ['0S', '0C']))

我的输出应该考虑等级和适合度,因此对于上面给定的操作,这应该是结果:

True
False
True
True
False

我试着比较了两张牌,但还是不明白我在做什么。你知道吗


Tags: answertrueyourifdev1isorderfind
3条回答

我找到了解决办法,在这里发布:

RANK_ORDER = '34567890JQKA2'
SUIT_ORDER = 'DCHS'
def is_higher_pair(pair1, pair2):
  Rank1 = RANK_ORDER.find(pair1[0][0]) 
  Rank2 = RANK_ORDER.find(pair2[0][0]) 
  your_answer = False
  if Rank1 > Rank2:
    your_answer = True
  if Rank1 == Rank2:
    SuitPair1C1 = SUIT_ORDER.find(pair1[0][1])
    SuitPair1C2 = SUIT_ORDER.find(pair1[1][1])
    if SuitPair1C1 == 3 or SuitPair1C2 == 3:
      your_answer = True
  return your_answer


if __name__ == '__main__':
  print(is_higher_pair(['AH', 'AD'], ['8D', '8S']))
  print(is_higher_pair(['JS', 'JD'], ['2D', '2S']))

如果我很好地理解了如何比较对,那么这段代码将产生正确的输出:

RANK_ORDER = '34567890JQKA2'
SUIT_ORDER = 'DCHS'

class Pair:
  def __init__(self, card1, card2):
    # Get rank value of the pair
    v1 = RANK_ORDER.find(card1[0])
    v2 = RANK_ORDER.find(card1[0])
    self.rank_value = v1 + v2

    # Get highest suit value of the pair
    v1 = SUIT_ORDER.find(card1[1])
    v2 = SUIT_ORDER.find(card2[1])
    self.suit_value = max([v1, v2])

def is_higher_pair(pair1, pair2):
  p1 = Pair(pair1[0], pair1[1])
  p2 = Pair(pair2[0], pair2[1])

  if p1.rank_value > p2.rank_value:
    return True
  elif p1.rank_value == p2.rank_value and \
       p1.suit_value > p2.suit_value:
    return True
  return False

if __name__ == '__main__':
  print(is_higher_pair(['AH', 'AD'], ['8D', '8S']))
  print(is_higher_pair(['JS', 'JD'], ['2D', '2S']))
  print(is_higher_pair(['6D', '6S'], ['6H', '6C']))
  print(is_higher_pair(['KH', 'KS'], ['KD', 'KC']))
  print(is_higher_pair(['0H', '0D'], ['0S', '0C']))

编辑:实现这一点的较短版本(没有Pair类)是:

def get_rank_value(pair):
  return RANK_ORDER.find(pair[0][0]) + RANK_ORDER.find(pair[1][0])

def get_suit_value(pair):
  return max([SUIT_ORDER.find(pair[0][1]), SUIT_ORDER.find(pair[1][1])])

def is_higher_pair(pair1, pair2):
  if get_rank_value(pair1) > get_rank_value(pair2):
    return True
  elif get_rank_value(pair1) == get_rank_value(pair2) and \
       get_suit_value(pair1) > get_suit_value(pair2):
    return True
  return False

if __name__ == '__main__':
  print(is_higher_pair(['AH', 'AD'], ['8D', '8S']))
  print(is_higher_pair(['JS', 'JD'], ['2D', '2S']))
  print(is_higher_pair(['6D', '6S'], ['6H', '6C']))
  print(is_higher_pair(['KH', 'KS'], ['KD', 'KC']))
  print(is_higher_pair(['0H', '0D'], ['0S', '0C']))
RANK_ORDER = '34567890JQKA2'
SUIT_ORDER = 'DCHS'

def rank(card):
    return RANK_ORDER.find(card[0])


def suit(card):
    return SUIT_ORDER.find(card[1])


def is_higher_pair(pair1, pair2):
    if rank(pair1[0]) != rank(pair2[0]):
        # return True if pair1 has the highest rank
        return rank(pair1[0]) > rank(pair2[0])
    # return True if pair1 has the highest suit
    return suit(max(pair1, key=suit)) > suit(max(pair2, key=suit))


if __name__ == "__main__":
    print(is_higher_pair(["AH", "AD"], ["8D", "8S"]))
    print(is_higher_pair(["JS", "JD"], ["2D", "2S"]))
    print(is_higher_pair(["6D", "6S"], ["6H", "6C"]))
    print(is_higher_pair(["KH", "KS"], ["KD", "KC"]))
    print(is_higher_pair(["0H", "0D"], ["0S", "0C"]))

我认为这是op想要的功能,它可以最小化比较。它确实假设一对是有效的一对,并且卡片是唯一的

相关问题 更多 >

    热门问题