利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)
魔術(shù)流程
劉謙在2024年春晚上的撕牌魔術(shù)的數(shù)學(xué)原理非常簡單,可以用Python完美復(fù)現(xiàn)。其基本流程如下
- 準(zhǔn)備4張牌1234,撕成兩半,并疊放在一起,從而8張牌的順序?yàn)?2341234,相同的數(shù)字,表示是同一張牌。
- 將上面的三張插入后面的牌里,將第四章牌壓在屁股下。也就是說,屁股下的牌是4,手里的牌盡管是亂的,但最下面的牌一定也是4 。接下來可以任意洗牌,只要保證4一直在最下面。現(xiàn)場劉謙讓南方人拿一張牌插入中間,北方人拿兩張牌插入中間,如果不確定自己是南是北,就拿3張牌插中間。
- 男生扔一張,女生扔兩張,盡管二者分別剩下6/7張牌,但仍不改變最下面是4 ,但接下來,連續(xù)把7張牌放在最底下,這步讓男生的4變成倒數(shù)第二張、女生的4變成倒數(shù)第三張。
- 把最上面的牌放在最下面,然后扔掉第二張,重復(fù)操作,直到只剩下一張牌為止。
最后的結(jié)果是,剩下的是4。
python實(shí)現(xiàn)
下面用python實(shí)現(xiàn)這個(gè)魔術(shù)流程,首先實(shí)現(xiàn)一個(gè)比較常用的操作,即洗牌。將最上面的i ii張牌插入到剩下的牌中,實(shí)現(xià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:]
然后實(shí)現(xiàn)第4步操作,即留一張牌,然后扔一張牌,反復(fù)操作,直到只剩下一張。
def cleaner(lst):
if len(lst) == 1:
return lst[0]
lst = lst[1:]+lst[:1]
del lst[0]
return cleaner(lst)
最后,實(shí)現(xiàn)主程序,代碼如下。其輸入l s t 為長度為4的序列,isMale為是男是女,fromN為正整數(shù),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)
見證奇跡
接下來,就是見證奇跡的時(shí)刻
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
可見,無論是男是女,最終輸出的都是相同的結(jié)果。
到此這篇關(guān)于利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)的文章就介紹到這了,更多相關(guān)Python劉謙春晚魔術(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python調(diào)用Java接口失敗(Java日志打印警告:JSON parse error:xxxx)
文章描述了Python調(diào)用Java接口時(shí)遇到400錯(cuò)誤和JSON解析錯(cuò)誤的問題,通過分析問題發(fā)現(xiàn)參數(shù)傳遞方式可能存在問題,修改Python代碼使用data參數(shù)并序列化數(shù)據(jù)后,問題解決,文章總結(jié)了在Python調(diào)用Java接口傳遞JSONObject數(shù)據(jù)時(shí)的注意事項(xiàng),需要的朋友可以參考下2025-11-11
pycharm中加了斷點(diǎn)卻無法調(diào)試,直接執(zhí)行到程序結(jié)束如何解決
這篇文章主要介紹了pycharm中加了斷點(diǎn)卻無法調(diào)試,直接執(zhí)行到程序結(jié)束如何解決問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Python基礎(chǔ)學(xué)習(xí)之時(shí)間轉(zhuǎn)換函數(shù)用法詳解
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之時(shí)間轉(zhuǎn)換函數(shù)用法,結(jié)合實(shí)例形式分析了Python常見的日期時(shí)間獲取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
Python內(nèi)置函數(shù)zip map filter的使用詳解
這篇文章主要介紹了Python內(nèi)置函數(shù)zip map filter的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

