Introdução à programação e aos algoritmos
3.3 Testes em Sequência
Assim como a programação comum pode gerar código “espaguete”, uma POO, sem
o entendimento adequado sobre a construção de programas, pode levar ao código
“lasanha”: camadas e mais camadas de classes que di cultam a compreensão e
depuração dos programas.
Python suporta bem os dois paradigmas. Então é possível usar Python
inicialmente apenas com a programação estruturada e depois passar para a POO.
Portanto, minha dica é: aprenda bem os conceitos da programação estruturada.
Treine com programas maiores, com mais de 1000 linhas de código. Quando dominar
bem este paradigma, aprenda a usar o paradigma da POO.
3.3 TESTES EM SEQUÊNCIA
Por vezes é necessário fazer mais de um teste em sequência, e isto acontece quando, após um teste, precisamos verificar outra condição para tomar uma decisão. Assim, encadeamos diversos testes, um depois do outro. Por exemplo, dando continuidade ao caso do aluno, imaginemos que sua universidade só permita que alunos com média acima de 4 façam prova final. Alunos com média abaixo de 4 são reprovados diretamente. Com isso, o algoritmo ficaria:
Leia nota1
Leia nota2
Calcule média = (nota1 + nota2)/2
Se média < 7
então
se média < 4
imprima “Ficou reprovado :( :(“
senão
imprima “Ficou para a final :(“
senão
imprima “Passou direto!”
Este programa em Python ficaria:
nota1 = float(input(“Qual é a primeira nota? “))
nota2 = float(input(“E a segunda nota? “))
media = (nota1 + nota2)/2
print (“A média é “, media)
if media < 7:
if media < 4:
print (“Ficou reprovado :(“)
else:
print (“Ficou para prova final”)
else:
print (“Passou direto!”)
■ Programa 3.3: calcula_final_reprova.py
Observe que temos dois níveis de indentação no programa.
Cada nível está deslocado 4 espaços em relação ao nível anterior. O segundo else fecha o primeiro if, pois o bloco do segundo if tem de estar totalmente contido dentro da primeira cláusula do primeiro if. As indentações determinam os blocos de execução.
Fato 3.3 – Cada linguagem tem sua maneira de determinar blocos.
Em Python, os blocos de execução são determinados pelo recuo em relação ao início da
linha. Um bloco termina quando o recuo diminui. Outras linguagens podem usar
outros métodos. Pascal, por exemplo, usa as palavras begin e end para delimitar
blocos. C utiliza chaves {}.
A vantagem do método de Python é que este obriga o programador a manter seu
código com os blocos bem indentados, facilitando desse modo a sua localização visual
dentro do programa.
Nos programas, evitei fazer testes como “if media >= 7:”.
Lembre-se, media é um número real e não devemos testar a igualdade entre números reais, pois pequenas variações na forma de cálculo dos resultados nem sempre produzem valores exatos na conversão de decimal para binário. Dessa forma, é melhor evitar usar testes de igualdade, mesmo que estejam embutidos em um teste “maior ou igual”.
Python não tem uma estrutura que permita realizar diretamente a
escolha múltipla, como apresentada na Figura 3.5. Linguagens como C possuem o comando “switch case...” que funciona exatamente para escolhas múltiplas. Assim, a estrutura de Python
if ...
...
elif ...
...
elif ...
...
else ...
é a que mais se aproxima deste conceito. Desta maneira, cada comando elif é composto da junção de um else com um if seguinte. Utilizando esta estrutura, uma forma alternativa do programa anterior seria:
nota1 = float(input(“Qual é a primeira nota? “)) nota2 = float(input(“E a segunda nota? “)) media = (nota1 + nota2)/2
print (“A média é “, media)
if media < 4:
print (“Ficou reprovado :(“)
elif media < 7:
print (“Ficou para prova final”)
else:
print (“Passou direto!”)
■ Programa 3.4: calcula_final_reprova2.py.
EXERCÍCIO 3.6
Escreva um programa em Python que teste se um número é divisível por 3, 5 ou 7.
Seu programa deve dizer por qual desses valores o número é divisível.