我在 python 中使用 Rubiks Cube 扰频器有一点问题。
有我的代码:
from random import randint
moves = ["F", "F'", "R", "R'", "L", "L'", "U", "U'", "D", "D'", "B", "B'", "F2", "R2", "L2", "U2", "D2", "B2"]
scramble = []
lenght = len(scramble)
lenght_moves = len(moves) - 1
def good_move(scramble, lenght):
if scramble[lenght] == "R" or scramble[lenght] == "R'" or scramble[lenght] == "R2":
if scramble[lenght - 1] == "R" or scramble[lenght - 1] == "R'" or scramble[lenght - 1] == "R2":
return False
if scramble[lenght] == "L" or scramble[lenght] == "L'" or scramble[lenght] == "L2":
if scramble[lenght - 1] == "L" or scramble[lenght - 1] == "L'" or scramble[lenght - 1] == "L2":
return False
if scramble[lenght] == "F" or scramble[lenght] == "F'" or scramble[lenght] == "F2":
if scramble[lenght - 1] == "F" or scramble[lenght - 1] == "F'" or scramble[lenght - 1] == "F2":
return False
if scramble[lenght] == "U" or scramble[lenght] == "U'" or scramble[lenght] == "U2":
if scramble[lenght - 1] == "U" or scramble[lenght - 1] == "U'" or scramble[lenght - 1] == "U2":
return False
if scramble[lenght] == "D" or scramble[lenght] == "D'" or scramble[lenght] == "D2":
if scramble[lenght - 1] == "D" or scramble[lenght - 1] == "D'" or scramble[lenght - 1] == "D2":
return False
if scramble[lenght] == "B" or scramble[lenght] == "B'" or scramble[lenght] == "B2":
if scramble[lenght - 1] == "B" or scramble[lenght - 1] == "B'" or scramble[lenght - 1] == "B2":
return False
return True
while (lenght < 20):
print (lenght)
print (scramble)
random = randint(0, lenght_moves)
if lenght - 1 >= 1:
if good_move(scramble, lenght - 1) == False:
print ("I'm here")
while (good_move(scramble, lenght - 1)) != False:
random = randint(0, lenght_moves)
print (random)
scramble.remove(lenght - 1)
scramble.append(moves[random])
else:
scramble.append(moves[random])
else:
scramble.append(moves[random])
lenght = len(scramble)
print (scramble)
所以,当我运行我的程序时,他会
if lenght - 1 >= 1:
if good_move(scramble, lenght - 1) == False:
print ("I'm here")
while (good_move(scramble, lenght - 1)) != False:
random = randint(0, lenght_moves)
print (random)
scramble.remove(lenght - 1)
scramble.append(moves[random])
他正在循环......我尝试使用“i”而不是“length - 1”,但它没有用(索引超出范围等)。
moves = ["F", "F'", "R", "R'", "L", "L'", "U", "U'", "D", "D'", "B", "B'", "F2", "R2", "L2", "U2", "D2", "B2"]
scramble = []
length = len(scramble)
length_moves = len(moves) - 1
def good_move(scramble, length):
if scramble[length] == "R" or scramble[length] == "R'" or scramble[length] == "R2":
if scramble[length - 1] == "R" or scramble[length - 1] == "R'" or scramble[length - 1] == "R2":
return False
if scramble[length] == "L" or scramble[length] == "L'" or scramble[length] == "L2":
if scramble[length - 1] == "L" or scramble[length - 1] == "L'" or scramble[length - 1] == "L2":
return False
if scramble[length] == "F" or scramble[length] == "F'" or scramble[length] == "F2":
if scramble[length - 1] == "F" or scramble[length - 1] == "F'" or scramble[length - 1] == "F2":
return False
if scramble[length] == "U" or scramble[length] == "U'" or scramble[length] == "U2":
if scramble[length - 1] == "U" or scramble[length - 1] == "U'" or scramble[length - 1] == "U2":
return False
if scramble[length] == "D" or scramble[length] == "D'" or scramble[length] == "D2":
if scramble[length - 1] == "D" or scramble[length - 1] == "D'" or scramble[length - 1] == "D2":
return False
if scramble[length] == "B" or scramble[length] == "B'" or scramble[length] == "B2":
if scramble[length - 1] == "B" or scramble[length - 1] == "B'" or scramble[length - 1] == "B2":
return False
return True
i = 0
while (i < 20):
print (length)
print (scramble)
random = randint(0, length_moves)
if i >= 2:
if good_move(scramble, i) == False:
print ("I'm here")
while (good_move(scramble, i)) != False:
random = randint(0, length_moves)
print (random)
scramble.remove(i)
scramble.append(moves[random])
else:
scramble.append(moves[random])
else:
scramble.append(moves[random])
i += 1
print (scramble)
例如,在第二个代码中,我输入“i”的长度,当我的程序遇到函数时,他告诉“索引超出范围”我不知道为什么,如果 i >= 2 它不能超出范围,因为“lenght”(在函数中)== 1,2,3 等等,“lenght - 1”== 0,1,2。任何想法如何解决这个问题?
顺便提一句。例如正确争夺魔方:
R2 U2 R2 B' U2 B2 R2 F' U2 L' B2 F2 U' F2 R' B D R B R'