2014-01-23 27 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