computação 1 - dcc.ufrj.brlcarvalho/comp1/slides/aula9t.pdf · for j in range(10):...
TRANSCRIPT
Computação 1
Exercícios
Exercício
...
P = []
Q = []
for v in range(-200, 200, 50):
P.append( (v, -100) )
Q.append( (v, 100) )
for a, b in zip(P, Q):
turtle.up()
turtle.goto(a)
turtle.dot(10, 'red')
turtle.down()
turtle.goto(b)
turtle.dot(10, 'blue')
...
Pergunta
Solução
P = []
Q = []
for v in range(-200, 200, 50):
P.append( (v, -100) )
Q.append( (v, 100) )
for a in P:
for b in Q:
turtle.up()
turtle.goto(a)
turtle.dot(10, 'red')
turtle.down()
turtle.goto(b)
turtle.dot(10, 'blue')
coman
dos f
or
aninh
ados!
Exercício
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(10):
turtle.goto(20*i, 0)
turtle.dot(10)
turtle.done()
Solução
Exercício
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(10):
for j in range(10):
turtle.goto(20*i, 20*j)
turtle.dot(10)
turtle.done()
Solução
Exercício
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(10):
for j in range(i):
turtle.goto(20*i, 20*j)
turtle.dot(10)
turtle.done()
Solução
Exercício
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(20):
for j in range(20-i):
turtle.goto(20*i, 20*j)
turtle.dot(10)
turtle.done()
Solução
Exercício
Solução
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(20):
for j in range(i, 20-i):
turtle.goto(20*i, 20*j)
turtle.dot(10)
turtle.done()
Exercício
Solução
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for j in range(1, 11):
turtle.goto(0, 200-20*j)
s = '7 x ' + str(j) + ' = ' + str(7*j)
turtle.write(s)
turtle.done()
Exercício
Solução
import turtle
turtle.speed('fastest')
turtle.hideturtle()
turtle.up()
for i in range(1, 11):
for j in range(1, 11):
turtle.goto(70*i-500, 200-20*j)
s = str(i) + ' x ' + str(j) + ' = ' + str(i*j)
turtle.write(s)
turtle.done()
Exercício
>>> valores_unicos([20, 10, 20, 20, 8, 10, 10, 8, 8, 8])
[20, 10, 8]
>>> valores_unicos([0, 1, 9, 0, 0, 4, 2, 1, 4])
[0, 1, 9, 4, 2]
Solução
def valores_unicos(L):
'''Retorna uma lista contendo os elementos
de L, mas sem repeticoes.'''
res = []
for x in L:
if x not in res:
res.append(x)
return res
Exercícios
Conjuntos
Conjuntos
>>> A = {3, 0, 8, 9, 3}
>>> A
set([8, 9, 3, 0])
>>> B = {9, 8, 8, 8, 8, 8, 8, 8, 8, 10}
>>> B
set([8, 9, 10])
>>> C = set([3, 1, 0, 3, 1, 0, 3, 1, 0, 3, 1, 0])
>>> C
set([0, 1, 3])
>>> D = set() # conjunto vazio
>>> D
set([])Aten
ção!
{} não é u
m conju
nto vazio
!
Operações com conjuntos
Conjuntos - adição de elementos
>>> A = {3, 0, 8, 9, 3}
>>> A
set([8, 9, 3, 0])
>>> A.add(10) # adiciona 10.
>>> A.add(8) # não adiciona, pois A já tem 8.
>>> A
set([8, 9, 10, 3, 0])
Conjuntos - remoção de elementos
>>> B = {29, 12, 53, 52, 20, 11}
>>> B.remove(29)
>>> B.remove(53)
>>> B
set([11, 12, 52, 20])
>>> B.remove(53)
KeyError: 53
>>> B.discard(20)
>>> B.discard(53) # nao da erro!
>>> B
set([11, 12, 52])
Conjuntos - remoção de elementos
>>> C = {10, 30, 20, 42}
>>> C.pop()
42
>>> C.pop()
20
>>> C
set([10, 30])
>>> C.pop()
10
>>> C.pop()
30
>>> C.pop()
KeyError: 'pop from an empty set'
Conjuntos - união
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> C = A.union(B)
>>> C
set([0, 1, 2, 3, 4, 5, 8, 9])
>>> C = A|B
>>> C
set([0, 1, 2, 3, 4, 5, 8, 9])
Conjuntos - interseção
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> C = A.intersection(B)
>>> C
set([8, 9])
>>> C = A&B
>>> C
set([8, 9])
Conjuntos - diferença
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> A.difference(B)
set([0, 3])
>>> A-B
set([0, 3])
>>> B-A
set([1, 2, 4, 5])
Conjuntos - outras operações
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> 9 in A
True
>>> 10 in B
False
>>> 20 not in A
True
>>> 20 not in B
True
>>> A.clear()
>>> A
set([])
Conjuntos - outras operações
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> C = {9, 0}
>>> C.issubset(A)
True
>>> C.issubset(B)
False
>>> C <= A # equivalente a C.issubset(A)
True
>>> C < B
False
Conjuntos - outras operações
>>> A = {3, 0, 8, 9}
>>> B = {9, 8, 5, 4, 2, 1}
>>> C = {9, 0}
>>> A.issuperset(C)
True
>>> B.issuperset(C)
False
>>> A >= C # equivalente a A.issuperset(C)
True
>>> B > C
False
Conjuntos - outras operações
...
A = {3, 8, 7, 4, 3, 8, 7}
for x in A:
turtle.write(x, font=('Arial', 20, 'normal'))
turtle.forward(50)
...
Exercício
Exercício
def pontos_retangulo(x0, y0, x1, y1):
'''Retorna um conjunto de vertices no
retangulo de vertices x0, y0, x1, y1'''
res = set()
for x in range(x0, x1+1):
for y in range(y0, y1+1):
res.add( (x, y) )
return res
Exercício
def desenha_pontos(P, cor, s):
'''Desenha os pontos de P, usando a cor
e escala s especificados.'''
turtle.up()
for x, y in P:
turtle.goto(s*x, s*y)
turtle.dot(10, cor)
Exercício
...
turtle.speed('fastest')
turtle.hideturtle()
turtle.tracer(0)
A = pontos_retangulo(-20, -10, 10, 5)
B = pontos_retangulo(4, -20, 20, 10)
desenha_pontos(A, 'red', 10)
desenha_pontos(B, 'blue', 10)
desenha_pontos(A&B, 'black', 10)
turtle.update()
turtle.done()
Agenda telefônica
agenda = [('Pedin', '948253747'), ('Zezin', '988673737'), ...
... ('Zefinha', '998822331'), ...]
def telefone(agenda, nome):
'''Encontra o telefone de uma pessoa na agenda.'''
for pessoa, telefone in agenda:
if pessoa == nome:
return telefoneQUANTO TRABALHO...
Dicionário
Dicionários
{chave1: valor1, chave2: valor2,...}
Dicionários
>>> A = {5:2, 4:'casa', 'parque':'dinossauro'}
>>> A
{'parque': 'dinossauro', 4: 'casa', 5: 2}
>>> A[5]
2
>>> A[4]
'casa'
>>> A['parque']
'dinossauro'
>>> A[0]
KeyError: 0
Dicionários
>>> A = {} # dicionario vazio!
>>> A
>>> A[4]
KeyError: 4
>>> A[4] = 'limonada'
>>> A[2000] = 'suco de caju'
>>> A
{2000: 'suco de caju', 4: 'limonada'}
>>> A[4.2] = 100
>>> A['trololo'] = 'yeyeyeyeye'
>>> A{2000: 'suco de caju', 'trololo': 'yeyeyeyeye', 4.2: 100, 4: 'limonada'}
>>> A[4] = 'agua com gas'
>>> A{2000: 'suco de caju', 'trololo': 'yeyeyeyeye', 4.2: 100, 4: 'agua com gas'}
Dicionários
>>> A = {}
>>> A[5] = [4, 5, 6]
>>> L = [3, 1, 2]
>>> Q = (3, 1, 2)
>>> A[L] = 10
TypeError: unhashable type: 'list'
>>> A[Q] = 10 # OK
>>> A
{5: [4, 5, 6], (3, 1, 2): 10}
Agenda telefônica
agenda = {'Pedin':'948253747', 'Zezin':'988673737', ...
... 'Zefinha':'998822331', ...}
telefone = agenda['Zezin']
Operações com dicionários
Dicionários - operações
>>> A = {2:'macaco', 5:'cachaca', 'nome':'mariquinha'}
>>> A.keys()
[2, 5, 'nome']
>>> A.values()
['macaco', 'cachaca', 'mariquinha']
>>> A.items()
[(2, 'macaco'), (5, 'cachaca'), ('nome', 'mariquinha')]
>>> del A['nome']
>>> A
{2: 'macaco', 5: 'cachaca'}
>>> len(A)
2
Dicionários - operações
>>> A = {2:'macaco', 5:'cachaca', 'nome':'mariquinha'}
>>> 2 in A
True
>>> 5 in A
True
>>> 'macaco' in A
False
>>> A.clear()
>>> A
{}
Dicionários
Dicionários são iteráveis
A = {(100, 20):'trave', (30, 40):'bola', (-100, -50):'cone'}
for p in A:
turtle.goto(p)
turtle.write(A[p])
Dicionários
Podemos iterar também fazendo:
A = {(100, 20):'trave', (30, 40):'bola', (-100, -50):'cone'}
for p in A.keys():
turtle.goto(p)
turtle.write(A[p])
Dicionários
Podemos iterar também fazendo:
A = {(100, 20):'trave', (30, 40):'bola', (-100, -50):'cone'}
for p, v in A.items():
turtle.goto(p)
turtle.write(v)
Exercício
>>> conta_letras('glu glu ie ie')
{' ': 3, 'e': 2, 'g': 2, 'i': 2, 'l': 2, 'u': 2}
Solução 1
def conta_letras(frase):
'''Conta quantas vezes cada letra da frase aparece.'''
D = {}
for x in frase:
if x not in D:
D[x] = frase.count(x)
return D
Solução 2
def conta_letras(frase):
'''Conta quantas vezes cada letra da frase aparece.'''
D = {}
for x in frase:
if x not in D:
D[x] = 1
else:
D[x] += 1
return D
Solução 3
def conta_letras(frase):
'''Conta quantas vezes cada letra da frase aparece.'''
letras = set(frase)
D = {}
for x in letras:
D[x] = frase.count(x)
return D