Upload
phamkhanh
View
226
Download
0
Embed Size (px)
Citation preview
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 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
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'}
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
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
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
# -*- 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
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
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
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
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