2012-04-02 64 views
2

在我的hang子手代码中,我得到了字母和空格的长度以匹配起来,但由于某些原因,我无法获取字母来替换空格及其无限循环。我不知道我要去哪里错/我失踪了。我的hangman python代码似乎陷入了无限循环?

from random import* 

def main(): 
print 
print "-----------------------------------" 
print "H A N M G M A N: Tropical Fruit 1.0" 
print "-----------------------------------" 
print 
wordList = ["pomegranate","mango","cassabanana","conkerberry","jujube"] 
randomIdx = randrange(0, len(wordList)) 
secretWord = wordList[randomIdx] 
print "(The secret word is", secretWord,")" 
lettersGuessed = [] 
underscore = [] 
for i in range(len(secretWord)): 
    underscore.append('_') 
    newUnderscore = " ".join(underscore) 
print newUnderscore 
count = 6 
while(True): 
    guess = getNewLetter(lettersGuessed) 
    if lettersGuessed == randomIdx: 
     print "You guessed the letter! It is: ",ch2 
     break 

def getLetter(): 
    letter = True 
    while (letter): 
    ch = raw_input("Guess a letter: ") 
    if len(ch) == 1: 
     if ('a' <= ch) and (ch <= 'z'): 
     return ch 
     elif ('A' <= ch) and (ch <= 'Z'): 
     return chr(ord(ch)-ord('A')+ord('a')) 
     else: 
     print ch,"is not a valid letter." 
    else: 
     print ch,"is not a single character." 

def getNewLetter(oldChar): 
letter = True 
while (letter): 
    ch = getLetter() 
    if ch not in oldChar: 
     oldChar.append(ch) 
     return ch 
    else: 
     print "You already guessed",ch,"!" 


main() 

编辑:所以我改变了while循环在主函数这一以致求信将追加到空白,但仍然什么是错的。

while(True): 
guess = getNewLetter(lettersGuessed) 
if lettersGuessed == randomIdx: 
     lettersGuessed.append(newUnderscore) 
     return newUnderscore 
     break 
+1

在代码中(两个地方)都有'while(letter)'有点误导,因为实际上你的意思是'while(True)'。 – trutheality 2012-04-02 03:00:00

+0

谢谢我将它改为两者同时(True) – kdkmoment 2012-04-02 04:35:19

回答

3

这条线:

if lettersGuessed == randomIdx: 

永远是正确的。 。lettersGuessed是已经猜到迄今(像['c', 'o', 'n']字母的阵列randomIdx是被选择(类似2)字的索引

ETA:有几个其他problems-例如如果线路

print "You guessed the letter! It is: ",ch2 

被处决,你会发现ch2从来没有定义的。再说了,你没有看到,如果他们想信,你看到的,如果他们想的话,也许你”寻找更多的是这样的:

 if set(secretWord).issubset(set(lettersGuessed)): 
      print "You guessed the word!" 

当这种变化是由,这里是该程序的运行例如:

----------------------------------- 
H A N M G M A N: Tropical Fruit 1.0 
----------------------------------- 

(The secret word is mango) 
_ _ _ _ _ 
[] 
Guess a letter: M 
['m'] 
Guess a letter: A 
['m', 'a'] 
Guess a letter: N 
['m', 'a', 'n'] 
Guess a letter: G 
['m', 'a', 'n', 'g'] 
Guess a letter: O 
You guessed the word! 

ETA:您可以插入该行:

 print "".join([l if l in lettersGuessed else "_" for l in secretWord]) 

到while循环。该程序的行为将如下所示:

----------------------------------- 
H A N M G M A N: Tropical Fruit 1.0 
----------------------------------- 

(The secret word is jujube) 
_ _ _ _ _ _ 
______ 
Guess a letter: J 
j_j___ 
Guess a letter: U 
juju__ 
Guess a letter: B 
jujub_ 
Guess a letter: E 
You guessed the word! 
+0

如果我想让空白替换为字母而不是在“猜字母”下面创建另一个列表,请改为 – kdkmoment 2012-04-02 03:14:33

+0

请参阅最近的编辑 – 2012-04-02 05:00:04