如何在特定条件下按特定顺序将列表放入一个更大的列表中?- Python 3.x

AJ123

现在,我有一个代码看起来像这样:

def get_newdeck(choice, P1, P2, P3):
    deck = []
    if choice == 1:
        deck = P2+P1+P3
        return deck
    elif choice == 2:
        deck = P1+P2+P3
        return deck
    else:
        deck = P1+P3+P2
        return deck

这是一个代码的一部分,它是一个魔术的代码的一部分,它从 21 的“甲板”中猜测用户的卡片。choice是用户输入(1、2 或 3 的整数),用于堆放卡片以前在,P1, P2, P3是代表三堆的列表;更多关于这些桩的解释如下。
算法卡片技巧的工作原理如下:

  1. 魔术师将 21 张洗好的扑克牌正面朝上分成三堆,从左到右逐行。魔术师第一次这样做时,要求观众选择其中一张卡片并保密他们的选择。

  2. 魔术师让观众说出他们的卡片是在第一堆、第二堆还是第三堆。

3. 魔术师将卡片一叠一叠地收集起来,确保所选的一叠放在其他两叠之间。

  1. 步骤 1-3 再重复 2 次。

  2. 完成这些步骤后,所选卡片将“神奇地”位于 21 张卡片的中间。

有问题的步骤是第三步,我试图让它看起来不那么重复。

有没有办法让我的代码(如上所示)使用循环工作?仅供参考,我正在使用 Python-3.x

如果你想要它,这里是完整的代码 - 我知道它很乱,而且没有注释,但我正在尝试修复它,从“混乱”部分开始。

import random

def get_cards():
    nums, suits=['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King'], ['Hearts','Clubs','Diamonds','Spades']
    cards_dealt=[]
    while len(cards_dealt) < 22:
        card = random.choice(nums) + " of " + random.choice(suits)
        if card not in cards_dealt:
            cards_dealt.append(card)
        else:
            continue        
    return cards_dealt


def get_piles(deck):
    P1, P2, P3 = [], [], []
    for i in range(21):
        if i%3 == 0:
            P1.append(deck[i])
        elif i%3 == 1:
            P2.append(deck[i])
        else:
            P3.append(deck[i])
    return P1, P2, P3

#####################################
def get_newdeck(choice, P1, P2, P3):
    deck = []
    if choice == 1:
        deck = P2+P1+P3
        return deck
    elif choice == 2:
        deck = P1+P2+P3
        return deck
    else:
        deck = P1+P3+P2
        return deck
#####################################

def main():
    deck = get_cards()
    print("Choose a card and remember it")
    for x in range(3):
        P1, P2, P3 = get_piles(deck)
        piles = {'Pile 1':P1, 'Pile 2': P2, 'Pile 3':P3} 
        for numpile, pile in sorted(piles.items()):
            print()
            print(numpile,': ')
            for card in pile:
                print(card)
        print()
        choice = 0
        while choice > 3 or choice < 1:
            while True:
                try:
                    choice = int(input("Which pile is your card in? (1-3)? > "))
                    break
                except ValueError:
                    print("Must be a number")
        deck = get_newdeck(choice, P1, P2, P3)
    print()
    print('Your card is {}'.format(deck[10]))


main()
maccam912

你可以这样做:

def get_newdeck(choice, P1, P2, P3):
    chunks = [P1, P2, P3]
    idx = choice-1
    deck = chunks[(idx-1) % 3]+chunks[idx % 3]+chunks[(idx+1) % 3]
return deck

我正在接受,idx=choice-1所以他们的选择是 0、1 或 2,这将与chunks列表中的三块卡片很好地匹配由于chunks[idx]现在是他们选择的桩,并且chunks[idx-1]chunks[idx+1]分别是他们选择的桩之前和之后的桩,因此您可以deck通过将他们的桩放在其他两桩之间来创建%(模运算)只是确保,如果我们去了0,1,2范围之外我们总结的结果返回到该范围。

如果你想象他们的选择是 2,这很容易形象化。那么堆只是按照 P1、P2、P3 的顺序排列。

如果用户选择第一堆,则 idx 将为 0,而在其之前的堆将为 -1。Modulo 3 this 变成 2,这是序列中的最后一堆。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Python 3.x中的另一个列表中删除单独的项目列表

来自分类Dev

在Python 3.x中从另一个列表中删除单独的项目列表

来自分类Dev

如何在 Python 中的特定条件下创建一个从另一个表返回值的新列

来自分类Dev

如何在多个OR条件下比较用户输入PYTHON 3.x

来自分类Dev

Python 3.x:在函数中输入一个列表作为多个参数

来自分类Dev

Python 3:在特定条件下拆分字符串

来自分类Dev

Python 3:如何将项目从列表x移到列表y并将其从列表x中删除?

来自分类Dev

Python 3:如何将项目从列表x移到列表y并将其从列表x中删除?

来自分类Dev

Python 3x-压缩使文件更大:(

来自分类Dev

在python 3.x中将一个列表作为另一个列表的索引

来自分类Dev

如何在python中打印3x3数组?

来自分类Dev

列表中x元素的最后3个元素的和,作为新列表[python 3]

来自分类Dev

如何在python中在特定条件下提取和计数

来自分类Dev

如何在 python 2.x 和 3.x 中将 unicode 列表转换为包含 python 字典的列表

来自分类Dev

在Python 3.x中卸载模块

来自分类Dev

了解Python3.x中的izip

来自分类Dev

python 3.x中的语音识别

来自分类Dev

在Python 3.x中卸载模块

来自分类Dev

在python 3.x中运行tostring

来自分类Dev

python 3.X中的pywinauto错误

来自分类Dev

在 Python 3.x 中循环

来自分类Dev

Python 3.x 中的机会游戏?

来自分类Dev

如何在列表中输入整数值(python 3.x)?

来自分类Dev

如何反向排序列表?(Python 3.x)

来自分类Dev

通过python 3.x中的字典循环列表

来自分类Dev

将 Python 2x 移植到 3x

来自分类Dev

python 3-x for x for循环-它们如何工作?

来自分类Dev

Python 3.x-根据另一个列表对一个列表进行排序,然后返回两个排序后的列表

来自分类Dev

(Python 3.x)如何在打印函数中的第一个变量之前添加空格?

Related 相关文章

  1. 1

    从Python 3.x中的另一个列表中删除单独的项目列表

  2. 2

    在Python 3.x中从另一个列表中删除单独的项目列表

  3. 3

    如何在 Python 中的特定条件下创建一个从另一个表返回值的新列

  4. 4

    如何在多个OR条件下比较用户输入PYTHON 3.x

  5. 5

    Python 3.x:在函数中输入一个列表作为多个参数

  6. 6

    Python 3:在特定条件下拆分字符串

  7. 7

    Python 3:如何将项目从列表x移到列表y并将其从列表x中删除?

  8. 8

    Python 3:如何将项目从列表x移到列表y并将其从列表x中删除?

  9. 9

    Python 3x-压缩使文件更大:(

  10. 10

    在python 3.x中将一个列表作为另一个列表的索引

  11. 11

    如何在python中打印3x3数组?

  12. 12

    列表中x元素的最后3个元素的和,作为新列表[python 3]

  13. 13

    如何在python中在特定条件下提取和计数

  14. 14

    如何在 python 2.x 和 3.x 中将 unicode 列表转换为包含 python 字典的列表

  15. 15

    在Python 3.x中卸载模块

  16. 16

    了解Python3.x中的izip

  17. 17

    python 3.x中的语音识别

  18. 18

    在Python 3.x中卸载模块

  19. 19

    在python 3.x中运行tostring

  20. 20

    python 3.X中的pywinauto错误

  21. 21

    在 Python 3.x 中循环

  22. 22

    Python 3.x 中的机会游戏?

  23. 23

    如何在列表中输入整数值(python 3.x)?

  24. 24

    如何反向排序列表?(Python 3.x)

  25. 25

    通过python 3.x中的字典循环列表

  26. 26

    将 Python 2x 移植到 3x

  27. 27

    python 3-x for x for循环-它们如何工作?

  28. 28

    Python 3.x-根据另一个列表对一个列表进行排序,然后返回两个排序后的列表

  29. 29

    (Python 3.x)如何在打印函数中的第一个变量之前添加空格?

热门标签

归档