Indo além#
Estamos começando a escrever código Python e diversas dúvidas aparecem. Cada semana termina com uma seção Indo além em que nos preocupamos em criar código claro e legível. Para isso revisitamos os assuntos anteriores, focando em erros comuns e exercícios complementares e focados nesses problemas.
Se você ainda não está seguro com o material da semana esta seção também é para você. O material foi criado pensando em todos os alunos e revisitar alguns desses temas irá complementar as explicações e exercícios feitos até agora.
Toda seção terá 3 partes:
- leitura explicando como consertar alguns erros e dificuldades comuns
- exercícios focados especificamente nos erros trabalhados na leitura
- exercício para consertar um código com problemas
Vamos ao trabalho então!
Usar variável antes de atribuir valor#
Programas em Python rodam linha a linha começando do topo do arquivo. Portanto um programa como o abaixo não funcionará.
A variável c
teve um valor atribuído pela primeira vez na linha 4. Porém, a linha 3 usa c
! Isso não é válido pois a variável c
ainda não existe. Ela só é criada na atribuição feita na linha 4.Para consertar esse código precisamos trocar a ordem das linhas 3 e 4, garantindo que c
seja criada antes que uma linha de código tente ler seu valor.
Isso vale também para funções! Para usar uma função ela tem que ser definida antes de ser chamada.
Linha de código não tem efeito#
No código abaixo, qual seria o valor de a
e b
após sua execução?
Se você disse a=10
e b=5
está correto! As linhas 3 e 4 não tem nenhum efeito! A linha 3 faz várias contas, mas não guarda o resultado delas em nenhuma variável! Já a linha 4 pega o valor 10
(que está armazenado em a
) e guarda de novo em a
. Como essas linhas não mudam o valor de nenhuma variável, elas podem ser tiradas do código!.
Se você escreveu essas linhas, pense se não está querendo atualizar o valor de a
ou b
ou mesmo se quer criar uma variável nova. Se não for nenhum desses casos, tirá-las não muda o resultado do programa e irá deixar o código mais legível e sucinto.
Função foi redefinida ou argumento de função foi redefinido#
Criar nomes de variáveis é difícil no início e um erro comum é acabar redefinido uma função ou variável existente sem querer. Vejamos abaixo.
def faz_conta(a, b):
return a + b
b = faz_conta(10, 5)
def faz_conta(b):
b += 3
return b
c = faz_conta(5)
print(b, c)
# Qual valor de b e c??
E aí, qual é o valor de b
e de c
? Aqui temos dois problemas:
- na linha 4
faz_conta
se refere à função declarada na linha 1, mas na linha 9faz_conta
se refere à função declarada na linha6
- dentro da segunda
faz_conta
,b
é um argumento e recebe o valor passado na chamada. Ele não tem nada a ver com ob
da linha4
!
Para deixar esse código menos confuso precisamos seguir 3 passos:
- dar um novo nome para
faz_conta
definida na linha6
- usar uma nova variável na linha
7
, evitando redefinir o valorb
passado como argumento
Hora de praticar#
Temos um grupo de exercícios para ajudar a praticar essas melhorias.