当前位置:首页>python>破解达芬奇密码的Python和VBA完整可直接运行的代码

破解达芬奇密码的Python和VBA完整可直接运行的代码

  • 2026-09-06 19:48:40
破解达芬奇密码的Python和VBA完整可直接运行的代码

关注我:ღ双识求索ღ藏器于身,待时而动。

知识就是力量,知识改变命运;科技就是生产力,AI就是即战力!

达芬奇密码是一种通过数学运算来预测数字的分析方法,它使用包括两码加、减、乘、除法来进行运算,并发现规律密码,这种预测的分析方法适合长期跟踪参考.

业务逻辑:5 个号码两两不重复配对,计算和、差绝对值、乘积;双向整除则加入整数商;最终只保留 1‑35 的数值。

# Python版本def calc_prize_numbers(current_prize):    # 集合,自动去重    prize_set = set(current_prize)    numbers = set()    # 外层循环    for i in range(5):        # j从i+1,实现不重复两两组合        for j in range(i + 1, 5):            a, b = current_prize[i], current_prize[j]            # 批量加入和、差绝对值、乘积            numbers.update({a + b, abs(a - b), a * b})            # a能被b整除,加入整数商            if a % b == 0:                numbers.add(a // b)            # b能被a整除,加入整数商            if b % a == 0:                numbers.add(b // a)    # 范围裁剪,只保留1~35    numbers = {n for n in numbers if 1 <= n <= 35}    return numbers# ========== 测试运行 ==========if __name__ == "__main__":    current_prize = [3, 7, 11, 17, 23]    res = calc_prize_numbers(current_prize)    print("过滤后1‑35结果:", sorted(res))

Python:直接复制运行,控制台打印排序后的结果;

Python 没有 Next 关键字。依靠缩进层级区分代码归属哪一层循环:

缩进在 for j 下方 → 属于内层 j 循环;
缩进退回和 for j 平齐 → 退出内层循环,回到外层 i 循环。解释器自动识别循环块边界,不需要手动标记循环结束。

等价 VBA 代码(必须显式 Next),VBA 使用 For ... Next成对语法,强制需要 Next 闭合循环,依靠关键字界定循环范围,不看缩进。

Option ExplicitSub CalcPrizeNumbers()    '输入5个号码    Dim current_prize As Variant    current_prize = Array(3, 7, 11, 17, 23)    '字典模拟集合,key自动去重    Dim numbers As Object    Set numbers = CreateObject("Scripting.Dictionary")    Dim i As Integer, j As Integer    Dim a As Long, b As Long    Dim sumVal As Long, diffVal As Long, mulVal As Long    Dim divVal As Long    For i = 0 To 4        For j = i + 1 To 4            a = current_prize(i)            b = current_prize(j)            sumVal = a + b            diffVal = Abs(a - b)            mulVal = a * b            '等价 update批量添加            If Not numbers.Exists(sumVal) Then numbers(sumVal) = True            If Not numbers.Exists(diffVal) Then numbers(diffVal) = True            If Not numbers.Exists(mulVal) Then numbers(mulVal) = True            'a Mod b 判断整除,\ 整数除法(向0截断)            If a Mod b = 0 Then                divVal = a \ b                If Not numbers.Exists(divVal) Then numbers(divVal) = True            End If            If b Mod a = 0 Then                divVal = b \ a                If Not numbers.Exists(divVal) Then numbers(divVal) = True            End If        Next j 'VBA必须Next闭合内层循环    Next i   'VBA必须Next闭合外层循环    '范围过滤:1‑35    Dim filterDict As Object    Set filterDict = CreateObject("Scripting.Dictionary")    Dim k As Variant    For Each k In numbers.Keys        If k >= 1 And k <= 35 Then            filterDict(k) = True        End If    Next k    '输出到立即窗口 Ctrl+G查看    Debug.Print "过滤后1‑35结果:" & Join(filterDict.Keys, ",")    Set numbers = Nothing    Set filterDict = NothingEnd Sub

Python 使用集合推导式一行完成过滤:

numbers = {n for n in numbers if 1 <= n <= 35}

;VBA 需要遍历字典 Keys,新建字典保存符合条件的数字。VBA 没有原生Set集合类型,使用Scripting.Dictionary字典模拟 Python set 特性:key 自动去重,只存数字,value 随意占位。

两段代码实现一模一样逻辑:

5 个元素不重复两两组合 C (5,2)=10 组

Python:依靠缩进自动识别两层 for 范围;

VBA:依靠 Next j / Next i告诉解释器内层循环什么时候结束、回到外层。VBA 支持简写 Next j,i,但规范写法分开两行,可读性更好。

VBA 的For…Next必须成对,Next j、Next i不能省略,缩进只是可读性美化,不控制程序逻辑,不影响程序解析。VBA Next顺序不能颠倒:先 Next j再 Next i;

Python 缩进一旦错乱,逻辑直接跑偏(不会报错,但运算结果错误,隐形 Bug)。

VBA 编辑器中插入模块,粘贴代码;修改current_prize = Array(3, 7, 11, 17, 23)为自己的 5 个号码;按 F5 运行,Ctrl+G打开立即窗口就可以查看输出结果了。

精妙代码值得认真深刻理解和灵活应用,值得收藏!你还不点个赞,为你认真读完这篇文章点赞👍!

所谓千里之行始于足下: 不积跬步,无以至千里。不积小流,无以成江海。骐骥一跃,不能十步。驽马十驾,功在不舍。锲而舍之,朽木不折。锲而不舍,金石可镂。每天进步一点点,总会离成功更近一点吧!

欢迎交流,有任何问题欢迎留言讨论

AI已经让我们可以直通知识海洋的入口了,一起努力学习吧,解锁更多自动化数据分析技巧!

双识求索,在线充电,执着不倦,磨刀不止,藏器于身,待时而动。

数据分析可能大多数人都是从接触EXCEL开始的,非专业的程序员如果想要提高工作效率,学习一点程序代码还是相当有帮助的!

如要让枯燥的数据分析带来灵动的活力就需要借助程序代码进行自动化,使你的数据分析又快又好,助你高效制胜!

双识求索:分享自学学习笔记,点点滴滴,刨根究底!关注我,体验跑通代码的快乐和数据分析成功的喜悦!

如果没有很多很多的钱,能有很多很多的爱也很好,能够利用VBA解决很多很多的问题也不错!

最新文章

随机文章