【问题标题】:Python randomizing troublesPython 随机化问题
【发布时间】:2019-11-06 17:51:48
【问题描述】:

我一直在尝试编写一个脚本来随机化一组数字中的位置。 EX:我会给它数字1, 2, 3, 4,它会吐回3214, 2341, 4132,等等。我的问题是,经过几次迭代后,它会开始给我输出,例如1421, 3421, 2421。这是我的代码,

def Solution():
    global A, B, C, D, SOLVED, SOL, A1, B1, C1, D1
    Attempts = []
    Orderer = []
    A1 = 0
    B1 = 0
    C1 = 0
    D1 = 0
    while SOLVED != True:
        MASTER = ""
        A1 = randint(1, 4)
        B1 = randint(1, 4)
        C1 = randint(1, 4)
        D1 = randint(1, 4)
        while B1 == A1:
            B1 = randint(1, 4)
            #print("B1 is the same")
        while C1 == B1 or C1 == A1:
            C1 = randint(1, 4)
            #print("C1 is the same")
        while D1 == C1 or D1 == B1 or D1 == A1:
            D1 = randint(1, 4)
            #print("D1 is the same")
        for i in range(4):
            if A1 == i:
                Orderer.append(A)
            elif B1 == i:
                Orderer.append(B)
            elif C1 == i:
                Orderer.append(C)
            elif D1 == i:
                Orderer.append(D)
        for i in range(4):
            MASTER = MASTER + str(Orderer[i - 1])
        if MASTER in Attempts:
            print("{} was already guessed".format(MASTER))
            continue
        print(MASTER)

        if MASTER == SOL:
            print("Solution: {}".format(MASTER))
            SOLVED = True
        Attempts.append(MASTER)

        MASTER = ""
        Orderer.clear()

注意:只是一些说明; 变量 A、B、C 和 D 是上面列出的 1、2、3、4。 我在SOL 下给了计算机一个“解决方案”,所以它不会无限运行。在这种情况下,解决方案是1234。 另外,我进行了检查,因此它不会进行已经进行的组合。它存储在尝试下。 A1、B1、C1、D1 是 A、B、C、D 的位置值。它们被泵入 orderer 并按顺序放入然后存储。

【问题讨论】:

  • 您是否尝试过使用random.shuffle 函数?
  • 或者来自 itertools 的任何东西? (组合,排列)
  • 如果您仍在学习,那么从第一原则编写诸如随机播放(这是您想要的)之类的东西很有用。从Fisher-Yates shuffle 开始。

标签: python arrays random


【解决方案1】:

我不太了解您的用例,但我建议您查看库 itertools。它在组合和排列之类的东西上真的很棒。

import itertools
import random
all_permutations = list(itertools.permutations([1,2,3,4]))
random.shuffle(all_permutations)
print(all_permutations)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多