def secondLoop(enteredLetters,sentence,newSentence,lettersInWord):
print ' Player 2 '
number = len(sentence)
flag = True
while flag == True:
# changed input to raw_input
letter = raw_input("Enter letter: ")
if letter not in enteredLetters:
find = sentence.find(letter)
if find == -1:
print("Letter is not in word")
flag = False
# - changed line below to return statement below it -
#enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
return enteredLetters,newSentence,lettersInWord
else:
newSentence = ""
lettersInWord.append(letter)
for char in sentence:
if char in lettersInWord:
newSentence = newSentence + char
else:
newSentence = newSentence + "_ "
number = newSentence.count("_")
flag = True
elif letter in enteredLetters:
print ("The letter has been used")
flag = False
# - changed line below to return statement below it -
#enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
return enteredLetters,newSentence,lettersInWord
print (newSentence)
enteredLetters.append(letter)
sentence = 'TOYS'
enteredLetters = []
newSentence = '____'
lettersInWord = []
number = len(sentence)
while number != 0:
print ' Player 1 '
# changed input to raw_input
letter = raw_input("Enter letter: ")
if letter not in enteredLetters:
find = sentence.find(letter)
if find == -1:
print("Letter is not in word")
enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
else:
newSentence = ""
lettersInWord.append(letter)
for char in sentence:
if char in lettersInWord:
newSentence = newSentence + char
else:
newSentence = newSentence + "_ "
number = newSentence.count("_")
elif letter in enteredLetters:
print ("The letter has been used")
enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
print (newSentence)
enteredLetters.append(letter)
from itertools import cycle
import string
UNKNOWN = "_"
ALWAYS_SEEN = set(" " + string.punctuation)
def get_letter(prompt):
while True:
ch = input(prompt).strip().upper()
if len(ch) == 1:
return ch
def seen_word(word, guessed):
return ''.join(ch if ch in guessed or ch in ALWAYS_SEEN else UNKNOWN for ch in word)
def play_hangman(word, players):
word = word.strip().upper()
guessed = set()
seen = seen_word(word, guessed)
for current_player in cycle(players):
while True:
print(seen)
ch = get_letter("{}: guess a letter: ".format(current_player))
if ch in guessed:
print("That letter has already been guessed!")
break
else:
guessed.add(ch)
if ch in word:
print("That's the way to do it!")
seen = seen_word(word, guessed)
else:
print("Sorry, that letter is not in the word.")
break
if seen == word:
print("Hurray! {} won!".format(current_player))
return current_player
def main():
word = "TOYS"
players = ["Player 1", "Player 2"]
play_hangman(word, players)
if __name__=="__main__":
main()
在secondLoop函数中,它似乎永远递归地调用自己。这可能就是你犯错误的原因。我把递归的self调用改成了return语句,看起来效果不错。我已经评论了下面的变化,例如。。。你知道吗
良好的程序结构使生活变得更加轻松:
相关问题 更多 >
编程相关推荐