Questions in Python (Try and except)

2

I am doing a program that calculates the grade of a simulated ENEM style of my school, I ask how many questions of each area the person has hit, however, I want to cause that if the person enters an invalid number in the second or third question program resets the issue itself rather than the whole segment.

while True:
    try:
        nh = int(input("Quantas quesõtes de HUMANAS você acertou? "))
        if nh < 0 or nh > 45:
            print("Número inválido!")
            print()
            cls()
            continue

        nn = int(input("Quantas quesõtes de NATUREZAS você acertou? "))
        if nn < 0 or nn > 45:
            print("Número inválido!")
            print()
            cls()
            continue

        nl = int(input("Quantas quesõtes de LINGUAGENS você acertou? "))
        if nl < 0 or nl > 45:
            print("Número inválido!")
            print()
            cls()
            continue

        nm = int(input("Quantas quesõtes de MATEMÁTICA você acertou? "))
        if nm < 0 or nm > 45:
            print("Número inválido!")
            print()
            cls()
            continue
    except ValueError:
        print("Você não digitou um número válido !")
        print()
        cls()
        continue
# programa segue
    
asked by anonymous 04.09.2016 / 02:56

1 answer

2

You can automate questions in a function:

def perguntar(area):
    try:
        n = int(input("Quantas questões de {} você acertou? ".format(area)))
    except ValueError:
        n = -1
    return n

Create a dictionary to store areas and responses, and with for passe the area for the question:

areas = {'HUMANAS': 0, 'NATUREZAS': 0, 'LINGUAGENS': 0, 'MATEMÁTICA': 0}
perguntarNovamente = None

while True:
    for area in areas:
        # ...

To rephrase the question to the user if a value is typed out of range, use a control variable:

perguntarNovamente = True

while perguntarNovamente:
    resposta = perguntar(area)

    if resposta < 0 or resposta > 45:
        print ("O número digitado é inválido! Tente novamente.")
        continue
    else:
        areas[area] = resposta
        perguntarNovamente = False
        break

To show areas and answers, do the following:

for area, resposta in areas.items():
    print ("Na área {} você acertou {} questões".format(area, resposta))

# programa segue...
break

Complete code:

def perguntar(area):
    try:
        n = int(input("Quantas questões de {} você acertou? ".format(area)))
    except ValueError:
        n = -1
    return n

areas = {'HUMANAS': 0, 'NATUREZAS': 0, 'LINGUAGENS': 0, 'MATEMÁTICA': 0}
perguntarNovamente = None

while True:
    for area in areas:
        perguntarNovamente = True

        while perguntarNovamente:
            resposta = perguntar(area)

            if resposta < 0 or resposta > 45:
                print ("O número digitado é inválido! Tente novamente.")
                continue
            else:
                areas[area] = resposta
                perguntarNovamente = False
                break

    for area, resposta in areas.items():
        print ("Na área {} você acertou {} questões".format(area, resposta))


    # programa segue...
    break

See DEMO

    
04.09.2016 / 04:12