• Nenhum resultado encontrado

Programação I / Introdução à Programação

N/A
N/A
Protected

Academic year: 2021

Share "Programação I / Introdução à Programação"

Copied!
27
0
0

Texto

(1)

Programação I / Introdução à Programação

Capítulo 3, "Program Flow"

João Pedro Pedroso

2020/2021

Informo que esta aula será gravada, por isso se intervierem durante a gravação assumo que autorizam a que a vossa

participação aí apareça.

Caso discordem, por favor deixem as vossas questões para o período de dúvidas, que não será gravado.

(2)

Última aula: I Módulo turtle I Ciclos for 1 import math 2 for x in [0,1,2,3,4,5]: 3 print(x, math.sqrt(x))

I for → permite percorrer uma lista

I Função range 1 import math 2 for x in range(6):

(3)

Última aula: I Módulo turtle I Ciclos for 1 import math 2 for x in [0,1,2,3,4,5]: 3 print(x, math.sqrt(x))

I for → permite percorrer uma lista

I Função range 1 import math 2 for x in range(6):

(4)

Última aula: I Execução condicional 1 for x in range(5): 2 if x%2 == 0: 3 print(x, "é par") 4 else: 5 print(x, "é ímpar")

I Podemos criar variáveis com valores lógicos: 1 for i in range(1,21):

2 is_even = i % 2 == 0 3 is_mult_3 = i % 3 == 0 4 if is_even and is_mult_3:

5 print(i, "is even and multiple of 3")

I por vezes, tornam o código mais legível

I podemos usar o resultado de uma expressão lógica em várias condições

(5)

Hoje:

(6)

Função range

1 for x in range(5): # 0, 1, 2, 3, 4 2 print(x) 3 4 for x in range(10): # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 5 print(x) 6 7 for x in range(3,10): # 3, 4, 5, 6, 7, 8, 9 8 print(x) 9 10 for x in range(3,10,2): # 3, 5, 7, 9 11 print(x)

I range(n) valores inteiros de 0 até n − 1 inclusive I range(i,n) → valores inteiros de i até n − 1 inclusive

(7)

Ajuda em Python

>>> help(range)

ou

https://docs.python.org/3/library/stdtypes.html# typesseq-range

meta-notação descreve a sintaxe do Python, sem fazer parte dela

I elementos facultativos entre parêntesis retos I palavras reservadas em bold

I itálico: e.g., variable → pode ser substituído por qualquer nome válido para variáveis

(8)

Atribuição e atualização de variáveis

I Inicialização: primeiro valor que se atribuí a uma variável

i = 0

I Incrementar: aumentar o valor em uma unidade

i = i + 1

i += 1 # forma mais curta (e mais habitual)

I Decrementar: diminuir o valor em uma unidade

i -= 1 I Outros operadores: v = v + k ↔ v += k v = v - k ↔ v -= k v = v * k ↔ v *= k v = v / k ↔ v /= k v = v // k ↔ v //= k v = v ** k ↔ v **= k

(9)

Instrução for

I Permite percorrer os valores de uma lista

I Podemos utilizar para calcular a soma de valores numa lista

I exemplo: [5, 6, 32, 21, 9]

1 numbers = [5, 6, 32, 21, 9]

2 running_total = 0 3 for number in numbers:

4 running_total += number

5 print(running_total)

I Verifique o que acontece usando o Python Tutor: http://pythontutor.com

(10)

Instrução for

I Permite percorrer os valores de uma lista

I Podemos utilizar para calcular a soma de valores numa lista

I exemplo: [5, 6, 32, 21, 9]

1 numbers = [5, 6, 32, 21, 9]

2 running_total = 0 3 for number in numbers:

4 running_total += number

5 print(running_total)

I Verifique o que acontece usando o Python Tutor: http://pythontutor.com

(11)

Instrução while

Permite iterar sem saber a priori quantas vezes se vai executar o ciclo while <CONDITION>: <STATEMENTS> Exemplo: 1 n=6 2 current_sum = 0 3 i=0 4 while i <= n: 5 current_sum += i 6 i += 1 7 print(current_sum)

(12)

A sequência de Collatz

Nem sempre é fácil concluir que um ciclo while não termina. Exemplo:

I Calcular a Sequência de Collatz para um dado n > 0 : Enquanto n não for igual a 1, gerar o próximo elemento da sequência usando a função:

f (n) = ( n/2 se n é par 3n + 1 se n é ímpar 1 def sequencia(n): 2 print(n) 3 while n != 1: 4 if n%2 == 0: # n é par 5 n = n//2 6 else: # n é ímpar 7 n = 3*n+1 8 print(n)

(13)

sequencia(1) 1 sequencia(2) 2, 1 sequencia(3) 3, 10, 5, 16, 8, 4, 2, 1 sequencia(4) 4, 2, 1 sequencia(5) 5, 16, 8, 4, 2, 1 sequencia(6) 6, 3, 10, 5, 16, 8, 4, 2, 1 . . . sequencia(27) 27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, . . .

→ são necessárias 111 iterações para chegar a 1 I Não sabemos se esta função termina para todo n > 0.

(14)

Seguir o fluxo de um programa

sequencia(3)

n output até ao momento 3 3, 10 3, 10, 5 3, 10, 5, 16 3, 10, 5, 16, 8 3, 10, 5, 16, 8, 4 3, 10, 5, 16, 8, 4, 2 3, 10, 5, 16, 8, 4, 2, 1 3, 10, 5, 16, 8, 4, 2, 1.

(15)

Ciclo for ou while?

Iteração definida, ciclos for para

I iterar sobre sequências aritméticas I iterar sobre listas ou tuplos

(16)

Saída e continuação num ciclo

break sai a meio de um ciclo

continue passa ao início da próxima iteração

I se a condição de paragem se verificar, termina

for i in [12, 16, 17, 24, 29]:

if i % 2 == 1: # se é ímpar

break # ... termina o ciclo

print(i)

print("fim")

for i in [12, 16, 17, 24, 29, 30]:

if i % 2 == 1: # se é impar

continue # ...passa ao próximo

print(i) print("fim") 12 16 fim 12 16 24 30 fim

(17)

Saída e continuação num ciclo

break sai a meio de um ciclo

continue passa ao início da próxima iteração

I se a condição de paragem se verificar, termina

for i in [12, 16, 17, 24, 29]:

if i % 2 == 1: # se é ímpar

break # ... termina o ciclo

print(i)

print("fim")

for i in [12, 16, 17, 24, 29, 30]:

if i % 2 == 1: # se é impar

continue # ...passa ao próximo

print(i) print("fim") 12 16 fim 12 16 24 30 fim

(18)

Saída e continuação num ciclo

break sai a meio de um ciclo

continue passa ao início da próxima iteração

I se a condição de paragem se verificar, termina

for i in [12, 16, 17, 24, 29]:

if i % 2 == 1: # se é ímpar

break # ... termina o ciclo

print(i)

print("fim")

for i in [12, 16, 17, 24, 29, 30]:

if i % 2 == 1: # se é impar

continue # ...passa ao próximo

print(i) print("fim") 12 16 fim 12 16 24 30 fim

(19)

Variantes de ciclos: paragem a meio

1 import random

2 rng = random.Random() # "random number generator"

3 number = rng.randrange(1, 1000) # Get random number between [1 and 1000) 4 guesses = 0

5 message = ""

6 while True:

7 guess = int(input(message + "\nGuess my number between 1 and 1000: "))

8 guesses += 1 9 if guess > number:

10 message += str(guess) + " is too high.\n"

11 elif guess < number:

12 message += str(guess) + " is too low.\n"

13 else:

14 break

(20)

Dados imbricados, ciclos imbricados

Podemos criarpares(outuplos) de dados:

year_born = ("Paris Hilton", 1981)

Podemos criaslistas de pares:

celebs = [("Brad Pitt", 1963), ("Jack Nicholson", 1937), ("Justin Bieber", 1994)]

Exemplo:

1 for name, year in celebs:

2 if year < 1980:

3 print(name)

Brad Pitt Jack Nicholson

(21)

1 students = [

2 ("John", ["CompSci", "Physics"]),

3 ("Vusi", ["Maths", "CompSci", "Stats"]),

4 ("Jess", ["CompSci", "Accounting", "Economics", "Management"]),

5 ("Sarah", ["InfSys", "Accounting", "Economics", "CommLaw"]),

6 ("Zuki", ["Sociology", "Economics", "Law", "Stats", "Music"])]

Podemos listar os cursos de cada aluno com um ciclo imbricado

1 for name, subjects in students:

2 print(name)

3 for subject in subjects:

4 print(" ", subject) 5 print() Output: John CompSci Physics Vusi Maths CompSci Stats Jess [...] CompSci Accounting Economics Management Sarah InfSys Accounting Economics CommLaw Zuki Sociology Economics Law Stats Music

(22)

1 students = [

2 ("John", ["CompSci", "Physics"]),

3 ("Vusi", ["Maths", "CompSci", "Stats"]),

4 ("Jess", ["CompSci", "Accounting", "Economics", "Management"]),

5 ("Sarah", ["InfSys", "Accounting", "Economics", "CommLaw"]),

6 ("Zuki", ["Sociology", "Economics", "Law", "Stats", "Music"])]

Podemos listar os cursos de cada aluno com um ciclo imbricado 1 for name, subjects in students:

2 print(name)

3 for subject in subjects:

4 print(" ", subject) 5 print() Output: John CompSci Physics Vusi Maths CompSci Stats Jess [...] CompSci Accounting Economics Management Sarah InfSys Accounting Economics CommLaw Zuki Sociology Economics Law Stats Music

(23)

1 students = [

2 ("John", ["CompSci", "Physics"]),

3 ("Vusi", ["Maths", "CompSci", "Stats"]),

4 ("Jess", ["CompSci", "Accounting", "Economics", "Management"]),

5 ("Sarah", ["InfSys", "Accounting", "Economics", "CommLaw"]),

6 ("Zuki", ["Sociology", "Economics", "Law", "Stats", "Music"])]

Podemos listar os cursos de cada aluno com um ciclo imbricado 1 for name, subjects in students:

2 print(name)

3 for subject in subjects:

4 print(" ", subject) 5 print() Output: John CompSci Physics Vusi Maths CompSci Stats Jess [...] CompSci Accounting Economics Management Sarah InfSys Accounting Economics CommLaw Zuki Sociology Economics Law Stats Music

(24)

Noções estudadas

Muitas noções importantes →ler com atenção final do capítulo!

atributo estado, ou valor, que pertence a um objeto

determinado (e.g., a cor);

biblioteca standard coleção de módulos que fazem parte da

distribuição normal do Python;

ciclo for instrução Python~para repetir as instruções que

escrevermos no corpo/bloco do ciclo;

condição de paragem condição que, quando ocorre, termina a

execução de um ciclo; a mais habitual, e a de não haver mais elementos a atribuir à variável do ciclo.

controlo do fluxo manipulação do fluxo de execução;

corpo de um ciclo — conjunto de instruções dentro do ciclo

(indentados relativamente à definição do ciclo);

determinístico propriedade de um processo que é repetível e

previsível.

(25)

gerador de números (pseudo-)aleatórios função de fornece a possibilidade de criar números com propriedades semelhantes às dos aleatórios;

instância objeto de uma classe (alex e tess instâncias da

classe Turtle);

invocar ou chamar – executar um método de um objeto

(wn.exitonclick() chama o método exitonclick do objeto wn);

iteração elemento de programação que permite repetir alguns

passos de um programa;

método função associada a um objeto; quando é invocada,

causa algum efeito no objeto;

módulo ficheiro contendo definições e instruções Python,

destinadas a serem usadas por outros programadores, através de import;

número aleatório número gerado por um processo que torna

impossível a sua previsão com 100% de certeza (processo estocástico);

(26)

número pseudo-aleatório número que, sendo em rigor gerado por um processo determinístico, possuí propriedades semelhantes à de um aleatório;

objeto elemento informação relativo a dados de um

determinado tipo, referido por uma variável;

range função incorporada no Python para gerar sequências

de inteiros;

sequencial comportamento de um programa passo a passo, da

primeira até à última instrução;

tela (canvas) superfície dentro de uma janela, onde se desenha;

variável do ciclo variável à qual é atribuído um valor diferente a

cada iteração do ciclo, que é usada como critério de paragem;

(27)

Próxima aula

Referências

Documentos relacionados

Caso discordem, por favor deixem as vossas questões para o período de dúvidas, que não será gravado.... Funções com listas

verdadeiro que o valor desta esta variável é menor do que 8, os comandos desta estrutura (linhas 5.1, 5.2, 5.3 e 5.4) serão repetidos – caso contrário o controle será desviado para

ex_argparse.py: error: the following arguments are required: square. $ python3 ex_argparse.py -h usage: ex_argparse.py [-h] square

Uma linguagem de programação define as palavras e símbolos que se pode usar para escrever um programa Uma linguagem de programação emprega um conjunto de regras (sintaxe) que

• No exemplo do slide anterior, se quisermos transformar o código que traduz segundos para horas, minutos e segundos precisamos de uma função que retorna três valores. •

condição – expressão cujo valor resultante é booleano estrutura condicional – estrutura de desvio do fluxo de controle que executa diferentes comandos de acordo com uma

Em nosso cotidiano, consideramos as coisas materiais como objetos (carros, por exemplo), que têm seus atributos (características descritivas como marca, modelo, cor, peso, etc.) e

Funcional Lógico Estruturado.