# Lógica de programação ## com `Python` ---- ### criado por Bossa ---- # Aula 03 ## Correndo --- # Arquivos O comando `open` abre arquivos para leitura e escrita ---- ## Escrevendo em arquivos ```python # a função `open` recebe dois argumentos # o nome do arquivo e o modo de abertura arquivo = open("aquivo.txt", "w") # w -> write # agora arquivo é um objeto que tem métodos para escrita arquivo.write("Primeira linha do arquivo.\n") arquivo.write("Segunda linha do arquivo.\n") arquivo.close() # sempre temos que fechar o arquivo no final ``` ---- ## Lendo arquivos ```python arquivo = open("aquivo.txt", "r") # r -> read # agora arquivo é um objeto que tem métodos para escrita conteudo = arquivo.read() print(conteudo) arquivo.close() # sempre temos que fechar o arquivo no final ``` ---- ### Lendo linhas de um arquivo ```python arquivo = open("texto.txt", "r") # abrimos o arquivo em modo leitura i = 1 for linha in arquivo: # podemos iterar pelas linhas print(f"linha {i}: {linha}" ) i += 1 arquivo.close() # fechamos o arquivo ``` ---- ### Gerenciador de contexto - Para evitar o erro de esquecer de fechar o arquivo, usamos a cláusula `with` ```python= i = 1 with open("texto.txt", "r") as arquivo: # dizemos que arquivo vai ser igual a open([...]) for linha in arquivo: # podemos iterar pelas linhas print(f"linha {i}: {linha}") i += 1 # quando o python sai do bloco with, fecha automaticamente ``` ---- :::danger Abrir o arquivo com a opção `'w'` apaga o conteúdo existente no arquivo. Se não quiser apagar, use a opção `'a'` para acrescentar conteúdo. ::: --- # Dicionários ---- ## Dicionários - Em listas e tuplas, acessamos os valores usando índices numéricos - Nos *dicionários*, nomeamos os índices (também chamados _chaves_) como quisermos - Sintaxe: `dicionario = {chave: valor}` ---- ## Criando dicionários ```python # criar diretamente dicionário = {"nome": "Bossa", "cargo": "Matemático", "código": 2504 } # adicionar uma chave e um valor dicionário["chave"] = "valor" print(dicionário) ``` ---- ## Percorrendo dicionários ```python # isso percorre as chaves do dicionário for chave in dicionário: print(chave) # o método .values() retorna uma lista com os valores for valor in dicionário.values(): print(valor) # podemos percorrer ambos usando método .items() for chave, valor in dicionário.items(): print(chave, valor, sep=": ") ``` ---- ## Verificando e atualizando ```python verifica1 = "nome" in dicionário verifica2 = "Bossa" in dicionário # a notação x in dicionário só verifica se uma chave # está num dicionário, e não um valor verifica3 = "Bossa" in dicionário.values() # para verificar valores, usamos o método .values() print(verifica1, verifica2, verifica3) # atualizando valores dicionário.update({"nome": "Luiz", "cargo": "Instrutor"}) print(dicionário) ``` --- # Exercícios ---- ## Exercício 01 - Lendo arquivo Crie um algoritmo que lê um arquivo e imprime na tela cada linha do arquivo, precedida pelo número de caracteres daquela linha, e.g., ``` (14) Primeira linha ``` ```python with open("texto.txt", "r") as arquivo: for linha in arquivo: n = len(linha) print(f"({n}) {linha}", end="") ``` <!-- .element: class="fragment" data-fragment-index="1" --> ---- ## Exercício 02 - Escrevendo em arquivo Crie um algorito que lê um dicionário e para cada par `chave, valor`, escreve uma linha `chave:valor` no arquivo `dicionário.txt` ```python dicionário = {"nome": "Bossa", "instituição": "UFSC", "cargo": "matemático"} with open("dicionário.txt", "w") as arquivo: for chave, valor in dicionário.items(): arquivo.write(f"{chave}:{valor}\n") ``` <!-- .element: class="fragment" data-fragment-index="1" --> ---- ## Exercício 03 - Carregando dados do arquivo Crie um algorito que lê o arquivo `dicionário.txt` do exercício anterior, e cria um dicionário usando os pares `chave:valor` de cada linha do arquivo ```python dicionário = {} with open("dicionário.txt", "r") as arquivo: for linha in arquivo: conteudo = linha.split(":") chave = conteudo[0] valor = conteudo[1] dicionário[chave] = valor ``` <!-- .element: class="fragment" data-fragment-index="1" --> --- # Coisas pythonicas :snake: --- # Atribuição condicional Também conhecido como `if` em linha ---- ## `if` em linha As duas construções abaixo fazem a mesma coisa ```python variável = "Valor 1" if condição else "Valor 2" ``` ```python if condição: variável = "Valor 1" else: variável = "Valor 2" ``` --- ## Compressão de listas ---- Assim como em matemática temos descrições de conjuntos como $$ \{x^2+1\, | \, x\in \mathbb{N} \text{ e $x$ é par } \}, $$ podemos fazer o mesmo com listas em `python` ---- ### Compressão de listas Aplicando uma operação em elementos de uma lista ```python universo = range(10) # definindo uma lista quadrados = [x**2 + 1 for x in universo ] # cria uma nova lista aplicando uma operação # nos elementos de universo ``` ---- ### Compressão de listas Selecionando elementos de uma lista ```python pares = [ n for n in universo if n % 2 == 0 ] # seleciona apenas alguns elementos do universo ``` ---- ### Compressão de listas Selecionando com `if` e `else` ```python # pegando só os elementos que satisfazem a condição do if impares = [n if n % 2 == 0 else n**2 + 1 for n in universo] # valores que dependem de uma condição # mesma notação do if em linha ``` --- ## Separando listas ```python lista1 = [1, 2, 3] x,y,z = lista1 # separa os elementos da lista e salva em cada variável print(x,y,z) lista2 = list("abcdefg") a, b, *resto = lista2 #o resto é tudo o que não forem os dois primeiros elementos ``` --- ## Bibliotecas não-padrão --- ## NumPy - Biblioteca para computação científica - Vários algoritmos já prontos - Substituto ao MATLAB ---- ### Exemplo `numpy` ```python import numpy as np A = np.array([[1,0,0,0], # matriz [0,2,0,0], [0,0,3,0], [0,0,0,4] ]) b = np.array([[4,0,0,4]]).T # isso gera um vetor `de pé` x = np.linalg.solve(A,b) # Resolve o sistema Ax=b ``` ---- :::info Mais infos em - [NumPy for Matlab users](https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html) - [numpy.org](https://numpy.org/) ::: --- ## SymPy Biblioteca para computação simbólica ```python from sympy import symbols, expand, factor, diff, integrate x = symbols("x") diff(x**3 + 2*x + 1) # derivada expand((x+1)*(x+3)) # expansão factor(x**2 + 4*x + 4) # fatoração from sympy import sin integrate(x*sin(x)) # integral ``` --- ## pandas Biblioteca para trabalhar com dados. --- ## matplotlib - Pacote para criar gráficos fantásticos - Não pode ser usado no terminal > Alguns exemplos do site [matplolib.org](https://matplotlib.org/) ---- ### matplotlib ![](https://matplotlib.org/_images/sphx_glr_filled_step_001.png) ---- ### matplotlib ![](https://matplotlib.org/_images/sphx_glr_scatter_demo2_001.png) ---- ### matplotlib ![](https://matplotlib.org/_images/sphx_glr_whats_new_99_mplot3d_001.png) --- # Instalação ---- ## Instalação - Nas distribuições linux, o python já vem instalado por padrão. - No windows você baixar os arquivos autoinstaláveis em [python.org](https://www.python.org/) ---- ## Ubuntu Para instalar um pacote completo com as bibliotecas científicas, basta executar ```bash! sudo apt install python3-venv python3-pip pip3 install numpy scipy matplotlib ipython jupyter jupyterlab pandas sympy nose spyder ``` ---- ## Windows Instale o _Anaconda_, um gerenciador de pacotes que já inclui tudo o que precisamos. Acesse [anaconda.com](https://www.anaconda.com/). ---- ![](https://i.imgur.com/qeh8fP8.png) --- # Onde codificar ---- ## Terminal - No Ubuntu basta digitar `python3` na linha de comando - No Windows, após instalar o Anaconda, basta abrir o _Anaconda Prompt_ e digitar `python` ---- ## `Ipython` - No Ubuntu basta digitar `ipython` na linha de comando - No Windows, após instalar o Anaconda, basta abrir o _Anaconda Prompt_ e digitar `ipython` - É um `Python` interativo melhorado, com completamento usando `<TAB>`, ajuda com `?`, exibição de gráficos e mais ---- ![](https://i.imgur.com/GQYqh0m.png) ---- ## IDE - O _Spyder_ é um *ambiente de desenvolvimento integrado* multiplataforma que se assemelha muito ao MATLAB. ---- ![](https://i.imgur.com/llUE7H0.png) ---- ## Notebooks - O `Jupyter` é um projeto que permite usar _notebooks_, que são documentos que misturam conteúdo, código, resultado de código, visualização (programação literal). Ele é manipulado no seu próprio navegador. ---- ![](https://i.imgur.com/q4xaT6c.png) ---- ### Notebooks online - https://colab.research.google.com --- # Fim Aula 03
{"title":"Lógica de programação 3 - v2","tags":"minicurso, programação","description":"Minicurso de lógica de programação.","slideOptions":{"theme":"blood","transition":"none"}}
    420 views