Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

admin 2024年2月13日23:08:36评论11 views字数 8920阅读29分44秒阅读模式

好运留下来,烦恼丢出去

人生苦短,我用Python

春晚刘谦魔术,其实是一个数学原理,今天用python更直观地为大家演示一下这个魔术原理。

一、导入库

import randomfrom collections import deque

二、跟着刘谦步骤写程序


1、打乱13张牌
用一个 cards 列表存放 13 张不一样的牌 ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
使用random.shuffle() 函数,将列表中的元素随机打乱。这个函数会直接修改原始列表,而不是创建一个新的打乱顺序的列表。

cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]print(f"最初的的13张牌:{cards}")random.shuffle(cards)print(f"打乱顺序的13张牌:{cards}")

控制台中输出如下:

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

2、随机抽取4张牌
使用random.sample()函数,从列表中随机抽取指定数量的元素。这个函数不会修改原始序列,而是返回一个新的包含抽取元素的列表。

# 随机选择4张牌random_4_cards = random.sample(cards, 4)print(f"随机抽出的4张牌:{random_4_cards}")

控制台输出如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

3、将牌对折后撕开
创建了一个名为 random_8_cards 的双端队列,其中包含 random_4_cards 的 2 倍元素。

# 对折后撕开得到8张牌random_8_cards = deque(random_4_cards * 2)print(f"对折后撕开得到8张牌:{random_8_cards}")

控制台输出如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

4、根据名字字数得到新顺序牌
使用 collections.deque 类中的rotate() 方法,将双端队列中的元素向左或向右旋转指定的位置。这个方法接受一个参数,表示要旋转的位置数。正数表示向右旋转,负数表示向左旋转。

# 1. 根据名字有几个字,将前几张牌移到最后name = int(input("请输入名字字数:"))# 将双端队列中的元素向左旋转几个位置random_8_cards.rotate(-name)print(f"根据名字字数调整后的牌:{random_8_cards}")


控制台输出如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】5、最上面3张插入剩下牌中间:

# 2. 取出前三张牌并随机插入剩余牌中,不能插在第一张和最后一张first_three = [random_8_cards.popleft() for i in range(3)]print(f"上面3张牌是:{first_three}")print(f"下面5张牌是:{random_8_cards}") for card in first_three:    insert_position = random.randint(1, len(random_8_cards) - 2)    random_8_cards.insert(insert_position, card)    print(f"插入牌是:{card},随机插入位置是:{insert_position+1},新牌顺序是{random_8_cards}")print(f"上面3张牌随机插入剩下牌中间,此时新牌顺序:{random_8_cards}")

控制台输出结果如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

6、最上面1张牌藏起来

# 3. 把最上面的牌藏起来remembered_card = random_8_cards.popleft()print(f"藏起来的1张牌是:{remembered_card}")print(f"剩下7张牌是:{random_8_cards}")

控制台输出如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

7、根据南北方得到新顺序牌

# 4. 南方人取1张,北方人取2张,无法确定取3张,将这些牌随机插入剩下的牌中location = int(input("请输入地区,南方人输入1,北方人输入2,无法确定输入3:"))first_location = [random_8_cards.popleft() for i in range(location)]print(f"上面地区牌是:{first_location}")print(f"剩下牌是:{random_8_cards}") for card in first_location:    insert_position = random.randint(1, len(random_8_cards) - 2)    random_8_cards.insert(insert_position, card)    print(f"插入牌是:{card},随机插入位置是:{insert_position + 1},新牌顺序是{random_8_cards}")print(f"根据南北方,随机插入剩下牌中间,此时新牌顺序:{random_8_cards}")

控制台输出如下:

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

8、根据性别得到新顺序牌

# 5. 男生取1张,女生取2张,将这些牌扔掉gender = int(input("请输入性别,男性输入1,女性输入2:"))for i in range(gender):    random_8_cards.popleft()print(f"根据性别扔牌,此时新牌顺序:{random_8_cards}")

控制台输出如下:

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

9、见证奇迹的时刻
"见证奇迹的时刻"是 7 个字,翻译成代码就是将双端队列中的元素向左旋转 7 个位置。

# 6. 见证奇迹的时刻# 将双端队列中的元素向左旋转7个位置random_8_cards.rotate(-7)print(f"见证奇迹的时刻(向左旋转7次牌),此时新牌顺序:{random_8_cards}")

控制台输出如下:Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

10、好运留下来,烦恼丢出去

# 7. 好运留下来,烦恼丢出去!while len(random_8_cards) > 1:    random_8_cards.append(random_8_cards.popleft())  # 第一张牌移到最后    random_8_cards.popleft()  # 删除现在的第一张牌    print(f"好运留下来,烦恼丢出去!(第一张牌移到最后,删除现在的第一张牌)此时剩余牌顺序:{random_8_cards}")print(f"剩余最后1张牌是:{random_8_cards}")

控制台输出如下:

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

三、完整代码
完整的代码程序如下:

import randomfrom collections import deque cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]print(f"最初的的13张牌:{cards}")random.shuffle(cards)print(f"打乱顺序的13张牌:{cards}") # 随机选择4张牌random_4_cards = random.sample(cards, 4)print(f"随机抽出的4张牌:{random_4_cards}")# 对折后撕开得到8张牌random_8_cards = deque(random_4_cards * 2)print(f"对折后撕开得到8张牌:{random_8_cards}") # 1. 根据名字有几个字,将前几张牌移到最后name = int(input("请输入名字字数:"))# 将双端队列中的元素向左旋转几个位置random_8_cards.rotate(-name)print(f"根据名字字数调整后的牌:{random_8_cards}") # 2. 取出前三张牌并随机插入剩余牌中,不能插在第一张和最后一张first_three = [random_8_cards.popleft() for _ in range(3)]print(f"上面3张牌是:{first_three}")print(f"下面5张牌是:{random_8_cards}") for card in first_three:    insert_position = random.randint(1, len(random_8_cards) - 2)    random_8_cards.insert(insert_position, card)    print(f"插入牌是:{card},随机插入位置是:{insert_position + 1},新牌顺序是{random_8_cards}")print(f"上面3张牌随机插入剩下牌中间,此时新牌顺序:{random_8_cards}") # 3. 把最上面的牌藏起来remembered_card = random_8_cards.popleft()print(f"藏起来的1张牌是:{remembered_card}")print(f"剩下7张牌是:{random_8_cards}") # 4. 南方人取1张,北方人取2张,无法确定取3张,将这些牌随机插入剩下的牌中location = int(input("请输入地区,南方人输入1,北方人输入2,无法确定输入3:"))first_location = [random_8_cards.popleft() for i in range(location)]print(f"上面地区牌是:{first_location}")print(f"剩下牌是:{random_8_cards}") for card in first_location:    insert_position = random.randint(1, len(random_8_cards) - 2)    random_8_cards.insert(insert_position, card)    print(f"插入牌是:{card},随机插入位置是:{insert_position + 1},新牌顺序是{random_8_cards}")print(f"根据南北方,随机插入剩下牌中间,此时新牌顺序:{random_8_cards}") # 5. 男生取1张,女生取2张,将这些牌扔掉gender = int(input("请输入性别,男性输入1,女性输入2:"))for i in range(gender):    random_8_cards.popleft()print(f"根据性别扔牌,此时新牌顺序:{random_8_cards}") # 6. 见证奇迹的时刻# 将双端队列中的元素向左旋转7个位置random_8_cards.rotate(-7)print(f"见证奇迹的时刻(向左旋转7次牌),此时新牌顺序:{random_8_cards}") # 7. 好运留下来,烦恼丢出去!while len(random_8_cards) > 1:    random_8_cards.append(random_8_cards.popleft())  # 第一张牌移到最后    random_8_cards.popleft()  # 删除现在的第一张牌    print(f"好运留下来,烦恼丢出去!(第一张牌移到最后,删除现在的第一张牌)此时剩余牌顺序:{random_8_cards}")print(f"剩余最后1张牌是:{random_8_cards}") # 8. 查看藏起来的1张牌print(f"藏起来的1张牌是:{remembered_card}")

控制台输出如下:

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

四、封装函数
我们将上面的代码进行封装,定义一个 magic() 函数,把名字字数定义为随机 1-10 的数字,南北方人为随机 1-3 的数字,性别为随机 1-2 的数字。
在 main 主函数内调用 10 万次 magic()函数,看一下运行结果正确率。

import randomfrom collections import deque  def magic():    cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]    # print(f"最初的的13张牌:{cards}")    random.shuffle(cards)    # print(f"打乱顺序的13张牌:{cards}")     # 随机选择4张牌    random_4_cards = random.sample(cards, 4)    # print(f"随机抽出的4张牌:{random_4_cards}")    # 对折后撕开得到8张牌    random_8_cards = deque(random_4_cards * 2)    # print(f"对折后撕开得到8张牌:{random_8_cards}")     # 1. 根据名字有几个字,将前几张牌移到最后    name = int(random.randint(1, 10))    # 将双端队列中的元素向左旋转几个位置    random_8_cards.rotate(-name)    # print(f"根据名字字数调整后的牌:{random_8_cards}")     # 2. 取出前三张牌并随机插入剩余牌中,不能插在第一张和最后一张    first_three = [random_8_cards.popleft() for _ in range(3)]    # print(f"上面3张牌是:{first_three}")    # print(f"下面5张牌是:{random_8_cards}")     for card in first_three:        insert_position = random.randint(1, len(random_8_cards) - 2)        random_8_cards.insert(insert_position, card)    #     print(f"插入牌是:{card},随机插入位置是:{insert_position + 1},新牌顺序是{random_8_cards}")    # print(f"上面3张牌随机插入剩下牌中间,此时新牌顺序:{random_8_cards}")     # 3. 把最上面的牌藏起来    remembered_card = random_8_cards.popleft()    # print(f"藏起来的1张牌是:{remembered_card}")    # print(f"剩下7张牌是:{random_8_cards}")     # 4. 南方人取1张,北方人取2张,无法确定取3张,将这些牌随机插入剩下的牌中    location = int(random.randint(1, 4))    first_location = [random_8_cards.popleft() for i in range(location)]    # print(f"上面地区牌是:{first_location}")    # print(f"剩下牌是:{random_8_cards}")     for card in first_location:        insert_position = random.randint(1, len(random_8_cards) - 2)        random_8_cards.insert(insert_position, card)    #     print(f"插入牌是:{card},随机插入位置是:{insert_position + 1},新牌顺序是{random_8_cards}")    # print(f"根据南北方,随机插入剩下牌中间,此时新牌顺序:{random_8_cards}")     # 5. 男生取1张,女生取2张,将这些牌扔掉    gender = int(random.randint(1, 2))    for i in range(gender):        random_8_cards.popleft()    # print(f"根据性别扔牌,此时新牌顺序:{random_8_cards}")     # 6. 见证奇迹的时刻    # 将双端队列中的元素向左旋转7个位置    random_8_cards.rotate(-7)    # print(f"见证奇迹的时刻(向左旋转7次牌),此时新牌顺序:{random_8_cards}")     # 7. 好运留下来,烦恼丢出去!    while len(random_8_cards) > 1:        random_8_cards.append(random_8_cards.popleft())  # 第一张牌移到最后        random_8_cards.popleft()  # 删除现在的第一张牌    #     print(f"好运留下来,烦恼丢出去!(第一张牌移到最后,删除现在的第一张牌)此时剩余牌顺序:{random_8_cards}")    # print(f"剩余最后1张牌是:{random_8_cards[0]}")     # 8. 查看藏起来的1张牌    # print(f"藏起来的1张牌是:{remembered_card[0]}")    return [random_8_cards[0], remembered_card]  if __name__ == '__main__':    # 进行多次模拟,计算正确率    times = 100000    correct_match_times = 0    for i in range(times):        result = magic()        if result[0] == result[1]:            correct_match_times += 1    match_rate = f"{(correct_match_times / times * 100)} % "    print(f"运行{times}次,正确率是{match_rate}")

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

通过我们的代码实验,可以看出刘谦的这个魔术纯粹是数学原理,只要按照固定的顺序执行,就一定能拼成完成的牌。
所以小尼的牌能对不上也真是有点东西

据说是约瑟夫环......

四张牌撕成八张之后上下叠放,我们用从上至下的ABCD来表示

那么此时牌的序列为ABCDABCD

第一步:从上方按照名字字数以此把牌放到下方

例:名字为二字时,序列为CDABCDAB

名字为三字时,序列为DABCDABC

名字为七字时,序列为DABCDABC

名字无论为几个字,序列中前四个和后四个相同

记新的序列为abcXabcX

第二步:从上方取三张,插入剩下的五张之间

这一步在插入的过程中,插入的是剩下五张序列(XabcX)的空隙中,这使得abc的位置

是随机的,但是俩个X的位置必然是第一位和最后一位,记新序列为X000000X

第三步:把第一张(一定为X)放在屁股底下

此时剩下七张序列为000000X

第四步:(1)根据南北方取上方一至三张,放到上的几张之间

此时剩下七张序列仍为000000X

(2)根据男女性别取上方一至二张丢掉

此时剩下为000000X或00000X

第五步:喊出“见证奇迹的时刻”并依次把第一张放在最后一张(放七次)

此时序列为i)00000X0或ii)000X00

第六步:循环操作“扔掉最上面的一张之后,再把新的第一张放在最后”直至仅剩一张

此时i)00000X0中操作一次后为000X00,与ii)000X00相同,

故我们只分析000X00即可。

000X00

扔:00X00

扔:X000

扔:00X

扔:X0

扔:X

换:0X000

换:000X

换:0X0

换:OX
第七步:剩下的必为X,与第三步中放屁股下面的一定相同。

春晚的历史可以追溯到1983年,至今已经举办了多个届次。它的主要目的是为了庆祝中国农历新年的到来,同时也是展示中国传统文化和艺术的窗口。春晚的节目形式多样,包括歌舞、戏曲、小品、相声、魔术等各种表演形式。节目内容丰富多彩,既有经典传统的节目,也有时代感强的创新节目,以及一些具有社会意义的表演。春晚的观众非常庞大,每年都吸引了亿万观众收看。它成为了中国家庭团聚的重要组成部分,许多家庭会在除夕夜一起收看春晚,共度欢乐的时光。春晚也是中国演艺界的一次盛会,许多知名的艺术家和明星会在节目中亮相表演,给观众带来精彩的视听享受。除了在电视上直播,春晚也会通过互联网平台进行网络直播,使更多的观众可以随时随地收看节目。此外,春晚还会邀请一些海外华人和外国友人参与演出,展示中华文化的魅力。总的来说,春晚是中国文化传统的重要组成部分,也是中国people热切期待的一项节目。它通过丰富多彩的表演形式和内容,为观众带来欢乐和温暖,同时展现了中国文化的魅力和多样性。

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

1983—2023年春晚合集打包下载MP4格式!精品!!!
各位水友,整理下载不易,请大家支持原创贴。所有视频都转为了MP4格式,通用各种播放器和唱戏机,送给长辈们很不错!

我用夸克网盘分享了「1983—2023年春晚合集下载」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/9d961d46b14f

过去:看完哈哈大笑,其乐融融,幸福感很高。现在:看完撇嘴,又被上了一课,该勤劳致富、生八个,

年味淡了,春晚也变得审美疲劳,关注度也不高了。除夕夜你在做什么?是不是刷着短视频,等着五福开奖?所以你品品

作为一个XX后,前些天看到论坛的历届春晚合集,里面满满的都是童年和青春:
有当今依然活跃着的,处于影、视、乐天王天后地位的一些人当年的青稚;
有斯人已逝,命途多舛;
有视觉与表演的内容和风格几十年的演变
有感于春晚喜剧节目越来越不好笑的原因……

《我的中国心》、《万里长城永不倒》、《冬天里的一把火》、《涛声依旧》等经典歌曲一年接一年走上春晚
陈佩斯小品,羊肉串、主角配角、小偷……
赵丽蓉、冯巩、黄宏、郭达、蔡明小品的名场面……
赵本山20年春晚小品,无数金句……

赵本山小品退出与郭德纲相声登场春晚喜剧的交接……
贾玲以女相声演员登场还是曼妙的身材……
老郭登场仅一年,也只在两年后就到小岳岳登场春晚一首五环爆红……
当今喜剧电影的顶流——沈腾,也已登场10年春晚……

越落后的地方规矩越多。想想以前的农村过个年得个把月,大把的时间和金钱都浪费了。各种家长里短嚼舌头,蹭吃蹭喝的有意思吗?

其实我们之所以看到一个向往的地方,去了之后却感到失望,都是因为打开的方式不对罢了,昙花一现、走马观花一样打卡景点肯定没有之前慢慢期盼的那样好

以前是很早就睡了,现在是老人很早就睡了,中年人都是聚在一起聊天、喝酒、猜码,年轻人玩手机,各种活动各种嗨

最后祝愿大家龙年大吉!诸事兴“龙”!

原文始发于微信公众号(小明今天拿站了吗):Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月13日23:08:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Python实现春晚刘谦魔术“好运留下来,烦恼丢出去”【文末赠送春晚83-23年合集】https://cn-sec.com/archives/2489984.html

发表评论

匿名网友 填写信息