• 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

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

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

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

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

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.

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

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