用itertools.product简化嵌套for循环-程序员宅基地

技术标签: python  

今天这一题叫做“偷瞄到的密码”:

警察跟踪一名窃贼来到了一个仓库门前。仓库的密码锁盘如下:

1 2 3

4 5 6

7 8 9

   0

窃贼输入密码后进了门。警察“觉得”自己看到了密码比如1357,但是也有可能是相邻的数字(相邻仅包括正上下左右,不包括对角线),比如第一位不是1,而是相邻的4和2(不包括5)。

可能的密码是哪些组合呢?

这道题目可以抽象成:

1. 0-9各自都对应了一组相邻数字

现给定一个数字串:

2. 对数字串中的每个数字,找到对应的相邻数组

3. 计算从这些相邻组中各挑一个形成的所有可能组合并输出

实现要点:

1. 上述#3实际上是一个嵌套的多重for循环:

  for 数字串中的每个数字:

    for 该数字相邻数组中的每个数字:

用itertools模块的product方法可以将这个过程简化为一步完成。根据Python手册,product(A, B)的结果是((x,y) for in for in B)。

2. 对于函数或者方法如product(A, B, C, D),如果ABCD在一个列表里ls=[A, B, C, D],如何把ls传给product?

用*,即product(*ls)。

3. product的输出为元组。用join合并元组的所有元素,以字符串的形式输出密码组合。

借用某个最佳实现

from itertools import product

ADJACENTS = ('08', '124', '2135', '326', '4157', '52468', '6359', '748', '85790', '968')

def get_pins(observed):
    return [''.join(p) for p in product(*(ADJACENTS[int(d)] for d in observed))]

暴力破解密码之后,窃贼就是瓮中之鳖啦!

转载于:https://www.cnblogs.com/netoops/p/6875901.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30852451/article/details/97650618

智能推荐

thermal的gov_bang_bang governer_thermal bangbang-程序员宅基地

文章浏览阅读838次。thermal gover 有五种,我们这里以gov_bang_bang.c 为例gov_bang_bang是控制风扇的。之后两种状态,即风扇开和关,并没有提供调整风扇转速的方法.static struct thermal_governor thermal_gov_bang_bang = { .name = "bang_bang", .throttle = bang_bang_contr_thermal bangbang

六款常用的linux C/C++ IDE_linux c++ ide-程序员宅基地

文章浏览阅读5.9k次。sourceinsight一、AnjutaAnjuta是一个多语言的IDE,它最大的特色是灵活,同时打开多个文件,内嵌代码级的调试器(调用gdb),应用程序向导(Application wizards)可..._linux c++ ide

LeetCode-第125题验证回文串-C语言详解_【问题描述】 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之-程序员宅基地

文章浏览阅读150次。LeetCode-第125题验证回文串-C语言详解_【问题描述】 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之

ubuntu 安装mysql及目录位置-程序员宅基地

文章浏览阅读296次。安装sudo apt-get installMySQL-servermysql-client查看安装端口情况sudo netstat -tap | grep mysql配置文件位置sudo vim /etc/mysql/my.cnf打开关闭服务/etc/init.d/mysql start/stop卸载[plain]view plainco..._ubantu数据库文件安装位置

计算机组成原理 练习卷 第2章第1节数据与文字的表示方法(解析版)(正确答案版)-程序员宅基地

文章浏览阅读412次。计算机组成原理 练习卷 第2章第1节数据与文字的表示方法(解析版)(正确答案版)

WAP 中 AS 和 PSK 模式的认证_静态psk认证是什么意思-程序员宅基地

文章浏览阅读4.5k次,点赞3次,收藏15次。参考《无线网络技术–原理,安全及编程》本博文是期末复习总结,参考了学校老师还未出版的教材,仅供学习使用。PSK 模式PSK 是我们传统的连接无线路由器的认证方式,及无线路由器管理员事先设置统一的连接密码,其他接入者同这个密码进行连接。1.基本过程由 AP 生成临时值 ANonce 发给 STASTA 完成下列计算*1).STA 生成临时值 SNonce*2).STA ......_静态psk认证是什么意思

随便推点

css3属性:transform border-radius-程序员宅基地

文章浏览阅读151次。transform:改变,变形,转换transform:rotate(10deg); 旋转10度transform:skew(20deg); 倾斜20度transform:scale(1.5); 放大1.5倍,缩小改为负transform:translate(100px,50px); 向右移100px,向上移动50px,如需左 下移动改为负值即可border-..._border-radius transform

自习室预约小程序有哪些功能?_自习室小程序-程序员宅基地

文章浏览阅读1.5k次。有了自习室小程序,要查看附近有哪些自习室,直接在微信打开附近的小程序,周边自习室一览无遗;想要查看附近有哪些自习室,打开附近的小程序,立即锁定最近的自习室,即使你的店在最偏僻的角落,只要附近有人,用户打开小程序就能看到你的自习室。微信小程序的活跃用户非常的多,自习室门店利用所开发的小程序,帮助店铺获得更多的客源。自习室预约服务就是用户在使用小程序在线订场服务,在小程序中,可以直观的看到自习室的预约情况、预约费用,然后在线缴付订金。还可以邀请小伙伴一起组队,只需要几分钟就能完成整个预约过程。..._自习室小程序

如何完整卸载wxpython_wxpython学习笔记-程序员宅基地

文章浏览阅读442次。一、简介wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源..._如何卸载wxauto库

3、apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢)-程序员宅基地

文章浏览阅读2.5w次。本文简单的介绍了kylin的基本使用示例,也给出了hive和kylin的使用比较。本文中第一个示例详细的介绍了kylin的使用步骤,以及与hive的使用简单对比;第二个示例单独的使用kylin来实现,仅仅给出了最后一个示例的hive执行时间的对比。本文依赖hive环境好用、kylin环境好用。本文部分数据来源于互联网。_apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢

sentinel 限流算法,方式 漏桶,令牌桶 限流,降级,熔断_sentinel 限流原理 令牌桶 漏桶-程序员宅基地

文章浏览阅读690次,点赞6次,收藏3次。Sentinel 是阿里巴巴开源的一个流量控制、熔断降级组件,主要用于微服务架构中的服务保护。Sentinel 提供了多种限流算法和策略,其中与限流相关的算法包括漏桶算法和令牌桶算法。同时,Sentinel 还支持降级和熔断机制,以应对系统的不同压力情况。_sentinel 限流原理 令牌桶 漏桶

【UAV】基于李亚普诺夫的跟踪和动态编队控制实现水下勘探的先进AUV控制方法附matlab代码-程序员宅基地

文章浏览阅读1.2k次,点赞38次,收藏22次。随着海洋科学研究和资源开发的不断深入,水下自主航行器(AUV)作为一种重要的海洋装备,在海洋勘探、水下作业和科学研究等领域发挥着越来越重要的作用。AUV 的控制技术是实现其自主航行和完成任务的关键,而基于李亚普诺夫的跟踪和动态编队控制方法是 AUV 控制领域的研究热点之一。基于李亚普诺夫的跟踪和动态编队控制方法是 AUV 控制领域的研究热点之一,具有鲁棒性强、易于实现等优点,在水下勘探中具有广泛的应用前景。