我有一个python 3 hangman代码可以工作,但我不知道我怎么能让用户在主函数中选择难度(easy(9),medium(7),hard(5))。还有一个更简单的代码可以用于此吗?
import random
WORDLIST = ("phone", "laptop", "desktop", "sewer", "television", "never", "guess", "nice", "chair", "car");
WORD = random.choice(WORDLIST)
ACCEPTABLE = ("abcdefghijklmnopqrstuvwxyz")
guessed = []
state = 0
hasWon = 0
playedOnce = 0
def menu ():
print("""
1. Easy (9 misses)
2. Medium (7 misses)
3. Hard (5 misses)
""")
return int(input("What level do you want to play?:"))
def wantsToPlay():
if (not playedOnce):
return 1
l = input("\nWould you like to play again? (y/n)")
while (l != "y" and l != "Y" and l != "n" and l != "N"):
l = input("\nWould you like to play again? (y/n)")
if (l.lower() == "y"):
return 1
return 0
def takeNewLetter():
global state, hasWon
newPrint("So far, you have guessed the following letters...")
for g in guessed:
print(g, end=" ")
letter = input("\n\nWhat letter would you like to guess next?\n")
while (letter in guessed or letter not in ACCEPTABLE):
if (len(letter) > 1):
if (letter.lower() == WORD.lower()):
newPrint("You win!")
hasWon = 1
break
else:
newPrint("Boo... that was wrong... you're dead...")
state = 7
break
else:
if (letter not in ACCEPTABLE):
letter = input("That character is unacceptable. You many only enter lower case letters.\n")
else:
letter = input("You have already guessed that letter, try another one...\n")
guessed.append(letter)
if (letter not in WORD):
state += 1
return
def drawWord():
tempWord = ""
for c in WORD:
if (c in guessed):
tempWord += c + " "
else:
tempWord += "_ "
newPrint(tempWord)
return
def drawStickman():
if (state >= 7):
print(" _______")
print("|/ |")
print("| (_)")
print("| \|/")
print("| |")
print("| / \\")
print("|")
print("|___")
print("Oops. You're dead.")
elif (state == 6):
print(" _______")
print("|/ |")
print("| (_)")
print("| \|/")
print("| |")
print("| / ")
print("|")
print("|___")
elif (state == 5):
print(" _______")
print("|/ |")
print("| (_)")
print("| \|/")
print("| |")
print("|")
print("|")
print("|___")
elif (state == 4):
print(" _______")
print("|/ |")
print("| (_)")
print("| \|/")
print("|")
print("|")
print("|")
print("|___")
elif (state == 3):
print(" _______")
print("|/ |")
print("| (_)")
print("| \|")
print("|")
print("|")
print("|")
print("|___")
elif (state == 2):
print(" _______")
print("|/ |")
print("| (_)")
print("|")
print("|")
print("|")
print("|")
print("|___")
elif (state == 2):
print(" _______")
print("|/ |")
print("|")
print("|")
print("|")
print("|")
print("|")
print("|___")
elif (state == 1):
newPrint("As this is your first mistake, I will let you off...")
print(" _______")
print("|/")
print("|")
print("|")
print("|")
print("|")
print("|")
print("|___")
elif (state == 0):
print(" _______")
print("|/")
print("|")
print("|")
print("|")
print("|")
print("|")
print("|___")
def hasGuessed():
if (hasWon == 1):
return 1
if (state >= 7):
return 1
for c in WORD:
if (c not in guessed):
return 0
if (len(guessed) == 0):
return 0
return 1
def setup_game():
newPrint("Welcome to the Hangman game!")
newPrint("I have chosen a random word from my super secret list, try to guess it before your stickman dies!")
def newPrint(message, both = 1):
msg = "\n" + message
if (both != 1):
msg += "\n"
print(msg)
def main():
global guessed, hasWon, state, playedOnce, WORD, WORDLIST
setup_game()
newPrint("My word is " + str(len(WORD)) + " letters long.")
while (wantsToPlay() == 1):
WORD = random.choice(WORDLIST)
guessed = []
playedOnce = 1
hasWon = 0
state = 0
while (hasGuessed() == 0 and state < 7):
drawStickman()
drawWord()
takeNewLetter()
drawStickman()
newPrint("My word was " + WORD)
main()
答案 0 :(得分:0)
你真正需要的是玩家可以做出的失误次数。所以我让menu()
返回该值:
def menu():
print("""
1. Easy (9 misses)
2. Medium (7 misses)
3. Hard (5 misses)
""")
while True:
level = input("What level do you want to play?:")
if level in ('1', '2', '3'):
return {'1': 9, '2': 7, '3': 5}[level]
print('Wrong answer!')
现在您应该以某种方式将此菜单及其结果放入主程序中。在setup_game()
之后调用您的菜单功能,并将内容7
替换为其结果。
def main():
global guessed, hasWon, state, playedOnce, WORD, WORDLIST
setup_game()
allowed_misses = menu()
...
while (hasGuessed() == 0 and state < allowed_misses)
您还应该从hasGuessed()
中删除状态检查,因为它是冗余的并使用常量值。