0
What tips would you give to improve this code of the Python hangman game? In the "course" I’m doing Python I haven’t learned to use string methods yet. It’s a very simple hangman game, with no graphical interface because I don’t know how to do and with 5 words that I used to test. What do you think makes the code better and more compact? Thank you
from random import choice
def imprime(letra, pl):
#imprime como está o resultado do jogo. Exemplo: c _ _ c l e _ _
impressao = ''
for i in range(len(palavra)):
if palavra[i] not in pl:
impressao += "%s "%palavra[i]
else:
impressao += '_ '
return impressao
#palavras pré-definidas
palavras = ['chiclete', 'arroz', 'banana', 'feijao', 'nutella']
#escolhe a palavra do jogo
palavra = choice(palavras)
erros = 0
pl = []
#adiciona todas as letras da palavra a uma lista 'pl'
for i in range(len(palavra)):
pl.append(palavra[i])
#imprime a quantidade de letras da palavra
print("A palavra é: %s"%('_ '*len(palavra)))
print("")
jogo = True
tentativas = []
while jogo:
letra = input("Digite uma letra ou palavra: ")
#o usuario digita uma letra ou palavra
if letra == palavra:
#verifica se o jogador acertou a palavra, caso sim encerra o programa
print("Você ganhou. A palavra era %s"%palavra)
break
#verifica se a letra escolhida ainda não havia sido escolhida pelo usuario
while letra in tentativas:
letra = input("Você já tentou essa letra ou palavra. Digite novamente: ")
tentativas.append(letra)
if letra in palavra:
#se o usuario acertou uma letra, ela é removida da lista 'pl'.
for i in range(palavra.count(letra)):
pl.remove(letra)
else:
erros += 1
#se o usuario errar a letra ou palavra, é contabilizado um erro. Com 6 erros o usuario é derrotado.
if erros == 6:
print("Você errou pela 6ª vez. Fim de jogo")
print("Você perdeu")
break
print("Você errou pela %iª vez. Tente de novo!"%erros)
print("A palavra é: ",imprime(letra, pl))
print("")
if len(pl) == 0:
#se a lista 'pl' possuir 0 elementos, então o usuario ganhou
print("Você ganhou!")
break
for i in range(len(palavra))
you can replace withfor letra in palavra
and use onlyletra
in place ofpalavra[i]
– Woss
worked out, thanks.
– Bruno Amaral
If you can do that with the methods of string, there is the method
lower()
for that reason.– Woss
Anderson Carlos, if I’m going to use variables defined outside the function within a function but I’m not going to modify them, do I need to input these variables anyway? For example, in the function "print" I did not modify any variable I called, it was necessary to put it? The variable 'pl', for example
– Bruno Amaral