Vamos começar a programar em Python? (Parte VI)

10 Comentários

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. python_2_02

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:

python_01

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

Comentários

10

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de João Feteira
    João Feteira

    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

    1. Avatar de NoBodyCares
      NoBodyCares

      “num+=1” é igual a “num=num+1”

    2. Avatar de Rui Oliveira
      Rui Oliveira

      Sim, era certamente isso que queria escrever. Obrigado pelo reparo.

      Eu é que agradeço

  2. Avatar de Denis Encarnação
    Denis Encarnaçã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.

    1. Avatar de Rui Oliveira
      Rui Oliveira

      Penso que seria redundante usar um else num for ou while. Mas há diferentes estilos de programação.

  3. Avatar de João
    Joã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.

    1. Avatar de Pedro Janeiro
      Pedro Janeiro

      Give this man a like

    2. Avatar de Rui Oliveira
      Rui Oliveira

      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.

  4. Avatar de Pedro A.
    Pedro A.

    Falta a função is_prime no artigo

  5. Avatar de Antonio Medeiros
    Antonio Medeiros

    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?