How to make a menu in Console in Python

0

I need to make a menu in the console in Python, but it 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: '))

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

This is the code of the program I did:

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')
    
asked by anonymous 10.12.2018 / 19:29

1 answer

1

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

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

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

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

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

However, because variables are usually local to the scope of a function, and you are running input() within the menu() function, this opcao_escolhida variable would only exist within that function. In this case, so that you do not have to put all the treatment logic into the function together, it may be best to use return which allows functions to return values:

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

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

menu()

To:

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 ...
    
10.12.2018 / 19:41