In short, the operator += sums the following value and adds it to the previous variable. In the case of:
questao +=1
is (more or less)* equivalent to
questao = questao + 1
*Not exactly equivalent, as @Jefferson Quesado pointed out, since the += sign in python replaces the special iadd method. As @hkotsubo suggested, for a more detailed explanation of the difference between the two forms, see this response.
In this case, when executing the line "questao += 1", the variable questao receives its own added current value of 1.
As quoted by @Luiz Augusto, more details can be found here.
To fully understand the code, you need to analyze line by line:
#Variável pontos possui valor 0, questao possui valor 1
pontos = 0
questao = 1
#A instrução while indica que o bloco de código seguinte será executado enquanto questao <= 3.
#Ou seja, cada linha abaixo será percorrida e, ao chegar ao final, será analisado se o valor contido na variável questao é menor ou igual a 3.
#Na primeira vez que esse código é executado, a variável questao possui valor igual a 1, portanto o bloco de código é executado
while questao <=3:
#A variável resposta recebe o valor do "input".
#O "input" apresenta ao usuário a frase: 'Resposta da questão {}:', onde {} é substituído pelo valor contido na variável questao.
#Logo, na primeira execução, "input" apresenta ao usuário a seguinte frase: Resposta da questão 1
#Após apresentar a frase, "input" aguarda que o usuário digite um valor e aperte enter.
#O valor digitado é armazenado na variável resposta
resposta = input('Resposta da questão {}: '.format(questao))
# O if analisa 2 condições: se o valor da variável questao é igual a 1 e se o valor da variável resposta é igual a b.
# Caso as duas condições sejam verdadeiras, ele altera o valor da variável pontos para pontos + 1.
# Caso alguma das condições seja falsa, ele ignora a próxima linha e pula para o próximo if.
# Detalhe: pontos = pontos + 1 poderia ser reescrito como pontos += 1
if questao == 1 and resposta == 'b':
pontos = pontos + 1
# Aqui o if analisa 2 condições: se o valor da variável questao é igual a 2 e se o valor da variável resposta é igual a a.
# Caso as duas condições sejam verdadeiras, ele altera o valor da variável pontos para pontos + 1.
# Caso alguma das condições seja falsa, ele ignora a próxima linha e pula para o próximo if.
if questao == 2 and resposta == 'a':
pontos = pontos + 1
# Aqui o if analisa 2 condições: se o valor da variável questao é igual a 3 e se o valor da variável resposta é igual a d.
# Caso as duas condições sejam verdadeiras, ele altera o valor da variável pontos para pontos + 1.
# Caso alguma das condições seja falsa, ele ignora a próxima linha e pula para a linha seguinte.
if questao == 3 and resposta == 'd':
pontos = pontos + 1
# Aqui ele altera o valor da variável questao.
# Na primeira execução ela irá mudar de 1 para 2.
# Na segunda execução ela irá mudar de 2 para 3.
# Na terceira execução ela irá mudar de 3 para 4.
# Não haverá a quarta execução, pois o while irá notar que o valor da variável questao (3) é não é menor ou igual a 3
questao +=1
#Por fim, após executar o código dentro do while 3 vezes, ele irá imprimir a frase seguinte, substituindo {} pelo valor contido na variável pontos.
#O valor na variável pontos irá depender dos valores que o usuário digita no input
print('O aluno fez {} pontos'.format(pontos))
is an abbreviation for question = question + 1
– Elton Nunes
Welcome Daniel, read this answer: How to increment the value of a variable according to the user’s response? The problem isn’t exactly the same as yours, but you’ll understand step by step
– Luiz Augusto
If you want to know more about the subject, the correct name is
OPERADOR DE ATRIBUIÇÃO COMPOSTA
Compound operators in Python– Luiz Augusto