2014-01-23 28 views
1
LETTERS = "abc" 
correct = "cab " 
guess = "" 

while guess != correct: 
    for i in LETTERS: 
     position = random.randrange(len(LETTERS)) 
     guess += LETTERS[position] 
     LETTERS = LETTERS[:position] + LETTERS[(position + 1):] 
    print(guess) 

我在Python是新的,我想使这个简单的程序:无法获得简单

  • 以字母“ABC”,混杂它们,并创建一个新的三随机说出单词。
  • 打印该混乱
  • 继续做这个循环,直到计算机砰砰“驾驶室”。
  • 然后停下来。

我想出了这段代码,它给了我一个无限循环。我无法弄清楚为什么要这样做。我相信这很容易,但我看不到它。需要一些帮助!谢谢!

+2

你的意思是用空格结束'正确'值吗? –

+1

你是否想在失败后重置你的猜测? – user2357112

+2

OP也在for循环的每次迭代中改变'LETTERS'。需要在while循环中立即更改一个LETTERS的副本,而不是立即使用'myLetters = LETTERS [:]'(并重置'guess') – inspectorG4dget

回答

2

correct值包含空格,但你的循环永远不会产生空间:

correct = "cab " 

删除空间:

correct = "cab" 

接下来,你的循环减少LETTERS为空字符串,因此只有一旦你的循环产生一个随机guess,但之后,你永远坚持LETTERS = '',所以没有for循环运行。

你会更好使用random.shuffle产生猜测:

LETTERS = list("abc") 
correct = "cab" 

while True: 
    random.shuffle(LETTERS) 
    guess = ''.join(LETTERS) 
    if guess == correct: 
     print(guess) 
     break 
3

你有三个问题,我可以看到:

  1. "cab "中有一个空间,LETTERS没有空间。所以你永远无法猜测空间
  2. 你不会重置guess。您只需继续添加它
  3. 您在for循环中更改LETTERS,因此在while循环的第二次迭代中,它将完全为空。

这是我怎么会去这样做你想要做的(以最小的修改)什么:

_LETTERS = "abc" 
correct = "cab" 
guess = "" 

while guess != correct: 
    LETTERS = _LETTERS[:] 
    guess = "" 
    for i in LETTERS: 
     position = random.randrange(len(LETTERS)) 
     guess += LETTERS[position] 
     LETTERS = LETTERS[:position] + LETTERS[(position + 1):] 
    print(guess) 

这是我会怎么做随机搜索(这是你想要什么要做):

guess = "abc" 
correct = "cab" 

while guess != correct: 
    guess = list(guess) 
    random.shuffle(guess) 
    guess = ''.join(guess) 
    print(guess) 
print(guess) 

当然,有更好的技术来正确猜测"cab"。如果你真的想尝试一个详尽的搜索,那么你可以使用回溯DFS:

def DFS(letters, correct, sofar=None) 
    if sofar is None: 
     sofar = '' 
    if not letters: 
     if sofar == correct: 
      print("Yay! I found it") 
     else: 
      print("Oops! I found %s instead" %sofar) 
    else: 
     for i,char in enumerate(letters): 
      DFS(letters[:i]+letters[i+1:], correct, sofar+char) 
+0

您的第二个代码片段不起作用。你扔掉洗牌清单。 – user2357112

+0

@ user2357112:错误。 'random.shuffle'是IN-PLACE。它返回'None' – inspectorG4dget

+0

就地排在你立即扔掉的列表上。 – user2357112