View
0
Download
0
Category
Preview:
Citation preview
Informá(ca para as Ciências e EngenhariasVersão : C
(Engenharia Civil)
Pedro Barahona2018 / 19
Sumário
• Tipo Booleano.§ Operadores relacionais e lógicos.§ Avaliação de conjunções e de disjunções.
• Instrução IF.
• Matrizes.
§ Criação de matrizes.§ Relações entre vetores e matrizes.
• Resolução de problemas.
1 Abril 2019 2Instrução IF; Matrizes
Sumário
• Tipo Booleano.§ Operadores relacionais e lógicos.§ Avaliação de conjunções e de disjunções.
• Instrução IF.
• Matrizes.
§ Criação de matrizes.§ Relações entre vetores e matrizes.
• Resolução de problemas.
1 Abril 2019 3Instrução IF; Matrizes
Tipo Booleano e Operadores relacionais
• Um dos 2pos primi2vos do Python é o Booleano ou valorlógico (bool), com dois valores possíveis: True e False.
§ As constantes lógicas são representadas por: True e False.
• Este 2po aparece normalmente associado a comparações de
expressões avaliadas através de operadores relacionais.
Operadores relacionais:== (igual) != (diferente)
> (maior) >= (maior ou igual)
< (menor) <= (menor ou igual)
1 Abril 2019 4Instrução IF; Matrizes
Tipo Booleano e Operadores relacionais
• Exemplo: x == 10 é uma expressão lógica que vale:
§ True, se o valor da variável x for (igual a) 10;
§ False, se o valor da variável x não for (igual a) 10.• Os operadores lógicos podem ser encadeados (“como na
matemáGca”)
• Exemplo: 10 <= x < 20 é uma expressão lógica que vale:§ True, se o valor da variável x esGver no intervalo [ 10, 20 [
§ False, caso contrário.
• As condições a avaliar podem ser mais complexas e exigir auGlização de expressões booleanas formadas comoperadores lógicos.
1 Abril 2019 5Instrução IF; Matrizes
Tipo Booleano e Operadores relacionais
• Operadores lógicos:§ and (conjunção, “e”)§ or (disjunção, “ou”)§ not (negação , “não”)
• Exemplo: A expressão lógica x >= 10 and x < 20 vale:§ True, se o valor da variável x esGver no intervalo [ 10, 20 [§ False, caso contrário.
• Exemplo: A expressão lógica x < 10 or x >= 20 vale:§ True, se o valor de x esGver fora do intervalo [ 10, 20 [§ False, caso contrário.
1 Abril 2019 6Instrução IF; Matrizes
O operador and
• Operacionalmente, a avaliação do operador and pode sero4mizada (curto-circuito):
expr1 and expr2
1. A expressão expr1 é sempre avaliada
2. Se o valor de expr1 for True, a expr2 é avaliada (porqueainda não se sabe o resultado da conjunção):
True and True vale True mas True and False vale False
3. Se o valor de expr1 for False, a expr2 não é avaliada (porquejá se sabe o resultado da conjunção):
False and True vale False e False and False vale False1 Abril 2019 7Instrução IF; Matrizes
O operador or
• Operacionalmente a avaliação do operador or também podeser o5mizada (curto-circuito):
expr1 or expr2
1. A expressão expr1 é sempre avaliada
2. Se o valor de expr1 for False, a expr2 é avaliada (porqueainda não se sabe o resultado da conjunção):
False or True vale True mas False or False vale False
3. Se o valor de expr1 for True, a expr2 não é avaliada (porquejá se sabe o resultado da conjunção):
True or True vale True e True or False vale True1 Abril 2019 8Instrução IF; Matrizes
O operador && (conjunção) [2]
Exemplos:
Nota: O operador not tem precedência sobre o operador andque tem precedência sobre o operador or.
1 Abril 2019 9
In : x = 15In : y = 20In : x == 15 and y > 25Out: FalseIn : x == 15 and y < 25Out: TrueIn : x > 30 or not x > 40 and y < 15Out: FalseIn : x > 30 or not (x > 40 and y < 15)Out: True
Instrução IF; Matrizes
( ) ( ( ) )
Sumário
• Tipo Booleano.§ Operadores relacionais e lógicos.§ Avaliação de conjunções e de disjunções.
• Instrução IF.
• Matrizes.
§ Criação de matrizes.§ Relações entre vetores e matrizes.
• Resolução de problemas.
1 Abril 2019 10Instrução IF; Matrizes
A instrução IF [1]
• Por vezes, é interessante executar blocos de instruçõesdis>ntos conforme o resultado da avaliação de uma condiçãoou do valor duma variável booleana.
• Em Python (e na generalidade das outras linguagens deprogramação), este obje>vo pode ser alcançado usando ainstrução if.
• Existem várias variantes desta instrução para cobrir os casos:
§ de exis>rem uma ou mais condições; e
§ só se pretenderem executar blocos de operações se ascondições se verificarem.
1 Abril 2019 11Instrução IF; Matrizes
A instrução IF [2]
1 Abril 2019 12
Sintaxe:
if condição1:
instruções1
Exemplo:
se sopa está insossa
adicione sal
Operacionalmente:
1. A condição1 é avaliada.
§ Se for verdadeira, executam-se as instruções1.
§ (Se for falsa, não se faz mais nada.)
Instrução IF; Matrizes
• Caso mais simples: uma só condição (necessária)
A instrução IF [3]
1 Abril 2019 13
Sintaxe:if condição1:
instruções1else
instruções2
Operacionalmente:1. A condição1 é avaliada.
§ Se for verdadeira, executam-se as instruções1.§ Se for falsa, executam-se as instruções2
Exemplo:se está sol e calor
almoce no terraçosenão
almoce na sala
Instrução IF; Matrizes
• Uma só condição mas com alternaLva
• O número de condições pode ser arbitrário
• Neste caso existem 2 condições alterna7vas, mas poderiam serconsideradas mais com blocos elif adicionais.
A instrução IF [4]
1 Abril 2019 14
Sintaxe:if condição1:
instruções1elif condição2:
instruções2else
instruções3
Exemplo:if semáforo está verde
avanceelif semáforo está vermelho
páreelse % semáforo amarelo
acelere
Instrução IF; Matrizes
A instrução IF [5]
1 Abril 2019 15
Operacionalmente:
1. A condição1 é avaliada.
2. Se for True, executam-se asinstruções1.
3. Se for False, avalia-se acondição2.
4. Se for True, executam-se asinstruções2.
5. Se for False executam-se asinstruções3.
Instrução IF; Matrizes
Sintaxe:if condição1 :
instruções1elif condição2:
instruções2else
instruções3
A instrução IF [6]
1 Abril 2019 16Instrução IF; Matrizes
• Nota: A indentação é obrigatória!
• As linhas onde se escrevem os blocos de instruções devem
estar indentados (“chegados à frente”), normalmente através
de um tab) em relação às linhas onde se expressam a avaliação
das condições.
• Essa indentação já era obrigatória na definição de funções, em
que as instruções devem estar indentadas em relação à linha da
assinatura.
• Para além de obrigatória, a indentação aumenta a legibilidade
do código, sendo especialmente úYl no caso de blocos
encadeados (uns dentro dos outros)
A instrução IF [6]
1 Abril 2019 17Instrução IF; Matrizes
def f(x,y):z = 0if x > 10:
if y > 20:z = x + y
elif y > 10:z = x – y
else:z = x * y
return z
In : f(20,5)0
def g(x,y):z = 0if x > 10:
if y > 20:z = x + y
elif y > 10:z = x – y
else:z = x * y
return z
In : g(20,5)100
• Programas semelhantes, com indentações diferentes podem conduzir a resultados diferentes.
Sumário
• Tipo Booleano.§ Operadores relacionais e lógicos.§ Avaliação de conjunções e de disjunções.
• Instrução IF.
• Matrizes.
§ Criação de matrizes.§ Relações entre vetores e matrizes.
• Resolução de problemas.
1 Abril 2019 18Instrução IF; Matrizes
Matrizes [1]
• Em muitos casos, é conveniente trabalhar com dados organizados emtabelas. Essas tabelas podem ter várias dimensões.
§ Uma tabela de dimensão 1 pode ser implementada como um vetor.§ Uma tabela de dimensão 2 pode ser implementada como uma matriz.
§ As tabelas podem ter uma dimensão maior que 2.
• Uma matriz é uma estrutura de dados que guarda um númeropre-definido de dados do mesmo Hpo (tal como um vetor),agrupados numa tabela com L linhas e C colunas.§ Em Python, uma matriz pode ser implementada através duma lista de
listas.
§ Tabelas 3-dimensionais podem ser implementadas como listas delistas de listas!
1 Abril 2019 19Instrução IF; Matrizes
Matrizes – Criação
• Uma matriz pode ser criada através da enumeração de todos os seuselementos numa lista de listas.
• O número de linhas corresponde ao número de listas “internas”, epode ser ob?do através da função len.
• O número de colunas pode ser ob?do aplicando a função len a umadas linhas internas da matriz.
• Nota: Se as listas internas não ?verem todas a mesma dimensão aestrutura resultante não implementa uma matriz bem formada.
1 Abril 2019 20
In : M = [[1,2,3,4],[3,4,5,6], [5,6,7,8]]In : len(M)3In : M[1][3,4,5,6]In : len(M[0])4
Instrução IF; Matrizes
M 0 1 2 3 Colunas0 1 2 3 41 3 4 5 62 5 6 7 8
Linhas
Matrizes – Acesso a uma posição
• Os elementos de uma matriz podem ser acedidos individualmente,indicando a linha em que estão e a coluna dentro dessa linha.
Sintaxe: nomeMatriz[ expressão_1] [expressão_2]
• Assumindo-se uma matriz com L linhas e C colunas:
§ O valor da expressão1 é um inteiro entre 0 e L-1 (ou maisgeralmente entre –L e L-1.
§ O valor da expressão2 é um inteiro entre 0 e C-1 (ou maisgeralmente entre –C e C-1.
1 Abril 2019 21Instrução IF; Matrizes
In : M = [[1,2,3,4],[3,4,5,6], [5,6,7,8]]In : M[1][3,4,5,6]In : M[2][3]8
M 0 1 2 3 Colunas0 1 2 3 41 3 4 5 62 5 6 7 8
Linhas
Matrizes – Acesso a uma posição
• O acesso a elementos de uma matriz pode ser feito quer para leituraquer para escrita
1 Abril 2019 22Instrução IF; Matrizes
In : M = [[1,2,3,4],[3,4,5,6], [5,6,7,8]]In : M[1][3,4,5,6]In : M[2][3]8In : M[1][2] = 9In : M[[1,2,3,4],[3,4,9,6], [5,6,7,8]]In : M[-1][-4] = 0In : M[[1,2,3,4],[3,4,9,6], [0,6,7,8]]
M 0 1 2 3 Colunas0 1 2 3 41 3 4 5 62 5 6 7 8
Linhas0
9
Matrizes – Modificação
• As linhas de uma matriz podem ser aumentadas usando-se o método.append, à lista que representa a matriz
§ Nota: Os elementos das listas appended devem ter o mesmonúmero de elementos para se manter uma matriz bem formada.
• Pode obter-se uma faFa (submatriz) de uma matriz, extraindo-se aslinhas idenFficadas com a notação usada em listas.
1 Abril 2019 23Instrução IF; Matrizes
In : M = [[1,2,3,4],[3,4,5,6], [5,6,7,8]]In : P = M[0:3:2]In : P[[1,2,3,4],[5,6,7,8]]In : P.append([3,4,5,6])In : P[[1,2,3,4], [5,6,7,8],[3,4,5,6]]
Matrizes – Criação
• Em Python, a implementação de matrizes através de listas nãopermite a u<lização imediata de operações sobre matrizes,estudadas na álgebra, como sejam o produto de matrizes, ocálculo do determinantes e a inversão de matrizes(quadradas)
1 Abril 2019 24Instrução IF; Matrizes
In : import numpy as npIn : A = np.array([[1,2],[4,5]]) In : AOut: array([[1, 2],
[4, 5]]) In : import numpy.linalg as laIn : la.inv(A)Out: array([[-1.66666667, 0.66666667],
[ 1.33333333, -0.33333333]])
• O Python disponibilizauma biblioteca(numpy), muito ú<lpara cálculo matricialavançado.
Sumário
• Tipo Booleano.§ Operadores relacionais e lógicos.§ Avaliação de conjunções e de disjunções.
• Instrução IF.
• Matrizes.
§ Criação de matrizes.§ Relações entre vetores e matrizes.
• Resolução de problemas.
1 Abril 2019 25Instrução IF; Matrizes
Problema da Pauta de ICE
• Problema: Faça um programa que produz a pauta com as notas finaisde ICE por avaliação con>nua.§ O programa recebe, por cada aluno, o número e as notas dos dois
exercícios, do projeto e dos dois testes do aluno (E1, E2, P, T1 e T2),arredondadas às décimas.
§ Por cada aluno, a pauta tem o número e a nota final por avaliaçãocon>nua do aluno.
§ Os dados de entrada e os resultados estão em tabelas.
1 Abril 2019 26Instrução IF; Matrizes
Resolução – Problema [1]
Problema: Faça um programa que produz a pauta com as notas finais deICE por avaliação conCnua.
1. Compreender totalmente o problema.• Os dados de entrada e os resultados estão em tabelas:
1 Abril 2019 27
Notas: Pauta:
Instrução IF; Matrizes
Resolução – Problema [2]
1. Compreender totalmente o problema.
• Seja CompL = 20% E1 + 20% E2 + 60% P (arredondada às décimas)
• Se não tem frequência (CompL < 8.5), NF = −1.
• Se tem frequência (CompL ≥ 8.5)
§ Seja CompTP = (T1 + T2)/2
§ Se CompTP < 8.5,
« NF = CompTP (arredondada às unidades).
§ Se CompTP ≥ 8.5,
« NF = 0.6 CompTP + 0.4 CompL (arredondada às unidades).
1 Abril 2019 28Instrução IF; Matrizes
Resolução – Problema [3]
2. Caracterizar o problema.• Problema: Pauta de ICE.• Entrada: Uma tabela de números, com uma linha por aluno e
seis colunas (nº, E1, E2, P, T1, T2).• Saída: Uma tabela de números, com uma linha por aluno e
duas colunas (nº e NF).3. Generalizar o problema (sempre que for possível).• Não é possível generalizar este problema.
1 Abril 2019 29Instrução IF; Matrizes
Resolução – Algoritmo [1]
4. Desenhar o algoritmo para resolver o problema.a) Conceber o algoritmo, decompondo o problema em sub-problemas.• Como calcular a pauta de ICE com a tabela Notas (L×6)?
§ Cria-se a tabela Pauta (L×2).§ Para cada linha i de Notas (abreviada por N abaixo)
« Pautai0 ← Ni0; % copia-se o nº de aluno« Pautai1 ← Nota final (Ni1, Ni2, Ni3, Ni4, Ni5).
1 Abril 2019 30
Notas:
è
Pauta:
Instrução IF; Matrizes
Resolução – Algoritmo [2]
b) Iden'ficar, caracterizar e generalizar cada sub-problema.• Como calcular a nota final de ICE
Nota final (E1, E2, P, T1, T2).
• Problema: nota final de ICE.• Entrada: vetor (com E1, E2, P, T1, T2).• Saída: a nota final de ICE.
Esta função será definida mais à frente
1 Abril 2019 31Instrução IF; Matrizes
Resolução – Algoritmo [3]
c) Conceber o algoritmo, assumindo que os sub-problemas estãoresolvidos.
• Pauta de ICE Notas: (L×6) :§ Cria-se a tabela Pauta: (L×2).§ Para cada linha i de N (Notas):
« Pautai0 ← Ni0; % copia-se o nº de aluno« Pautai1 ← Nota final (Ni1, Ni2, Ni3, Ni4, Ni5).
– Vetor = [Ni1, Ni2, Ni3, Ni4, Ni5).
1 Abril 2019 32
è
Notas: Pauta:
Instrução IF; Matrizes
Resolução – Algoritmo [4]
5. Para cada sub-problema, desenhar o algoritmo para o resolver.
Nota final de ICE (vetor com E1, E2, P, T1, T2) :
(nos próximos slides)
1 Abril 2019 33Instrução IF; Matrizes
Resolução – Algoritmo [5]
• Nota final de ICE (vetor com E1, E2, P, T1, T2) :
CompL = 20% E1 + 20% E2 + 60% P
se CompL< 8.5 então # Não tem frequência
NF = −1.
senão # CompL ≥ 8.5, tem frequência
compTP = (T1 + T2)/2 (arredondada às décimas)
se compTP < 8.5 então # Não obteve aprovação
notaFinal = compTP (arredondada às unidades)
senãocompL = Arredonda às décimas( compL)
notaFinal = 0.6*compTP + 0.4*compL (arredondada às unidades)
1 Abril 2019 34Instrução IF; Matrizes
Resolução – Algoritmo [6]
5. (cont) Para cada sub-problema, desenhar o algoritmo para oresolver.
• Novo sub-problema• Problema: Arredonda às décimas.• Entrada: valor real.• Saída: o valor arredondado às décimas.
Arredondar às décimas (valor) :• A função round cuja sintaxe é
round(number[, ndigits]) arredonda o número number com precisão de ndigits.
1 Abril 2019 35Instrução IF; Matrizes
Resolução – Algoritmo [6]
5. (cont) Para cada sub-problema, desenhar o algoritmo para oresolver.
• Novo sub-problema• Problema: Arredonda às décimas.
• Entrada: valor real.
• Saída: o valor arredondado às décimas.
Arredondar às décimas (valor) :
• Pode-se usar a função round para arredondar às décimas.
§ Exemplo: round(3.14,1) vale 3.1.
1 Abril 2019 36Instrução IF; Matrizes
Resolução – Programa
6. Para cada sub-problema (começando pelos mais simples),implementar o respe8vo algoritmo e testar o “sub-programa”.§ Arredonda às décimas (valor)§ Nota final de ICE (vetor com E1, E2, P, T1, T2)
7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.§ Pauta de ICE (E)
1 Abril 2019 37Instrução IF; Matrizes
Implementação – Que questões?
1. Como é que se executam blocos de instruções dis>ntos conformeseja o resultado da avaliação de uma condição?No problema: se ... então ... senão ... .R: Usando a instrução IF
2. Como é que se escrevem condições?No problema: CompL < 8.5.R: Usando Expressões booleans
3. Como é que se manipula uma tabela?No problema: as tabelas Notas e PautaR: Usando matrizes – listas de listas.
1 Abril 2019 38Instrução IF; Matrizes
Resolução – Programa [2]
1 Abril 2019 39
• Comecemos pela implementação da função notaFinal:def notaFinal(notasAC)
""" Calcula a nota final de ICE por avaliacao continua.O vetor notasAC tem as notas dos dois exercicios,do trabalho e dos dois testes:
(exer1, exer2, trab, teste1, teste2).Sejam:
compTP = 0.4 teste1 + 0.6 teste2 ecompL = (trab1 + trab2) / 2,
ambas arredondadas `as decimas. O resultado é:* −1,
se o aluno não tem frequência;* compTP (arredondada às unidades),
se o aluno tem frequência e compTP < 8.5* 0.6*compTP + 0.4*compL (arredondada às unidades),
nos restantes casos."""...
Instrução IF; Matrizes
Resolução – Programa [4]
1 Abril 2019 40
• E agora o código da função notaFinal.def notaFinal(notasAC):
""" ... """notaL = 0.2*notasAC[0]+0.2*notasAC[1]+0.6*notasAC[2]compL = round(notaL,1)print (" -- compL = ", compL) # debugif compL < 8.5 : # O aluno nao tem frequencia.
F = -1else : # O aluno tem frequencia.
compTP = round(0.4 * notasAC[3] + 0.6 * notasAC[4], 1)if compTP < 8.5 :
F = round(compTP)else :
F = round(0.6 * compTP + 0.4 * compL)print (" -- compTP = ", compTP) # debug
return F
Instrução IF; Matrizes
Resolução – Teste Unitário
• A função notaFinal pode ser testada para os vários casos, antes de serusada na função PautaIce
• Exemplo:
1 Abril 2019 41
In : notaFinal([15.5, 16.4, 18.0, 15.7, 14.8])-- compL = 17.2-- compTP = 15.2 Out: 16 In : notaFinal([12.3, 9.2, 9.4, 8.7, 7.2])-- compL = 9.9Out: 8In : notaFinal([8.0, 4.5, 7.2, 8.1, 10.2])-- compL = 6.8 Out: -1
Instrução IF; Matrizes
Resolução – Programa [2]
1 Abril 2019 42
• E agora a implementação da função pautaICE:
def pautaICE(Notas)""" Produz a pauta de ICE por avaliaçao continua.A matriz Notas tem uma linha por aluno, com o numero e asnotas dos dois exercicios, do projeto e dos dois testesdo aluno (numero, exer1, exer2, proj, este1, teste2). Na matriz pauta há uma linha por aluno, com o numeroe a nota final por avaliacao continua do aluno.A nota final -1 significa que o aluno nao tem frequencia."""
Pauta = []
for notasAluno in Notas
numAluno = notasAluno[0]
notaAluno = notaFinal(notasAluno[1:])
pauta.append([numAluno,notaAluno])
return Pauta
Instrução IF; Matrizes
Resolução – Teste Final
• A função pautaICE pode ser testada para os vários casos.
• Pode criar-se uma matriz de entrada com as notas testadasanteriormente e chamar a função pautaICE com esse argumento.
• Exemplo:
1 Abril 2019 43
In : Notas = [[68322, 15.5, 16.4, 18.0, 15.7, 14.8],...: [67413, 12.3, 9.2, 9.4, 8.7, 7.2],...: [65064, 8.0, 4.5, 7.2, 8.1, 10.2]]In : Pauta = pautaICE(Notas)-- compL = 17.2-- compTP = 15.2-- compL = 9.9-- compL = 6.8In : PautaOut: [[68322, 16], [67413, 8], [65064, -1]]
Instrução IF; Matrizes
Para saber Mais
• Consultar um dos livros de texto aconselhados.
• Por exemplo:
§ “Think Python: How to Think Like a Computer ScienAst ”:
cap. 2, cap. 10.
§ “IntroducAon to ComputaAon and Programming Using Python”:caps. 2.1, + 4.1 e 4.2.
1 Abril 2019 Instrução IF; Matrizes 44
Recommended