【发布时间】: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 开始。