Questions in Python (Try and except)

Asked

Viewed 731 times

4

I’m 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 hit, however, I want to make sure that if the person type an invalid number in the second or third question the program remakes the question itself and not 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

1 answer

4


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 the areas and responses, and with the for pass the area to the question:

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

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

To redo the question again to the user if a value is entered outside the 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:

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

Browser other questions tagged

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