Alcides Fonseca

40.197958, -8.408312

Programar em Python

O Python é uma linguagem de programação e é aquela que vamos aprender hoje. Mas o conceito de programar pode depois ser usada em muitas outras linguagens.

Estas linguagens permitem a humanos definir receitas que o computador segue sempre que são pedidas. A estas receitas chamamos programas e certamente já lidaram com vários: O Microsoft Word, o Chrome, o Solitário ou qualquer outro jogo de computador.

Neste tutorial vamos aprender as bases para fazer programas em Python. Estes programas podem ajudar na escola, podem ser jogos ou podem não ter propósito nenhum! Cada um tem a liberdade de expressão para fazer o que quiser!

Strings

Neste programa estamos a usar uma função chamada print. Esta função pega numa string e imprime-a no ecrã. Uma string é texto rodeado de aspas duplas (") ou aspas simples ('), desde que o tipo de aspa no inicio seja igual à aspa no final.

1. Vamos alterar o nome do vosso programa de João para Jarvis, inspirado no nome da Inteligência Artificial do IronMan
2. A string (representada a vermelha) usa aspas duplas. Altere para usar aspas simples
3. Faça com que o programa depois de se apresentar, imprima também “Estou à sua disposição”.

Agora que dominamos as strings, vamos aprender a evitar repetir strings. O código abaixo tem várias das coisas que o Jarvis diz. Mas se quisermos alterar o nome do Jarvis, temos de ir linha a linha alterar o nome dele (Imaginem programas como o Windows, onde existem biliões de linhas de código! Ninguém quer mudar nome nenhum assim!).

De forma a resolver o problema vão precisar de saber definir uma variável. As variáveis servem para evitar repetir operações, e organizar melhor o código. Por exemplo, depois de a=1+2 e b=3, podemos fazer print(a+b) que vai imprimir 6. Escusamos de ter tudo na mesma linha.

Mas as variáveis também funcionam com coisas que não números: numa linha em branco, escrevam: nome = "Jarvis". Depois noutra linha façam print(nome). Atenção que agora nome não está entre aspas! Isto quer dizer que vamos ler a string que guardamos em nome, e não a string “nome”!

A segunda coisa que vão precisar é juntar duas strings. A esta operação chama-se concatenar. Experimentem fazer print("aves" + "truz") e ver o que imprime.

1. Usando uma variável e a concatenação de strings, altere o exemplo seguinte para apenas existir uma vez escrito o nome “Jarvis”, mas sem alterar o resultado da execução do programa.

Inteiros, Floats e Calculadoras

Se existissem apenas strings, os vários programas iam ser muito poéticos, mas nada úteis! A maior parte dos programas fazem uso de números para serem úteis. desde dizer-vos quanto dinheiro têm no banco, quantos SMS enviaram este mês, ou qual a pontuação da vossa equipa na primeira liga.

1. Altere o programa de modo a que soma (a+b) seja feita antes da multiplicação, sem alterar a ordem porque estão escritos (Dica: programação e matemática são mais parecidos do que julgam!)

2. Altere a última linha para ser simplesmente print(d). Faça com que o resultado seja o mesmo.

3. Faça o programa dizer-lhe quanto é 28 820 172 a dividir por 1231.

4. E agora 300 a dividir por 0?

Listas e ciclos for

Se o nosso programa precisasse de ter os dados de todos os jogadores da primeira liga, criar uma variável para cada característica (nome, idade, posição, golos, assistências) de cada jogador seria um trabalho muito aborrecido! Para guardar conjuntos de coisas parecidas, usamos listas (exemplo: [coisa, outracoisa, aindaoutracoisa].

1. Estamos a escolher a melhor fruta do mundo como sendo a primeira da lista. Altere para ser a segunda (sem fazer batota e sem escrever print("banana")).

2. Experimente fazer frutas[-1] e frutas[-2]. Consegue explicar como é que conseguimos ir buscar elementos a contar negativamente?

Agora que os programas começam a ficar complicados, podemos usar comentários (linhas que começam com cardinal, aquilo a que provavelmente chamam de hashtag) para explicar o que está a acontecer. Porque é importante explicar? Porque daqui a 1 ano quando voltarem a ler este programa, já não se lembram do que fizeram.

1. Execute este programa e confirme que percebe porque é que o número 10 não está a ser impresso.

2. Queremos agora fazer contagem decrescente (9, 8, 7, … , 1). Existem duas maneiras de conseguir isso com o que já sabem!

3. Agora imagine que é um carteiro. Conte primeiro os impares e só depois os pares.

Números Aleatórios

Uma funcionalidade importante em jogos é o uso de números aleatórios. O programa abaixo usa a função random() que devolve um número aleatório.

1. Corra o programa duas vezes. Os resultados são diferentes, mas de cada vez é impresso sempre o mesmo número. Faça com que cada uma das 10 vezes, o número seja diferente.

2. Qual é o valor mínimo e o valor máximo retornado pela função random?

3. Faça os resultados serem valores de dados de 1 a 6. Dica: use a função round(1.0) para ter 1.

Booleanos

O Sr. Boole definiu muito do que se considera a matemática booleana, que lida com verdadeiros e falsos.

Um boolean é um valor que ou é verdadeiro, ou é falso. E podemos fazer operações interessantes com estes valores.

1. Substitua "True_ou_False" por True ou por False, consoante o que ache que é o resultado de e.

2. Execute o programa para ver se acertou ou não. Percebe tudo o que acontece com os valores?

3. Imprima que o utilizador ganhou 10 euros, ou perdeu 10 euros conforme tenha acertado ou tenha falhado a aposta. Percebe como funciona o if e o else?

Donatello, a Tartaruga

Neste exemplo, apresentamos o Donatello, que é uma tartaruga. O Donatello tem alguns métodos (donatello.fazcoisas(opcoes))

Neste exemplo temos o donatello.forward(X) que anda para a frente X pixeis. Temos também o donatello.right(Y) que gira para a sua direita Y graus. Existe também o donatello.left(Z), que funciona de maneira igual ao right.

1. Desenhe um quadrado com o dobro do comprimento do actual.

2. Desenhe uma circunferência. Dica: o donatello deverá andar para a frente 1 pixel por cada ângulo que gira.

3. Desenhe um 8.

4. Garanta que desenhar o 8 usa apenas um ciclo for. Para tal, deverá ser necessário usar um if.

5. Desenhe a seguinte figura:

O Donatello quer ser um roomba

Neste exercício, vamos tentar que o donatello se comporte como um Roomba, um daqueles aspiradores que usam os mais recentes algoritmos de inteligência artificial! Mas não se assustem, que o algoritmo mais eficiente é andar ao calhas até encontrar uma parede. Se encontrarem uma parede, volta para trás!

1. Colocar o Donatello a andar ao calhas. Isto consiste em girar para a direita ou para a esquerda um valor entre 0 e 5º. (Dica: rodar -5º para a esquerda é o mesmo que rodar 5º para a direita).

2. Colocar o Donatello a detectar as paredes. Neste caso sabemos que as paredes são X=-100, X=100, Y=-100 e Y=100. Use as coordenadas posX e posY, que representam onde o donatello está!

Cifrar como César

O Júlio César, para ocultar as suas instruções aos soldados dos irredutíveis gauleses, inventou uma cifra para esconder as ordens. A cifra baseia-se em avançar as letras da mensagem 13 caracteres. Ou seja a letra A (código 65) iria passar a N (código 68). A frase “Diario da Maria” iria passar a “Qvnv|-qn-Znvn”. Desencriptar o texto é fazer o oposto: tirar 13 a cada letra. Altere as funções encriptar e desencriptar para fazer exactamente isso:

Fórmula Resolvente

Vamos agora desenhar gráficos usando o p.plot(xs, ys) que recebe duas listas. As listas indicam os pares (x,y) de cada ponto. Por exemplo, para desenhar os pontos (1,2) e (5,6), devemos fazer p.plot([1,5], [2,6]) usando a lista das coordenadas xs e outra com as ys.

Para além do plot, estamos também a usar duas coisas muito úteis! Primeiro, os lambdas! dobro = lambda x : x*2 cria uma função dobro que recebe um x e devolve o dobro desse x. Este lambda é usado para representar a função definida pelo polinómio.

A outra função útil é o map(dobro, [1,2,3]), que devolve uma lista com o dobro de cada elemento da lista. Neste caso devolve [2,4,6].

Para concluir o programa da fórmula resolvente, é preciso definir o delta e as raizes. Relembre a fórmula:

1. Preencha o delta com a fórmula correcta.

2. Preencha as raízes com as fórmulas correctas

Encontrar o pi!

Uma das formas de encontrar o valor de pi (3.14…) é atirar dardos ao calhas para um quadrado, e ver o rácio entre os que ficam dentro de um círculo circunscrito, e os que ficam fora.

Na realidade vamos considerar apenas o quadrado de lado 1, e o circulo de raio 1 centrado num dos vértices do quadrado.

  • O quadrado tem área 1.
  • O quarto do círculo tem área pi*r^2/4
  • O rácio dos pontos que calham dentro do quarto de círculo sobre todos os que são lançados dentro do quadrado é: pi*r^2 / 4 * r^2, que é igual a pi / 4.
  • Podemos concluir que pi = (dentro_do_quarto_de_circulo/dentro_do_quadrado) * 4.

1. Altere o ciclo for para atirar tantos dados como o total de dardos definidos.

2. Preencha o x e o y com os valores correctos.

3. Defina o y_ao_quadrado.

4. Verifique que o pi tem um valor aproximadamente correcto