扑克牌大小问题思考

作为一个python初学者,最近在看《流畅的python》一书,在书的第一章遇到了一个很有意思的小例子:在同时考虑一副扑克牌数字大小和花色的同时,如何尽可能简单的判断任意两张牌的大小?(没有大小鬼牌,牌的大小优先于花色大小)

一般来说,最先想到的办法当然是两层逻辑:

  1. 先比较数字大小

  2. 再比较花色大小

这样的两层逻辑,数字不同得比一次,数字相同则得比两次,而且数字和花色属于不同类型的数据,不够简洁,怎么办呢?先统一数据类型的话,我们可以设定黑桃为3,梅花为2,红桃为1,方片为0(为什么设置成这几个数后面会讲到),这时再按上面的步骤就变成了比较两次数字的大小,算是简化了一些。

但是这还是两层逻辑,其本质并没有改变,所以若想做出关键革新,我们还需要再挖掘它的内在规律。

在这里插入图片描述

这就是扑克牌的大小关系图,每行数字相同,每列花色相同,按红色箭头轨迹自小到大,聪明的你一定看出来了这其实是一个高位不进位的四进制(其实这么说也不是很严谨,但很容易理解)——高位就是扑克牌上的数字,低位就是扑克牌的花色,所以我们在设置花色数字时才是0,1,2,3,最后根据这个规律每张牌就可以换算成:高位×4+低位,比如黑桃A就是1×4+3=7,红桃3就是3×4+1=13,所以13>7,红桃3大于黑桃A。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值