I made a script that calculates the average of a class or student. But I couldn’t find a way to ask the user if he wants to do another calculation or not

Asked

Viewed 319 times

0

I’m starting in Python, so maybe this looks pretty silly. Basically the code I made gives the option to calculate the average grades of a certain class or a student. I want the program to ask the user if he wants to perform another calculation again and of what type (class average or student average). Follows the code:

print('Olá!\nPara calcular a nota de um aluno, digite 1.\nPara calcular a nota de uma turma, digite 2.')
resp=str(input()); num=1; soma=0.0
while resp!='1' and resp!='2':
      resp=str(input('Sua resposta é inválida!\nPara calcular a nota de um aluno, digite 1.\nPara calcular a nota de uma turma, digite 2.\n'))

if resp=='2':
   turma=input('De qual série você deseja calcular a nota?\n')
   alunos=int(input('Quantos alunos têm a turma?\n'))
   while num<=alunos:
         print('Qual é a nota do aluno', num,'?\n')
         nota=float(input())
         soma+=nota
         num+=1
   print ('A média das notas do', turma, 'é:', soma/alunos)
else:
     if resp=='1':
        nome=str(input('Qual é o nome do aluno?\n'))
        quo=int(input('Quer saber a média de quantas provas?\n'))
        while num<=quo:
              print('Qual é a nota da prova', num, '?\n')
              notas=float(input())
              soma+=notas
              num+=1
        print('A média das notas do aluno(a)', nome, 'nas', quo, 'provas é de', soma/quo,'pontos.')

2 answers

2

All you have to do is make a loop to keep repeating what you want. And it is interesting to also have some output condition, something like this:

while True:
    # faz o que precisa (pede as notas, calcula média, etc)
    ...

    if input('Deseja continuar? S/N') == 'N':
        break # sai do while

Other details: input already returns a string, so if you want a string, do str(input()) is redundant and unnecessary. Also, you can pass the message directly to input. I mean, instead of:

print('digite algo')
s = input()

Simply do:

s = input('digite algo')

And to print variables along with the message, you can use f-strings (from Python 3.6). I made other modifications too, it was like this:

while True:
    resp = input('Olá!\nPara calcular a nota de um aluno, digite 1.\nPara calcular a nota de uma turma, digite 2.')
    soma = 0

    if resp == '2':
       turma = input('De qual série você deseja calcular a nota?\n')
       alunos = int(input('Quantos alunos têm a turma?\n'))
       for num in range(1, alunos + 1): # use um range em vez de um while
           soma += float(input(f'Qual é a nota do aluno {num}?\n'))
       print(f'A média das notas do {turma} é: {soma / alunos}')
    elif resp == '1':
            nome = input('Qual é o nome do aluno?\n')
            qtd = int(input('Quer saber a média de quantas provas?\n'))
            for num in range(1, qtd + 1):
                soma += float(input(f'Qual é a nota da prova {num}?\n'))
            print(f'A média das notas do aluno(a) {nome} nas {qtd} provas é de {soma / qtd} pontos.')
    else: # se chegou aqui, a nota não é 1 nem 2
        print('Sua resposta é inválida')

    if input('Deseja continuar? (S/N): ') == 'N':
        break # sai do while

It can improve more, because I do not validate if the user typed "S" (I just see if it was typed "N", anything else makes the program continue). I also do not validate whether a number was actually typed, etc. But the basic idea (to keep the program running) is there.

1

Simplifying and using your base, just a while and remove one that is unnecessary.

while True:
    print('Olá!\nPara calcular a nota de um aluno, digite 1.\nPara calcular a nota de uma turma, digite 2.')
    resp=str(input()); num=1; soma=0.0
    if resp not in '1' and resp not in '2':
        resp=str(input('Sua resposta é inválida!\nPara calcular a nota de um aluno, digite 1.\nPara calcular a nota de uma turma, digite 2.\n'))

    if resp in '2':
        turma=input('De qual turma você deseja calcular a nota?\n')
        alunos=int(input('Quantos alunos têm a turma?\n'))
        while num<=alunos:
                print('Qual é a nota do aluno', num,'?\n')
                nota=float(input())
                soma+=nota
                num+=1
        print ('A média das notas da turma %s é: %s' % (turma, soma/alunos))
    else:
            if resp in '1':
            nome=str(input('Qual é o nome do aluno?\n'))
            quo=int(input('Quer saber a média de quantas provas?\n'))
            while num<=quo:
                    print('Qual é a nota da prova', num, '?\n')
                    notas=float(input())
                    soma+=notas
                    num+=1
            print('A média das notas do aluno(a)', nome, 'nas', quo, 'provas é de', soma/quo,'pontos.')

Browser other questions tagged

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