【问题标题】:How to find the max value in a string of poker ranks如何在一串扑克等级中找到最大值
【发布时间】:2020-02-15 21:24:25
【问题描述】:

扑克排名是这样排列的。 '23456789TJQKA' 其中 T 是 10,然后是 Jack Queen King 和 Ace,Ace 是最高的牌。输入字符串,始终输入为 5 个字符的字符串。

如果用户输入让我们说 string = '43TKQ' 我怎样才能在没有任何高级方法的情况下找到这个字符串中的最高卡片,只有 if 语句、while 和 for 循环。我试过 max(string) 但它返回十而不是国王

hand = '28TKQ'

print(max(hand)) #This outputs T (it should output K)

'768TA' 应该打印 A

'2TJ67' 应该打印 J

【问题讨论】:

  • 那么你如何在纸上做到这一点?在这种情况下,您如何使用参考字符串来确定J 大于T?分析问题并将您的人类逻辑实现为 Python 代码。 然后你会尝试发帖。

标签: python python-3.x


【解决方案1】:

您需要指定订单逻辑女巫是23456789TJQKA

order = '23456789TJQKA'

print(max('28TKQ', key=lambda e: order.index(e)))   # K
print(max('A43TKQ', key=lambda e: order.index(e)))  # A

另一个pythonic代码:

cards = '23456789TJQKA'

print(max('28TKQ', key=cards.index))   # K
print(max('A43TKQ', key=cards.index))    # A

编辑

回答您的评论:

当您在列表元素中搜索max 时,您将比较项目,默认情况下strUnicode code point 进行比较,因此当您比较列表元素时28TKQ 'T' 具有最大值84 , ord('T') > ord('K') 这就是为什么 max 返回 T 而不是 K,但你不需要告诉 max 你想要一个不同的比较逻辑。

这就是为什么我们使用key 参数来传递一个方法,并且根据该方法的返回值对项目进行排序。

编辑:

为你更清楚的事情

# 2 priority is 0, ....., A priority is 12
card_priority = '23456789TJQKA'


def get_card_priority(card):
    """ return the priority of card, it's index in card_priority list"""
    return card_priority.index(card)


# compare get_card_priority('2') = 0, get_card_priority('8') = 6,get_card_priority('T')=8.......get_card_priority('Q') = 10
# The element with the highest value is returned witch is 'K' = 11
print(max('28TKQ', key=get_card_priority))  # K because get_card_priority('K') return the biggest value

【讨论】:

  • key=lambda e 和 order.index(e))) 是做什么的?
  • 所以 key=lambda e : order.index(e) 通过在定义的字符串 order = '23456789TJQKA' 中设置订单来改变订单的逻辑?
  • 我只是很困惑,因为我还没有在课堂上学习 lambda 或 key,而且我无法理解它
  • 只要谷歌一下,关键参数就像 in ,sort, filter, max, min, sum.... 几个简单的例子之后你就会明白他们做了什么并不难。如果您不知道一件事,您可以将方法作为参数传递给另一个方法的调用。就像这里我们传递了一个我们使用 lambda 表达式创建的函数,并在每个元素上最大使用该函数希望这能清除一些东西。
  • 是的,假设 lambda 创建一个函数,名称为 index_of,它将比较此调用的返回值,index_of('2'), index_of('8'), index_of('T') .... index_of('A') 此函数返回订单列表中卡片的索引。 'A' 是它返回值的最后一个索引是最大的,所以 max 返回它。如果这澄清了您考虑接受答案,祝您的运营商好运
猜你喜欢
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多