2016-02-27 19 views
0

這是我學習python的第一天,它具有相當數量的java背景。這個簡單的hang子手程序正在按預期工作,除了一個令人沮喪的問題。如果您的猜測不是單詞中的第一個字母,即使他們的字母在單詞的其他位置是正確的,您也會自動獲得「警示」。我已經指出了問題發生的地點和原因,但我似乎無法找到解決方案。如果任何人有任何提示,他們將不勝感激。試圖在Python中製作Hang子手,只使用python大約一天

#hangman 
# 0 
#\|/ 
# | 
#/ \ 
print('Welcome to hangman 2000!') 
word=input('Enter your word: ') 
lengthOfWord=len(word) 
guessed=list('_'*lengthOfWord) 
hangman='' 
# o \n\\|/\n | \n/ \\ 
while True: 
    wordActual=list(word) 
    for i in range(0,lengthOfWord): 
     print(guessed[i],end=' ') 
    print('\n'+hangman) 
    guess=input('Guess a letter: ') 
    for i in range(0,lengthOfWord): 
     if(wordActual[i]==guess): 
      guessed[i]=guess 


    for i in range(0,lengthOfWord): 

     if((wordActual[i]!=guess)==False): 
      print("test point") 
      break 

    #THE PROBLEM IS RIGHT HERE^, IF THE FIRST LETTER ISN'T YOUR FIRST GUESS IT WILL ALWAYS GO INTO THE HANGMAN MAKER\/ 

     if(hangman==' o \n\\|/\n | \n/ \\'): 
      print('GAME OVER ') 
      input('Press Any Key to accept your failure...') 

      exit() 
     elif(hangman==''): 
      hangman+=' o \n' 
      break 
     elif(hangman==' o \n'): 
      hangman+='\\' 
      break 
     elif(hangman==' o \n\\'): 
      hangman+='|' 
      break 
     elif(hangman==' o \n\\|'): 
      hangman+='/\n ' 
      break 
     elif(hangman==' o \n\\|/\n '): 
      hangman+='| \n' 
      break 
     elif(hangman==' o \n\\|/\n | \n'): 
      hangman+='/ ' 
      break 
     elif(hangman==' o \n\\|/\n | \n/ '): 
      hangman+='\\' 
      break 


    if(wordActual==guessed): 
     print('Congradulations!') 
     input('Press Any Key to exit...') 
     break 
+1

就像在Java中一樣,Python使用break關鍵字來突破當前結構。在你的情況下,如果第一個字母不匹配,那麼你打破了。無論如何,你應該檢查每個字符。即去除中斷。 –

+0

刪除該中斷不會解決問題,但它是相同的確切輸出。 –

+0

對不起,我第一次只看了一下代碼。你爲什麼使用for循環?無論你打破還是退出,所以循環都沒有意義。您需要用支票替換循環;如果猜測不是在wordActual中,那麼刪除所有中斷 –

回答

1

你可以檢查一個字母與if letter in word容易得多一個字......我想你可以重構它

只是採用了以下修復...

擺脫

並更換

if((wordActual[i]!=guess)==False): 
     print("test point") 
     break 

if guess in wordActual: 
    print("test point") 
    break 

剩下的就是精細

0

我建議做了一堆的變化。讓我們把它們按重要性排序:

  1. 它要如何處理重複字母並不完全清楚。如果這個詞是'書',我猜'o',我會收到一個或兩個字母嗎?我可以再次猜測'o'嗎?

    這將影響你如何存儲的東西。如果你正在做「幸運之輪」類型的規則,所有匹配的字母都會顯示出來,你可以將這個單詞存儲爲一個字符串。但是,如果您要爲每個字母單獨猜測,最好讓實際的單詞可以修改,所以您可以將它們標記出來。這意味着一個列表。 (Array,in java)

  2. 你正在做一堆重複的工作。有蟒蛇成語和運營商對於像串聯一串字母:

    print(''.join(list-of-letters)) 
    

    此外,遍歷字符串或列表檢查,以查看是否有項目包含:

    if letter in list-of-letters: 
    

    此外,遍歷字符串或列表中找到一個元素的索引:

    i = stringVariable.index(item) 
    

    還有str.find()字符串,它不raise例外。

  3. 我建議保持整數分數。您可以創建一個可能的hangman值的數組並打印正確的數值。

  4. 有這個討厭的錯誤:

    for i in range(0,lengthOfWord): 
    
         if((wordActual[i]!=guess)==False): 
          break 
    
         if(hangman==' o \n\\|/\n | \n/ \\'): 
         ... etc. 
    

    採取強硬的樣子。問題是縮進 - 在for的塊內有第二個if聲明。事後應該會有某種「找到/未找到」變量出現。否則,它檢查第一個字母,如果沒有猜到,就直接進入「增長hang子手」代碼。

+0

謝謝,我會嘗試使用這些東西,只是試圖使用我熟悉的一些東西,而for循環仍然有點奇怪。也不知道其他功能大聲笑。 –