Baixe o app para aproveitar ainda mais
Prévia do material em texto
Fundamentos essenciais de Python Direitos desta edição reservados A Voitto Treinamento e Desenvolvimento www.voitto.com.br Supervisão editorial: Thiago Coutinho de Oliveira Apresentação do curso: Iago Gomes de Lima Rosa Produção de conteúdo: Iago Gomes de Lima Rosa e Ruan Medina Carvalho Iago Rosa e Ruan Medina são mestrandos em Modelagem Computacional no Programa de Pós-Graduação de Modelagem Computacional (PPGMC) na Universidade Federal de Juiz de Fora (UFJF), se formaram em Ciências Exatas e, posteriormente, Engenharia Computacional pela mesma universidade. Iago trabalha, atualmente, na linha de pesquisa em Sistemas Computacionais Aplicados, com com foco em Data Science, Machine Learning e Modelos Baseados em Agentes aplicado ao Sistema Bancário e integra o Grupo de Pesquisa em Moeda e Desenvolvimento da Universidade Federal Rural do Rio de Janeiro (UFRRJ). Ruan Medina também trabalha na linha de pesquisa de Sistemas Computacionais Aplicados, porém focado em Modelagem e Dinâmica Molecular. Ambos possuem experiência em educação em tecnologia e inovação como membros egressos do Grupo de Educação Tutorial em Engenharia Computacional (GET-EngComp). É PROIBIDA A REPRODUÇÃO Nenhuma parte desta obra poderá ser reproduzida, copiada, transcrita ou mesmo transmitida por meios eletrônicos ou gravações sem a permissão, por escrito, do editor. Os infratores serão punidos pela Lei n° 9.610/98 http://www.voitto.com.br Sumário Sumário.............................................................................................................................................................................3 0. Introdução ao curso.................................................................................................................................................... 6 0.1. Sobre o Python................................................................................................................................................. 6 0.1.1. História....................................................................................................................................................6 0.1.2. O que é o Python?.................................................................................................................................6 0.2. Onde é usado....................................................................................................................................................7 0.2.1. Python + Linux.......................................................................................................................................8 0.3. Apresentação do curso....................................................................................................................................8 1. Configuração do ambiente de desenvolvimento....................................................................................................9 1.1. Conhecendo o Anaconda................................................................................................................................9 1.2. Configurando o ambiente...............................................................................................................................9 1.3. Conhecendo o Jupyter...................................................................................................................................13 1.4. Conhecendo o Spyder................................................................................................................................... 13 2. Variáveis e comunicação com o usuário................................................................................................................14 2.1. O que são variáveis?.......................................................................................................................................14 2.2. Criando variáveis............................................................................................................................................ 14 2.2.1. Regras para declaração de variáveis.................................................................................................14 2.2.2. Criando variáveis................................................................................................................................. 15 2.2.3. Declaração de múltiplas variáveis..................................................................................................... 16 2.3. Funções de impressão e captura de dados................................................................................................ 16 2.4. Funções nativas para variáveis......................................................................................................................17 2.5. Operações aritméticas................................................................................................................................... 20 2.5.1. Ordem de precedência.......................................................................................................................21 2.6. Exercícios......................................................................................................................................................... 21 3. Operadores lógicos, relacionais e estruturas condicionais..................................................................................22 3.1. Operadores lógicos........................................................................................................................................22 3.1.1. And........................................................................................................................................................22 3.1.2. Or...........................................................................................................................................................22 3.1.3. Not.........................................................................................................................................................23 3.1.4. Tabela da verdade...............................................................................................................................23 3.1.5. Ordem de precedência.......................................................................................................................23 3.2. Expressões relacionais................................................................................................................................... 23 3.3. Resumo de precedência e exemplos...........................................................................................................24 3.4. Estruturas condicionais if, else e elif............................................................................................................ 25 3.4.1. If.............................................................................................................................................................25 3.4.2. Else.........................................................................................................................................................26 3.4.3. Elif..........................................................................................................................................................26 3.5. Exercícios......................................................................................................................................................... 27 4. Trabalhando com Strings......................................................................................................................................... 27 4.1. Strings.............................................................................................................................................................. 27 4.2. Acesso a elementos........................................................................................................................................28 4.2.1. Índices...................................................................................................................................................284.2.2. Slices......................................................................................................................................................28 4.3. Operadores em strings.................................................................................................................................. 29 4.4. Métodos e manipulação de strings............................................................................................................. 30 4.4.1. Count.....................................................................................................................................................30 4.4.2. Find e Replace......................................................................................................................................31 4.4.3. Upper, Lower e Capitalize...................................................................................................................31 4.4.4. Split e Join............................................................................................................................................ 31 4.4.5. Strip....................................................................................................................................................... 32 4.5. Inserção e formatação de substrings...........................................................................................................32 4.6. Exercícios......................................................................................................................................................... 33 5. Estrutura de dados.................................................................................................................................................... 33 5.1. Listas.................................................................................................................................................................33 5.2.1. Manipulação de listas......................................................................................................................... 34 5.2. Tuplas...............................................................................................................................................................36 5.2.1. Manipulação de tuplas....................................................................................................................... 37 5.3. Dicionários.......................................................................................................................................................39 5.3.1. Manipulação de dicionários...............................................................................................................39 5.4. Conjuntos........................................................................................................................................................ 41 5.4.1. Manipulação de conjuntos.................................................................................................................41 5.5. Exercícios......................................................................................................................................................... 43 6. Estrutura de repetição...............................................................................................................................................43 6.1. Instrução for....................................................................................................................................................43 6.2. Iteradores range e enumerate......................................................................................................................44 6.2.1. Range.................................................................................................................................................... 44 6.2.2. For + Range..........................................................................................................................................45 6.2.3. Enumerate............................................................................................................................................ 46 6.2.4. For + Enumerate..................................................................................................................................46 6.3. While................................................................................................................................................................ 46 6.4. Interrupção de loops......................................................................................................................................47 6.4.1. Break......................................................................................................................................................47 6.4.2. Continue............................................................................................................................................... 48 6.4.3. Pass........................................................................................................................................................49 6.5. List comprehension........................................................................................................................................49 6.6. Exercícios......................................................................................................................................................... 50 7. Funções.......................................................................................................................................................................51 7.1. Função..............................................................................................................................................................51 7.1.1. Parâmetros........................................................................................................................................... 51 7.2. Tipos de retorno.............................................................................................................................................52 7.2.1. Único..................................................................................................................................................... 53 7.2.2. Múltiplos...............................................................................................................................................53 7.3. Funções anônimas..........................................................................................................................................53 7.4. Exercícios......................................................................................................................................................... 56 8. Introdução à Orientação a Objetos.........................................................................................................................56 8.1. Introdução.......................................................................................................................................................56 8.1.1. Motivações........................................................................................................................................... 56 8.1.2. Vantagens.............................................................................................................................................57 8.2. O que são classes?......................................................................................................................................... 57 8.3. Métodos e atributos.......................................................................................................................................58 8.3.1. Atributos...............................................................................................................................................58 8.3.2. Métodos................................................................................................................................................608.4. O que são objetos?........................................................................................................................................ 61 8.4.1. Instanciando objetos...........................................................................................................................62 8.5. Encapsulamento............................................................................................................................................. 64 8.5.1. Atributos privados...............................................................................................................................64 8.5.2. Métodos get e set............................................................................................................................... 65 8.5.3. Métodos privados............................................................................................................................... 65 8.6. Exercícios......................................................................................................................................................... 66 9. Bibliotecas...................................................................................................................................................................67 9.1. Introdução.......................................................................................................................................................67 9.2. Importando bibliotecas................................................................................................................................. 67 9.3. Usando bibliotecas.........................................................................................................................................69 Referências..................................................................................................................................................................... 70 0. Introdução ao curso Nesta seção vamos apresentar a vocês aspectos gerais sobre a linguagem de programação Python. Serão abordados assuntos como a história da linguagem, quais aplicações ela possui, quais empresas do mercado brasileiro e mundial usam o Python no dia a dia delas e o quais serão os conhecimentos a serem desenvolvidos ao longo do curso. Essa apostila tem como objetivo principal aprofundar os assuntos abordados durante as vídeo aulas sobre a linguagem Python, com diversos exemplos e linguagem de fácil entendimento. 0.1. Sobre o Python 0.1.1. História A linguagem foi concebida no final da década de 80. Porém, em 1982, Guido Van Rossum teve a primeira ideia de implementar o Python enquanto trabalhava no CWI (Centrum Wiskunde & Informatica, Centro de Matemática e Ciência da Computação) em Amsterdã, Holanda, no time de desenvolvimento da linguagem ABC. Com o fim da linguagem ABC, Guido foi transferido para um projeto do sistema operacional chamado Amoeba. Nesse grupo de trabalho, ele percebeu a necessidade de criar uma linguagem para escrever programas intermediário, algo entre as linguagens C e Shell Script. Assim, em 1991, foi lançada a primeira versão da linguagem: o Python 1.0 . O nome Python foi escolhido pois Van Rossum decidiu seguir uma ideia parecida com a de James Gosling, criador da linguagem Java. James escolheu o nome “Java” pois era o nome da terra de origem do café que seus colegas de trabalho apreciavam. De acordo com “Trytoprogram” [1], em 1970 existia um programa de comédia da BBC chamado “Monty Python’s Flying Circus” que Guido gostava muito. Então, quando o projeto da linguagem foi concluído, ele percebeu que o nome Python possuía as características que queria para o nome de uma linguagem: marcante e forte. Outra informação interessante sobre essa linguagem, de acordo com o site “Mindbending” [2], é que, por muito tempo, o autor evitou vincular o nome da linguagem à cobra píton, porém desistiu quando a editora O’Reilly sugeriu colocar a cobra na capa do primeiro livro “Programming Python”. 0.1.2. O que é o Python? O Python é uma linguagem de programação interpretada, modular, orientada a objetos e funcional, além de possuir tipagem dinâmica e forte. Mas o que significa tudo isso? http://en.wikipedia.org/wiki/Monty_Python%27s_Flying_Circus Uma linguagem é dita interpretada se ela não precisa ser traduzida para a linguagem de máquina (compilada), mas sim interpretada por um outro programa do computador, chamado interpretador, e esse traduzirá o código para a compilação. Quando uma linguagem é modular ela possui o desenvolvimento das rotinas feito através de módulos que são interligados por uma interface comum [3]. A característica de orientada a objetos é muito forte no Python, isso quer dizer que toda a estrutura da linguagem é feita em cima dos conceitos classes e objetos da POO (Programação Orientada a Objetos). Além disso, essa linguagem é funcional por estar fortemente fundamentada em conceitos de funções matemáticas. Quando falamos de tipagem dinâmica e forte, uma das principais características do Python, significa que a linguagem reconhece o tipo da variável declarada e, uma vez reconhecido, ele se manterá o mesmo até que ela seja descartada. Diferentemente de outras ferramentas, o Python é distribuído gratuitamente. Assim como outros softwares de código aberto, como o Linux, é possível vermos o código fonte inteiro da linguagem de graça na internet e sem nenhuma restrição. Podemos, inclusive, mudar ou adaptar qualquer parte do código, se estivermos aptos a isso. Porém, não devemos pensar que, por ser de graça, o Python não oferece apoio para seus usuários. A comunidade online do Python costuma responder às dúvidas de seus usuários de forma rápida e eficiente. 0.2. Onde é usado De acordo com [4] a linguagem possui diversas aplicações no mundo atual. A figura abaixo explica quais as aplicações do Python hoje em dia. Fonte: DataFlair - Disponível em: https://data-flair.training/blogs/python-applications/ Essas diversas aplicações fazem com que o Python amplie as possibilidades tanto de quem vai entrar no mercado de trabalho quanto das empresas que poderão usá-lo em seu dia a dia. No âmbito mundial empresas como Instagram estão mudando suas plataformas para para o Python combinado com o Django (Framework do Python). A linguagem foi escolhida por três principais motivos: (i) popularidade da linguagem, (ii) velocidade de desenvolvimento e (iii) preferência dos desenvolvedores pela linguagem. O Spotify é uma das maiores plataformas em streaming que usa o Python. Aproximadamente 80% dos serviços de back-end da empresa usam a linguagem para estabelecer as conexões necessárias. Outra empresa gigante que precisa ser mencionada é a Google. A maior empresa de tecnologia do mundo usa o Python tanto em projeto internos quanto externos, para ser mais abrangente, sendo o Youtube um dos exemplos. Além dessas, podemos citar, também, Yahoo, IBM, Nokia e até a Nasa. Já no cenário nacional a grande empresa de destaque é a Globo.com. A empresa usa o Python em grande escala para gerenciar os conteúdos dos seus portais, uma vez que a natureza desses conteúdos precisa de praticidade. Vale ressaltar que o Django é muito utilizado, também, pela empresa. Além da Globo.com temos também outras como Mercado Livre e MagazineLuiza. 0.2.1. Python + Linux Além das diversas empresas que usam o Python dentro de seus projetos, a linguagem possui forte relação com o sistema operacional Linux. Ao contrário do Windows e Mac OS, o Linux não foi desenvolvido com fins comerciais, além de possuir código aberto, o que significa que qualquer pessoa pode criar e distribuir aplicativos para ele. Este sistema já possui o Python instalado, sendo possível utilizá-lo pelo terminal e dispensar instalações prévias da linguagem. 0.3. Apresentação do curso A principal razão para aprender a programar é fazer diferença no mercado de trabalho. Após a grande revolução digital do século diversas empresas adotaram softwares modernos e precisam de pessoas que saibamutilizar essas ferramentas. Além dos softwares, a programação é utilizada para a interpretação da enorme quantidade de dados que a revolução digital proporcionou. Neste curso você aprenderá os principais fundamentos da programação na linguagem Python. Serão abordados assuntos como variáveis, expressões condicionais, estruturas lógicas e de repetição, estruturas de dados, como listas e tuplas, e funções na programação. Todos esses assuntos contribuirão para o início do seu conhecimento sobre programação e, principalmente, sobre o Python. https://data-flair.training/blogs/python-applications/ 1. Configuração do ambiente de desenvolvimento Antes de começarmos a programar, precisamos configurar o computador. Para isso, precisamos de uma IDE (Integrated development environment) capaz de interpretar e rodar nossos códigos. Quando executamos o código criado estamos passando a seguinte mensagem para o computador “faça o que meu código te diz para fazer”. De acordo com [5] existem vários ambientes de desenvolvimento para programarmos em Python, podendo ser gratuitos ou não. Neste curso, usaremos a IDE Jupyter que será instalada através da distribuição Anaconda. 1.1. Conhecendo o Anaconda O Anaconda é uma plataforma de distribuição gratuita e código aberto para diversas linguagens, podendo destacar o Python e o R. Quando se trata do Python, ela já possui um interpretador integrado, facilitando o processo de programação. Juntamente com o Conda, sistema de gerenciamento de pacotes de código o aberto que instala rapidamente, executa e atualiza pacotes e suas dependências [6], essa plataforma se torna uma forte aliada para os programadores, principalmente na área de ciência de dados, já que o Anaconda foi feito por cientistas de dados para cientistas de dados [7]. O interesse principal do Anaconda é simplificar as instalações dos pacotes. Ao invés de precisarmos instalar cada módulo um por um, poderemos baixar tudo de uma vez e atualizar, de forma prática e fácil, na medida em que um pacote seja necessário. 1.2. Configurando o ambiente Para instalar o Anaconda em seu computador é preciso seguir os seguintes passos: 1. Acessar o site oficial do Anaconda e ir para a parte de downloads; 2. Escolher o sistema operacional (Linux, Windows ou Mac OS) e realizar o download da versão 3.X do Python. (neste curso está sendo usada a versão 3.7, mas como o Python sofre constantes atualizações depende de qual é a versão mais atual disponível) 3. Depois que o download for concluído a seguinte tela aparecerá: https://www.anaconda.com/products/individual E você deverá clicar em “Next” e, em seguida, aceitar o termos de condição: 4. A próxima tela será para definir se o ambiente poderá ser acessado somente pelo usuário que está fazendo a instalação (Just me ) ou por todos os outros usuários presentes no computador (All users). Feita a escolha, prossiga em “Next”. 5. Em seguida, deverá escolher o diretório em que o Anaconda será instalado e depois prosseguir em Next 6. Na próxima tela, a sugestão é manter a opção que já aparece (Register Anaconda as the system Python 3.6) e esperar a instalação 7. Na próxima tela uma escolha que deve ser feita pelo usuário caso deseje realizar o MS Visual Studio. Esta instalação só é recomendada se o usuário estiver familiarizado com o ambiente e preferir este editor, caso não basta selecionar a opção Skip 8. Por fim, a instalação estará concluída e a seguinte mensagem aparecerá na tela. Então basta escolher a opção Finish. 9. Depois de instalado o ambiente, o usuário pode localizar em seu sistema a ferramenta Anaconda e selecionar o ambiente de desenvolvimento desejado (neste caso, o Jupyter) na seguinte tela: 10. Ao clicar, o usuário você será direcionado para a pasta padrão do Jupyter, em que poderá criar um notebook (ferramenta do Jupyter para criar projetos). Para isso basta ir na opção New > Notebook: Python 3 e estará pronto para começar seus projetos. 1.3. Conhecendo o Jupyter O Jupyter Notebook é uma excelente ferramenta popular para escrever códigos em Python. O nome Jupyter é uma junção das linguagens que ele suporta: Julia, Python e R. Julia e R são mais populares na área de ciência de dados, enquanto o Python é usado tanto nessa área quanto em várias outras já citadas anteriormente. A interface dessa IDE é baseada em navegadores da internet, tanto que, ao abrí-lo, uma nova guia aparecerá no navegador padrão. Nessa página estão várias pastas (diretórios) que estão disponíveis para guardar os projetos desenvolvidos no Jupyter. Para começar a programar basta escolher o diretório de preferência, clicar em “New” e em seguida “Python 3”. Ao fazer isso um novo notebook será aberto como uma guia do browser de nome Untitled, que é possível alterar apenas realizando um duplo click nele. Dentro dessa página existe um retângulo com um In[ ]do lado esquerdo, chamado cédula (cell). As células conterão toda a programação em Python, porém elas também podem conter textos, basta mudar do tipo de Code para Markdown. Para rodar um código neste ambiente de desenvolvimento é preciso (i) digitar algum código, como print(“Hello World!”) e, em seguida, clicar no botão Run ou, no atalho do teclado Windows, crtl + Enter ou shift + Enter. 1.4. Conhecendo o Spyder Apesar do Jupyter ser a IDE em que desenvolveremos este curso, ela não é a única que vem com o Anaconda. Outro também ambiente muito utilizado é o Spyder. O Spyder é um poderoso ambiente desenvolvido em Python para se programar em Python criado por e para engenheiros, cientistas e analistas de dados[8]. 2. Variáveis e comunicação com o usuário 2.1. O que são variáveis? Antes de sabermos o que é uma variável precisamos saber o que é um algoritmo. Um algoritmo pode ser definido como uma sequência finita de instruções que levam a execução de uma tarefa [9]. O algoritmos estão presentes em várias das nossas atividades diárias, como usar o aplicativo de GPS para traçar a menor rota até o trabalho. Esse aplicativo faz o uso de um algoritmo que chamamos de caminho mínimo. Porém, outras tarefas não relacionadas aos computadores podem ser consideradas algoritmos. Um exemplo clássico é a tarefa de fazer um bolo. Para produzirmos um bolo precisamos seguir o passo a passo como: 1. Juntar os ingredientes; 2. Misturar em uma vasilha; 3. Untar a forma; 4. Colocar a mistura na forma; 5. Colocar a forma no forno pré-aquecido; 6. Retirar a forma após 20 minutos. Observe que para termos o bolo precisamos seguir esses passos mostrados acima. Mas qual a diferença entre o algoritmo do computador e os algoritmos do nosso dia a dia? Nós, como seres humanos, podemos tolerar e interpretar um algoritmo que não foi descrito com precisão, ma o computador não. Portanto, ao escrevermos nossos algoritmos ao longo deste curso e da vida de programador é necessário descrevermos cada tarefa com precisão para evitarmos tanto problemas de lógica (entendimento do computador sobre o que foi escrito) quanto de sintaxe (regras para a linguagem utilizada). E onde entram as variáveis nesse processo? Se observarmos a receita de bolo novamente teremos algumas variávei como ingredientes, forma e forno. Em computação, variáveis são formas de armazenar dados que serão usados ao longo do nosso código. No Python existem 4 principais tipos de variáveis: ● int - qualquer número inteiro positivo ou negativo; ● float - qualquer número que contém um ponto decimal, também chamado de números reais; ● string - são variáveis do tipo texto; ● bool - uma variável categórica, que recebe apenas valores de True (verdadeiro) ou False (falso). 2.2. Criando variáveis Antes de começarmos a criar variáveis para nosso programa existem algumas regras que devem ser seguidas. 2.2.1. Regras para declaração de variáveis Para definirmos nossas variáveis algumas regras devem ser observadas: 1. O nome da variável em Python não pode começar com um valor numérico. Por exemplo, se definirmos uma variável de nome 1valor haverá um erro de sintaxe; 2. Não podem existir espaços dentro do nomeda variável. Se definirmos com o nome valor teste o Python retornará um erro; 3. Não é possível utilizar caracteres especiais no Python, como %, $, &, <, >, |, \, /, etc. 4. Existem alguma palavras reservadas da linguagem e essas não podem ser utilizadas para nomes de variáveis. Dentre elas, temos: Uma dica de ouro para programar em python e todas as outras linguagens é que o nome da variável esteja relacionado com o que ela irá armazenar. Ou seja, criar um nome significativo para facilitar a compreensão sobre o que a variável representa. Por exemplo, se criarmos uma variável para armazenar o ano de um carro, podemos definir o nome da variável como anoCarro (lembrando sempre das regras de definição de nome). Também poderíamos colocar o nome da variável como ano pois atende às regras de definição. Porém, com esse nome, não traria o real significado da variável e se tornaria ambíguo pois podemos declarar o ano de muitas outras coisas. Essa dica não é somente para o nome de variáveis, deve ser aplicada também aos nomes de funções, métodos, classes que veremos mais à frente. 2.2.2. Criando variáveis Para criar uma variável você utiliza a seguinte sintaxe: nomevariavel = valor Observe que a esquerda temos o nome que definimos para a variável e a direita temos o valor que ela receberá. O sinal de igual (=) é chamado de operador de atribuição. Diferentemente do sinal de igualdade (==) que faz a comparação de dois valores, o sinal de igual faz a atribuição de um valor a uma variável. O comando de atribuição atribui o valor que está à direita à variável que está do lado esquerdo. Agora veja um exemplo de comandos de atribuição: nota = 10 media = 6.6 No comando acima estamos guardando o valor 10 na variável nota e o valor 6.6 na variável média. Podemos também fazer o seguinte: nome = “Joao” Guardamos o valor Joao na variável nome. Ao contrário de muitas linguagens, o Python, por ter uma linguagem de tipagem forte, não precisa que identifiquemos o tipo da variável antes de declará-la. 2.2.3. Declaração de múltiplas variáveis Em python, podemos fazer a declaração múltipla de variáveis que é muito útil no código por utilizar uma única instrução de código. Veja como fazer a declaração múltipla dessas variáveis: idade, nome, email = 20, “Joao”, “joao@gmail.com” Nesse exemplo temos três variáveis declaradas em uma única linha idade, nome e email que recebem, respectivamente, os valores 20, Joao e joao@gmail.com. 2.3. Funções de impressão e captura de dados Além das variáveis, o Python possui duas funções principais de interação com o usuário: print e input. O input é uma função pronta da linguagem que é utilizada para obter entrada de dados. Se em um determinado momento da aplicação for necessário pedirmos um dado ao usuário essa é a função que utilizaremos. Ela faz uma pausa no programa e espera que o usuário entre com algum dado. Após o usuário digitar, o input lê o dado e atribui à variável associada. Ou seja, o valor retornado pelo que o usuário digitou pode ser armazenado em uma variável e utilizado futuramente. Observe o exemplo: nome = input(“Por favor digite seu nome: ”) idade = input(“Por favor digite sua idade: ”) Nesse caso os valores de nome e idade que forem digitados pelo usuário ficarão armazenados nas variáveis nome e idade. Porém, é importante ressaltar que mesmo que o usuário tenha digitado um número a variável armezenará o dado como uma string. A segunda função é a print. Ela também é uma função pronta da linguagem e é utilizada para saída de dados. Se durante a aplicação for necessário mostrar ao usuário algum dado, utilizaremos a função print. Ela pode exibir no terminal mais de uma informação separado por vírgulas. Se a saída a ser exibida for uma variável, a declaração é definida por print(variavel). Se a saída for uma string, a declaração é definida por a string que deseja mostrar entre “ ”, da seguinte forma: print(“o seu texto”), igual fizemo no primeiro “Hello World!”. Cada parâmetro que será mostrado no terminal deve ser separado por vírgula como o seguinte exemplo: print(par1, par2,..., parN). nome = “Joao” idade = 20 print(nome) print(idade) Além de podermos imprimir apenas variáveis ou apenas textos, podemos, também, criar frases com a função print: mailto:joao@gmail.com mailto:joao@gmail.com nome = “Joao” nota = 10 print(“Parabéns”, nome, “você tirou”, nota, “no teste”) Observe que juntamos a parte textual e as variáveis dentro dos parênteses do print . 2.4. Funções nativas para variáveis O Python possui diversas funções úteis para manipulação de tipos de variáveis. Vamos aprender mais a frente sobre o que são funções, mas as que serão apresentadas a seguir são bem simples de entender e muito úteis quando precisamos identificar o tipo da variável que temos (inteiro, texto, etc) ou modificá-lo. A primeira função que veremos é a type(). Ela, quando chamada, retorna o tipo do objeto que foi passado como parâmetro. Ou seja, chamamos essa função e passamos algum objeto, como variáveis, ela nos mostra qual é o tipo daquela variável. Observe o exemplo: nome = “Joao” nota = 10 type(nome) ---------------- <class 'str'> Veja que quando colocamos a variável nome dentro dos parênteses a função mostra que o seu tipo é str, abreviação de string (texto). Quando colocamos um objeto numérico, como nota, ela nos retorna a seguinte classe: type(nota) ------------------- <class 'int'> Essa função identifica todos os tipos de objetos presentes na linguagem. Alguns já vimos como inteiros (int), strings (str) e float (float), outros vamos ver nas lições futuras como listas (list), tuplas (tuple) e dicionários (dict). Além da função type(), o Python apresenta funções nativas dos tipos das variáveis que podem ser usadas para modificar o tipo de uma variável que temos. Veja o exemplo: r1 = 3.89 r2 = -4.35 type(r1) type(r2) -------------------------------- <class 'float'> <class 'float'> i_r1 = int(r1) i_r2 = int(r2) print(i_r1) print(i_r2) --------------------------------- 3 -4 Nele, transformamos as variáveis r1 e r2 em variáveis inteiras i_r1 e i_r2. É importante ressaltar que a função nativa int() não arredonda os valores das variáveis, mas sim retira a parte depois da vírgula do número real e deixa apenas a parte inteira. Assim como a função int(), temos funções dos outros tipos de dados, como float() e str(). n1 = 10 r1 = 3.89 print(str(n1)) print(str(r1)) --------------------------------- 10 3.89 Esse tipo de conversão é comumente chamado de cast. No exemplo acima fizemos um cast de inteiro para string e outro cast de float para string. print("r1 tem o valor", r1, "e o tipo", type(r1)) print("i_r1 tem o valor", i_r1, "e o tipo", type(i_r1)) ------------------------------------------------------ r1 tem o valor 3.89 e o tipo <class 'float'> i_r1 tem o valor 3 e o tipo <class 'int'> É possível também mudarmos, momentâneamente, o tipo da variável, o que é muito útil quando precisamos fazer certas operações ou quando queremos mostrar alguma frase na tela: print("n1 em cast para float vale", float(n1), "mas n1 continua valendo", n1, "e com o tipo", type(n1)) ------------------------------------------------------------------------------- n1 em cast para float vale 10.0 mas n1 continua valendo 10 e com o tipo <class 'int'> Quando usamos a função input() para recolher dados, o Python identifica todos os dados como strings. Porém, em alguma situações, precisamos que o dado lido seja de um outro tipo de dado. Para convertermos um número inserido pelo usuário em um número do Python, basta usarmos uma dessas funções citadas acima, como int() ou float (). nota = input("Qual a sua nota?") print(type(nota)) nota = int(input("Qual a sua nota?")) print(type(nota)) ------------------------------------------- Qual a sua nota?10 <class 'str'> Qual a sua nota?10 <class 'int'> Além das funções apresentadas anteriormente, vamos comentar de outras três funções nativas como len(), round() e abs(). O método len() é muito usado para verificar o tamanho deuma variável. Se tivermos uma variável do tipo string, ele contará quantos caracteres temos na string. mensagem = “Olá mundo” print(type(mensagem)) print("O tamanho da variavel mensagem é: ", len(mensagem)) --------------------------------------------------------------- <class 'str'> O tamanho da variavel mensagem é: 9 O round() é usado em situações que queremos arredondar o valor de uma variável e o abs() é para quando queremos apenas o valor absoluto de uma variável: n2 = - 20 n2_abs = abs(n2) print("n2 =", n2, "e n2_abs =", n2_abs) ------------------------------------------------ n2 = -20 e n2_abs = 20 Para usarmos o round precisamos passar duas informações para esse método: o objeto que queremos arredondar e a quantidade de casas depois da vírgula que desejamos: r2 = -5.39674 r2 = round(r2, 1) print(r2) ---------------------------------------- -5.4 Veja que o número que antes tinha 5 casas decimais agora tem apenas uma. 2.5. Operações aritméticas O Python, assim como as demais linguagens de programação, apresenta as operações aritméticas básicas, como adição, subtração, multiplicação e divisão sendo representados, respectivamente por +, -, * e / . Além dessas operações básicas há também a operação de módulo, representada pelo símbolo %, de potência, representada por **, e de divisão inteira, representada por //. A tabela a seguir mostra como funcionam esses operadores: Operação Descrição Exemplo + Adição 2 + 2 = 4 - Subtração 10 - 1 = 9 * Multiplicação 3 * 5 = 15 / Divisão 10 / 2 = 5 % Módulo (resto da divisão) 7 / 2 = 1 ** Potenciação 2 ** 3 = 8 // Divisão inteira 11 // 5 = 2 É importante ressaltar que as operações aritméticas devem ser feitas apenas entre variáveis de tipos numéricos: numero = 1 falso_numero = '1' print(numero, falso_numero) print(type(numero), type(falso_numero)) ---------------------------------------------------- 1 1 <class 'int'> <class 'str'> print('Soma = ', numero + falso_numero) ---------------------------------------------------- TypeError: unsupported operand type(s) for +: 'int' and 'str' Observe que quando tentamos soma o numero, do tipo int, com o falso_numero, do tipo str, o Python retorna um erro, dizendo que não é possível realizar operações entre inteiros e textos 2.5.1. Ordem de precedência Assim como aprendemos na escola que temos uma ordem para realizar operações em expressões aritméticas, em programação também seguimos uma ordem. Devemos seguir a seguinte ordem: 1. Os parênteses têm a mais alta precedência e podem ser usados para forçar que uma operação ou expressão seja calculada primeiro. Além disso, os parênteses são muito usados, também, para deixar as expressões mais legíveis; 2. Exponenciação tem a segunda precedência mais alta; 3. Multiplicação, divisão e divisão inteira possuem o mesmo nível de precedência. Se tivermos várias delas em uma expressão elas serão executadas da esquerda para a direita na ordem em que aparecem; 4. Por fim, as últimas operações que serão realizadas são adição e subtração, que, também, possuem o mesmo nível de precedência, e devem ser executadas da esquerda para a direita na ordem em que aparecem. Veja como o mesmo conjunto de operações pode obter diferentes resultados de acordo com a ordem de precedência: print(5 + 3 * 2) print(3 * 5 + 4 **2) print(3*(5+4)**2) -------------------------------- 11 31 243 2.6. Exercícios 1. Escreva um programa para calcular a soma de dois inteiros lidos do teclado; 2. Escreva um programa que receba três valores do teclado e escreva na tela a soma e a média desses valores; 3. Faça um programa que leia um número inteiro e escreva na tela o antecessor e o sucessor deste.; 4. Escreva um programa que receba os dados de um triângulo (base e altura) e calcule sua área; 5. Escreva um programa que leia um número do teclado e informe seu dobro, seu triplo e sua raiz quadrada; 6. Escreva um programa que leia um valor em metros e converta para centímetros e milímetros; 7. Faça um programa que leia altura e largura de uma parede, calcule sua área e a quantidade de tinta necessária para pintá-la sabendo que cada litro de tinta pinta 2m^2. 3. Operadores lógicos, relacionais e estruturas condicionais 3.1. Operadores lógicos O operador lógico, assim como um operador aritmético, pertence a uma classe de operações sobre variáveis e elementos. Com eles trabalhamos com valores do tipo bool. Geralmente, variáveis desse tipo são utilizadas para realizar comparações e podem assumir somente dois valores: True ou False [10]. Em Python temos 3 operadores lógicos: and, or e not. Operador Exemplo no código O que determina and a and b se ambos x e y são verdadeiros or a or b se apenas x ou apenas y é verdadeiro not not a nega o valor original de x 3.1.1. And Sejam dois valores booleanos A e B. O operador and resulta em um valor True (verdadeiro) se os dois valores forem verdadeiros. Se um deles ou ambos tiverem valor falsos, resulta em um valor False (falso). a = True b = False print ('A and B =', a and b) ----------------------------- A and B = False 3.1.2. Or Sejam dois valores booleanos A e B. O operador OR resulta em valor False (falso) apenas quando os dois valores forem falsos, se apenas um for verdadeiro. a = False b = True print ('A or B =', a or b) ----------------------------- A or B = True 3.1.3. Not Seja um valor booleano A, o operador not tem como função inverter o valor original. Se o valor passado for True ele inverte para False e se o valor passado for False, ele inverte para True. a = False print ('Invertendo o valor de a:', not a) ----------------------------------------- Invertendo o valor de a: True 3.1.4. Tabela da verdade A tabela da verdade é um recurso muito utilizado no estudo da matemática lógica. Com ela podemos determinar qual será o valor de uma operação lógica, isto é, saber se a operação retornará valor verdadeiro (True) ou falso (False). A B A and B A or B True False False True True True True True False False False False False True False True Observe que, com ela, podemos ver todos os resultados das operações and e or e provar que o operador and apenas retorna verdadeiro quando suas duas entradas são verdadeiras e o operador or só retorna falso quando suas duas entradas são falsas. 3.1.5. Ordem de precedência Assim como os operadores aritméticos, os operadores lógicos também apresentam ordem de precedência ao serem executados. Primeiro realizamos a operação not, depois a and e, por último, a operação or. 3.2. Expressões relacionais O trabalho dos computadores é, frequentemente, associado a tomadas de decisões. Porém, essas decisões são diferentes das decisões feitas por humanos. Os computadores decidem a partir de comparações que retornam verdadeiro ou falso. Os operadores usados para realizar esse tipo de comparação são: Operador Significado == Igual a != Diferente que >= Maior que ou igual a > Maior que <= Menor que ou igual a < Menor que As expressões que fazemos com a ajuda desses operadores são chamadas de expressões relacionais. Elas são peças fundamentais para programação, já que os código são baseados, principalmente, em tomada de decisões. 3.3. Resumo de precedência e exemplos Ao longos das lições anteriores deixamos muito evidente a importância da ordem de precedência entre as operações lógicas e aritméticas. Dentro disso, devemos ressaltar que existem expressões, em Python, que misturam esses dois tipos de expressões e, além da precedência que cada um desses operadores possui, também há uma ordem de execução de todos eles. Veja na tabela a seguir: Operador Significado () Parênteses ** Potenciação *, /, %, // Multiplicação, divisão, módulo, divisão inteira +, - Soma, subtração >, >=, <, <=, ==, != Comparações not não lógico and e lógico or ou lógico Quando todas essas operações estão em uma única expressão o Python as executa de acordo com a ordem da tabela acima, primeiro os parênteses, depois as operações aritméticas de acordo com sua precedência, seguidas das comparaçõese, por último, as operações lógicas também de acordo com a precedência. Veja no exemplo a seguir como as operações aritméticas são sempre executadas antes das lógicas: 2 + 3 == 3 + 2 * 1 2 + 3 == 3 + 2 5 == 3 + 2 5 == 5 True É possível perceber que primeiro executamos a multiplicação, depois a adição e, por último, a comparação. 1) (2 < 3) and (5 > 1) True and True True 2) (2 > 3) and (3 < 2) or (2 <3) False and False or True False or True True 3) (2 > 3) and ((3 < 2) or (2 <3)) False and (False or True) False and (True) False Podemos ver que os exemplos 2 e 3 possuem o mesmo conjunto de operações, mas resultados finais diferentes. Isso acontece pois em 3 priorizamos a execução do or antes do and com a ajuda dos parênteses. 3.4. Estruturas condicionais if, else e elif Até agora vimos instruções que eram realizadas de forma linear, ou seja, as instruções eram executadas uma por uma, de cima para baixo, sem nenhuma condição que mudasse isso. Porém, sabemos que, em certas situações o precisamos estabelecer condições para que certas instruções sejam executadas. Para isso existem as estruturas condicionais if, else e elif. 3.4.1. If Em geral, a estrutura if seleciona ações que devem ser executadas[11] .Utilizamos a estrutura condicional if como uma condição que determinará se um bloco de instruções será executado ou não. Por exemplo, se estiver ensolarado você poderá ir ao mercado para sua mãe. Nesse exemplo temos a condição “estar ensolarado” e a ação “ir ao mercado”. No Python, a sintaxe do if é dada por: if (condição): instrução 1 instrução 2 instrução N Se a condição estabelecida for verdadeira o programa executará o bloco de instruções dentro do if. Devemos ficar atentos a indentação do código, pois é ela que delimita o que será executado em cada parte do código. idade = 25 if (idade > 18 and idade < 70): print('Seu voto é obrigatório') No exemplo acima criamos uma variável idade e, com a ajuda do if, vamos determinar se a pessoa com essa idade pode ou não votar. Para idade = 25 a pessoa deve votar, ou seja, voto obrigatório. 3.4.2. Else A estrutura else é usada como um par da estrutura if e podemos entendê-los como “se - se não”. No exemplo anterior é possível relacionar o else da seguinte forma: se estiver ensolarado, vá ao mercado para sua mãe. Se não, não saia de casa e avise sua mãe. O else é executado apenas quando a condição estabelecida no if é falsa. idade = 10 if (idade > 18 and idade < 70): print('Seu voto é obrigatório') else: print('Você não vota') Quando declaramos a variável idade recebendo o valor 10 a condição estabelecida no if não é cumprida pois 10 não está no intervalo [18,70[. Então, o código pula o bloco de instruções estabelecidas dentro do if e vai direto para o else. 3.4.3. Elif A estrutura elif (else + if) é usada quando precisamos adicionar mais condições para seguir a linha de raciocínio do programa e pode ser entendido como um “se não, se”. Seguindo o exemplo do supermercado, se estiver chovendo, você deverá ir ao mercado. Se não, se você tiver um carro e souber dirigir, você deverá ir ao mercado. Se não, você não irá ao mercado e avisará sua mãe. Veja que mesmo que não esteja ensolarado, há uma outra condição, ter carro e saber dirigir, que possibilita a ida ao mercado. idade = 16 if (idade > 18 and idade < 70): print('Seu voto é obrigatório') elif((idade >=16 and idade < 18) or idade >70): print('Seu voto é opcional') else: print('Você não vota') Nesse exemplo, a variável idade recebeu o valor 16. No Brasil, uma pessoa com idade entre 16 e 17 anos ou maior ou igual a 70 anos pode votar, mas não é obrigada. Para que nosso programa identifique essa situação usamos a estrutura elif. Assim, se a condição do if não for atendida, o código verifica a condição no elif e só se essa não for atendida que ele executa as instruções no else. É importante ressaltar que podemos criar quantos elif quisermos. 3.5. Exercícios 1. Faça um programa que peça dois números e imprima o maior deles; 2. Faça um script que peça um valor e mostre na tela se o valor é positivo ou negativo; 3. Crie um programa que verifique se uma letra digitada é "F" ou "M". Conforme a letra escrever: F - Feminino, M - Masculino, Sexo Inválido; 4. Faça um programa que leia um número inteiro e diga se ele é ou não um número primo; 5. Escreva um programa para aprovar o empréstimo bancário para a compra de uma casa. O programador vai perguntar o valor da casa, o salário do comprador e em quantos anos ele vai pagar. Calcule o valor da prestação mensal sabendo que ela não pode exceder 30% do salário ou então o empréstimo será negado; 6. Desenvolva um programa que leia o peso de uma pessoa, calcule seu IMC e mostre seu status de acordo com as informações abaixo: Abaixo de 18.5: abaixo do peso Entre 18.5 e 25: peso ideal 25 até 30: sobrepeso 30 até 40: obesidade Acima de 40: obesidade mórbida 4. Trabalhando com Strings 4.1. Strings Quando desejamos guardar um texto ou uma frase em Python, que nada mais é do que uma sequência imutável de caracteres, utilizamos uma string. Acabamos de dizer que a string é uma sequência imutável, o que significa que uma vez que a string foi criada, os seus caracteres não podem ser alterados. Essa sequência pode ser divida em partes e em python podemos utilizar os índices para chamar as partes das sequências. Para criar uma string devemos colocar o texto desejado entre aspas, podendo ser aspas simple ou duplas, já que linguagem não as diferencia. curso = 'Fundamentos essenciais para Python' 4.2. Acesso a elementos 4.2.1. Índices Em algumas situações, quando estamos programando, precisamos acessar um determinado elemento na string. Cada item da string possui um índice para que possamos acessá-lo. A contagem é feita da esquerda para a direita começando no número 0. Isso quer dizer que o primeiro elemento possui índice 0, o segundo possui índice 1, seguindo assim até o final da string. print(curso[0]) print(curso[1]) print(curso[2]) print(curso[3]) --------------------------- F u n d Como foi dito, o primeiro elemento da variável curso, F, foi acessado através do índice 0. Porém, essa não é a única indexação que a linguagem oferece. Podemos também, sequenciar da direita para esquerda através de índices negativos: print(curso[-6]) print(curso[-5]) print(curso[-4]) print(curso[-3]) print(curso[-2]) print(curso[-1]) --------------------------- P y t h o n Veja que a última letra da string curso é a letra n e podemos acessá-la através do índice -1. A penúltima letra é a letra o, que pode ser acessada pelo índice -2. Assim, podemos acessar elementos de trás para frente. 4.2.2. Slices Em algumas situações não queremos apenas um único elemento da string, mas sim um pedaço maior dela. A linguagem permite o acesso em slice, ou seja, acessar uma parte maior da string. Existem várias formas de acessar um pedaço de uma string como reverso, da parte até o final, misto, exclusivamente negativo e com saltos negativos e múltiplos. Veja os exemplos a seguir: curso[:6] --------------- 'Fundam' Perceba que no código acima pegamos todos os itens até o elemento de índice 5. Apesar de termos colocado até 6, o Python considera o slice como um intervalo aberto à direita, ou seja, o elemento de índice 6 não está incluso. Podemos, também, acessar slices através dos índices negativos: curso[-6:] --------------- 'Python' Veja que com o slice reverso foram selecionadas os 6 últimos caracteres ao invés dos 6 primeiros. Outra variação importante desse tipo de acesso é o com saltos. Podemos, na string, pegar do elemento 1 até o elemento 10 saltando de 2 em 2: curso[1:10:2] --------------- 'yhnpr' 4.3. Operadores em strings As strings, por serem sequências, suportam alguns tipos de operações como concatenação, que é a junção de duas strings, e repetição, que cria uma nova string repetindo a primeira. resp = 'Maria é responsavel pelo setor ' setor = 'comercial' print(resp + setor) -------------------------------- Maria é responsavelpelo setor comercial nome = "Joao" print (nome * 3) print(nome + " é"* 3) print((nome + " é ") * 3) --------------- JoaoJoaoJoao Joao é é é Joao é Joao é Joao é Observe, nos exemplos, que a concatenação é feita através do sinal +, porém o significado desse sinal é diferente do sinal de soma. Nas strings o + passa a ideia de junção de elementos. O mesmo acontece com o sinal *, nas strings esse sinal possui significado de repetição e não de vezes. Isso acontece pois o Python possui uma propriedade chamada polimorfismo, ou seja, o significado de uma operação depende do objeto em que a operação acontecerá. Existem, também, algumas operações nativas do Python que podem ser aplicadas nas Strings e são de grande utilidade, como o type() e o len(). Como já explicamos em lições anteriores, o type retorna qual o tipo do dado e o len retorna o tamanho daquele dado. print('Tipo da string: ', type(curso)) print('Tamanho da string:', len(curso)) -------------------------------- Tipo da string: <class 'str'> Tamanho da string: 28 Quando trabalhamos com Strings podemos, também, verificar se um elemento específico se encontra ou não na nossa variável do tipo string através da palavra-chave in. 'Python' in curso ------------------- True 'a' in curso ------------------- True 'bala' in curso ------------------- False 4.4. Métodos e manipulação de strings Todas as operações em strings que vimos até aqui, são, na verdade, operações que podem ser realizadas em objetos sequenciáveis, ou seja, elas também funcionarão em estruturas como listas e tupla, que veremos no módulo seguinte. Além dessas operações genéricas, as strings possuem operações próprias, chamadas de métodos. 4.4.1. Count O método count() retorna a quantidade de ocorrência da substring que foi passada como parâmetro na string original curso.count('a') ------------------- 4 4.4.2. Find e Replace O método find() retorna o menor índice em que a substring passada como parâmetro foi encontrada. Se não for encontrada ela retorna -1. curso.find('an') ------------------- -1 Já o método replace() retorna uma cópia da sequência com todas as ocorrências da substrings pela nova string passada como parâmetro. curso.replace('Python','Java') -------------------------------- 'Fundamentos essenciais para Java' 4.4.3. Upper, Lower e Capitalize Os métodos upper() e lower() vão modificar retornar uma cópia da string em que todos os caracteres são em letras maiúsculas e minúsculas, respectivamente. curso.upper() -------------------------------- 'FUNDAMENTOS ESSENCIAIS PARA PYTHON' curso.lower() -------------------------------- 'fundamentos essenciais para python' Já o método capitalize() retorna uma cópia da string em que apenas o primeiro caractere está em maiúsculo. curso.capitalize() ---------------------------------- 'Fundamentos essenciais para python' 4.4.4. Split e Join O método split tem como objetivo dividir uma string. No parâmetro da função deve ser passado o caractere separador, ou seja, quando o caracter informado for encontrado a string será separada. Por padrão, esse caractere é o espaço, porém podemos definir um caractere qualquer. Ao contrário do método split, temos também o método join, que retorna uma string na qual os elementos da sequência foram unidos pelo separador str (-). curso.split() ----------------------------------------- ['Python', 'para', 'análise', 'de', 'dados'] '-'.join(curso) ----------------------------------------- 'P-y-t-h-o-n- -p-a-r-a- -a-n-á-l-i-s-e- -d-e- -d-a-d-o-s' 4.4.5. Strip Em python, existe muitos métodos que auxiliam no tratamento das strings, muitas operações podem ser feitas para facilitar o trabalho com as strings. Dentre elas podemos citar strip(), rtrip() e lstrip(). Quando queremos transformar ou mudar algo dentro da string podemos usá-las. A primeira remove todos os espaços inúteis no início e no final da string. Já a segunda, rstrip (que significa Right Strip), e a terceira, lstrip (que significa Left Strip), removem os espaços inúteis existentes na direita e na esquerda respectivamente. nova_frase = " Fundamentos Python " ----------------------------------------- 'Fundamentos Python' nova_frase.rstrip() ----------------------------------------- ' Fundamentos Python' nova_frase.lstrip() ----------------------------------------- 'Fundamentos Python ' 4.5. Inserção e formatação de substrings A formatação de strings no Python é, atualmente, feita através do método format() . É um método de formatação de strings que permite concatenar elementos dentro de uma string através de formatação posicional. nome = 'Luiz' setor = 'RH' texto = "{} é responsavel pelo setor {}".format(nome, setor) print(texto) ----------------------------------------------------------- Luiz é responsavel pelo setor RH val = 10.123243 text2 = "valor {:.2f} com 2 casa decimais".format(val) print(text2) ----------------------------------------------------------- valor 10.12 com 2 casa decimais 4.6. Exercícios 1. Crie um programa que leia o nome completo de uma pessoa e mostre: O nome com todas as letras maiúsculas e minúsculas. Quantas letras ao todo (sem considerar espaços). Quantas letras tem o primeiro nome. 2. Crie um programa que leia o nome de uma cidade diga se ela começa ou não com o nome "SANTO". 3. Faça um programa que leia uma frase pelo teclado e mostre quantas vezes aparece a letra "A", em que posição ela aparece a primeira vez e em que posição ela aparece a última vez. 5. Estrutura de dados Alguma vezes, quando estamos programando, trabalhamos com apenas um dado, seja ele um número ou um texto. Porém, em diversas situações, precisamos usar um conjunto de dados, como uma lista de nomes ou uma lista de produtos e seus preços. Para isso, usaremos as estruturas de dados listas, tuplas, dicionário e conjuntos. 5.1. Listas As listas são as estruturas de dados ordenadas mais flexíveis dentro do Python. Ao contrário das strings, as listas podem conter qualquer tipo de dado, como números, strings e até outras listas. Além disso, as listas são mutáveis, ou seja, você pode modificar, adicionar ou deletar qualquer elemento dentro dela. Elas são construídas por elementos dentro de um colchete [ ] , separados por vírgula. Esse tipo de estrutura possui certas propriedades como: 1. Ser uma coleção ordenada de objetos: podemos ver as listas como lugares para armazenar outros objetos para que possamos tratá-los como grupos. 2. Acesso por índices: assim como vimos nas strings, os elementos das listas também podem ser acessados através de um índice. Isso implica, também, no acesso de elementos através de slices. 3. Tamanho variável e heterogeneidade: além da possibilidade de conter qualquer tipo de objeto (inteiros, floats, strings, etc.) as listas podem variar de tamanho, já que podemos adicionar ou retirar um elemento da lista listaSetores = ['Comercial', 'RH', 'Financeiro', 'Adm', 'Operacional'] listaSetores ----------------------------------------------------------- ['Comercial', 'RH', 'Financeiro', 'Adm', 'Operacional'] listaNum = [10, 4, 5, 10.3, 2] listaNum --------------------------------- [10, 4, 5, 10.3, 2] listaHomogenea = [10, 'Comercial', 'RH', 5, 10.3, 'Operacional'] listaHomogenea --------------------------------- [10, 'Comercial', 'RH', 5, 10.3, 'Operacional'] Operadores nativos do Python que já vimos anteriormente também podem ser usados nas listas, como o type() e o len(): len(listaSetores) --------------------------------- 5 type(listaNum) --------------------------------- list 5.2.1. Manipulação de listas Agora, vamos aprender algumas formas de manipulação de listas como acesso, operadores e os métodos mais usados para trabalharmos com as listas Acesso Para acessarmos os elementos dentro da nossa lista usamos uma sintaxe igual a que mostramos no acesso de elementos das strings. Podemos acessar por índices, índices negativos e slices. listaNum[3] ------------------- 10.3 listaNum[-3] ------------------- 5 listaNum[0:2] -------------------[10, 4] listaSetores[::2] ------------------- ['Comercial', 'Financeiro', 'Operacional'] Operadores Os operadores + e * podem, também, ser usados nas listas com o mesmo objetivo de que foram utilizados nas strings, de concatenação e repetição, respectivamente. l1 = [1,2,3,4] l2 = [5,3,6,2] l1 + l2 ------------------- [1, 2, 3, 4, 5, 3, 6, 2] print("L1: ", l1) print("L1 * 3:", l1*3) ------------------- L1: [1, 2, 3, 4] L1 * 3: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] Métodos de manipulação de listas Como já dissemos várias vezes, as listas são estruturas de dados que podem ser alteradas. A seguir, mostraremos como manipulá-las e modificá-las. print('ListaNum original: ', listaNum) listaNum[0] = 78 print('ListaNum após mudança: ',listaNum) --------------------------------------- ListaNum original: [10, 4, 5, 10.3, 2] ListaNum após mudança: [78, 4, 5, 10.3, 2] Nesse exemplo, fizemos uma atribuição simples. O elemento de índice 0, que antes era o número 10, foi substituído pelo número 78. Além disso, as listas possuem muitos métodos para manipulá-las. Remove O método remove() apaga o primeiro elemento encontrado com valor igual ao que foi passado como parâmetro. Se o elemento não existir, ele retorna erro do tipo ValueError listaSetores.remove('Financeiro') listaSetores --------------------------------------- ['Comercial', 'RH', 'Adm', 'Operacional'] Append Esse método adiciona o item especificado dentro do parênteses ao final da lista listaSetores.append("Marketing") listaSetores --------------------------------------- ['Comercial', 'RH', 'Adm', 'Operacional', 'Marketing'] Pop Utilizamos o método pop() quando queremos retirar um elemento da lista a partir do índice informado. Se nenhum índice for informado, a função apaga e nos devolve o último elemento da lista. listaSetores.pop() listaSetores --------------------------------------- ['Comercial', 'RH', 'Adm', 'Operacional'] listaSetores.pop(1) listaSetores --------------------------------------- ['Comercial', 'Adm'] Sort Esse método é usado quando queremos uma lista ordenada. Por padrão, ela ordena de forma crescente, ou seja, do menor para o maior. Porém, podemos mudar isso, basta escrever dentro dos parênteses reverse = True. listaSetores.sort() listaSetores --------------------------------------- ['Adm', 'Comercial', 'Financeiro', 'Operacional', 'RH'] listaNum.sort() listaNum --------------------------------------- [2, 4, 5, 10.3, 78] Esses são os métodos mais utilizados em Python sobre listas, porém existem vários outros. Caso queira conhecê-los acesse a documentação oficial. 5.2. Tuplas As tuplas são estruturas semelhantes às listas, porém elas tuplas são imutáveis. Geralmente usamos tuplas para guardar dados que não podem ser alterados ou que já conhecemos o tamanho. As tuplas são construídas por itens dentro de parênteses ( ), separados por vírgula. Apesar da tuplas não suportarem nenhuma chamada de método, elas apresentam grande parte das propriedades que citamos das listas. https://docs.python.org/pt-br/3/tutorial/datastructures.html#more-on-lists 1. Ser uma coleção ordenada de objetos: assim como as listas, podemos ver as tuplas como lugares para armazenar outros objetos em sequência para que possamos tratá-los como grupos. 2. Acesso por índices: assim como vimos nas strings e nas listas , os elementos das tuplas podem ser acessados através de um índice. Isso implica, também, no acesso de elementos através de slices. 3. Sequência imutável: assim como já mencionamos anteriormente, as tuplas são estrutura imutáveis, ou seja, não podemos adicionar nem remover um de seus elementos. 4. Tamanho fixo e heterogeneidade: assim como as listas, as tuplas podem conter qualquer tipo de objeto, como int, float, strings e até listas. 5.2.1. Manipulação de tuplas Apesar de serem imutáveis, as tuplas possuem funções que serão muito úteis na hora de programarmos. Criação Uma tupla consiste em uma sequência de dados separados por vírgula sempre envolvidos por "( )". tuplaNum = (12, 19,21, 34, 90, 3) tuplaNum --------------------------------------- (12, 19, 21, 34, 90, 3) tuplaHetero = (12, 19, 21, 'Minha', 3.8, 'Tupla') tuplaHetero --------------------------------------- (12, 19, 21, 'Minha', 3.8, 'Tupla') Observe, no código abaixo, que se tentarmos mudar algum elemento da tupla o Python retornará um erro do tipo TypeError: tuplaHetero[0] = 18 --------------------------------------- TypeError Traceback (most recent call last) <ipython-input-23-f4be0c3b81a9> in <module>() ----> 1 tuplaHetero[0] = 18 TypeError: 'tuple' object does not support item assignment Acesso O acesso nas tuplas é dado de forma similar às listas e strings. Assim como elas, temos diversas formas de acessar os elementos de uma tupla. tuplaHetero[0] --------------------------------------- 12 https://localhost:8080/# tuplaNum[:3] --------------------------------------- (12, 19, 21) Desempacotamento O Python tem um mecanismo de atribuição múltipla de variáveis retirando elementos de tuplas. Esse mecanismo é chamado de desempacotamento. Essa técnica é muito útil quando queremos atribuir a diferentes variáveis cada um dos elementos da tupla. curso = ('Python', 'Voitto', 2020, 12345, 10) nomeDocurso, empresa, anoDeCriacao, codigo, nota) = curso nomeDocurso ------------------------------------------------------- 'Python' Operações As tuplas também suportam operações de concatenação e de repetição assim como as listas e strings. Lembrando que essas operações são feitas através dos sinais + e *, respectivamente. tuplaNum + tuplaHetero ------------------------------------------------------- (12, 19, 21, 34, 90, 3, 12, 19, 21, 'Minha', 3.8, 'Tupla') tuplaNum * 3 ------------------------------------------------------- (12, 19, 21, 34, 90, 3, 12, 19, 21, 34, 90, 3, 12, 19, 21, 34, 90, 3) Extensão sobre tuplas Apesar de não podermos mudar, diretamente, um elemento de uma tupla com as operações acima podemos realizar certas alterações. Se quisermos adicionar algum elemento à nossa variável tupla basta concatenarmos com uma outra tupla com os elementos que queremos e atribuir o resultado dessa concatenação a tupla original. tuplaNum = tuplaNum +(10,12) tuplaNum ------------------------------------- (12, 19, 21, 34, 90, 3, 10, 12, 10, 12) Podemos, também, criar uma tupla em que os elementos dentro dela são listas. Como as listas são objetos mutáveis. é possível alterar o elemento que está dentro da tupla minha_tupla = ([1,2,3], ['a','b','c']) print('Tupla de listas:',minha_tupla) ------------------------------------- Tupla de listas: ([1, 2, 3], ['a', 'b', 'c']) minha_tupla[0].append(4) print('Adicionando 4 no objeto 0:',minha_tupla) ------------------------------------------------------ Adicionando 4 no objeto 0: ([1, 2, 3, 4], ['a', 'b', 'c']) Se essas duas táticas de operações ainda não forem suficientes ou a mudança na tupla for muito extensa, podemos transformar a tupla em lista e, então, fazermos as mudanças que quisermos l_tuplaNum = list(tuplaNum) l_tuplaNum ----------------------------- [12, 19, 21, 34, 90, 3] l_tuplaNum.append(30) l_tuplaNum ------------------------------ [12, 19, 21, 34, 90, 3, 30] 5.3. Dicionários Os dicionários em Python são estruturas completamente diferentes das listas e das tuplas e a principal diferença é que eles não são sequenciados, mas são mapeados. O mapeamento dos dicionários acontece pois há um elemento chave que pode guardar diversos valores. Dessa forma, o acesso aos elementos do dicionário não é feito através do índice em que o elemento se encontra, mas sim pela chave relacionada a ele. Outra característica importante dos dicionários é que eles são mutáveis, ou seja, podemos adicionar ou retirar elementos, assim como as listas. Os dicionários são úteis sempre que precisamos associar um conjunto de valores com chaves - para descrever as propriedades de algo, por exemplo 5.3.1. Manipulação de dicionários Criação Os dicionários são delimitados por '{ }'e contém uma lista de pares chave: valor separados por vírgulas. dicionarioSetores = {'Comercial': 'Maria', 'RH': 'Luiz', 'Financeiro':'Joao', 'Adm': 'Luisa', 'Operacional': 'Ana'} dicionarioSetores ----------------------------------------- {'Adm': 'Luisa', 'Comercial': 'Maria', 'Financeiro': 'Joao', 'Operacional': 'Ana', 'RH': 'Luiz'} dicionario = {'a': 2, 'b': 4, 'c': '45'} dicionario ----------------------------------------- {'a': 2, 'b': 4, 'c': '45'} Acesso Ao contrário das listas e tuplas, que possuem acesso por índices, os elementos de um dicionário são acessados através das chaves. dicionarioSetores['RH'] ----------------------------------------- 'Luiz' dicionario['a'] ----------------------------------------- 2 Operações As principais operações que podem ser feitas em um dicionário envolvem armazenar e recuperar valores a partir das chaves. Podemos excluir um valor a partir da operação del e verificar a existência de uma chave com a operação in. Essas operações retornam True ou False ao verificar se uma chave se encontra ou não no dicionário em questão. É importante ressaltar que essas operações só serão feitas em cima das chaves e não dos valores do dicionário. 'Operacional' in (dicionarioSetores) ----------------------------------------- True 'Maria' in (dicionarioSetores) ----------------------------------------- False del dicionarioSetores['Adm'] dicionarioSetores ----------------------------------------- {'Comercial': 'Maria', 'Financeiro': 'Joao', 'Operacional': 'Ana', 'RH': 'Luiz'} Podemos, também, adicionar elementos ao nosso dicionário, lembrando sempre que eles devem conter uma chave e valores relacionados a essa chave dicionarioSetores['Executivo'] = 'Rafael' dicionarioSetores ----------------------------------------- {'Adm': 'Luisa', 'Comercial': 'Maria', 'Executivo': 'Rafael', 'Financeiro': 'Joao', 'Operacional': 'Ana', 'RH': 'Luiz'} 5.4. Conjuntos Além das estruturas citadas, o Python oferece mais uma estrutura chamada set para representar conjuntos. Os conjuntos são coleções desordenadas de elementos sem repetições. Eles são muito utilizados quando queremos eliminar itens repetidos em certos objetos e quando precisamos realizar operações matemáticas de conjuntos, como união, interseção, diferença e diferença simétrica. 5.4.1. Manipulação de conjuntos Criação Para criar uma estrutura do tipo de conjunto podemos usar chaves “{ }” ou chamar o construtor set(). frutas = {'banana', 'maca', 'mexerica', 'morango', 'morango', 'uva', 'uva'} frutas ----------------------------------------- {'banana', 'maca', 'mexerica', 'morango', 'uva'} lista = [1,1,2,2,2,3,3,3,3,4,4,4,5,5,6,9,10] set(lista) ----------------------------------------- {1, 2, 3, 4, 5, 6, 9, 10} Acesso Apesar de muito útil, a estrutura de conjuntos não é indexável e, por isso, não é possível fazer acesso dos elementos que estão dentro dela através de índices ou chaves. Operações Assim como nos dicionários, podemos verificar a existência de um elemento no conjunto. Porém não é possível deletar nenhum elemento. 'banana' in (frutas) ----------------------------------------- True del frutas['banana'] ----------------------------------------- TypeError Traceback (most recent call last) <ipython-input-46-ab91f89fcc8f> in <module>() ----> 1 del frutas['banana'] TypeError: 'set' object does not support item deletion Com os conjuntos também podemos realizar operações matemáticas de conjuntos. União A união de conjuntos, assim como na matemática, corresponde a junção dos elementos dos conjuntos de dados. a = {1,2,3,4,5,6} b = {1,2,7,8,9,10,11} print('União: ',a.union(b)) ----------------------------------------- União: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} Interseção A interseção de conjuntos corresponde aos elementos que se repetem nos dois conjuntos dados. print('Interseção: ', a.intersection(b)) ----------------------------------------- Interseção: {1, 2} Diferença A diferença de conjuntos é representada pelos elementos de um conjunto que não aparecem no outro conjunto. print('Diferença: ', a.difference(b)) ----------------------------------------- Diferença: {3, 4, 5, 6} https://localhost:8080/# Diferença simétrica Já a diferença simétrica entre conjuntos é dada pela união dos conjuntos menos os elementos que se encontram na interseção. print('Diferença simétrica: ', a.symmetric_difference(b)) ------------------------------------------------------ Diferença simétrica: {3, 4, 5, 6, 7, 8, 9, 10, 11} 5.5. Exercícios 1. Crie uma tupla preenchida com os 20 primeiros colocados da Tabela do Campeonato Brasileiro de Futebol na ordem de colocação e mostre: Os 5 primeiros; Os 4 últimos colocados; Times em ordem alfabética; Em qual posição está o time que você torce; 2. Criar um programa que vai gerar cinco números aleatórios e colocar em uma tupla. Depois disso, mostre a listagem de números gerados e também indique o menor e o maior valor que estão na tupla; 3. Desenvolva um programa que leia quatro valores pelo teclado e guarde-os em uma tupla. No final, mostre: Quantas vezes apareceu o valor 9; Em que posição foi digitado o primeiro valor 3; Quais foram os números pares; 6. Estrutura de repetição Outro processo muito importante na programação, além da tomada de decisão, é a repetição de blocos de instrução. Em diversas situações, quando estamos programando, precisamos que certos comandos sejam executados mais de uma vez. Para não ficarmos repetindo as mesmas instruções diversas vezes, existem os loops como for e while que veremos ao longo deste módulo. 6.1. Instrução for Em python, a sintaxe da estrutura de repetição for não é a tradicional utilizada em outras linguagens, na qual temos que definir no cabeçalho da estrutura uma variável e iniciá-la, a condição de parada e o incremento. O uso do for em python permite que possamos interagir com sequência tais como: strings, listas, tuplas e dicionários. A estrutura for é composta pela definição de uma variável, seguida pela sequência que será iterada. A variável a ser declarada no início da estrutura receberá um item contido na sequência a cada iteração do for. No final, todos os elementos da sequência terão sido percorridos e a cada iteração, o elemento seguinte que estiver contido na sequência terá sido passado pela variável listaSetores = ['Comercial', 'RH', 'Financeiro', 'Adm', 'Operacional'] for setores in listaSetores: print(setores) ------------------------------------------------------ Comercial RH Financeiro Adm Operacional nome = 'Maria' for caractere in nome: print(caractere) ------------------------------------------------------ M a r i a 6.2. Iteradores range e enumerate 6.2.1. Range A função range é uma função interna do Python muito utilizada na estrutura de repetição for. Essa função nos retorna uma sequência de valores iterativos de acordo com um determinado intervalo passado a ela. Essa função pode receber até 3 informações diferentes para criar a sequência de valores, sendo eles (i) em qual número essa sequência começa, (ii) até qual número ela vai e (iii) qual será o intervalo entre esse números (de 1 em 1, de 2 em 2, etc.) list(range(0,5)) -------------------- [0, 1, 2, 3, 4] Podemos mudar o início da criação dessa lista. Ao invés dela começar no 0, podemos fazer com que comece no 1. list(range(1,6)) -------------------- [1, 2, 3, 4, 5] Por último, também podemos criar listas com “saltos” entre os números. list(range(10,20,2)) -------------------- [10, 12, 14, 16, 18] 6.2.2. For + Range Por criar uma estrutura iterativa, o range é muito utilizado juntamente com o loop for. for i in range (5): print(i) -------------------- 0 1 2 3 4 for i in range (10,20): print(i) -------------------- 10 11 12 13 14 15 16 17 18 19 for i in range(0,100,10): print(i) -------------------- 0 10 20 30 40 50 60 70 80 90 for i in range (len(listaSetores)): print(listaSetores[i]) -------------------- Comercial RH Financeiro Adm Operacional 6.2.3. Enumerate
Compartilhar