一个很简单的猜单词游戏。
你的机会是有限的,你每猜错一次,你要拯救的小人就出现一部分。
当整个小人出现的时候,游戏结束,你便看到了惨象:一个吊死的***丝!
可以把单词换成你每天背的单词,便于复习。。。
直接放代码。
#!usr/bin/env python3
#-*- coding:utf-8 -*-
import random
try:
import cPickle as pickle
except Exception:
import pickle
# global viriable strokes
with open("strokes.txt",'r') as f:
strokes = pickle.loads(f.read().encode('utf-8'))
filename = "2of12inf.txt"
def askForInput(word, guessed, pic):
"""
pic: a string that displays the hangman.
word: string, the mystery word.
guessed: set, the characters in uper case which user have guessed.
this function ask the user guess word until the word is valid.
"""
print(pic)
print("Letters already guessed: {}".format(" ".join(list(guessed))))
print("The current state of your guess: {}".format(showWord(word, guessed)))
characters = frozenset("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
while True:
ans = input("What is your next letter? (or type your guess) :")
ans = ans.strip()
ans = ans.upper()
if len(ans) > 1:
if len(ans) == len(word):
if all([ele in characters for ele in ans]):
return ans
else:
print("Invalid entry: enter a word that is a alphabeta string.")
else:
print("Invalid entry: enter a word that exists {} characters.".format(len(word)))
elif len(ans) == 1:
if ans in characters:
if ans not in guessed:
return ans
else:
print("Invalid entry: enter a single letter you have not already guessed.")
else:
print("Invalid entry: enter a single letter that is a alphabeta character.")
else:
print("Invalid entry: enter a single alphabeta letter or guess a alphabeta word.")
def getWordList(minLength, maxLength):
"""
minLength:int, the min length of the word.
maxLength:int, the max length of the word.
return: the wordList, a list of strings.
this function read the words from text file: 2of12inf.txt.
"""
wordList = []
with open(filename, 'r') as f: # iterate the file from top to bottom
for line in f:
line = line.strip()
line = line.strip("%") # remove plurals
if len(line) >= minLength and len(line) <= maxLength:
wordList.append(line)
return wordList
def selectWord(minLength, maxLength):
"""
minLength: int, the min length of the word
maxLength: int, the max length of the word
return: a word in upper case
"""
wordList = getWordList(minLength, maxLength)
word = random.choice(wordList)
return word.upper()
def showWord(word, guessed):
"""
word:the upper case of the mystery word
guessed: the set of all guessed characters
return : a sstring like "_ _ E E _ E"
"""
word = word.upper()
word_hint = ["_" if ele not in guessed else ele for ele in word]
return " ".join(word_hint)
def printBanner(word):
"""
word: string, the mystery word.
this function print out the number of the target word.
"""
print("YOU WILL GUESS A WORD WITH {} LETTERS!".format(len(word)))
def theEnd(word, wrong_times):
if wrong_times < len(strokes):
print("Congratulations! You win!!")
print("The word was {}".format(" ".join(list(word))))
else:
print("Sorry, you lose!")
print("The word was {}".format(" ".join(list(word))))
print("Welcome to my blog:")
print("---------------------")
print("http://blog.csdn.net/myjiayan")
print("---------------------")
def main():
print("WELCOME TO HANGMAN!")
print("Welcome to my blog:")
print("---------------------")
print("http://blog.csdn.net/myjiayan")
print("---------------------")
minLength = 6
maxLength = 8
word = selectWord(minLength, maxLength)
word = word.upper()
printBanner(word)
guessed = set()
wrong_times = 0
# tha main loop
while wrong_times < len(strokes):
# upper case ans
ans = askForInput(word, guessed, strokes[wrong_times])
# ans is an character
if len(ans) == 1:
numAns = word.count(ans)
print("There is {} {}!".format(numAns, ans))
guessed.add(ans)
if all([ele in guessed for ele in word]):
break
if numAns == 0:
wrong_times += 1
elif len(ans) == len(word):
if ans == word:
break
else:
wrong_times += 1
print("the word you guessed is wrong!")
theEnd(word, wrong_times)
if __name__ == "__main__":
main()
strokes.txt 和 单词文件 2of12inf.txt 在 http://download.csdn.net/detail/u013805817/9468750 上有下载。