Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 43 de 103

Páginas do PDF

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.