2016-08-01 69 views
0
import random 

def random_Words(): 
    print("Lets play HANGMAN") 
    option = input("Please Chose option \n [1] Animals.\n [2] Countries \n  [3] Flowers \n [4] Pakistan's Cities \n"); 
    i=0; 
    x= ""; 
    if(option=='1'): 
     path= "code/hangman/Words.Animals" 

    if(option=='2'): 
     path="code/hangman/Words.Countries" 

    if(option=='3'):   
     path="code/hangman/Words.Flowers" 

    if(option=='4'): 
     path="code/hangman/Words.PakCities" 

    return random.choice(open(path).readlines()); 

def HangmanGuess(RandomWord, GuessedWord, Chances): 
    Letters_Guessed = [] 
    if(Chances > 0): 
     i=0; 
     GuessOption = input("Guess a Letter :"); 

     if(GuessOption == Letters_Guessed): 
      print("Already Guessed") 

     GuessOptionValid= False; 
     for i in range(len(RandomWord)-1): 
      if(RandomWord[i] == GuessOption): 
       GuessedWord= GuessedWord[:i] + GuessOption + GuessedWord[i+1:]; 
       GuessOptionValid =True; 

     print(RandomWord); 
     print(GuessedWord); 

     if(GuessOptionValid): 
      HangmanGuess(RandomWord,GuessedWord, Chances);   
     else: 
      HangmanGuess(RandomWord,GuessedWord, Chances-1); 
    else: 
     print('You have lost!!') 


Chances = 5 
RandomWord = random_Words() 
GuessedWord = '' 
i=0 
for i in range(len(RandomWord)-1): 
    GuessedWord+= '_' 

def Hangman_Drawing(RandomWord,GuessedWord, Chances): 
    x= HangmanGuess(RandomWord,GuessedWord, Chances); 
    x = '' 

    if(GuessedWord!= RandomWord[i]): 
     if(Chances==4): 
      print("----------"); 
      print("|  | "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==3): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==2): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  | "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==1): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  | "); 
      print("| /\ "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==0): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  --|-- "); 
      print("| /\ "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


print(Hangman_Drawing(RandomWord,GuessedWord, Chances)); 

好傢伙, 蔭停留在一個問題,我想提出一個支票驗證,如果當字母「猜」是被輸入任何字母它檢查是否該信件之前已被輸入,因此提供打印的信息,以提醒用戶,如果發現 我的代碼有'檢查'代碼,但我不知道什麼是缺少或爲什麼它不工作,而其餘的代碼是非常好。 對不起iam非工程師,所以如果有任何信息丟失,請原諒 任何幫助,將不勝感激。 謝謝。劊子手:不重複孰料信再次

+1

與您的實際問題無關,但在Python中行尾不需要分號。他們*被允許*,並且讓你在單行上結合多個語句(儘管這通常是不好的風格),但他們從來沒有必要。 – Blckknght

回答

0

你的代碼有很多問題會阻止你處理重複的同一個字母的猜測。

其中最明顯的是你做的,看看用戶條目被已經猜到了測試:

if(GuessOption == Letters_Guessed): 

使用==,你要求GuessOption等於Letters_Guessed列表。既然它是一個字符串,那永遠不會是真的。我想你想在這裏使用in運營商。它測試,如果左側的對象是右側的容器中的一員:

if GuessOption in Letters_Guessed:  # parentheses are not necessary in Python conditionals 

但是這還不夠,真正使工作。局部變量Letters_Guessed被初始化爲一個空列表,並且永遠不會獲得任何添加到它的內容,所以對它的任何成員測試都將是錯誤的。您需要將每個猜到的信件添加到列表中的某處。

下一個問題是一個更大的問題。它與你如何組織代碼的控制流有關。目前,您正在使用遞歸進行下一個猜測,找出最後一個是否合格。但是,這會導致Letters_Guessed問題,因爲這是一個局部變量,它將在每次遞歸調用中重新初始化。如果你想堅持遞歸,你需要在函數調用之間傳遞Letters_Guessed列表,就像傳遞其他參數一樣。我真的不推薦這麼做。

更好的解決方案是用循環替換代碼的遞歸結構。特別是,while循環會很有意義。你可以有一個while循環來處理每個猜測的結果(例如,減少Chances的錯誤猜測),另一個嵌套循環檢查輸入以確保它是有效的(例如,不是已經猜到了,也可能檢查其他東西,比如是一封信,只是一個字符)。

+0

那麼我寧願遞歸函數。無論如何感謝您寶貴的時間。 –

+0

順便說一句我發現這個解決方案。 –