Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Rodrigo de Toledo
(adaptao do original do prof. Claudio Esperana)
Estruturas de dados
Maneira de organizar dados de maneira a facilitar seu acesso Algumas formas so clssicas:
Listas em Python
So variveis que podem conter simultaneamente mais de um
Listas em Python
Entretanto, h diferenas importantes entre listas e
strings
Seqncia genrica X de seqncia de caracteres Elementos de listas podem ser alterados individualmente mas os de strings, no
Podem ser usadas para implementar estruturas de dados mais complexas como matrizes e rvores, por exemplo
Inicializando listas
No possvel atribuir a uma posio inexistente de
uma lista
>>> vetor = [] >>> vetor [0] = 1 Traceback (most recent call last): File "<pyshell#21>", line 1, in -toplevelvetor [0] = 1 IndexError: list assignment index out of range
Exemplo
Faa um programa que leia 15 nmeros e os imprima e ordem
Exerccios
1. 2.
3.
Faa um programa que leia as notas dos 50 alunos de uma turma e diga ao final quais notas ficaram acima da mdia da turma. (vetor contador): Faa um programa que leia diversos votos para 100 candidatos (votos entre 0 e 99) e ao final diga qual foi o candidato vencedor (considere que no h empate). Os votos terminam com um nmero invlido (negativo ou maior que 99). Obs: Altere o programa de modo a considerar a possibilidade de empates. Escreva um programa que leia uma lista de x inteiros seguida de uma lista de y caracteres, criando uma terceira lista que intercale os elementos das duas listas lidas
obs1: pergunte ao usurio x e y no incio obs2: a lista que for maior dever ser repetida sequencialmente ao final Exemplo: x=3, y=5, l1 = [1,2,3] e l2 = ['a','b','c','d','e'], o programa deve computar a lista [1,'a',2,'b',3,'c','d','e']
4.
DESAFIO: Faa um programa que leia as informaes dos 70 produtos de uma farmcia (cdigo, preo e quantidade em estoque). Em seguida permita ao usurio entrar com cdigo e quantidade que deseja comprar do produto at que seja entrado o cdigo 1. Para cada cdigo entrado diminua a quantidade do estoque (caso tenha o suficiente) se o cdigo for vlido, seno imprima mensagem de erro. Ao final da compra, diga o total a ser pago!
Sobre o desafio...
Para realizar o desafio anterior, entender os
conceitos de:
Outros exerccios
1.
Faa um programa que leia um conjunto de notas (nota - tipo inteiro) de 20 alunos (uma nota por aluno) e imprima quantas notas iguais a 0, iguais a 1, iguais a 2, ... e iguais a 10.
2.
Faa um programa que leia 100 valores reais da entrada e identifique o valor mais prximo da mdia. Exemplo supondo quatro valores: 2.5 7.5 10.0 4.0 mdia = 6.0 (no deve ser impresso) valor mais prximo da mdia = 7.5 (resultado a ser impresso)
Faa um programa que conte a quantidade de cada uma das letras (sem levar em conta as maisculas e minsculas) digitadas em um texto (vetor de 26 posies).
3.
qual deve ser o tamanho da lista (exemplo: leia 50 notas leia notas at uma negativa).
Nesse caso a lista deve ir crescendo (ou diminuindo)
len: para saber tamanho do vetor del: para retirar um elemento da lista append: para acrescentar
Deletando elementos
O operador del pode ser usado para remover
len (lista)
max (lista)
min e max
Na verdade, min e max podem ser usados tambm com
Mtodo APPEND
append(elemento)
Acrescenta o elemento no fim da lista Observe que a operao altera a lista, e no simplesmente retorna uma lista modificada Ex.:
>>> >>> >>> [1, lista = [1,2] lista.append(3) lista 2, 3]
Exemplo
Leia uma sequncia de nmeros INTEIROS positivos terminada por
um nmero NEGATIVO, guardando-os num vetor. Remova do vetor os nmeros PARES. Ao final, imprima o vetor!
lista = [] num = input() while (num>=0): lista.append(num) num=input() i=0 while i<len(lista): if lista[i]%2==0: del lista[i] else: i+=1
print lista
Exerccios
1.
Inicialmente, leia diversos nmeros inteiros entrados pelo dono da casa de aposta, guardando numa lista.
Termina com nmero negativo Caso acerte um dos nmeros da lista, informe do acerto e diga quantos nmeros faltam acertar. O programa termina caso o apostador erre 10 vezes ou at ele acertar todos os nmeros.
Em seguida o apostador poder entrar com vrios nmeros para verificar o seu acerto.
2. 3.
Altere o programa anterior para guardar os nmeros sem que haja repetio, ou seja, caso o dono da casa de apostas tenha entrado com um nmero que j exista, ignore-o. DESAFIO: Faa um programa que mantenha o estoque do hortifruti Leguminosas. Apresente um menu com as seguintes opes: (a) inserir novos produtos (b) acrescentar no estoque (c) baixar do estoque (d) listar produtos com estoque baixo (e) listar estoque de todos os produtos (f) sair!
Para cada produto inserido, ler nome, cdigo e quantidade inicial Para acrescentar ou baixar do estoque, ler cdigo e quantidade Quando der baixa no estoque, verificar se no est negativo, nesse caso, avisar ao usurio que sero baixados apenas a quantidade atual no estoque (zerando esse produto) Estoque baixo significa que h apenas 5 ou menos produtos
Fatias...
seqncia (uma lista ou uma string, por exemplo) A atribuio substitui os elementos da fatia pelos da seqncia (INSERO)
>>> lista = [1, 'y', ['ab', 'CD']] >>> lista [1:1] = ['z'] >>> lista [1, 'z', 'y', ['ab', 'CD']] >>> lista [1:3] = [['x']] >>> lista [1, ['x'], ['ab', 'CD']] >>> lista [1:-1]= [2,3,4] >>> lista [1, 2, 3, 4, ['ab', 'CD']] >>> lista [:2] = 'xyz' >>> lista ['x', 'y', 'z', 3, 4, ['ab', 'CD']]
outra:
>>> var1 = ['a', 'b', 'c', 'd', 'x'] >>> var2 = [6,7] >>> var1[2:2] = var2 >>> var1 ['a', 'b', 6, 7, 'c', 'd', 'x']
Incrementos em Fatias
possvel usar um terceiro nmero na notao de
Default 1 , ou seja, toma os elementos de um em um do menor para o maior ndice Pode-se usar qualquer nmero inteiro diferente de 0
a[0:10:2] retorna uma lista com os 10 primeiros elementos de a tomados de 2 em 2 (5 elementos, no mximo) a[5:0:-1] retorna uma lista com os 5 primeiros elementos de a tomados da direita para a esquerda
a partir da 2.3
Incrementos em Fatias
Exemplo >>> a = ['a', 2, 3, 'd', 'x']
Incrementos em Fatias
Se um incremento de fatia diferente de 1, uma
Traceback (most recent call last): File "<pyshell#17>", line 1, in -toplevell [0::2] = [6,7] ValueError: attempt to assign sequence of size 2 to extended slice of size 3
OBS.: A notao acima permite passar um argumento sem especificar os anteriores, mas poderamos ter escrito:
>>> >>> >>> [9, lista = [9,8,7,1,4,2] lista.sort(None,None,True) lista 8, 7, 4, 2, 1]
Exerccio
Em uma universidade a fila do bandejo funciona da seguinte
forma:
As filas comeam a se formar pela manh. At s 11h, horrio de abertura do restaurante, alunos podem guardar lugar para no mximo 3 outros colegas, depois disso a fila congelada.
Faa um programa que: Leia uma fila de alunos (matrcula) at que seja entrada uma matrcula negativa (s 11h). Imprima a fila inicial. Para cada aluno, pergunte para quantas pessoas ele est guardando lugar na fila e se ele ir continuar na fila (para esta pergunta ele dever responder S ou N). Leia a matrcula dos alunos a serem inseridos e remova aqueles que vo sair da fila. Imprima a fila final. Use uma nica fila!!!
for in range
Operador in
Permite saber se um elemento pertence a uma lista Serve tambm para strings Ex.:
>>> lista = [1, 'a', 'bc'] >>> 1 in lista True >>> 2 in lista False >>> 'b' in lista False >>> 'b' in lista[2] True >>> 'bc' in 'abcd' True
A funo range
Retorna uma progresso aritmtica de inteiros numa lista
Forma geral: range (incio, parada, incremento) incio (opcional) o primeiro valor a ser gerado (default: 0) parada o limite da progresso: a progresso termina no ltimo valor antes de parada incremento (opcional) o passo da progresso (default:1) Ex.:
>>> [0, >>> [2, >>> [5, range(3) 1, 2] range(2,5,2) 4] range(5,2,-2) 3]
>>> range (2,5,-2) [] >>> range (5,2,2) []
Os comandos so repetidos para cada valor de lista Durante a repetio, var possui o valor corrente da lista
lista de iterao
Ex.:
>>>for i in range(1,7): print i, 1 2 3 4 5 6
Exemplo
Condio pre-determinada:
Exerccios
Faa um programa que leia cdigo de produto, preo
e quantidade vendida de 1881 produtos e informe os 10 produtos (cdigo e preo) responsveis pelo maior faturamento.
Modifique o programa anterior para que a leitura
termine com cdigo invlido (cdigo vlido varia de 10000 at 99999, inclusive os extremos). Ou seja, no necessariamente haver 1881 produtos.
Exerccio
Faa um programa para cadastrar os alunos da turma de Python. O programa dever apresentar um
menu de opes ao usurio contendo: a. incluso b. excluso c. listagem geral d. listagem acima nota e. listar aluno f. trocar de nota g. fim Regras: Para cadastrar um aluno, dever ser realizada a leitura de sua matrcula e sua nota. Para excluir um aluno, apenas sua matrcula dever ser pedida. A listagem geral dever listar todos os alunos matriculados. A listagem por nota dever listar todos os alunos acima de uma determinada nota. Listar um aluno significa mostrar a nota de um aluno. Para trocar a nota de um aluno, necessrio apenas a sua matricula e sua nova nota. Observaes:
A listagem dever ser mantida sempre ordenada (dica: insira ordenado durante a leitura). GRANDE DESAFIO: crie uma opo a mais que seria listar alunos por ordem de notas. Crie um vetor auxiliar contendo os ndices dos vetores alunos e notas, para que no seja necessrio reordenar os vetores a cada listagem de notas e alunos.
Exerccio UPA
Faa um programa para controlar o atendimento da emergncia de uma UPA
As seguintes regras de precedncia devem ser respeitadas toda vez que h um mdico disponvel:
Todo caso urgente tem precedncia mxima e sero atendidos em ordem de chegada. Caso no haja ningum na fila de urgncia:
Pessoas acima de 65 anos devem ser atendidas, a prioridade deve ser por idade (o mais velho primeiro). Crianas de at 8 anos por ordem de chegada. Mas ateno, enquanto houver mais de 5 crianas, ento elas tm precedncia em relao aos idosos (para evitar tumulto). Demais pessoas devem ser atendidas em ordem de chegada.
O seu programa deve manter quatro filas (urgentes, idosos, crianas e demais). As lista guardam a identidade dos pacientes (valor inteiro). No caso dos idosos, deve-se usar uma lista auxiliar com as idades. O programa dever manter o seguinte menu:
Exerccio nomes
Faa um programa que leia uma srie de nomes completos (termina quando for
inserido um nome vazio). Em seguida, o programa dever dizer para cada primeiro nome diferente, quantas vezes ele apareceu.
Ex:
Entrada:
OTAVIO HENRIQUE FLAESCHEN OLIVEIRA PAULO EDUARDO ANDRADE RODRIGUES DA SILVA PAULO FELIPE NUNES DE LIMA OTAVIO SECKLER MACHADO MATHEUS SOARES DA SILVA NICOLAS D AURIA OCTAVIO LACERDA DE ALMEIDA PAULA ALVES BESSA PAULO RICARDO MORAIS SHOR MATHEUS GALLUZZI MALAFAIA
Sada:
MATHEUS 2 NICOLAS 1 OCTAVIO 1 OTAVIO 2 PAULA 1 PAULO 3
Exemplo: notas[4][3]=7.5;
Matrizes
Exemplo: Calcule as mdias das turmas de uma escola e, ao final,
as notas de todas as turmas, e que pudesse ser referenciada pelo conjunto, ou pelo conjunto das notas de uma turma, ou por cada nota individualmente:
Notas
0 1 2 3 5,0 7,3 5,7 2,4 3,0 2,2 1,8 4,9 8,0 5,6 6,4 6,0 .......... .......... ........... .......... 9,5 8,0 5,9 3,8
10,0
0
9,5
1
3,0
2
..........
.........
4,0
49
Exemplo: notas[4][3]=7.5;
Matrizes
Listas podem ser usadas para guardar matrizes Uma matriz um tipo de dado usado para representar
uma certa quantidade de valores homogneos de natureza bidimensional (na verdade, podem ser multidimensionais). Podemos imaginar uma matriz como sendo uma lista, onde cada elemento dessa lista tambm uma lista.
Logo, para referenciarmos um elemento em uma matriz
precisamos de dois ndices: o primeiro para selecionar a lista (linha) e o segundo para selecionar o elemento da lista previamente selecionada (coluna).
Exemplo:
notas[4][3]=7.5
Matrizes
Percorrendo matrizes:
So necessrias duas estruturas de repetio aninhadas (while ou for) Por exemplo, a estrutura de repetio mais externa percorrer as linhas da matriz, enquanto a estrutura de repetio mais interna percorrer os elementos (colunas) da linha corrente.
Exemplo: notas = [[5,6,7],[9,8,7],[10,9,8]] for i in range(3): for j in range (3) : print notas[i][j]
Por exemplo, podemos criar uma matriz-identidade de 3x3 com o cdigo: m = [] for i in range(3): m.append([0]*3) m[i][i]=1
Exerccio
Escreva um programa para computar o produto de duas matrizes m1
e m2. Seu programa deve comear lendo os tamanhos das matrizes e verificando se so de tamanhos compatveis para multiplicao. Em seguida faa a leitura preechendo os valores das matrizes m1 e m2. Finalmente faa o clculo matemtico, imprimindo a matriz final no formato tradicional (linhas e colunas alinhadas, use /t).
Exerccios Matriz
Uma pista de Kart permite 10 voltas para cada um dos 6 corredores.
Faa um programa que leia todos os tempos em segundos e guarde em uma matriz 6 x 10. Ao final diga:
De quem foi a melhor volta da prova e em que volta Classificao final em ordem (1 o campeo) Qual foi o piloto mais regular? Qual foi a volta com a mdia mais rpida?
um programa que:
Dado o total de livros da editora (lido no incio), leia para cada livro da editora, o nome dos autores.
Cada livro pode ter mais de um autor Para facilitar, basta guardar o primeiro nome Lista terminada por linha vazia No precisa ler o nome do livro
Mantenha uma lista de autores e quantidade de livros escritos. Mantenha uma matriz de inteiros com a relao de autorias. Observe que essa matriz simtrica e sua diagonal igual a lista do item anterior. Ao final, imprima:
Quais autores escreveram mais livros juntos Dado um autor, com quais autores ele nunca escreveu
inicializar uma matriz 6x6 com letras minsculas em ordem alfabtica por coluna (tabela 1) (caso no haja mais letras minsculas para preencher a matriz, devese voltar letra a). A seguir o programa dever ler o conjunto de informaes para montar o caa-palavras composto por:
Uma palavra de at 6 caracteres A linha inicial A coluna inicial O sentido (1=p/ cima; 2=p/ baixo; 3=diagonal p/Nordeste; 4=diagonal p/Suldeste; 5=p/ esquerda; 6=p/direita, 7=diagonal p/Noroeste, 8= diagonal p/Sudoeste)
A leitura das palavras termina com uma palavra vazia. Para cada palavra lida, o
programa dever coloc-la na matriz de acordo com o sentido. Caso a palavra no caiba na posio e direo definida, esta dever ser ignorada e uma mensagem de erro dever ser emitida. (crie uma funo para cada sentido)
Exemplo:
Exerccios
Escreva um programa para computar o tringulo de
Lembre-se que o elemento na i-sima linha e j-sima coluna do tringulo de Pascal contm o nmero de combinaes de i elementos j a j O tringulo deve ser posto numa lista onde o i-simo elemento uma lista com a i-sima linha do tringulo Ex:
Quantas linhas? 7 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1]]