How to make a Console menu in Python

Asked

Viewed 4,550 times

1

I need to make a menu in the console in Python, but the same should be triggered by letters and not numbers, for example:

def menu():
print('''
        MENU:

        [C] - Cadastrar novo voto
        [R] - Ver Resultado
        [S] - Sair
    ''')
str(input('Escolha uma opção: '))

So when the person type c on the keyboard she accesses register new vote. I can do through numbers but the exercise asks it to be this way.

This is the code of the program I made:

def menu():
    print('''
            MENU:

            [C] - Cadastrar novo voto
            [R] - Ver Resultado
            [S] - Sair
        ''')
    str(input('Escolha uma opção: '))

cadastrarVoto = "c"
verResultado =  "r"
sair = "s"

def porcentagem (n, t):
    return (n/t)*100


menu()
if(cadastrarVoto):
    while (cadastrarVoto):
        n = int(input("Digite o número de um jogador para cadastrar um voto  (0 = Voltar ao menu): "))
        if (n != 0):
            votos = 23 * [0.0]
            total = 0

            while (n != 0):
                if (n < 0 or n > 23):
                    print("Informe um valor entre 1 e 23 ou 0 para sair!")
                else:
                    votos[n - 1] += 1
                    total += 1
                    n = int(input("Digite o número de um jogador para cadastrar um novo voto (0 = Voltar ao menu): "))
        if (n == 0):
            menu()

if (verResultado):
    print("Resultado da votação:")

    print("Foram computados %de votos." % (total))

    print("Jogador / Votos / Porcentagem")

    i = 0
    melhor = 0
    melhorPorcentagem = porcentagem(votos[0], total)

    while i < 23:
        porcentagemAtual = porcentagem(votos[i], total)
        print("%d / %d / %.1f" % (i + 1, votos[i], porcentagemAtual))
        if (porcentagemAtual > melhorPorcentagem):
            melhor = i
            melhorPorcentagem = porcentagemAtual
        i += 1

    print("O melhor jogador foi o número %d, com %d votos, correspondendo a %.1f porcento do total de votos" % (
    melhor + 1, votos[melhor], melhorPorcentagem))

if (sair):
    print ('Programa Finalizado')
  • You are asking the user what option he wants and is playing out. On line 9 within the function menu, instead of str(input('Escolha uma opção: ')) you can save to a variable or even return the chosen option. Ex.: return str(input('Escolha uma opção: '))

1 answer

2

The function input() asks the user to type something, and then returns a string containing what was typed by the user. In case, you are calling the function here:

str(input('Escolha uma opção: '))

Instead of storing the option chosen by the user, you are calling the function str() to convert the result into a string, and then discarding the result. Whatever the user type, is being lost as nothing is done with this function result.

A common way to work is to store the result in a variable:

opcao_escolhida = str(input('Escolha uma opção: '))

However, since variables are usually local to the scope of a function, and you are running the input() within the function menu(), this variable opcao_escolhida would only exist within that function. In this case, in order not to have to place all treatment logic within the function together, it might be better to use the return that allows functions to return values:

return str(input('Escolha uma opção: '))

Thus, the entered value will be returned to whoever called the function. Just change your function call:

menu()

for:

opcao_escolhida = menu()

After these modifications, you can use this variable to check the typed option:

if opcao_escolhida == 'c':
    # ... Aqui entra o código para cadastro de voto ...

Browser other questions tagged

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