我是一个极端的初学者,目前正在尝试使用Python 3创建一个hangman游戏。
貌似,我遇到的唯一问题是用户输入字符时,我不太确定如何用用户输入的正确字母替换“ _”。
import random
def hangman():
# setting up the word and spacing
possible_words = ["SOFTWARE", "COMPUTER", "RESEARCH", "BLIZZARD"]
chosen_word = random.choice(possible_words)
unknown_word = chosen_word
# del
print(chosen_word)
# del
for char in unknown_word:
unknown_word = unknown_word.replace(char, "_ ")
print(unknown_word)
y = list(unknown_word)
print()
# Playing the game
mistakes = 0
incorrect_guesses = []
while mistakes < 5:
guess = input("Enter a guess:\n")
length = len(guess)
# PROBLEMS
if guess.upper() in chosen_word and length == 1:
print(unknown_word)
print()
# PROBLEMS
elif length != 1: # For if more than 2 characters are entered.
print("Please enter a single character.")
print()
continue
else: # If the guess isn't in the string
print("Incorrect guess!")
mistakes += 1
print("You have {0} attempts left".format(5 - mistakes))
incorrect_guesses.append(guess)
print("You have used {0} so far.".format(incorrect_guesses))
print()
print("GAME OVER")
hangman()
因此,我需要弄清楚的问题是,如果用户输入正确的字符会发生什么情况。
提前谢谢!
答案 0 :(得分:1)
首先,我建议为set()
使用list
而不是incorrect_guesses
(您将需要使用.add
而不是.append
) 。这样,如果用户重复相同的字符,您将避免使用重复的值。
您还可以使用一个correct_guesses
变量来跟踪成功的尝试,并避免在_
中用unknown_word
替换它们。
在此更改之后,受影响的代码如下:
incorrect_guesses = set()
correct_guesses = set()
while mistakes < 5:
guess = input("Enter a guess:\n")
length = len(guess)
char = guess.upper()
if char in chosen_word and length == 1:
correct_guesses.add(char)
unknown_word = chosen_word
for char in (c for c in unknown_word if c not in correct_guesses):
unknown_word = unknown_word.replace(char, "_ ")
print(unknown_word)
答案 1 :(得分:0)
下面的代码将用原始字符替换_
:
unknown_word = ' '.join([guess.upper() if chosen_word[i] == \
guess.upper() else c for i, c in enumerate(
unknown_word.replace(' ', ''))]
) + ' '
答案 2 :(得分:0)
您可以做类似...
unknown_word = chosen_word #define the word
current_guess = '_'*len(unknown_word) #get the blanks (if you keep the spaces the loc parameter below will be multiplied by 2)
guessed_letter = input("Enter a guess:\n") #get the guessed letter
if guessed_letter in unknown_word:
loc=unknown_word.index(guessed_letter)
current_guess=current_guess[:loc]+guessed_letter+current_guess[loc+1:]
如果在unknown_word中,它将用相应位置的字母替换空白
正如所提到的那样。如果保留空格,索引位置(位置)将乘以2
编辑-以上仅对每个字母出现一次...这将适用于多次出现相同字母的单词:
guessed_letter = input("Enter a guess:\n")
for loc in range(len(unknown_word)):
if unknown_word[loc] == guessed_letter:
current_guess = current_guess[:loc]+guessed_letter+current_guess[loc+1:]