用Python实现刘谦春晚魔术

魔术流程

刘谦在2024年春晚上的撕牌魔术的数学原理非常简单,可以用Python完美复现。其基本流程如下

  1. 准备4张牌 1234 1234 1234,撕成两半,并叠放在一起,从而8张牌的顺序为 12341234 1234 1234 12341234,相同的数字,表示是同一张牌。
  2. 将上面的三张插入后面的牌里,将第四章牌压在屁股下。也就是说,屁股下的牌是 4 4 4,手里的牌尽管是乱的,但最下面的牌一定也是 4 4 4。接下来可以任意洗牌,只要保证 4 4 4一直在最下面。现场刘谦让南方人拿一张牌插入中间,北方人拿两张牌插入中间,如果不确定自己是南是北,就拿3张牌插中间。
  3. 男生扔一张,女生扔两张,尽管二者分别剩下6/7张牌,但仍不改变最下面是 4 4 4,但接下来,连续把7张牌放在最底下,这步让男生的 4 4 4变成倒数第二张、女生的 4 4 4变成倒数第三张。
  4. 把最上面的牌放在最下面,然后扔掉第二张,重复操作,直到只剩下一张牌为止。

最后的结果是,剩下的是 4 4 4

python实现

下面用python实现这个魔术流程,首先实现一个比较常用的操作,即洗牌。将最上面的 i i i张牌插入到剩下的牌中,实现代码如下,其中 N N N为插入牌的位置。

from random import randint
def shuffle(lst, i):
    N = randint(i+1,len(lst)-1)
    return lst[i:N] + lst[:i] + lst[N:]

然后实现第 4 4 4步操作,即留一张牌,然后扔一张牌,反复操作,直到只剩下一张。

def cleaner(lst):
    if len(lst) == 1:
        return lst[0]
    lst = lst[1:]+lst[:1]
    del lst[0]
    return cleaner(lst)

最后,实现主程序,代码如下。其输入 l s t lst lst为长度为4的序列,isMale为是男是女,fromN为正整数, 1 , 2 , 3 1,2,3 1,2,3分别表示南方、北方以及不知道南北方。

def LQ(lst, isMale, fromN=1):
    lst = lst + lst
    lst = shuffle(lst,3)
    ass = lst[0]
    lst = lst[1:]
    lst = shuffle(lst, fromN)
    if isMale:
        del lst[0]
    else:
        del lst[:2]
    for i in range(7):
        lst = lst[1:] + lst[:1]
    hand = cleaner(lst)
    print(ass, hand)

见证奇迹

接下来,就是见证奇迹的时刻

LQ(["J", "Q", "K", "A"], 1, 2)  # A A
LQ(["J", "Q", "K", "A"], 0, 2)  # A A
LQ(["J", "Q", "K", "A"], 1, 1)  # A A

可见,无论是男是女,最终输出的都是相同的结果。

相关推荐

  1. Python实现魔术

    2024-02-11 12:02:01       49 阅读
  2. Python实现2024魔术

    2024-02-11 12:02:01       47 阅读
  3. 魔术解析Python

    2024-02-11 12:02:01       57 阅读
  4. 2024魔术C++实现

    2024-02-11 12:02:01       59 阅读
  5. 龙年魔术模拟

    2024-02-11 12:02:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-11 12:02:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-11 12:02:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-11 12:02:01       87 阅读
  4. Python语言-面向对象

    2024-02-11 12:02:01       96 阅读

热门阅读

  1. vector如何实现有序数组?

    2024-02-11 12:02:01       45 阅读
  2. VMware16安装CentOS7mini 中遇到的一些问题

    2024-02-11 12:02:01       56 阅读
  3. Linux文本三剑客(1)

    2024-02-11 12:02:01       43 阅读
  4. Python列表中的remove功能及用法举例

    2024-02-11 12:02:01       47 阅读
  5. Linux开发:PAM3 Ubuntu(22.04)安装PAM开发库

    2024-02-11 12:02:01       48 阅读
  6. 贪心算法之田忌赛马,多种语言实现

    2024-02-11 12:02:01       40 阅读
  7. 数组旋转变换分析

    2024-02-11 12:02:01       51 阅读
  8. 【SpinalHDL】2.数据类型SpinalEnum

    2024-02-11 12:02:01       62 阅读
  9. C++入门

    C++入门

    2024-02-11 12:02:01      38 阅读