computação 1 - dcc.ufrj.brdcc.ufrj.br/~lcarvalho/comp1/slides/revisao.pdf · coracao. estrutura...

59
Computação 1 Revisão Geral professor: Leonardo Carvalho

Upload: phamkhanh

Post on 12-Nov-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Computação 1

Revisão Geralprofessor: Leonardo Carvalho

O que vimos no curso?

2

Escrever uma palavra

exatamente 1687 vezes

3

>>>1687*'rapadura '

4

Desenhos muito loucos

5

Desenhos muito loucos

Códigos mind-blowing

def multiplica_matrizes(A, B):

'''Multiplica duas matrizes.'''

n = len(A)

m = len(A[0])

p = len(B[0])

C = []

for i in range(n):

linha = []

for j in range(p):

s = 0

for k in range(m):

s += A[i][k]*B[k][j]

linha.append(s)

C.append(linha)

return C 6

Tipos de dados7

Tipos de dados

Numéricos: int, float, long, complex

Lógico: bool

Texto: str, unicode

Coleções: tuple, list, set, dict

8

Variáveis

Atribuição:

variáveis = valores

>>> a = 12.0284795

>>> b = 9

>>> c, d = 3*a, a-b

>>> a += 10

>>> b -= c/d**2

9

Operações

Em tipos numéricos (int, long, float, complex):

Somar: +

Subtrair: -

Multiplicar: *

Dividir: / //

Potência: **

Resto: %

Comparações: == != < <= > >=

10

Operações

No tipo bool:

and

or

not

comparação: ==, !=

11

Operações

Em sequências (tuple, list, str):

indexação, fatiamento, concatenação, multiplicação por int, len, index, count, operador in, comparações (==, !=, <, >, <=, >=)

Em strings:

find, upper, lower, replace, split, partition

Em listas:

append, extend, insert, remove, del, pop

12

Operações

Em conjuntos:

add

remove, discard, pop

union, |

intersection, &

difference, -

issubset, <, <=

issuperset, >, >=

in, not in, clear,

13

Conjuntos

14

>>> A = {3, 8, 9, 3, 1, 2, 8}

>>> B = {9, 5, 2, 6, 3}

>>> A&B

set([9, 2, 3])

>>> A|B

set([1, 2, 3, 5, 6, 8, 9])

>>> A-B

set([8, 1])

>>> {8, 9} <= A

True

>>> {1, 2, 3, 4, 5, 6, 7, 8, 9} > B

True

Operações

Em dicionários:

acesso a um item: D[chave]

lista de chaves: D.keys()

lista de valores: D.values()

lista de itens: D.items()

pertinência: chave in D

apagar dados: del D[chave], D.clear()

15

Dicionários

16

>>> A = {'bolota': 12, 3: 10, 5: 'chimichanga'}

>>> A

{'bolota': 12, 3: 10, 5: 'chimichanga'}

>>> A['bolota']

12

>>> A[100] = 0

>>> A

{'bolota': 12, 3: 10, 100: 0, 5: 'chimichanga'}

Estruturas de repetição

17

for x in iterável: ...#Faz algo com x

18

Tipos iteráveis

Tuplas:

for x in (4, 1, 5, 'batata', 5.8):

print x

19

415batata5.8

Tipos iteráveis

Listas:

for x in ['tututu', 93, 20, 10, 'uia']:

print x

20

tututu932010uia

Tipos iteráveis

Strings:

for x in 'Bob Esponja':

print x

21

Bob Esponja

Tipos iteráveis

Conjuntos:

for x in {10, 30, 20, 'casa', 'casa', 'boca'}:

print x

22

2010casaboca30

Tipos iteráveis

Dicionários:

for x in {10:'a', 4:12, 5:20, 'agua':'fogo'}:

print x

23

1045agua

Tipos iteráveis

Dicionários:

L = {10:'a', 4:12, 5:20, 'agua':'fogo'}

for x in L:

print x, L[x]

24

10 a4 125 20agua fogo

Tipos iteráveis

Geradores (não vimos como criar, apenas como usá-los com for):

for x in xrange(10):

print x

25

0123456789

Tipos iteráveis

Geradores (não vimos como criar, apenas como usá-los com for):

V = 4, 7, 8, 2

for x in enumerate(V):

print x

26

(0, 4)(1, 7)(2, 8)(3, 2)

Tipos iteráveis

Geradores (não vimos como criar, apenas como usá-los com for):

V = 4, 7, 8, 2

for i, x in enumerate(V):

print i, x

27

0 41 72 83 2

while condicao: comandos

28

while

L = 'Eram duas caveiras que se amavam'

i = 0

while i < len(L):

print L[i]

i += 3

29

Emu vr eema

while

import random

i = random.randint(1, 100)

while i != 50:

print i

i = random.randint(1, 100)

30

936758023921100307051497281065489193

31

break

32

continue

33

break e continue

L = ['agua', 'terra', 'vento', 'fogo', 'coracao', 'abelhinha',

'hahaha', 'hehehe']

for i in L:

if i=='abelhinha':

break

if i=='vento':

continue

print iaguaterrafogocoracao

Estrutura condicional

34

if condição: comandos

35

Estrutura condicional

# -*- coding: utf-8 -*-

frase = u'Seu sorriso é tão resplandescente que deixou meu coração

alegre'

for x in frase.split():

if len(x) > 3:

print x

36

sorrisoresplandescentedeixoucoraçãoalegre

37

Matrizes

Matrizes

A = [ [5, 8, 1, 3],

[4, 6, 0, 1],

[1, 1, 2, 0] ]

B = [[8, 6, 3, 9, 7, 6, 7, 7, 0, 9, 4, 5, 2, 0, 9, 9, 8, 6],

[1, 0, 7, 9, 1, 8, 9, 9, 5, 5, 3, 3, 2, 1, 2, 5, 1, 1],

[8, 3, 6, 8, 4, 8, 7, 4, 4, 3, 6, 1, 8, 6, 2, 6, 9, 4],

[7, 1, 3, 8, 0, 7, 4, 1, 3, 9, 2, 3, 0, 4, 2, 9, 6, 9],

[1, 4, 1, 7, 9, 0, 9, 1, 6, 4, 7, 4, 4, 6, 8, 2, 8, 1],

[4, 3, 4, 6, 0, 1, 2, 1, 3, 7, 8, 8, 9, 8, 5, 5, 6, 5],

[1, 2, 4, 5, 2, 5, 0, 3, 5, 0, 4, 3, 0, 5, 9, 3, 9, 5],

[2, 9, 1, 3, 1, 5, 4, 2, 0, 7, 3, 0, 1, 7, 5, 7, 4, 6],

[2, 7, 5, 8, 8, 1, 2, 5, 2, 5, 8, 5, 4, 5, 8, 9, 8, 1],

[3, 4, 2, 8, 4, 8, 0, 8, 4, 9, 3, 4, 1, 9, 4, 2, 1, 8]]

38

Criação de matrizes

def matriz_alguma_coisa(m, n):

'''Retorna uma matriz m por n

preenchida por alguma coisa.'''

A = []

for i in range(m):

linha = []

for j in range(n):

x = ... # Cálculo do termo A[i][j]

linha.append(x)

A.append(linha)

return A

39

Processamento de matrizes

def processa_matriz(A):

'''Faz alguma coisa com cada elemento de A.'''

m = len(A)

n = len(A[0])

for i in range(m):

for j in range(n):

... A[i][j] ...

40

Entrada e saída simples

41

Entrada e saída simples

print mensagem

input(mensagem)

raw_input(mensagem)

42

Funções43

Funções pré-definidas

44

Funções de conversão de dados:

dados numéricos: int, float, complex

coleções: tuple, list, set, dict

string: str

Outras funções:

len, abs, min, max, sum, sorted, range, xrange, enumerate, zip, round

input, raw_input

Módulos

45

Módulo math:

funções: sin, cos, tan, exp, log, sqrt, degrees, radians, acos, asin

variáveis: pi, e

Módulo random:

randint, random, choice, uniform, sample, shuffle

Módulo turtle:

forward, backward, left, right, dot, goto, color, speed, etc

Definição de funções

def funcao_super_util(a, b, c=23, d=None):

'''A melhor função de todos os tempos.'''

for i in range(a, b):

if d != None:

c += d%i

else:

c += i

return c

46

Que problemas conseguimos resolver?

47

Lados

Dados, para cada triângulo, dois lados e o ângulo entre eles, calcule o outro lado:

Primeira solução

import math

def lado_triangulo(b, c, angulo):

'''Retorna um lado de um triângulo,

dados dois lados b, c e o angulo entre eles em graus.'''

alpha = math.radians(angulo)

return math.sqrt(b**2 + c**2 - 2*b*c*math.cos(alpha))

Modo interativo:>>> lado_triangulo(6.73, 5.41, 35.75)

3.932342665242

>>> lado_triangulo(5.37, 9.41, 105.25)

11.998659460091869

>>> lado_triangulo(4.12, 8.87, 113.34)

11.162799978678958

>>> lado_triangulo(14.44, 6.73, 28.18)

9.081970932978138 49

Solução melhorada

import math

def lado_triangulo(b, c, angulo):

'''Retorna um lado de um triângulo,

dados dois lados b, c e o angulo entre eles em graus.'''

alpha = math.radians(angulo)

return math.sqrt(b**2 + c**2 - 2*b*c*math.cos(alpha))

triangulos = [ (6.73, 5.41, 35.75), (5.37, 9.41, 105.25),

(4.12, 8.87, 113.34), (14.44, 6.73, 28.18)]

for b, c, ang in triangulos:

print b, c, ang, '->', lado_triangulo(b, c, ang)

50

6.73 5.41 35.75 -> 3.932342665245.37 9.41 105.25 -> 11.99865946014.12 8.87 113.34 -> 11.162799978714.44 6.73 28.18 -> 9.08197093298

Áreas

Calcule a área do polígono, dadas as coordenadas dos vértices:

Solução

def area_poligono(P):

'''Calcula a área de um polígono P'''

s = 0

n = len(P)

for i in range(n):

x0, y0 = P[i-1]

x1, y1 = P[i]

s += .5*(y0+y1)*(x1-x0)

return s

P = [(3.71, 3.51), (7.58, 8.21), (13.83, 4.95), (12.77, 1.61),

(8.01, 3.94)]

print area_poligono(P)

52

31.0999

Provas

● 3 provas

● É necessário fazer pelo menos 2 provas!

● Nota final

○ NF = 30%P1 + 50%max(P2, P3) + 20%T

○ NF = 40%P2 + 40%P3 + 20%T (se não fizer a P1)

● Aprovação: NF >= 5.0

Exercício

Crie uma função que calcula a nota final de um aluno, dadas as notas das provas e do trabalho. Usando None quando o aluno não tiver feito alguma prova.

>>> nota_final(6, 7, None, 8)

6.9

>>> nota_final(None, 5, 4, 7)

5.0

>>> nota_final(None, 3, 5, 6)

4.4

Solução

# -*- coding: utf8 -*-

import math

def nota_final(P1, P2, P3, T):

'''Calcula a nota final de um aluno de computação.'''

if T == None:

T = 0

L = P1, P2, P3

if L.count(None) > 1:

NF = 0

elif P1 != None:

NF = .3*P1 + .5*max(P2, P3) + .2*T

else:

NF = .4*P2 + .4*P3 + .2*T

return round(NF, 1)

55

Exemplo

Escreva um programa completo (incluindo função main) que peça ao usuário digitar as notas das provas (deixando em branco se não tiver feito) e do trabalho e calcule e mostre a média final e se o aluno foi aprovado no curso.

Nota da prova 1: 7

Nota da prova 2: 6

Nota da prova 3: 4

Nota do trabalho: 8

Nota final: 6.7

Aprovado!

56

Exemplo

...

def ler_nota(msg):

'''Pede um valor ao usuário, retorna None

se o usuário não informar nada'''

n = raw_input(msg)

if n == '':

return None

else:

return float(n)

...

57

Exemplo

...

def main():

p1 = ler_nota('Nota da prova 1: ')

p2 = ler_nota('Nota da prova 2: ')

p3 = ler_nota('Nota da prova 3: ')

T = ler_nota('Nota do trabalho: ')

nota = nota_final(p1, p2, p3, T)

print 'Nota final: ', nota

if nota >= 5:

print 'Aprovado!'

else:

print 'Reprovado!'

if __name__ == '__main__':

main()58

59