• Nenhum resultado encontrado

Programação I / Introdução à Programação Capítulo 3, "Program Flow"

N/A
N/A
Protected

Academic year: 2021

Share "Programação I / Introdução à Programação Capítulo 3, "Program Flow""

Copied!
23
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)

Últimas aulas: I Função range I Ciclos for

I Execução condicional (if/elif/else) I Ciclos while

I Saída e continuação num ciclo

break sai a meio de um ciclo

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

(3)

Dados imbricados, ciclos imbricados

Podemos criarpares(outuplos) de dados:

year_born = ("Paris Hilton", 1981)

Podemos criarlistas 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

(4)

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, end="\t") 3 for subject in subjects: 4 print(subject, end=", ") 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,

(5)

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, end="\t") 3 for subject in subjects: 4 print(subject, end=", ") 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,

(6)

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, end="\t") 3 for subject in subjects: 4 print(subject, end=", ") 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,

(7)

O método de Newton para encontrar a raiz quadrada

(Na realidade, o método era usado antes de Newton)

I Método para calcular a raiz quadrada de forma iterativa I Era usado antes a existência das calculadoras. . .

I Para determinarmos a raiz quadrade de n: I começar com uma aproximação x

I podemos obter uma melhor aproximação com: x0= x + n/x

2 I Iteração: definida ou não?

1 n=8

2 threshold = 0.001

3 approximation = n/2 # Start with some or other guess at the answer 4 while True:

5 better = (approximation + n/approximation)/2

6 if abs(approximation - better) < threshold: 7 print(better)

8 break

(8)

O método de Newton para encontrar a raiz quadrada

(Na realidade, o método era usado antes de Newton)

I Método para calcular a raiz quadrada de forma iterativa I Era usado antes a existência das calculadoras. . .

I Para determinarmos a raiz quadrade de n: I começar com uma aproximação x

I podemos obter uma melhor aproximação com: x0= x + n/x

2 I Iteração: definida ou não?

1 n=8

2 threshold = 0.001

3 approximation = n/2 # Start with some or other guess at the answer 4 while True:

5 better = (approximation + n/approximation)/2

6 if abs(approximation - better) < threshold: 7 print(better)

8 break

(9)

Algoritmos

Algoritmoé uma descrição passo a passo de um método para resolver um problema

I processo "mecânico": apenas é necessário seguir as regras I parte mais interessante: desenhar um algoritmo

(10)

Resolução de alguns exercícios

I Usando o módulo turtle, escreva a função poligono_reg(t, n, lado)

sem valor de retorno, que faz uma tartaruga t desenhar um polígono regular com n lados, cada um com comprimento lado.

I Por exemplo, com poligono_reg(t, 3, 100) a tartaruga t desenha um triângulo equilátero com 100 pixels de lado. I Nota: a soma dos ângulos externos de um polígono é 360°

(11)
(12)

Definição da função:

1 def reg_polygon(turt, length, sides): 2 splits = 360.0 / sides

3 for dist in range(sides): 4 turt.forward(length) 5 turt.left(splits) Utilização: 1 import turtle 2 scr = turtle.Screen() 3 t = turtle.Turtle() 4 reg_polygon(t, 100, 6) # hexagon 5 scr.mainloop()

(13)

Definição da função:

1 def reg_polygon(turt, length, sides): 2 splits = 360.0 / sides

3 for dist in range(sides): 4 turt.forward(length) 5 turt.left(splits) Utilização: 1 import turtle 2 scr = turtle.Screen() 3 t = turtle.Turtle() 4 reg_polygon(t, 100, 6) # hexagon 5 scr.mainloop()

(14)

Usando o móduloturtle, escreva um programa para desenhar uma estrela de cinco pontas como na figura abaixo.

(15)

I Ângulo externo = 180 / número de lados I Número de pontas tem de ser ímpar

(16)

Definição da função:

1 def reg_star(turt, length, sides): 2 splits = 180 - 180.0 / sides 3 for dist in range(sides): 4 turt.forward(length) 5 turt.left(splits) Utilização: 1 import turtle 2 scr = turtle.Screen() 3 t = turtle.Turtle() 4 reg_star(t, 100, 5) 5 scr.mainloop()

(17)

Definição da função:

1 def reg_star(turt, length, sides): 2 splits = 180 - 180.0 / sides 3 for dist in range(sides): 4 turt.forward(length) 5 turt.left(splits) Utilização: 1 import turtle 2 scr = turtle.Screen() 3 t = turtle.Turtle() 4 reg_star(t, 100, 5) 5 scr.mainloop()

(18)

1 import random 2 import turtle 3 scr = turtle.Screen() 4 scr.bgcolor("black") 5 t = turtle.Turtle() 6 t.pensize(5)

7 colors = ["pink", "blue", "yellow", "red", "green", "orange", "white"] 8 for _ in range(25): 9 x = random.randint(-300,300) 10 y = random.randint(-300,300) 11 t.penup() 12 t.goto(x,y) 13 t.pendown() 14 c = random.choice(colors) 15 t.color(c)

16 side = random.randint(10,100) 17 reg_star(t, side, 5)

(19)

Dicas, truques, erros comuns

I código erradopara determinar se uma lista tem números pares:

1 numbers = [10, 5, 24, 8, 6] 2 for number in numbers: 3 if number % 2 == 1:

4 print("list has odd numbers")

5 break

6 else:

7 print("list has NO odd numbers")

8 break

onde está o erro?

1 numbers = [10, 5, 24, 8, 6] 2 has_odd = False

3 for number in numbers: 4 if number % 2 == 1: 5 has_odd = True

6 break

7 if has_odd:

8 print("list has odd numbers") 9 else:

(20)

Dicas, truques, erros comuns

I código erradopara determinar se uma lista tem números pares:

1 numbers = [10, 5, 24, 8, 6] 2 for number in numbers: 3 if number % 2 == 1:

4 print("list has odd numbers")

5 break

6 else:

7 print("list has NO odd numbers")

8 break

onde está o erro?

1 numbers = [10, 5, 24, 8, 6] 2 has_odd = False

3 for number in numbers: 4 if number % 2 == 1: 5 has_odd = True

6 break

7 if has_odd:

8 print("list has odd numbers") 9 else:

(21)

MaisPythonic:

1 numbers = [10, 5, 24, 8, 6] 2 for number in numbers: 3 if number % 2 == 1:

4 print("list has odd numbers")

5 break

6 else: # no break

(22)

I módulo math: funções e constantes matemáticas sin, cos, pi, . . .

I números complexos: módulo cmath

1 >>> import cmath

2 >>> a = cmath.sqrt(-1) 3 >>> a

(23)

Próxima aula I Funções

Referências

Documentos relacionados

I As demonstrações destas propriedades seguem basicamente as mesmas técnicas usadas na demonstração das propriedades da função raiz quadrada. Elas ficam, portanto,

AAS® Protect – como inibidor da atividade plaquetária, na angina pectoris instável, na profilaxia do reinfarto e após cirurgia vascular ou intervenções, na prevenção de ataque

Coletamos, ent˜ao, quatro tempos: tempo de carga (load), necess´ario para carregar a imagem do VIM nos n´os; tempo de inicializac¸˜ao (boot), necess´ario para iniciar o sistema

O objetivo desta pesquisa foi analisar a relação entre o Fluxo de Caixa Livre e a sustentabilidade, com base nas empresas listadas no Índice de

remeteu para fiscalização prévia do Tribunal de Contas um contrato de aquisição de serviços técnicos de desenvolvimento aplicacional e administração de

O objeto oCliente é uma instância da classe

NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, versão 1.5.0_01 ou superior), contemplando