You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Array实现纸牌魔术的交替取牌放牌逻辑?

纸牌魔术序列模拟实现

需求说明

  • 魔术规则:重复执行「将牌堆第一张移到牌堆底部,把第二张放到桌面」的操作,直到所有牌都放到桌面
  • 使用给定的Q_kort数组时,最终桌面的出牌顺序必须是1、2、3……13
  • 必须使用Python的array模块完成

原错误代码

from array import array

Q_kort = array("i", [7, 1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10]) 

class Kort:
    def __init__(self, Q_kort):
        self.__Q_kort = Q_kort

    def enqueue(self, x):
        sist = self.__Q_kort.append(x)
        return sist

    def dequeue(self):
        forst = self.__Q_kort.pop(0)
        return forst

def magic():
    kort = Kort(Q_kort)
    for element in Q_kort:
        kort.dequeue()
        kort.enqueue(element)
        print(element)

magic()

问题分析

  1. 原代码的for循环直接遍历原数组元素,未考虑操作过程中队列长度的动态变化,导致循环次数与操作逻辑不匹配
  2. 错误地对每个元素执行「出队+入队+打印」,完全不符合魔术规则的“移一张、出一张”逻辑

修正实现

核心逻辑是循环处理队列直到清空:

  • 每次循环先将队首元素移到队尾(模拟把第一张牌放到牌堆底部)
  • 然后取出队首元素(模拟放到桌面)
  • 当队列只剩最后一张牌时,直接取出即可,无需再移队尾
from array import array

Q_kort = array("i", [7, 1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10]) 

class Kort:
    def __init__(self, q_array):
        self.__queue = q_array

    def enqueue(self, item):
        self.__queue.append(item)

    def dequeue(self):
        if not self.is_empty():
            return self.__queue.pop(0)
        return None

    def is_empty(self):
        return len(self.__queue) == 0

    def size(self):
        return len(self.__queue)

def magic():
    kort_deck = Kort(Q_kort.copy())  # 复制原数组避免修改原始数据
    result = []
    while not kort_deck.is_empty():
        if kort_deck.size() > 1:
            # 只剩一张牌时无需移到队尾
            moved_card = kort_deck.dequeue()
            kort_deck.enqueue(moved_card)
        # 取出当前队首放到桌面
        desk_card = kort_deck.dequeue()
        result.append(desk_card)
        print(desk_card, end=" ")
    print("\n最终出牌顺序是否符合要求:", result == list(range(1,14)))

magic()

运行结果

运行后会依次输出:1 2 3 4 5 6 7 8 9 10 11 12 13,并验证顺序符合要求。

内容的提问来源于stack exchange,提问作者David Gallego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:20:32