import random
#将牌撕开再叠加
def doubleArr(arr):
for i in range(0,len(arr),1):
arr.append(arr[i])
#洗牌
def shuffle(arr,x):
arrLen = len(arr)
for i in range(0,x,1):
StartToEnd = arr[0]
for j in range(1,arrLen,1):
arr[j-1] = arr[j]
arr[arrLen-1] = StartToEnd
#将开头连续的n∈(1, 原序列长度/2-1)张牌随便插入序列的中间
def insertMid(arr,rocation,inserArrCount):
arrLen = len(arr)
SwapStartIndex = inserArrCount
SwapStopIndex = 0
for i in range(0,rocation,1):
for j in range(SwapStartIndex,SwapStopIndex,-1):
arr[j-1],arr[j] = arr[j],arr[j-1]
SwapStartIndex += 1
SwapStopIndex += 1
#魔术的丢牌步骤,直至剩下一张牌
def losePoker(arr):
loseRocation = random.randint(1,2)
print(f"随机生成满足z∈[1,2]的z值:\nz = {loseRocation}")
print(f"丢弃第一张牌,重复 z={loseRocation} 次...")
for i in range(0,loseRocation,1):
arr.pop(0)
print(arr)
print("将第一张牌放到最后,重复 7 次...")
for i in range(0,7,1):
temp = arr.pop(0)
arr.insert(len(arr),temp)
print(arr)
print(f"将第一张牌放到最后,再将新序列的第一张牌扔掉,重复 6-z={6-loseRocation} 次...")
for i in range(0,6-loseRocation,1):
temp = arr.pop(0)
arr.insert(len(arr),temp)
arr.pop(0)
print(arr)
def _2024Spring(arr):
print("初始序列:")
print(arr)
print("将牌撕开再叠加:")
doubleArr(arr)
print(arr)
x = random.randint(0,10)
print(f"重复洗牌(将第一张牌放到最后) x={x} 次后:")
shuffle(arr,x)
print(arr)
arrLen = len(arr)
rocationMax = arrLen-4
rocation = random.randint(1,rocationMax)
print(f"将开头连续 y=3 张牌插入中间第 n ∈[1,arrLen-y-1={rocationMax}] 个位置(arrLen = {len(arr)}):\n生成n = {rocation}")
insertMid(arr,rocation,3)
print(arr)
arsePoker = arr.pop(0)
print(f"把第一张牌藏起来,这张牌为:\n['{arsePoker}']")
print("此时剩下的牌为:")
print(arr)
inserArrCount = random.randint(1,int(arrLen/2-1))
rocationMax = arrLen-inserArrCount-2
rocation = random.randint(1,rocationMax)
print(f"y∈[1,{int(arrLen/2-1)}],取随机y张牌插入序列中间...生成随机数:\ny = {inserArrCount}")
print(f"将开头连续 y={inserArrCount} 张牌插入中间第 n ∈[1,arrLen-y-1={rocationMax}] 个位置(arrLen = {len(arr)}):\n生成n = {rocation}")
insertMid(arr,rocation,inserArrCount)
print(arr)
losePoker(arr)
poker = ["A","3","6","K"]
_2024Spring(poker)
效果: