《流畅的python》 纸牌案例 升序排序方法剖析

编程入门 行业动态 更新时间:2024-10-15 14:20:43

《流畅的python》 纸牌案例 <a href=https://www.elefans.com/category/jswz/34/1765442.html style=升序排序方法剖析"/>

《流畅的python》 纸牌案例 升序排序方法剖析

suit_values = dict(spades = 3, hearts = 2, diamonds = 1, clubs = 0)
def spades_high(card):rank_value = FrenchDeck.ranks.index(card.rank)return rank_value * len(suit_values) + suit_values[card.suit]for card in sorted(deck, key = spades_value):print card

实话实说,一开始我看到这段代码的时候是懵的。在另一位大佬的帮助下,我总算明白了。

下面是对这段代码的剖析,如有纰漏,恭迎各位斧正!

我们从函数内部开始看:

第一句:

    rank_value = FrenchDeck.ranks.index(card.rank)

在实例deck里面,每一个元素都是一个tuple,我们获取这个tuple的属性rank,即得到了扑克牌的点数。然后用index函数得到了点数在FrenchDeck.ranks中对应的索引,并将其作为扑克牌排序的依据之一赋值给rank_value。这也便是上面这段代码所实现的功能。

第二句:

    return rank_value * len(suit_values) + suit_values[card.suit]

这个排序依据的含义:

suit_values[card.suit]对应的就是花色在suit_values中对应的值。len(suit_values)其实就是4。因为rank的优先级是高于suit的,所以4*rank_value+suit_value的确是我们想要的值,我们也就可以实现对扑克牌的排序了,但是要注意对JQKA的处理。

让我们走出函数,到输出句:

for card in sorted(deck, key = spades_value):print card

这句中的sorted函数是python自带的排序函数,它一共有三个参数,第一个是要排序的对象,key是排序的参照物,还有一个是reverse,一个bool值,当它为True时倒序排列,有了这些知识我们就能理解这个算法了,不得不说,这个算法还是很牛的!

更多推荐

《流畅的python》 纸牌案例 升序排序方法剖析

本文发布于:2024-02-06 03:03:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745629.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:升序   纸牌   流畅   案例   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!