Vamos começar a programar em Python? (Parte VI)
Por Rui Oliveira para o Pplware
Actualmente são muitas as linguagens de programação ao dispor dos programadores e curiosos pela “arte” de programar. O desenvolvimento de aplicações está hoje em dia direcionado para a Web e para os dispositivos móveis mas há ainda muito a fazer no que diz respeito à integração de sistemas. Depois de iniciarmos a nossa rubrica sobre a linguagem de programação Python, hoje iremos começar a explicar alguns elementos/sintaxe que fazem parte desta.
Na rubrica de hoje: Ciclos e decisões.
Hoje vamos falar de mais capacidades básicas da programação: A capacidade de repetir uma operação várias vezes e a capacidade de tomar uma decisão baseada nas mudanças das condições dos dados apresentados ao programa.
numero=float(input(“Introduza um número”)) if = is_prime==True: print(“O número é primo”) else: print(“O número não é primo”) |
Para isso hoje vamos apresentar os ciclos while e for do Python (aproveitando para mencionar a função range(k,i,j)) e os elementos if, elif e else.
Começando por estes últimos:
If, elif, else:
Quando fazemos um programa há recorrentemente a necessidade de mudar o comportamento do programa consoante os dados introduzidos. Considere-se o seguinte problema: dada uma função is_prime(n) que retorna True se n for um número primo ou False caso contrário, queremos que o nosso programa nos pergunte por um número e nos diga se ele é primo ou não. Isso pode ser feito com recurso ao seguinte programa:
Com este pequeno programa se percebe o uso básico do if e do else. O if serve para verificar se uma determinada comparação é verificada e executar algum código nesse caso. O código associado ao else é executado caso a comparação em if não se verifique.
Agora subindo a fasquia: a função is_prime(n) foi modificada e caso o número introduzido não for passível de ser avaliado como primo (isto é se for introduzido um 0, um número negativo ou um número decimal) a função retorna o valor None. Isto leva a que a função possa retornar tanto True, False ou None. Como podemos agora fazer com o que programa escolha o print correcto para cada retorno da função? Existem várias respostas. A mais simples é recorrendo ao elif:
numero=float(input(“Introduza um número”)) if = is_prime==None: print(“O número não pode ser avaliado como primo ou não-primo”) elif is_prime==False: print(“O número não é primo”) else: print(“O número é primo”) |
O número de elif que podem estar presentes num if-statement (nome dado ao bloco de instruções if+elif+else) é ilimitado, tal como é o número de if. A diferença entre usar um if, vários elif e um else ou usar vários if e um else é que no primeiro caso só é executado o primeiro a ter uma comparação verdadeira, enquando que numa série de if, todos o que forem verdadeiros são executados.
Ciclo for e função range(j,k,l):
O ciclo for é das maneiras mais simples em Python de repetir uma instrução n vezes. Isto leva a função incluída no Python range(j,k,l). Pedindo “ajuda” ao Python sobre o assunto:
>>> help(range) Help on class range in module builtins: class range(object) | range(stop) -> range object | range(start, stop[, step]) -> range object | | Returns a virtual sequence of numbers from start to stop by step. |
Os objectos desta função podem ser equiparados a listas. Por exemplo:
Portanto vamos supor que queremos avaliar quais dos números entre 1 e 10 são primos. Podemos faze-lo com o seguinte código (só corre em Python 3.x):
for number in range(1,11): #Note-se que para termos todos os números de 1 a 10 o limite superior da função range tem de ser 11 if is_prime(number)==True: print("O número %s é primo" % (number)) else: print("O número %s não é primo" % (number)) |
Que é equivalente a este:
for number in [1,2,3,4,5,6,7,8,9,10]: if is_prime(number)==True: print("O número %s é primo" % (number)) else: print("O número %s não é primo" % (number)) |
Ciclos while:
Os ciclos while são mais rudimentares que os ciclos for. Os ciclos while exigem uma sintaxe mais complexa.
A sintaxe básica de um ciclos while pode ser verificada no exemplo que se segue, que não é mais que todo o problema anterior reescrito para usar um ciclo while em vez de for.
num=1 #Inicialização da variavél de contagem while num<=10: if is_prime(num)==True: print("O número %s é primo" % (num)) else: print("O número %s não é primo" % (num)) num+=1 #Atualização da variavél de contagem - equivalente a escrever num+=1 |
As restantes potencialidades destes ciclos podem e devem ser exploradas pelos leitores, pois não há nada melhor para aprender do que experimentar.
Download: código fonte do exercício aqui
Este artigo tem mais de um ano
Aqui “num+=1 #Atualização da variavél de contagem – equivalente a escrever num+=1”
se calhar querias dizer num=num+1 certo?
Obrigado pelos tuts
“num+=1” é igual a “num=num+1”
Sim, era certamente isso que queria escrever. Obrigado pelo reparo.
Eu é que agradeço
O “while” e o “for” também têm o “else”. O “else” só acontece caso a condição seja falsa ou o ciclo “for” terminar.
Bom artigo.
Penso que seria redundante usar um else num for ou while. Mas há diferentes estilos de programação.
Em primeiro lugar, os meus parabéns pelo esforço e dedicação que o pplware põe no conteúdo do blog.
Dito isto, penso que deviam ter mais cuidado com a formatação do código que mostram aqui… Em python, as indentações contam, e nenhum do código está correctamente indentado.
Além disso, quando introduzem o “if/else”, escreveram “if = is_prime == None”, que não é válido por causa do sinal “=” extra. E já que mencionam que is_prime é uma função, suponho que a intenção era ter “is_prime(number)”, como aparece mais abaixo.
Há ainda outras coisas a apontas (o teste redundante “is_prime(…) == True” e o uso de “%s” para imprimir números) mas que são erros menos graves e portanto não dificultam tanto a aprendizagem dos leitores.
Novamente, e apesar destes pequenos erros, penso que seja louvável esta ideia de introduzir aos leitores uma linguagem de programação que, a meu ver, é superior a quase todas as outras. Só peço que verifiquem se o código que colocam no post é válido e corre.
Give this man a like
Sim, alguns dos erros foram notados um pouco tarde e a indentação nas caixas de código estava “bonita” no texto original. Passa sempre alguma coisa… Mas agradeço as correções.
Quando a escrever %s em vez de %d para escrever numeros, esse foi um mau hábito que ganhei quando fazia programas em que não sabia o tipo de variavél que ia ser escrita. Daí passei a escrever %s para tudo.
Se verificares o código fonte verás que corre completamente.
Falta a função is_prime no artigo
Creio que não entendi este algoritmo. Quero encontrar os números primos entre 5000 e 7000, e não funcionou com o algoritmo apresentado. Pode me auxiliar?