Escolar Documentos
Profissional Documentos
Cultura Documentos
Publicado em 19/05/2022
Esse problema é mais simples do que muitos outros que já fizemos, mas
vamos
resolvê-lo agora com uma atenção especial à representação dos
dados. Queremos
representar as notas de um aluno, então vamos
armazená-las em um lista de notas.
NUMERO_EXERCICIOS = 10
def ler_lista_notas(n):
lista_notas = []
for _ in range(n):
nota = float(input())
lista_notas.append(nota)
return lista_notas
soma = 0.0
if i != indice_excluida:
return media
def obter_indice_menor(lista_notas):
indice_menor = 0
menor_nota = lista_notas[0]
menor_nota = nota
indice_menor = i
return indice_menor
def main():
lista_notas = ler_lista_notas(NUMERO_EXERCICIOS)
indice_menor = obter_indice_menor(lista_notas)
main()
Leia esse programa com atenção. Estude o que cada função faz. Não
continue lendo
este texto até que tenha entendido e internalizado esse
programa.
É claro que uma professora não gostaria de usar esse programa, porque
ela não tem
apenas um estudante. É bem possível que sua turma tenha
100 estudantes. Então
ela teria que executar esse programa 100 vezes e
tomar nota em um papel da média
de cada um. Pior, pode ser que a
professora decida que irá excluir a nota do mesmo
exercício para a
turma inteira, então esse programa já não seria mais útil. Vejamos
por
que:
NUMERO_EXERCICIOS = 10
NUMERO_ESTUDANTES = 100
def ler_lista_notas(n):
lista notas = []
sta_ otas []
for _ in range(n):
nota = float(input())
lista_notas.append(nota)
return lista_notas
tabela_notas = []
for _ in range(m):
tabela_notas.append(lista_notas)
return tabela_notas
def calcular_lista_medias(tabela_notas):
lista_medias = []
for j in range(n):
soma = 0
for i in range(m):
media = soma / m
lista_medias.append(media)
return lista_medias
def obter_indice_menor(lista_notas):
indice_menor = 0
menor_nota = lista_notas[0]
menor_nota = nota
indice_menor = i
return indice_menor
soma = 0.0
if i != indice_excluida:
return media
def main():
indice_menor = obter_indice_menor(lista_medias)
for i in range(NUMERO_ESTUDANTES):
media = calcular_media_excluida(tabela_notas[i], indice_men
print(f"O estudante {i} tem média {media}")
main()
lista_notas = tabela_notas[i]
Matrizes
A principal estrutura de dados que criamos no exemplo anterior foi uma
lista de lista
de escalares! Se quisermos, podemos escrever a nossa
tabela de notas como uma
tabela de fato. A variável a seguir
representa três alunos, cada um com quatro notas.
>>> tabela_notas = [
... ]
>>> destabela_notas = [
>>> ]
>>> notas_questoes = [
... ]
>>> tabela_notas[0][1]
7.6
2.5
Operações em matrizes
Na Álgebra Linear é comum realizar operações com matrizes, como soma,
produto
por escalar, produto de matrizes, etc. Como Python não entende
o conceito de
matriz, tampouco entende como realizar essas operações.
Por isso, temos de
implementar cada uma delas. Vamos implementar
a operação de soma e fazer uma
função para testá-la.
m len(a)
m = len(a)
n = len(a[0])
soma = []
for i in range(m):
linha = []
soma.append(linha)
for j in range(n):
linha.append(celula)
return soma
def main():
a = [
b = [
soma = somar_matrizes(a, b)
print(soma)
main()
C = A × B
Dessa vez, vamos primeiro criar uma matriz com zeros C de dimensões
m × n e
depois preenchê-la com os valores corretos.
m = len(A)
l = len(B)
n = len(B[0])
for i in range(m):
for j in range(n):
C[i][j] = calcular_produto_interno(A, B, i, j)
return C
Representação de matrizes
Você deve ter percebido que alguns nomes de variáveis são recorrentes.
Isso é
intencional para manter a consistência com a notação normalmente
utilizada em
Álgebra Linear. Assim,
Uma última palavrinha sobre matrizes em Python: elas não foram feitas
pensando
em manipular grandes volumes de dados numéricos, nem para
realizar operações
algébricas facilmente. Por esse motivo, quando
precisamos de fato manipular e
realizar operações sobre matrizes,
normalmente utilizamos uma biblioteca. A mais
popular para essa
finalidade é a NumPy. Nesta disciplina não
iremos utilizá-la, já que
para isso seria necessário entender bem
programação orientada a objetos (o que
não faremos!). Por esse motivo,
a não ser que você precise, deixe para estudar essa
e outras
bibliotecas mais tarde.
Arquivos
Agora que já sabemos trabalhar com coleções de dados um pouco mais
complexas
do que listas de números ou listas de strings, deve ficar
mais latente a necessidade
de armazenar dados de maneira permanente. A
estratégia de sempre digitar os
dados pelo teclado não funciona.
Assim, queremos distinguir a memória do
computador em
Exemplo Tipo
arq.txt texto simples
arq.svg imagem vetorial
arq.c código-fonte em C
arq.py código-fonte em Python
arq.html página da Internet
arq.exe executável
/home/maria/imagem.jpg
/home/pedro/arquivo.txt
/home/pedro/mc102/lab.c
../maria/imagem.jpg
arquivo.txt
mc102/lab.py
1. Arquivos de texto
2. Arquivos binários
Manipulando arquivos
Em seguida, vamos estudar como realizar as principais operações para
maniputar
arquivos. Para aprender mais detalhes, você deve ler a seção
7 sobre entrada e
saída e sobre arquivos do
tutorial
Python.
>>> arquivo
>>> arquivo.fileno()
arquivo = open("palavras.txt")
# ...
# ...
arquivo.close()
# ...
# ...
123456
29/2/2000
Maria Viva
...
>>> ra
'123456\n'
>>> nome_completo
>>> nascimento
'29/2/2000 \n'
>>> nome_mae
'Maria Viva'
>>> nome_completo.strip()
Pode ser que você queira ler as linhas de um arquivo, mas não conheça
quantas
linhas deverá ler até que o arquivo termine. Para isso, Python
permite percorrer as
linhas do arquivo como se ele fosse uma lista de
strings — com a diferença crucial
de que não podemos voltar nem acessar
uma linha com colchetes. Já podemos ler
nosso arquivo de palavras.
def ler_aquivo_palavras(nome_arquivo):
"""
"""
palavras = []
palavra = linha.strip()
palavras.append(palavra)
return palavras
def separar_plurais(palavras):
"""
"""
plurais = []
if palavra[-1] == "s":
plurais.append(palavra)
return plurais
"""
"""
diferenca = []
diferenca.append(valor)
return diferenca
def main():
palavras = ler_aquivo_palavras("palavras.txt")
plurais = separar_plurais(palavras)
print(plurais)
print(singulares)
# criar_arquivo_palavras("plural.txt", plurais)
# criar_arquivo_palavras("singular.txt", singulares)
main()
feijão
arroz
limões
batata
beterrabas
pizzas
lasanha quatro-queijos
rapadura
O modo que iremos usar para nossa função é o "w" , o que esse modo significa é o
seguinte:
Tome cuidado ao usar o modo de escrita "w" , já que ele pode levar a
perda de
dados. Pode ser necessário verificar se o arquivo já existe,
ou renomeá-lo se já
existir. Para isso, procure no módulo os as
funções adequadas, como os.rename
ou os.remove .
Para entender o significado de cada modo disponível, consulte a
documentação de
open . Aqui, só precisamos escrever uma linha por
vez. Fazemos isso com a função
write , que está disponível para os
arquivos.
"""
"""
arquivo.write(linha)
Repare que para escrever uma linha, precisamos adicionar uma quebra de
linha no
final de cada linha manualmente. Se não fizermos isso, então
todas as palavras
apareceriam coladas. Se preferir, também é possível
utilizar a função print , que
irá escrever no arquivo da mesma maneira
que escreveria na tela. A vantagem é que
print converte a variável para
uma string automaticamente.
Nesta disciplina não usamos ainda mensagens de erro, mas elas podem
ser úteis
para distinguir a saída do seu programa de uma mensagem,
particularmente uma
mensagem de quando estamos testando o nosso
programa.
OEAIAGBOOL
IIWAXHHLHN
PADUCAPNOC
ZBMOUIZSAS
OXEZOKOEUA
QCRMAAPAOH
DHOMEMTUFO
HOOAJCMVGM
NMFOANGMAE
JEVJVCCSNM
HOMEM
OEAIAGBOOL
IIWAXHHLHN
PADUCAPNOC
ZBMOUIZSAS
OXEZOKOEUA
QCRMAAPAOH
DHOMEMTUFO
HOOAJCMVGM
NMFOANGMAE
JEVJVCCSNM
def ler_arquivo_entrada(nome_arquivo):
palavra = arquivo.readline().strip()
matriz = []
for linha in arquivo:
matriz.append(linha.strip())
m = len(matriz)
n = len(matriz[0])
ocorrencias = 0
for i in range(m):
for j in range(n):
ocorrencias += 1
ocorrencias += 1
return ocorrencias
def main():
1. ocorre ← T rue
2. para cada índice k de palavra:
compare os caracteres palavra[k] com matriz[i][j + k]
se forem diferentes, faça ocorre ← F alse
3. devolva ocorre
ocorre = True
tamanho = len(palavra)
for k in range(tamanho):
ocorre = False
return ocorre
return False
main()
import sys
# ...
ocorre = True
tamanho = len(palavra)
for k in range(tamanho):
ocorre = False
return ocorre
....
main()
Se você contar, irá descobrir que a matriz tem apenas 10 colunas, mas
matriz[0]
[10] se refere à décima-primeira coluna da primeira linha,
que não existe.
Encontramos o erro. A vantagem de mostrar mensagens de
debug na saída de erro
é que, enquanto escrevemos o programa, podemos
omitir essas mensagens, sem
precisar remover as instruções do código.
Depois de modificada a função para tentar
corrigir o erro, fazemos o
seguinte: