When I hit the word, an input still appears at the end

Asked

Viewed 76 times

1

I’m developing a guessing game in Python, but when I hit the word at the end still continues to appear a input.

CODE:

import random
Países("Países","alemanha","portugal","brasil","frança","russia","espanha","belgica","uk")
Alimentos=("Alimentos","pao","agua","batata","açucar","alface","arroz","tomate","bife","frango")
Clubes_Desportivos=("Clubes_Desportivos","fcp","slb","scp","manchester")
temas=[Países, Alimentos,Clubes_Desportivos]

tema= random.choice (temas)

palavra_secreta=random.choice(tema[1:])

letras_certas=[]

erros=0

LETRAS=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

dinheiro=500

tentativas=0

#Funções----------------------------

def mostra_palavra():
    global palavra_a_mostrar
    palavra_a_mostrar=""
    for i in palavra_secreta:
        if i in letras_certas:
            palavra_a_mostrar+=i
        else:
            palavra_a_mostrar+="_ " 
    print("A sua palavra é ", palavra_a_mostrar)
    print ("Erros: ", erros, "\nDinheiro ", dinheiro  )

#-----------------------------------

def avalia_palavra():
    global resposta, dinheiro, erros

    if resposta in palavra_secreta:
        dinheiro+=100
        letras_certas.append(resposta)
        mostra_palavra()
        resposta=input("Acertou numa letra. Escolha outra.")
    else:
        dinheiro-=200
        erros+=1
        mostra_palavra()
        resposta=input("Falhou. Escolha denovo ")



#----------------------------------    

#INICIO----------------------------

print("Seja bem vindo ao jogo de Advinhar palavras , pedimos-te  que indiques uma letra.\n Se acertares vais ganhar dinheiro. Tens 9 Possibilidades de errar ")
print("\n O seu tema é", tema[0])  

#Programa---------------------------

mostra_palavra()
resposta=input("Indique uma letra minuscula ") 


while erros <8 and "_" in palavra_a_mostrar:
    avalia_palavra()

#FIM------------------------------

1 answer

3


The error is related to how you mounted the loop while:

# Programa---------------------------
while True:

    mostra_palavra()

    if erros > 7 or "_" not in palavra_a_mostrar:
        break

    resposta = input("Indique uma letra minúscula ")
    avalia_palavra()

In this case the output condition of the loop is just the opposite of that which was set to keep the execution within it.

In this way it becomes unnecessary to call the functions mostra_palavra() and the input() from within the function avalia_palavra():

def avalia_palavra():
    global dinheiro, erros

    if resposta in palavra_secreta:
        dinheiro += 100
        letras_certas.append(resposta)
    else:
        dinheiro -= 200
        erros += 1

And before I finish, two little things:

  • Despite being supported in Python the use of accentuation in the name of variables (Países), is not something very recommendable and

  • Regarding the use of global variables, the Style Guide for Python Code (the famous PEP8) recommends the use of global variables only within modules and the Google Python Style Guide suggests not to use. In this case you can do the same by setting a class or simply passing and receiving these values through the functions.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.