首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限循环-魔方置乱器

无限循环-魔方置乱器
EN

Stack Overflow用户
提问于 2014-11-24 19:54:54
回答 1查看 1.1K关注 0票数 1

我在蟒蛇的魔方占卜器上出了点问题。

这是我的密码:

代码语言:javascript
复制
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)

所以,当我运行我的程序时,他会

代码语言:javascript
复制
  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”,但是它没有起作用(超出范围的索引等等)。

代码语言:javascript
复制
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“写进了lenght,当我的程序满足函数时,他说”索引超出了范围“--我不知道为什么,如果我>= 2不能超出范围,因为"lenght”(函数上) == 1,2,3等等和“lenght- 1”== 0,1,2,2,2。有什么办法解决这个问题吗?

顺便说一下。例如,正确地争夺魔方:

代码语言:javascript
复制
R2 U2 R2 B' U2 B2 R2 F' U2 L' B2 F2 U' F2 R' B D R B R'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 20:07:23

代码语言:javascript
复制
    if good_move(scramble, lenght - 1) == False:
        print ("I'm here")
        while (good_move(scramble, lenght - 1)) != False:

这是第一个问题。这里永远不会输入while循环,因为当您到达print行时,good_move肯定是假的。也许你打算每次都有同样的情况。

代码语言:javascript
复制
    if good_move(scramble, lenght - 1) == False:
        print ("I'm here")
        while (good_move(scramble, lenght - 1)) == False:

代码语言:javascript
复制
        scramble.remove(lenght - 1)

这是第二个问题。list.remove(x)不会从列表中删除list[x]。它在列表中搜索x的第一个实例,并删除它,不管它在哪里。如果要删除列表的最后一个元素,可以将其分割掉。

代码语言:javascript
复制
            scramble = scramble[:-1]

或者删除它。

代码语言:javascript
复制
            del scramble[-1]

现在你的程序应该正确结束了。抽样结果:

代码语言:javascript
复制
["F'", 'D', 'B', 'D', 'B2', "U'", 'R2', 'L2', "D'", 'B2', 'F', "R'", 'B2', 'R', "F'", "R'", "B'", 'U2', 'F', 'L2']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27113060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档