【发布时间】:2013-02-01 10:08:44
【问题描述】:
我正在用 Python 为 GCSE 计算任务制作一个刽子手游戏,我所要做的就是确保当有人输入正确的字母时,它将把它放在单词中的正确位置。 代码如下:
def guess_part(word):
lives = 6
LetterCount = 0
LetterMask = ""
for x in range(len(word)): #run for loop for the amount of the length of word
LetterMask = LetterMask + "*"
print LetterMask
while lives != 0 and LetterMask.find("*")!=-1: #while lives are not 0 and the amount of asterisks are not -1
LetterGuess = raw_input("Enter a letter to guess?")
LetterCount = 0
for char in word:
LetterCount = LetterCount + 1
if LetterGuess not in word:
lives = lives - 1
else:
if LetterGuess in word and lives != 0:
print "Good Guess."
LetterMask = list(LetterMask)
LetterMask[LetterCount-1] = LetterGuess
LetterMask = "".join(LetterMask)
print LetterMask
else:
print "Incorrect."
if lives == 0:
print "You have ran out of lives, your word was: ", word
else:
print "You have correctly guess the word! Score: ", lives
print "Play again?"
again = raw_input("")
again.lower()
if again == "y":
menu()
elif again == "n":
exit()
else:
exit()
def rand_word():
from random import randrange
random_words = ['extraordinary','happy','computer','python','screen','cheese','cabaret','caravan','bee','wasp','insect','mitosis','electronegativity','jumper','trousers']
word = random_words[randrange(0, 15)] #pick a random number, and use this number as an index for the list, "random_words".
guess_part(word) #call the function, "guess_part" with the parameter "word"
def user_word():
print "All words will be changed to lowercase."
print "Enter the word you would like to guess."
print ""
validation_input = False
while validation_input == False: #while the validation input is not False, do below.
word = raw_input("")
if word.isalpha(): #If word contains only strings, no numbers or symbols, do below.
word = word.lower() #set the string of variable, "word", to all lowercase letters.
guess_part(word) #call the function, "guess_part" with the parameter, "word".
validation_input = True #Break the while loop
else:
print "Word either contained numbers or symbols."
def menu():
print "Hangman Game"
print ""
print "Ashley Collinge"
print ""
print "You will have 6 lives. Everytime you incorrectly guess a word, you will lose a life."
print "The score at the end of the game, is used to determine the winner."
print ""
print "Would you like to use a randomly generated word, or input your own?"
print "Enter 'R' for randomly generated word, or 'I' for your own input."
decision_bool = False
decision_length = False
while decision_bool == False: #While decision_bool equals "False", do below.
while decision_length == False: #While decision_length equals "False", do below.
decision = raw_input("")
if len(decision) == 1: #If the length of decision eqausl 1, do below.
decision_length = True
decision = decision.capitalize() #Capitalize the string value of decision.
if decision == "R": #if the value of decision, eqauls "R".
print "You chose randomly generated word."
print ""
print "Forwarding..."
decision_bool = True
print ""
rand_word() #Call the function, rand_word()
elif decision =="I": #If decision equals "I", do below.
print "You chose to input your own word."
print ""
print "Forwarding..."
decision_bool = True
print ""
user_word() #Call the function, user_word()
else:
print "You entered an incorrect value for the question. Try again."
else:
print "You entered an incorrect value for the question. Try again."
menu()
【问题讨论】:
-
对于 Stack Overflow 问题的代码相当冗长。您应该尝试找出行为不端的部分并专注于该部分。
-
另一件事是你的cmets。我知道这可能是您编写的第一个程序之一,但现在学习永远不会太早...您的 cmets 大多是微不足道的,因为它们不会向代码添加任何内容。在guess_part(word) 行中放置诸如“使用参数word 调用函数guess_part”之类的注释并不能帮助任何人阅读您的代码。编写代码时,您应该假设阅读它的人会了解该语言。
-
嗨,阿什利,欢迎来到 StackOverflow。你有什么问题?您能否将代码缩短到重现问题所需的最少行数?顺便说一句:您应该考虑一下使用什么以及如何使用 cmets。
while decision == False: #While decision equals "False", do below.并不是很有用。评论为什么你做事,不要重复代码本身已经说得很好。 -
@zmbq 唯一重要的部分是
guess_part()func,因为它是“猜测”发生的地方。此外,if LetterGuess not in word以后 -
Ashley,看看你的代码中你迭代单词的部分......你真的找到了猜测字符所在单词的哪个索引吗?您可能想查看内置字符串的
find和index方法。