Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

TypeError: 'list' object is not callable

# Desenvolver um programa para verificar a nota do aluno em uma prova com 10 questões,
# o programa deve perguntar ao aluno a resposta de cada questão e ao final comparar com o gabarito da prova e
# assim calcular o total de acertos e a nota (atribuir 1 ponto por resposta certa).
# Após cada aluno utilizar o sistema deve ser feita uma pergunta se outro aluno vai utilizar o sistema.
# Após todos os alunos terem respondido informar:
# a - Maior e Menor Acerto;
# b - Total de Alunos que utilizaram o sistema;
# c - A Média das Notas da Turma.


# Função para o professor entrar com gabarito
def gabarito():
    print('Professor, digite o gabarito da prova: ')
    gabarito = []

    for i in range(0, 10):
        alternativa = (input('Questão {}: '.format(i+1))).upper()
        gabarito.append(alternativa)
    return gabarito


# Função que pede os alunos para entrar com suas respostas
def respostas_aluno():
    respostas_aluno = []

    for i in range(0, 10):
        resp = (input('Resposta da questão {}: '.format(i+1))).upper()
        respostas_aluno.append(resp)
    return respostas_aluno


gabarito = gabarito()
continuar = 'S'

while continuar == 'S':
    aluno = input('Nome do aluno: ').capitalize()
    respostas_aluno = respostas_aluno()       # pycharm acusa o erro nesta linha
    print('\n\n')
    print(' *** Gabarito ***        *** Resposta {} *** '.format(aluno))
    for i in range(1, 11):
        print('      {} - {}                        {}'.format(i, gabarito[i - 1], respostas_aluno[i - 1]))


    pontos = 0
    for i in range(0, 10):
        if gabarito[i] == respostas_aluno[i]:
            pontos += 1
        else:
            pass
    print('O aluno {} acertou {} questões, sua nota é {}'.format(aluno, pontos, pontos))

    continuar = input('Outro aluno deseja conferir a nota? S/N ').upper()

Quando o bloco do while vai ser executado pela segunda vez, aparece o erro TypeError: 'list' object is not callable no Pycharm. Não sei o que fazer para consertar isso. Estou fazendo esse exercício para treinar a lógica de programação e a síntaxe do Pyhon.

4 respostas
solução!

O erro está acontecendo porque você está redefinindo o valor de respostas_aluno.

Como é uma função inicialmente, está tudo certo, mas quando você faz respostas_aluno = respostas_aluno(), essa função é substituida por uma lista.

Tente renomear a função para pegar_respostas_aluno e seu código deve funcionar.

Cara acabei de testar aqui, e funcionou sim!! Muito obrigado. Eu suspeitei que o erro estava no fato de redefinir um valor para respostas_alunos. Defini a lista como vazia novamente e mesmo assim não tinha funcionado. Mas mesmo assim, fiquei com dúvida conceitual. Como pode, eu simplesmente trocar o nome da função e o código funcionar? Em teoria a função continua fazendo a mesma coisa!

Que ótimo que funcionou hehe.

Então, a lógica disso é que, basicamente, funções/classes são "variáveis executáveis". Não faço a menor ideia se isso é o termo certo, ou como chamam na comunidade do Python, mas é só pra fazer sentido nessa conversa hehe.

O que quero dizer com "variáveis executáveis"? Bem, segue o exemplo:

def foo():
    return 'foo'


class Bar:
    pass


print(foo)  # <function foo at 0x1032a1430>
print(Bar)  # <class '__main__.Bar'>

foo2 = foo()
bar = Bar()
print(foo2)  # foo
print(bar)  # <__main__.Bar object at 0x103270e20>

foo = 'texto'
Bar = 'texto'
print(foo)  # texto
print(Bar)  # texto

Nesse exemplo, foo é uma função e Bar é uma classe, mas só até o momento em que eu substituo o valor deles por 'texto'. Ai eles se tornam apenas variáveis do tipostr, com o valor 'texto', em vez de serem "variáveis executáveis". (Se alguém souber o termo certo, por favor me fala)

Ah, agora deu uma esclarecida maior. Valeu aee cara, de vdd mesmo. Não consigo dormir direito quando um código não roda kkk a noite de sono hoje está garantida.