Introdução à Computação - aulas 13 e 14-

Documentos relacionados
MCG126 Programação de Computadores II

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

Introdução à Computação

Arquivos O QUE É, COMO LER E MANIPULAR

Universidade Federal do ABC MCTA Programação Estruturada 2018.Q3

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Introdução à Computação - aulas 01 e 02 -

Lista 2 TP060. Exercícios Vetores

MAC2166 Introdução à Computação

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2

Programação das Aulas

Computação 1 - Python Aula 12 - Teórica: Interação com o usuário e programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 25

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

Computação 1 - Python Aula 11 - Teórica. programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 29

Programação científica C++

Python. Resumo e Exercícios P2 Parte 1

Laboratório de Programação A Exercícios sobre vetores e matrizes

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

1 Resumo: Matrizes. 2.1 Como declarar uma matriz IME/USP. Departamento de Ciência da Computação

Algoritmos e Programação

Linguagem C: Introdução

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Para começar... Strings. Para começar... Strings. Exemplo...

3.1 - Funções para manipular dados de entrada e saída padrão

MAC2166 Introdução à Computação

Estruturas de dados funcionais

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

Programação de Computadores II

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

imprimir seus quadrados.

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

Introdução à Programação Aula 3 Primeiros programas

Exercícios: Vetores e Matrizes

Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento

Lista de Exercícios Repetição Prof: Yuri Frota

Introdução ao Fortran 90. Aula 3

Laços de repetição for, while, do-while

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python

Algoritmos e Programação

Introdução à Programação

Preparação para Maratona de Informática PYTHON

Aula 06 Introdução à Programação Matrizes

24/09/2014. Prof. André Backes

UNIFEI - UNIVERSIDADE FEDERAL DE ITAJUBÁ PROVA DE CÁLCULO 1

Processamento da Informação Teoria. Exercícios sobre strings

Aula 28: Arquivos de texto

Python: Tuplas e Strings. Claudio Esperança

Material Didático Proposto

Programação Estruturada Comandos Condicionais (Decisão) Operadores Relacionais

Estruturas de Dados em Python

Programação I Aula 3 Primeiros programas

Estruturas de controlo condicional

MCG126 Programação de Computadores II

INFORMÁTICA PARA ENGENHARIA LISTAS E VETORES

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

Seleção Múltipla Laços (while, do-while, for) AULA 05

DURAÇÃO DA PROVA: 2 horas

Linguagem C Princípios Básicos (parte 1)

MAC2166 Introdução à Computação

Questão 1: O histograma deve ser: [0, 1, 4, 2, 0, 3, 0,, 0, 2] Exemplo: Para a matriz

Algoritmos e Programação

Ficheiros de Valores Separados por Vírgulas (CSV)

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

Transcrição:

MAC2166 Introdução à Computação - aulas 13 e 14- Mauro Cesar Bernardes 29/Abril/2014

Agenda Strings Manipulação de Arquivos Matrizes...

Strings

Strings Uma string é uma sequencia de caracteres Utiliza aspas ' ' ou " " o sinal + concatena strings Uma string pode ser composta apenas de números (e ainda será uma string) Para converter números em string utilize str() Para converter uma string em números utilize int() ou float()

e000.py

Strings É possível o acesso a qualquer caractere de um string utilizando índices b a n a n a 0 1 2 3 4 5

Strings Cuidado com os índices!! b a n a n a 0 1 2 3 4 5 Índice Inválido

Comando for O comando for, utilizado para repetições (loop) em Python, também é útil para percorrer strings. Ex.: texto="testando um string" for caracter in texto: print (caracter) A cada iteração (loop), a variável caractere receberá um caractere do string armazenado em texto, sequencialmente. e0.py

Comando for O comando for, utilizado para repetições (loop) em Python, também é útil para percorrer strings. Ex.: texto="testando um string" for i in range(len(texto)): print (texto[i]) A cada iteração (loop), a variável caractere receberá um caractere do string armazenado em texto, sequencialmente. e00.py

Strings são imutáveis Analise o trecho a seguir: texto="testando um string." texto[0]="t" for i in range(len(texto)): print (texto[i]) ERRO!! Strings são imutáveis! e00.py

Utilizando in como um operador Pode-se utilizar in para verificar se um string está contido em outro string O in é utilizado em uma expressão lógica e retorna True ou False (pode ser utilizado em uma estrutura com if)

Biblioteca string https://docs.python.org/3.3/library/string.html

Alguns métodos para manipular Strings >>> test = 'This is just a simple string.' >>> len(test) 29 >>> test = test.replace('simple', 'short') >>> test 'This is just a short string.' >>> test.count('r') 2 >>> test.find('r') 18 >>> test[18] 'r' >>> test.upper() 'THIS IS JUST A SHORT STRING.' >>> test.lower() 'this is just a short string.'

Removendo whitespace Dependendo da aplicação, precisaremos remover whitespace no início ou no fim de um string lstrip() e rstrip()removem whitespace à direita ou à esquerda strip() Remove whitespace do início e do final

Arquivos

Manipulação de arquivos: a função open() A função open() serve para obter uma referência a um objeto do tipo arquivo. Assumindo que temos um arquivo chamado arquivo.txt, contendo um trecho de um livro famoso, podemos codificar o seguinte exemplo: >>> a = open("arquivo.txt") >>> print a <open file 'arquivo.txt', mode 'r' at 0x820b8c8> Uma vez obtida a referência ao objeto arquivo, podemos usar métodos específicos como o read(), que retorna o conteúdo do arquivo: >>> texto = a.read() >>> print texto `...Would you tell me, please, which way I ought to go from here?' `That depends a good deal on where you want to get to,' said the Cat. `I don't much care where--' said Alice. `Then it doesn't matter which way you go,' said the Cat.

Manipulação de arquivos: sintaxe da função open() O formato geral da função open é: open(nome_do_arquivo, modo) Ambos os parâmetros são strings. O modo determina a forma como o arquivo será aberto e é composto de uma ou mais letras: 'r' (ou nada) abre para leitura, 'w' abre para escrita, apagando o conteúdo já existente 'a' abre para escrita, com dados escritos acrescentados ao final do arquivo. Se um símbolo '+' for agregado ao modo, o arquivo pode ser lido e escrito simultaneamente.

Arquivo: alunos.txt

Manipulação de arquivos: métodos do objeto arquivo O objeto arquivo possui um conjunto de métodos úteis; os mais importantes são descritos abaixo. Note que o arquivo possui um conceito de posição atual: em um dado momento, operações serão realizadas com base em uma certa posição. Alguns métodos utilizam ou alteram esta posição; outros são operações globais, independentes da posição dela. read(): retorna uma string única com todo o conteúdo do arquivo. readline(): retorna a próxima linha do arquivo e incrementa a posição atual. readlines(): retorna todo o conteúdo do arquivo em uma lista, uma linha do arquivo por elemento da lista. writelines(data): escreve cada elemento string da lista data na posição atual ou ao final do arquivo, dependendo do modo de abertura. seek(n): muda a posição atual do arquivo para o valor indicado em n. close(): fecha o arquivo. Qualquer arquivo pode ser aberto e lido desta forma; experimente com esta função, abrindo alguns arquivos locais, lendo e modificando-os

Arquivo: alunos.txt Exemplos de whitespaces que podem ser removidos com o uso de rstrip ou strip ou end=""

end="" para remover o whitespace \n do final de cada linha do arquivo.

arquivo = input("nome do arquivo: ") arq = open(arquivo, 'r', encoding="utf8") nlin = 1 for linha in arq: print(nlin, ':', linha) nlin += 1 e1.py

arquivo = input("nome do arquivo: ") arq = open(arquivo, 'r', encoding="utf8") nlin = 1 for linha in arq: print(nlin, ':', linha, end="") nlin += 1

arquivo = input("nome do arquivo: ") arq = open(arquivo, 'r', encoding="utf8") nlin = 1 for linha in arq: print("%6d : %s" %(nlin, linha), end="") nlin += 1

abriu = False while not abriu: arquivo = input("nome do arquivo: ") try: arq = open(arquivo, 'r') except FileNotFoundError: print(arquivo, 'não encontrado.') else: abriu = True nlin = 1 for linha in arq: print('%6d:'%(nlin), end="") nlin += 1 e1.py

Analise o programa a seguir: def imprime(p): for caracter in p: print(caracter) palavra=input("digite uma palavra:") imprime(palavra)

Problema 5.2 a) Escreva uma função separa(texto, sep), que recebe uma frase texto e um caractere separador sep. A função "corta" o texto nos separadores, retornando uma lista com as palavras do texto. Exemplo: para o texto= ",1,,2,3," e sep =, a saída deve ser a lista: ['', '1', '', '2', '3', ''] onde '' indica uma palavra vazia (entre 2 separadores consecutivos). def separa(texto, sep): lista = [] palavra = '' for l in texto: if l == sep: lista.append(palavra) palavra = '' else: palavra += l lista.append(palavra) return lista

Problema 5.2 b) Escreva um programa que leia uma linha com palavras separadas por vírgula, e determina o comprimento da maior palavra. A linha pode conter palavras vazias. frase = input("digite palavras separadas por vírgula: ") palavras = separa(frase, ',') #função apresentada anteriormente print (palavras) if len(palavras) > 0: maxp = palavras[0] for p in palavras: print ("A palavra '%s' tem %d caracteres."%(p, len(p))) if len(p) > len(maxp): maxp = p print("> palavra é:'%s' com %d caracteres." %(maxp, len(maxp))) else: print("não achei nenhuma palavra em sua frase!")

Método split() O método split() separa a string pelos espaços. Exemplo: teste = 'oi tudo bem?' print(teste.split()) Saída: >>['oi', 'tudo', 'bem?']

Arquivo Excell salvo no formato CSV (Comma Separated Value)

Arquivo: planilha.csv

Exercício 2: Um arquivo Excell contendo uma planilha de números foi salva no formato CSV (Separado por vírgula) com o nome arqexcell.csv. Desenvolva um programa que abra o arquivo arqexcell.csv imprima a soma dos números de cada linha e a soma de todos os números do arquivo. Ao final, o programa deve imprimir também a soma total. Exemplo: para o arquivo arqexcell com: A saída deverá ser: Arqexcell.csv

import sys nome=input("forneça nome do arquivo:") try: arquivo=open(nome,'r') except IOError: print("problema na abertura do arquivo!!") sys.exit() linha=[] somatotal=0 for linhaarquivo in arquivo: linha=linhaarquivo.split(";") somalinha=0 for numero in linha: somalinha=somalinha+float(numero) somatotal=somatotal+somalinha print("soma linha=", somalinha) print("soma Total=", somatotal) arquivo.close()

PROBLEMA 5.2. Dada uma sequência de caracteres representando um texto, determinar a frequência relativa de vogais no texto. Por exemplo, no texto: "Em terra de cego quem tem um olho e caolho" essa frequência é 16/42. texto = input("digite um texto: ") nv = 0 vogais = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] for letra in texto: if letra in vogais: nv += 1 print ("Frequencia relativa = %d / %d"%(nv, len(texto)))

Dúvida na aula anterior...

Dúvida na aula anterior Apresentando o conteúdo de uma matriz: matriz=[[6,5,4],[8,7,6],[4,9,2]] for linha in matriz: for coluna in linha: print(coluna, end=" ") print() Somando um a cada elemento da matriz: matriz=[[6,5,4],[8,7,6],[4,9,2]] for linha in range(len(matriz)): for coluna in range(len(matriz[linha])): matriz[linha][coluna]+=1 print(matriz)

Matrizes

Problema 1: Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. Exemplo: A matriz é um quadrado mágico. 0 1 2 0 8 0 7 A 1 4 5 6 2 3 10 2 Dada uma matriz quadrada A nxn, verificar se A é um quadrado mágico.

def verifica (A): aux=[] #verificando linhas for i in range(len(a)): soma=0 for j in range (len(a[i])): soma=soma+a[i][j] aux.append(soma) #verificando colunas for i in range(len(a)): soma=0 for j in range (len(a[i])): soma=soma+a[j][i] aux.append(soma) #verificando diagonal principal soma=0 for i in range(len(a)): soma=soma+a[i][i] aux.append(soma) #verificando diagonal secundária soma=0 c=1 for i in range(len(a)): soma=soma+a[i][len(a)-c] c=c+1 aux.append(soma) #verificando se elementos de aux são iguais for i in range(len(aux)): if aux[i]!= aux[1]: return False return True #programa principal a=[[8,0,7],[4,5,6],[3,10,2]] if verifica(a): print("é quadrado mágico") else: print("não e quadrado mágico") Primeira solução!! Pode ser melhorada...

def verifica (A): aux=[] #verificando linhas e colunas for i in range(len(a)): soma=0 soma2=0 for j in range (len(a[i])): soma=soma+a[i][j] soma2=soma2+a[j][i] aux.append(soma) aux.append(soma2) #verificando diagonal principal e secundária soma=0 soma2=0 c=1 for i in range(len(a)): soma=soma+a[i][i] soma2=soma2+a[i][len(a)-c] c=c+1 aux.append(soma) aux.append(soma2) #programa principal a=[[8,0,7],[4,5,6],[3,10,2]] if verifica(a): print("é quadrado mágico") else: print("não e quadrado mágico") Segunda solução!! Pode ser melhorada... #verificando se elementos de aux são iguais for i in range(len(aux)): if aux[i]!= aux[1]: return False return True

def verifica (A): aux=[] #verificando linhas e colunas soma3=soma4=0 c=1 for i in range(len(a)): soma=0 soma2=0 soma3=soma3+a[i][i] soma4=soma4+a[i][len(a)-c] c=c+1 for j in range (len(a[i])): soma=soma+a[i][j] soma2=soma2+a[j][i] aux.append(soma) aux.append(soma2) #programa principal a=[[8,0,7],[4,5,6],[3,10,2]] if verifica(a): print("é quadrado mágico") else: print("não e quadrado mágico") #verificando se elementos de aux são iguais for i in range(len(aux)): if aux[i]!= aux[1]: return False return True Terceira solução!! Pode ser melhorada...

Exercícios com Matrizes: Entrega na próxima aula

Exercício 1: Os elementos a ij de uma matriz inteira A nxn representam os custos de transporte da cidade i para a cidade j. Dados n itinerários, cada um com k cidades, calcular o custo total para cada itinerário. 0 1 2 3 Exemplo: 0 4 1 2 3 a 1 5 2 1 400 2 2 1 1 8 3 7 1 3 5 O custo do itinerário 0 3 1 3 3 2 1 0 é a 03 + a 31 + a 13 + a 33 + a 32 + a 21 + a 10 = 3 + 1 + 400 + 5 + 2 + 1 + 5 = 417

matriz.txt

Funções com Matrizes Exercício 2: (Compute a matriz de campo minado (minesweeper).) (a) Escreva uma função que recebe como parâmetros uma matriz inteira A nxm, e uma posição (i,j) da matriz, e conta quantas posições ao redor da posição (i,j) contém o valor -1. (b) Escreva um programa que lê uma matriz A nxm de 0's (posições livres) e -1's (minas). Utilizando a função do item anterior, o programa deve computar e imprimir a quantidade de minas ao redor de cada posição livre da matriz.

Exercício 2: Compute a matriz de campo minado (minesweeper). (a)escreva uma função que recebe como parâmetros uma matriz inteira A nxm e uma posição (i,j) da matriz e retorna quantas posições ao redor da posição (i,j) contém o valor -1. def campominado(a, i, j): 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 0 2 2 2 2 2 2 2 2 2 2 2 0 0-1 0 0 0 0 0 0 0 1 2 0-1 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 2 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 3 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-1 0 0 0-1 -1-1 0 0 0 0 0 0 0 0-1 -1 0 0-1 0 0-1 -1 0 0 0 0 0 0 4 5 6 7 8 9 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0-1 0 0 2 2 0-1 -1-1 0 0 0 0 0 2 2 0 0 0-1 -1 0 0-1 0 2 2 0-1 -1 0 0 0 0 0 0 2 campominado(a,2,2) 1 campominado(a,7,5) 3 campominado(a,8,3) 6 campominado(a,7,7) 2 Sem moldura 10 2 2 2 2 2 2 2 2 2 2 2 Com moldura

Exercício 2: Compute a matriz de campo minado (minesweeper). b) Escreva um programa que lê uma matriz A nxm de 0's (posições livres) e -1's (minas) de um arquivo texto. Utilizando a função do item anterior, o programa deve computar e imprimir a quantidade minas ao redor de cada posição livre da matriz. 1 2 3 4 5 6 7 8 9 (Obs: Resolver sem moldura e com moldura.) 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-1 0 0 0-1 -1-1 0 0 0 0 0 0 0 0-1 -1 0 0-1 0 0-1 -1 0 0 0 0 0 0 Sem moldura 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 2 2 2 2 2 2 2 2 2 2 2 2 0-1 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0-1 0 0 2 2 0-1 -1-1 0 0 0 0 0 2 2 0 0 0-1 -1 0 0-1 0 2 2 0-1 -1 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 Com moldura

Funções com Matrizes Exercício 3: (a) Escreva uma função que recebe como parâmetros uma matriz real A nxm, e uma posição (i,j) da matriz, e calcula a média aritmética dos vizinhos de (i,j), ou seja, a média entre A[i-1][j], A[i+1][j], A[i][j+1] e A[i][j+1]. Desconsidere os vizinhos que não pertencem a matriz (por exemplo, os vizinhos de (0, 0) são somente (0,1) e (1,0)). (b) Escreva uma função que recebe como parâmetro uma matriz real A nxm e devolve uma matriz A média, onde A média [i][j] é a média aritmética dos vizinhos de (i,j). Para isto, utilize a função do item anterior. (c) Escreva um programa que lê uma matriz real A nxm, e um número inteiro k; utilizando a função do item anterior, o programa deve transformar a matriz k vezes, imprimindo a matriz inicial e depois de cada transformação.

Funções com Matrizes Exercício 4: Dizemos que uma matriz A nxn é um quadrado latino de ordem n se em cada linha e em cada coluna aparecem todos os inteiros 1,2,3,...,n (ou seja, cada linha e coluna é permutação dos inteiros 1,2,...,n). (a) Escreva uma função que recebe como parâmetros um inteiro n, um vetor V com n inteiros e verifica se em V ocorrem todos os inteiros de 1 a n. (b) Usando a função acima, verifique se uma dada matriz inteira A nxn é um quadrado latino de ordem n.