Apostila Python

March 17, 2018 | Author: Márcio Vieira Jr. | Category: Python (Programming Language), Compiler, Programming Language, Data Type, Information


Comments



Description

Fundamentos da computaçãocom Python Prefácio Sobre a apostila Voltado para alunos iniciantes e intermediários no curso de desenvolvimento de algoritmos e na linguagem Python o livro visa o aprendizado do pensamento algoritmo e sua aplicação em uma linguagem de fácil aprendizado. Durante o decorrer do livro serão apresentados diversos conceitos úteis não somente para alunos de ciência da computação, mas também para alunos de engenharia, ou qualquer outro aluno que queira iniciar o aprendizado em programação . Como o leitor já deve ter percebido, ao contrário dos demais livros, que são extremamente longos este livro tentará ser o mais breve possível, para que dessa forma possa auxiliar estudantes em sala de aula ou em casa. 2 Capitulo I Computadores e algoritmos A construção de programas é a questão central para o uso eficaz dos computadores na solução de problemas a partir do desenvolvimento de conjuntos de funções organizadas de maneira lógica. As regras para um raciocínio correto já eram conhecidas dos antigos gregos no século IV A.C. com os ensinamentos de Sócrates, Platão e Aristóteles a quem coube criar o grupo conhecido como Lógica Formal, Lógica menor ou Epistemologia que contém a sistematização das leis. A interpretação matemática dessas regras lógica somente ocorreu em 1854, com George Boole em seu trabalho “Uma investigação das leis do pensamento”. Este conjunto de conhecimentos é hoje chamado de Álgebra Booleana compondose de Lógica Simbólica e Lógica Matemática. Quase um século mais tarde, em 1937, Claude Elwood Shannon publicou o trabalho “Uma análise simbólica de circuitos de comutação e relés” mostrando que a Lógica Simbólica de Boole descrevia os circuitos lógicos como a base para o projeto dos computadores. 1.1 A obtenção da Informação A informação tem sua origem na realidade que nos cerca. A partir desta realidade pode-se realizar uma abstração gerando o conhecimento. 3 a Web Semântica que trata da integração de recursos computacionais e humanos para ajudar na descoberta e no uso dos recursos da web.O conhecimento de um objeto existente no mundo real é constituído por um conceito que reflete seu tipo e um termo. os dados pessoais de um grupo de pessoas ou mesmo uma pesquisa no Google. A partir da representação a informação poderá ser obtida por uma operação de interpretação. por exemplo. O termo é o que nos permite comunicar a ideia e processamento de dados é denominado valor. Pode-se perceber que existem dois grandes grupos de informações: o primeiro trata de informação estruturada como. conceito ou termo existe no mundo lógico enquanto o que denominam dados existe no mundo físico. Inicialmente deve-se distinguir a informação inicial da informação estruturada. o segundo grupo trata de informações não estruturadas como. por exemplo. 4 . conforme mostra a figura 1 a seguir: 4 4 IV 4 QUATRO CONCEITO TERMO quatro REPRESENTAÇÃO Figura 1 Representações A informação. Neste livro iremos utilizar informações estruturadas. Um termo ou valor pode ter várias representações. 2. estruturas de dados são simples. Vantagens: Execução rápida. consome menos memória. permite otimização do código fonte 5 .Para que uma informação seja processada é necessário um processo prévio de entendimento e modelagem do problema cuja sequência de operações pode ser observada na figura Realidade Informação Inicial Modelo Abstração Informação estruturada Figura 2 Etapas da Modelagem das informações 1. Vantagens: Depuração do programa é mais simples. permite estruturas de programação mais completas.2 Programas Tradutores 1. Desvantagens: Execução do programa é mais lenta. resultado imediato na rotina desenvolvida.1 Interpretadores Interpretadores são tipos de tradutores que traduzem um código fonte e o executam linha a linha.2. aquela que o computador pode entender. necessário fornecer o programa fonte ao utilizador. 1.2 Compiladores É um tipo de tradutor que converte o código reconhecido pela linguagem para a linguagem de máquina. O Python a partir da versão 2. de forma consistente. mas não para o usuário.3 Erros Os erros em Python podem léxicos ou sintáticos. 6 .x passou a suportar os caracteres do UNICODE. O alfabeto utilizado para escrever os comandos é composto pela tabela ASCII (American Standard Code for Information Interchange). 1.  Erros sintáticos: Os erros sintáticos caracterizam-se pela a utilização errada ou desconhecida de um ou mais conjuntos de vocábulos. maior consumo de memória.2.  Erros semânticos: Refere-se a operações que fazem sentido para o tradutor.Desvantagens: Várias etapas de tradução. processo de correção de erros e depuração é mais demorado. os caracteres de qualquer sistema de escrita existente. O UNICODE é uma evolução do padrão ASCII que permite aos computadores representar e manipular.  Erros Léxicos: Os erros léxicos caracterizam-se por uma escrita errada ou simplesmente não reconhecida pela linguagem adotada. 1. O esquema abaixo mostra de forma resumida os processos realizados pela linguagem: Nucleo do Python Ambiente em tempo de execução Grupo de arquivos Alanisador Lexico (Scanner) Estruturas de objetos/tipos Modulos do usuário Analisador Sintatico (Parser) Modulos do Nucleo Compilador Bibliotecas Alocador de memoria Avaliador de Codigo Estado atual Arquitetura de intepretação Python 7 . que ocorre quase que de forma oculta ao programador.3 Funcionamento da linguagem Em resumo às diversas etapas que ocorrem durante o processo de compilação. é transformado em um código em linguagem de máquina e alocado em um local seguro no seu computador. ele poderá ser interpretado etapa a etapa. Esses arquivos permanecerão salvos a fim de agilizar o processo de compilação (o próprio Python verifica se as datas de alteração do código fonte e do código de bytes para saber se deverá ou não recompilar). e execução do código podemos citar algumas etapas chave:  Compilação do código fonte em código de byte: Nessa etapa o código fonte.  Interpretação do código de bytes: Uma vez que o código de bytes tenha sido gerado. conteúdo do programa. e modificável.Memoria indicam o relacionamento ”utiliza”. O alocador de memória é responsável por alocar a memória para objetos de Python (externo e interno) e conectado com as rotinas padrão malloc do C. e nao tem nenhum significado conceitual. sao agrupados módulos do núcleo Python. No lado esquerdo. A seta unidirecional entre ”Avaliador de Código . por Guido van Rossum.O diagrama acima foi elaborado por Bastos. contudo seu código só foi publicado em 1991. que constituem o ambiente em tempo de execução. O diagrama acima representa a interpretação da arquitetura do nível mais elevado do sistema Python. No centro do diagrama esta ilustrado o nucleo do interpretador Python. de bibliotecas e modulos definidos pelos usuarios. As setas dentro da caixa do interpretador indicam fluxo de dados. A biblioteca e os módulos definidos pelos usuarios podem estender o sistema Python desde que seja mantida a portabilidade. 8 .Estado atual do Python indica o relacionamento ”modifica”. As estruturas de objetos e tipos representam os objetos internos que estao disponíıveis em Python 1. As setas bidirecionais entre ”Analisador Sintático . O estado atual do Python refere-se ao estado de execução do interpretador. alocador de memória e a estrutura de objetos e tipos.4 Sobre o Python A linguagem Python foi concebida no final de 1989. Ao lado direito e mostrado o estado atual do Python.E e Freitas Juliano “Interpretador/Compilador Python” e apresenta a arquitetura do Python que pode ser classificada em quatro componentes principais. visto como uma máquina de estado finito muito grande. As variações da espessura das linhas servem para melhorar a legibilidade.Tipo de objeto e Compilador – Alocador . complexa. Para Python “tudo é objeto”. favorecendo o entendimento.5 Características da linguagem              Conceitos fundamentais fáceis de compreender Programas são mais curtos de escrever Sintaxe clara e concisa. O Python é uma linguagem interpretada licenciada como Software Livre e com uma vasta biblioteca de módulos igualmente livres e sem restrições para sua distribuição. 9 . incluindo programação procedural. que eliminasse a declaração de variáveis e que usasse a indentação para delimitar seus blocos baseando-se no ALGOL. A natureza flexível da linguagem de programação Python suporta diversas filosofias de programação. Não é tão eficiente como algumas linguagens compiladas. Suporte a programação modular. Possibilidade de download de bibliotecas de terceiros. em Python existe a possibilidade de compilar seu código. Diversos módulos já inclusos. Assim surgiu a ideia da criação de uma linguagem que englobasse os elementos bem sucedidos na linguagem ABC. Python é livre. que visava o aprendizado e competia com as linguagens Basic e AWK.influenciada pela linguagem ABC. funcional e à orientação a objeto. Python é case sensitive. Apesar de ser considerada linguagem interpretada. Presença de estruturas de alto nível. possuindo a vantagem de escrever bem menos em comparação a essas linguagens. 1. ou seja. ele faz diferenciação entre letras maiúsculas e minúsculas. Pode ser executado em qualquer plataforma. orientada a objetos e funcional. como ocorre em algumas linguagens. Nokia. A tipagem é forte. ou seja. Async. Sempro. Philips. PostgreSQL.Python. Possui tipagem dinâmica. isso significa que a linguagem não converte tipos automaticamente. Universidade de Maryland.6 Quem usa Python Nasa. Conectiva. Disney. sem a necessidade do programador definir seu tipo previamente. Microsoft (. Atari.NET) . Blender 3D. Inkscape entre outros. CPqD. 1.7 Instalação e inicialização do Python no Windows Faça o download do arquivo de instalação do Python na página da Internet: http://www. os tipos das variáveis são definidos pelo interpretador. Apple (MAC OS X).org/download/e selecione a opção para download do Python 2.3 10 . Embratel. Yahoo!. por esse motivo ao realizar as operações deve ser claro o tipo da variável que está usando.   Possibilidade de integrar Python com outras linguagens. 1.7. Google.  Module Docs – Documentação dos Módulos do Python.Interpretador usando Linhas de Comando  Python Manuals – Manuais do Python em Inglês. Ao final do processo terão sido instalados os seguintes componentes em seu computador: IDLE (Python GUI) – Ambiente de Desenvolvimento Integrado disponibilizado junto com o Python e que será utilizado neste livro.  Uninstall Python – Desinstalador da Linguagem 11 .  Python (Command Line).Execute este arquivo dando um duplo clique com o botão esquerdo do mouse sobre ele e proceda com a instalação normalmente. 8.1 Alguns exemplos no Modo Interativo Lembre-se que o Python usa o ponto para separar a parte inteira de um numero da parte fracionária. 12 .8 O Modo Interativo (IDLE) Embora possamos selecionar várias interfaces gráficas (GUI) para usarmos com o Python neste texto usaremos a IDLE por ser de fácil uso e aprendizado. 1.1. Para usá-la siga os seguintes passos: a) Selecione b) A tela do Shell do Python para processamento interativo é mostrada a seguir: Neste módulo os comandos digitados seguidos de [ENTER] serão executados imediatamente possibilitando que o Python possa ser usado como uma calculadora. Neste modo os comandos serão 1) Digitados. inicie uma nova janela.9 Modo Programado Para usar o Python no modo programado. 2) Salvos – Atenção  Não se esqueça de colocar a extensão py no seu arquivo.1. uma vez que o Python possui seu próprio editor de texto. O Python NÃO faz isto automaticamente. 3) Executar o programa pressionando F5 ou selecionando Apesar de não ser exatamente necessário. pode-se utilizar qualquer 13 . como por exemplo o Bloco de Notas do Windows ou o vi do Linux. 1.10 Ajuda (Help Modules) O Python possui diversos módulos de ajuda que podem ser acessados. 14 .editor de texto puro para escrever o código. contendo uma breve descrição e comandos relacionados aquilo que foi pedido. Para acessar um help module deve-se digitar na IDLE help (argumento). Capitulo II Algoritmos Algoritmo é um conjunto finito de passos, que seguem regras bem definidas, e tem como finalidade a solução de um problema em um espaço de tempo finito. Ainda que o termo tenha sido popularizado com a informática, algoritmos podem se referir a passos de qualquer tipo de tarefa, dessa forma está correto falar algoritmo de preparação de um bolo, referindo-se a uma receita. 2.1 Características de um algoritmo       Integridade: refere-se à precisão das informações manipuladas pelo programa; Clareza: refere-se à facilidade de leitura do programa; Simplicidade: a clareza e precisão de um programa são normalmente melhoradas tornando seu entendimento o mais simples possível, consistente com os objetivos do programa; Eficiência: refere-se à velocidade de processamento e a correta utilização da memória; Modularidade: consiste na divisão do programa em módulos menores bem identificáveis e com funções específicas; Generalidade: é interessante que um programa seja tão genérico quanto possível de forma a permitir a reutilização de seus componentes em outros projetos. 15 2.2 Tipos de algoritmo 2.2.1 Descrição narrativa Consiste em descrever, de forma narrativa cada um dos passos necessários para a resolução de um problema. Exemplo: Manuais, Receitas de bolo em livros de culinária. 2.2.2 Diagrama de Chapin Esse tipo de representação de um algoritmo visa à estruturação hierárquica da lógica de solução de um problema. A vantagem na utilização desse tipo de representação é a vantagem na localização dos pontos de divisão. Observe o exemplo abaixo: 2.2.3 Pseudocódigo Este será o modelo que este livro tomará para a resolução de algoritmos. Essa forma de representar a resolução de problemas simula a solução do problema por uma linguagem computacional. 16 Apesar de não existirem regras rígidas para a codificação dos algoritmos, adotam-se modelos que de uma forma geral seguem a um padrão. Observe a seguir um exemplo de um pseudocódigo: Inicio Fim Ler A,B c=(A+B)/2 Se c>=7 então Escrever aprovado Se não Escrever reprovado fim se 2.3 O Fluxograma versus pseudo-código O pseudocódigo é uma linguagem de descrição de algoritmos e não pode ser executada diretamente pelo computador. Apesar dessa desvantagem, o pseudocódigo permite ao programador concentrar-se na lógica e nas estruturas de controle, sem ter que se preocupar com as regras de uma linguagem específica. O objetivo do fluxograma é o mesmo diferindo por ser usada uma representação gráfica, sendo mais trabalhosa de ser elaborada. 2.4 Comandos 2.4.1 = O símbolo = (igual) em geral na computação um sentido de atribua, totalmente diferente da matemática. Uma operação a=b+c, para nós significaria “pegue conteúdo de b e aplique a 17 Pode-se exibir uma mensagem colocando entre aspas. Normalmente um valor lido é armazenado em alguma variável.3 Escreva Significa exibir o conteúdo de uma variável. Segue abaixo a tabela verdade: 18 .5 Operadores matemáticos + soma .2 Leia Significa receber o que o usuário do programa envia.operação soma com o conteúdo de c. Não destrói o valor exibido.4. Escrever “resposta” 2.6 Operadores lógicos e/ou/não Comumente pessoas não acostumadas com lógica matemática utilizam de forma errônea operadores lógicos. 2.4. 2.subtração * multiplicação / divisão % resto inteiro da divisão // divisão inteira 2. o resultado da operação atribua em a”. quando queremos que uma ou mais instruções sejam executas ou não dependendo de uma condição.C1 C2 C1 e C2 C1 ou C2 Não C1 V F F V V V F F V F F F V V V F F V V F Nessa tabela C1 e C2 são condições a serem testadas. != (diferente) 2.7 Operadores comparativos Todos os operadores comparativos funcionam da mesma forma que rege a lógica.8 Estrutura de decisão As estruturas de decisão (ou também conhecidas como desvios) são usadas quando queremos mudar o fluxo do programa. ou seja. caso tenha dúvidas consulte o proximo capítulo. 2. Decisão composta: Quando existem duas ações a serem executadas se a condição for verdadeira ou se for falsa. >= (maior ou igual).   Decisão simples: Quando existe apenas uma ação a ser executada se a condição for verdadeira. < (menor). V equivale a verdadeiro e F a falso. <= (menor ou igual). 19 . > (maior). 2.8.1Representação da estrutura para faça Para variável=início até fim Passos a serem executados Fim para 20 .9. quando sabemos a quantidades de vezes queremos repetir o código (estrutura para). quando sabemos apenas que o código deve repetir até atingir uma determinada condição (estrutura enquanto).1 Representação de uma estrutura de decisão Simples Se condição então Passos a serem executados Fim se Composta Se condição então Passos a serem executados Se não Passos a serem executados Fim se 2. 2. As estruturas de repetição podem ser determinadas. e indeterminadas.9 Estruturas de repetição As estruturas de repetição são usadas quando queremos que um grupo de comandos seja executado mais de uma vez. 2 Funcionamento da estrutura para faça     A variável é inicializada com o valor do início.4 Funcionamento da esturutura Enquanto faça Enquanto a condição for verdadeira o grupo de instruções é repetido.9. 21 .9.9 Resumo A seguir é apresentada tabela com os principais tipos de raciocínio. se inicialmente a condição for falsa o grupo de instruções não será executado nenhuma vez. Ao chegar ao comando “fim para” a variável tem seu valor acrescido de 1(um) e verifica se o seu valor é maior que fim Se for menor ou igual. Desse modo. 2. O grupo de instruções é executado.3 Representação da estrutura Enquanto faça Enquanto condição faça Grupo de instruções que será repetido Fim enquanto 2.2.9. repete o conjunto de instruções 2. Bloco Lógico Fluxograma Tipo de bloco Sequencia Exemplo de pseudocódigo Ler c1 Ler c2 c3=c1+c2 Imprimir c3 C1 C2 C3 Decisão simples Sequencia simples Tipo de raciocínio Ler c1 Ler c2 Se c1> 0 e c2>0 então c1=c2-2 Fim se F compara V Decisão composta Decisão Comando 1 F C1 compara Ler a Se a>0 entao x=x+1 Se não x=x-1 Fim se V C2 22 . Algoritmo Inicio Ler A Ler B C =A+B Imprimir C Fim 2) Escrever um algoritmo que leia dois valores e imprima seu produto.10 Exercícios de fixação 1) Elabore um algoritmo para determinar a soma de 2 valores lidos.F Para faça Enquanto faça Repetição ou interação Condição Para k=1 ate 5 faça Ler x Soma=soma+3 Fim para V Comando Enquanto s<10 faça Ler x soma=soma+x s=s+1 Fim enquanto condição V F 2. Algoritmo 23 . Algoritmo Inicio Ler n Para i=1 até n faça n=n*i fim para Fim 5) O termo “swap” indica a troca de valor entre duas variáveis.Inicio Ler a Ler b Imprimir a*b Fim 3) Escrever um algoritmo que escreva a tabuada de 1 a 10 de um número inserido Algoritmo Inicio Ler a Para i=1 a 10 faça a=a*i imprimir a fim para Fim 4) Escrever um algoritmo que calcule o fatorial de um número. Algoritmo Inicio Ler a Ler b c=a a=b b=c 24 . Escreva um algoritmo para a técnica swap entre duas variáveis. a Se não Se (a>500) e (a<1000) Imprimir dentro do intervalo verificado Se não Imprimir Fora do escopo Fim se 25 . Se não verificar se o mesmo está no intervalo entre 500 e 1000 inclusive . ou se está fora do escopo especificado. 200 ou 400. Inicio Ler a Se (a=5) ou (a=200) ou (a=400) então Imprimir “igual a “ .Fim 6) Escreva um algoritmo que gere dias a seguinte saída. 1: Domingo 2: segunda-feira 3: terça-feira 4: quarta-feira 5:quinta-feira 6:sexta-feira 7: sábado Inicio Escreva i + “: domingo” Escreva i + “: segunda-feira” Escreva i + “:terça-feira” Escreva i + “:quarta-feira” Escreva i+ “quinta-feira” Escreva i + “ sexta feita” Escreva i + “sábado” Escreva i + “domingo” Fim 7)Faça um algoritmo para ler um número e imprimir se ele é igual a 5. Fim se Fim 8) Escreva um algoritmo que faça a combinação sem repetição de dois números dados por input. Inicio Ler a Ler b Fat1=1 Para i=1 até a faça Fat1=Fat1*a Fim Para Fat2=1 Para i=1 até (a-b) faça fat2=fat2*i fim para fat3=1 Para i=1 até b faça fat3=fat3*i Fim para Se a>b então imprima fat1/(fat2*fat3) se não se a=b 26 . Ou os valores se forem iguais.imprima 1 se não imprima fat3/(fat2*fat1) fim se fim se Fim 9) Escreva um algoritmo que leia três valores para A. Algoritmo Inicio Ler a Ler b Ler c Se a>=b então Se a>c então Imprimir “a” Fim se Se a=b então Imprimir “a e b” Fim se Se a=c então Imprimir “a e c” Se não Imprimir “c” Fim se Se não Se b>c então Imprimir b 27 . B e C respectivamente. O programa devera imprimir qual das três letras tem o maior valor. Fim se Se b=c então Imprimir b e c Se não Imprimir c Fim se Fim se Fim 10) O sistema de avaliação de uma determinada matéria é dada da seguinte maneira: prova1+prova2>=7  aluno é aprovado prova1+prova2<3  aluno é reprovado prova1+prova2>=3 e prova1+prova2<7  recuperação Escreva um algoritmo que leia 5 valores de prova1 e prova2 e imprima o status do aluno Inicio Para k=1 a 5 faça Leia p1 Leia p2 Se (p1+p2)/2.0 <3 então Imprima “aluno reprovado” Fim se Se (p1+p2)/2.0>=7 então Imprima “aluno reprovado” Se não Imprima “prova final” Fim se Fim para Fim 11) Qual seria o título do problema que teria como resultado o seguinte algoritmo: Algoritmo 28 . “bilhões de habitantes” Fim 29 . 12) Supondo que a população mundial seja estimada em 90 bilhões com uma taxa de crescimento anual de 1%. escreva um programa que calcule a quantidade estimada de habitantes no decorrer de 10 anos. de 5 em 5 para valores maiores ou iguais a 50 e menores que 75.0 Para i=1 até 10 faça a+=a/100 Imprima “Estima-se”.a. e novamente de 3 em 3 para valores maiores ou iguais a 75. Inicio a=9.Inicio a=0 Enquanto a<100 faça Se (a<48) ou a>=73 então a=a+3 Imprimir a Se não a=a+5 Imprimir a Fim se Fim enquanto Fim Elabore um algoritmo que imprima todos os números de 1 a 100 múltiplos de 3 se eles forem menores que 50. Capitulo III Primeiros passos Os objetos são a abstração do Python para todas as estruturas de dados. Esses tipos serão mais bem explicados mais adiante.  Um conjunto de valores que podem ser: o Imutáveis: Apontam diretamente para o valor da memória. podendo ou não ser predefinidos pela linguagem padrão. o que significa que quando um objeto é criado. 3. o Mutáveis: Apontam para um identificador ou para um valor direto na memória. Ao criar uma variável deve-se ficar atento às seguintes regras: 30 . Todo programa em Python é composto por objetos ou por relação entre objetos.  Um tipo que estabelece o conjunto de operações associados. um novo objeto é criado e designado à variável. Todo objeto tem:  Uma identidade atribuída em sua criação. Durante o decorrer do livro trataremos identificadores pelo nome de variáveis. Em vez disso.1 Identificadores Identificadores são nomes atribuídos a objetos ou a rotinas a fim de facilitar o entendimento e sua chamada durante a escrita do código. seu valor não pode ser alterado. 3. alfa*15. Dessa forma podemos criar diversos identificadores com a mesma letra alternando somente a caixa e todos eles serão tratados como coisas diferentes. Não podem ter espaços em branco ou caracteres especiais.1. r&10 3.      O Python é “Case Sensitive” isto significa que letras maiúsculas são diferentes de minúsculas. Nome_do_ Aluno Exemplos de variáveis não válidas: Ano de nascimento. alfa23.2 Comandos de Atribuição Um comando de atribuição é sempre do tipo 31 . Não podem ser uma palavra reservada. ano_de_nascimento. Podem ter qualquer tamanho.1 Palavras reservadas and break global while else assert class def elif except exec for raise import is finally print if in lambda not pass from try with or continue return del yield Exemplos de variáveis válidas: Idade. Podem ter letras e números ou underscore (sublinhado _). Ex: ()*&%$#@!+-=/? Iniciam sempre por uma letra. 3 Linhas Um programa em Python é dividido em linhas lógicas que podem ser compostas de uma ou mais linhas físicas. seguem esse mesmo princípio. Por exemplo: 32 . 3. Será explicado melhor o funcionamento desse tipo de objeto alguns capítulos à frente.variável = expressão. apesar de a primeira instância não parecer. O símbolo = significa atribua e tem sentido diferente do = (igual) da matemática. Uma linha lógica não pode ultrapassar uma linha física com exceção de dois casos especiais Colocando-se \ no final da linha. Observe o exemplo: Vale ressaltar que objetos de tipos mutáveis. 5 Separadores e delimitadores Um separador é um símbolo que separa outros símbolos.4 Múltiplas declarações em uma linha Podem-se fazer múltiplas declarações em uma única linha desde que separadas por ponto e vírgula. mas todas as instruções dentro do bloco têm de ser recuado na mesma quantidade. parênteses ou chaves{} [] ou ().Ou quando ocorre o ajuntamento implícito de linhas dentro de expressões delimitadas por colchetes. e o ponto usado para separar a parte inteira da fracionária em um número. 3. derivado da palavra em inglês indentation. outros separadores são a vírgula utilizada em listas. 33 . também grafado nas formas identação e endentação) O número de espaços no recuo é variável. como no exemplo abaixo. Observe o exemplo: 3. As aspas simples e duplas são delimitadores utilizados em literais e cadeias de caracteres. Os blocos de comandos são delimitados em Python pela indentação (recuo. O branco é o separador mais utilizado. com esse recurso o usuário pode acessar todos os textos docstring através do modulo help.7 Documentação (Docstring) Docstrings são tipos especiais de comentários utilizados para documentação de programas.Exemplo 3.6 Comentários Os comentários em Python são precedidos do caractere hash # Por exemplo 3. funções ou classes. Não se deve usar caracteres especiais no docstring. 34 . Indica-se um doctstring dentro de um programa por aspas triplas sendo que principal diferença entre os docstrings e os comentários não se dá somente na parte estética. inteiros longo (long). dicionários (dict).1. O Python utiliza a Tipagem dinâmica que significa que o próprio programa define os tipos das variáveis conforme seu uso sem a necessidade do programador declarar previamente.  Tipos Compostos de dados Os tipos compostos de dados são aqueles que são constituídos de um agrupamento.Capitulo IV Tipos de dados e operadores 4. reais (float). 4. São eles: listas (list).  Tipos Simples de Dados Todos os tipos simples de dados em Python são imutáveis e no total são seis: inteiros (int). tuplas (tupple) e sets (set). de outros tipos de dados. 35 . complexos (complex).1 Tipos primitivos de dados Os tipos primitivos: são aqueles já inclusos no núcleo da linguagem podem ser Simples ou Compostos. ordenado ou não. literais (str) e lógicos (bool).1 Dados numéricos Os dados numéricos são como o nome já mostra os números de forma geral. mas podem ser maiores. onde x é uma variável ou um valor. O exemplo representa o valor 1000. Podem ser escritos das seguintes formas: 1. Os valores podem ser inteiros positivos ou negativos. Float (ou ponto flutuante/reais) São caracterizados pela existência do ponto decimal. -47.5. Os números reais são representados em precisão dupla com 64 bits. ou limitada apenas pela memória da máquina. Os Inteiros simples utilizam 32 bits para representar os valores e englobam a faixa de -2147483648 até 2147483647. Por exemplo: 36 .2 ou 1E3 (onde a letra E significa 10 elevado a).0 e significa 1 vezes 10 elevado a 3. dependendo do processador e do sistema operacional.Inteiros Os números inteiros são representados em precisão simples ou em precisão dupla. Os Inteiros longos são outra classe de inteiros de abrangência ilimitada. A conversão de um valor para seu representante inteiro é feita através do comando: int(x). imag. a parte real e a parte imaginária na forma (real +IMAG J). Complexos ou números imaginários.A conversão de um valor para seu representante real. Por exemplo: (2+3j) Para se extrair uma parte de um numero complexo use: a. caso contrário False. Caso seja retorna True.real ou a. Neste caso o número i (√ ) é designado pela letra j. 37 . também chamado de ponto flutuante ou float. São escritos por dois valores reais. é feita através do comando: float(x). Por exemplo: O método x. onde x é uma variável ou um valor. onde x é uma variável ou um valor.is_integer() verifica se o x (com x float) é um valor inteiro. Por exemplo: A conversão de um valor para seu representante complexo é feita através do comando: complex(x). 1.2 Os dados lógicos (ou booleanos) Os valores dessa classe se resumem a dois resultados: False É tudo aquilo quer correspondente ao valor 0 na memória. ou seja listas. dicionários vazios ou até mesmo o 0.Por exemplo: 4. True Tudo aquilo que não for False Conversão para dados lógicos O comando bool(x) converte um dado para lógico Por exemplo: 38 . strings. 3 O dado vazio Esse tipo de dado é representado pelo valor none e não representa nada e não aceita operações comuns.4. 4. Os operadores são: 39 .2 Operadores Aritméticos São escritos linearmente usando a notação matemática.1.  Subtração *  Multiplicação /  Divisão %  Resto da divisão inteira 40 .+  Soma .  Pode-se atribuir um valor a mais de uma variável.  Dois operadores podem aparecer juntos. Por exemplo: 41 . Ao efetuar operações devem-se observar as seguintes regras:  Não pode existir nenhuma operação implícita. porém dificulta sua legibilidade – pode-se usar o parêntese para separar.  Para agrupar as operações matemáticas usa-se exclusivamente o parêntese.**  Exponenciação //  Divisão inteira O Python calcula 0**0 sendo igual a 1. /. Em caso de mesma hierarquia resolve-se da esquerda para a direita.1 Hierarquia dos operadores: 1º Parêntesis 2º.// 4º +.4.%. Observe o exemplo: 42 .2. Exponenciação 3º *. Note o exemplo abaixo: Esse erro ocorreu porque a maioria das frações decimais não pode ser representada de forma correta em binário.4 Erros de float point O Python não consegue fazer todos os calculos de forma 100% precisa. sendo então representada de forma aproximada.4. 4.3 Operações a nivel de Bit O Python permite ao programador deslocar bits alocados na memória. para deslocar os bits a direita e a esquerda. 43 . respectivamente. isso se deve ao fato da programação induzir determinados erros. Essa operação se dá através do operador >> ou <<. >=  Verifica se o operando da esquerda é maior ou igual que o da direita 44 .4. Os operadores relacionais são: == Verifica se dois operadores são iguais !=  Verifica se o primeiro operador é diferente do segundo >  Verifica se o operando da esquerda é maior que o da direita.5 Operações Lógicas São expressões cujos operadores são lógicos e cujos operandos são relações tendo como resposta um valor booleano (True ou False). 45 .<  Verifica se o operando da esquerda é menor que o da direita. and  Retorna True apenas quando os dois operandos possuam valor True. <= Verifica se o operando da esquerda é menor ou igual do que o da direita. or  Retorna True caso um dos operandos possuam valor True. 4. not  Inverte o valor lógico de uma condição.in  Verifica a participação como membro de um elemento. is  Verifica se os dois operandos são iguais.6 Exercícios de fixação 1) De acordo com os dados: Escreva a o tipo de saída de cada uma das execuções abaixo: a) b) 46 . c) d) e) f) g) h) i) j) k) l) m) 47 . Considere que a entrada sempre será numérica. Sendo dados o valor inicial. o passo e o número de termos. Inicio Ler o Ler p 48 . (veja algoritmo abaixo) Inicio Ler inicial Ler passo Ler n Para i=1 até n faça Inicial=inicial+passo Fim para Fim 4) Faça um programa Python que leia dois números imprima 1 se os números são iguais e 0 caso seja diferentes.n) o) 2) Escrever um programa Python que calcule o valor absoluto de um número( veja algoritmo abaixo) Inicio Ler a Se a<0 então a=-a fim se Fim 3) Elabore um programa Python que calcule a soma dos termos de uma pa. Se não Imprimir 0. (p e não q) ou (não p e q) 6) Escreva um algoritmo para calcular o valor de através da série O algoritmo receberá como entrada x e o número de termos da série.Se o=p então Imprimir 1. Fim 5) A chamada disjunção exclusiva (XOR) possui a seguinte tabela verdade: p F F V V q F V F V p XOR q F V V F Escreva um programa Python que simule o comando lógico XOR. Inicio Ler x Ler n Total=1 + x Fat=1 Se x=0 então Imprimir “1” Se não Para i=1 a n faça Fat=fat*i 49 . x=x*x Total=total + x/fat Fim para Fim se Fim 7) Escrever um programa Python que calcule e escreva o número de feijões que se pode colocar em um tabuleiro 8X8. Algoritmo Inicio não(A ou B) Fim 50 . Algoritmo Inicio Total=0 Contadorlinha=1 Para i=1 a 8 faça a=i Enquanto contadorlinha<=8 faça Total=Total+i contadorlinha=contadorlinha+1 fim enquanto fim para Fim 8) O comando lógico Nor tem a seguinte tabela verdade: A V V F F B V F V F A↓B F F F V Escreva um programa Python que simule o comando lógico nor. colocando 1 no primeiro nos seguintes um a mais do que o anterior. 17= 5*3 + 2 51 . escreva um programa Python que calcule e imprima o mdc desses números.9) O número 3025 possui a seguinte característica 30+25= 55 55²=3025 Escreva um programa Python que encontre todos os números de quatro algarismos com essa característica. Inicio Para x=32 até 99 faça y=x*x z=y/100 (como os dois são inteiros retorna um inteiro) y=y-z*100 Se (z+y) = x então Imprima x Fim se Fim para Fim 10)Dados dois número inteiros positivos. Ex: Divisão inteira de Euclides 17 dividido por 5. Inicio Ler x Ler y Enquanto x!=y faça Se x>y então x=x-y Se não y=y-x fim se fim enquanto Fim 11) Escreva um programa Python da divisão inteira de Euclides de a por b (com a e b pertencentes aos inteiros). 52 .Inicio Q=0 R=0 Falsoa=0 Falsob=0 Ler a Ler b Se a<0 então: a=-a Falsoa=1 Fim se Se b<0 então: b=-b Falsob=1 Fim se R=a Enquanto (b<=R) e (b≠0) faça: R=R-b Q=Q+1 Fim enquanto Se Falsoa=1 então: Q=-Q a=-a fim se Se Falsob=1 então: Q=-Q b=-b fim se Fim 12) Elabore um programa Python que calcule o fator gama para uma velocidade v digitada pelo usuário. python.html 53 .Lembrando: γ=1/√ e c=2.7 Para saber mais 1) Há um problema na exibição do resultado do último exercício. Porque ele ocorre? Como pode ser prevenido? 2) Para maiores informações sobre erros de representação consultar http://docs.997 X m/s 4.org/tutorial/floatingpoint. 54 .1 Declarações de Entrada A versão 2.7.usada para entrada de dados de uma forma geral.Capitulo V Entrada e saída. 5.usada para entrada de dados do tipo texto (ou string) Variável= raw_input(‘mensagem’) Este tipo de declaração é mais estável por evitar erros e possibilitar que o programador verifique se o dado de entrada é válido antes de utilizá-lo.  input . devido sua necessidade de conhecimento prévio do usuário do tipo de dado de entrada e da forma de declaração feita em Python.3 do Python aceita os comandos:  raw_input. Variável = input(‘mensagem’) Esta declaração é utilizada principalmente para a entrada de dados numéricos. Contudo para a realização dos testes será exigido um esforço maior por parte do programador. “mensagem” Exemplo: Podem-se agrupar várias mensagens tipo texto usando o operador +.. . variaveln. ”mensagem2”....2 Os comandos de saída são A impressão de alguma mensagem na tela é indicada da seguinte forma: print “mensagem”. variável. ...Os comandos de entrada podem também ser utilizados para aguardar uma ação do usuário como podemos perceber no exemplo a seguir: 5. variável1. Por exemplo: Forma errada de declarar: 55 . 2. Esse erro ocorre porque o Python o interpreta os dados como se fosse uma tupla com elemento 0 do tipo string.Pode-se perceber que no caso acima o interpretador exibe de forma errada. Declara-se que um valor será exibido naquela posição através do parâmetro %x. Segue aqui uma lista de valores que x pode assumir com seus respectivos tipos: %d  Utilizado para a declaração de um número inteiro %e  Utilizado para a declaração de um número float que será convertido para a forma exponencial. 5. do tipo numérico e o sexto elemento do tipo string.3 Formatação para exibição de dados O programador pode formatar a exibição dos valores de variáveis indicando uma “máscara” conforme seja seu tipo.3. 56 . elementos 1.5. Para comandos de saída utiliza-se rotineiramente o tipo string devido à facilidade da conversão automática. onde x é o código característico para sua formatação.4. 4 Números octais ou hexadecimais Dentro de um programa os números podem estar em base octal ou hexadecimal por questões de conveniência. %s  Utilizado para a declaração de uma string. %g  Utilizado para a declaração de um número float que será convertido para a forma exponencial somente se sua precisão for maior do que 4. Não há restrições para conversões em hexadecimal. Vale ressaltar que o número precisa ter no mínimo 3 algarismos. para a conversão em octal. Dessa forma para imprimir um numero octal na base decimal basta incluir um 0 na frente desse numero.%f  Utilizado para a declaração de um número float. %c  Utilizado para a declaração de um único caractere. Exemplo: 57 . em casos de hexadecimal 0X. 5. 5 Inicio Ler a Ler b Transformar a e/ou b em real (importante) 58 . Inicio Ler a Ler b Ler c Se a>b então Se a>c então Imprimir a Se não Imprimir c Fim se Se não Se b>c então Imprimir b Se não Imprimir c Fim se Fim se Fim 2) Escrever um programa Python que leia dois valores e imprima o valor de a/b.0/2 = 3. Exemplo 7.5 Exercícios de fixação 1) Escreva um programa Python que leia o preço de 3 mercadorias e imprima o maior preço.5. Inicio Ler valor1 Ler valor2 Ler valor3 A_B=valor1-valor2 A_C=valor1-valor3 B_C=valor2-valor3 Se A_B<0 então A_B=-A_B Se B_C<0 então B_C=-B_C Se A_C<0 então A_C=-A_C Fim 5) Elabore um programa que leia um valor em centímetros e o imprima em polegadas (1 pol = 2.Imprimir (a/b) Fim 3) Escrever um programa Python que receba horas minutos e segundos e exiba o resultado convertido para segundos. Inicio Ler hora Ler minutos Ler segundos segundos= segundos + hora*3600 + minutos*60 Imprimir segundos Fim 4) Faça um programa Python que leia o valor de três mercadorias e calcule a diferença do preço de cada uma delas.54 cm) 59 . 7) Elabore um programa que leia dois valores e imprima o resto da divisão do primeiro pelo segundo e o quociente da divisão. 8) Elabore um programa que calcule o comprimento de uma onda.6) Elabore um programa que leia o raio de um circulo e imprima o comprimento e área do circulo. sendo inserida sua frequência e sua velocidade. Lembrando que 9) Escreva o programa Python de multiplicação de a por b Inicio Resp=0 Contador=0 Falsoa=0 Falsob=0 Ler a e b Se a<0 então: a=-a Falsoa=1 Fim se Se b<0 então: b=-b 60 . Com y pertencente aos inteiros.falsob=1 Fim se Enquanto contador<b faça: Contador=contador+1 resp=resp+a fim enquanto se falsoa=1 então: a=-a resp=-resp fim se se falsob=1: b=-b resp=-resp fim se Fim 10) Escreva um programa Python que calcule x elevado a y. Inicio Contador=0 Falsoy=0 Ler x Ler y Se x=0 e y=0 então: Escreve impossível calcular Se não Se y=0 então Escreve 1 Se não: Se y<0: y=-y falsoy=1 61 . 0/x) fim se fim se fim 11) Escreva um programa que calcula a hipotenusa de um triangulo retângulo.6 Para saber Mais Para maiores informações sobre os comandos de entrada: 62 . 5.fim se fim se enquanto contador<(y-1) faça contador=contador+1 x=x*x fim enquanto se falsoy=0 então escreve x fim se se falsoy=1 então escreve (1. Por exemplo: 63 . também chamada de texto ou string. São constituídos de caracteres e declarados entre apóstrofos ou aspas. é feita através do comando construtor da classe (str(x). de operação etc.  Os caracteres de controle e que não são imprimíveis. ou seja:  As letras maiúsculas e minúsculas..  Os dígitos de 0 a 9.Capítulo VI Classe String Strings são objetos de tipo imutável do Python e que possuem noção de ordenação.  Os caracteres especiais. Por exemplo A conversão de um valor para literal. onde x é um valor ou uma variável relacionada a um valor imprimível). Os dados literais denotam um conjunto de caracteres da tabela ASCII (ou UNICODE). como os de pontuação. 6. começando do último termo até o primeiro. Ou uma progressão aritmética de razão -1.1 A ideia de ordenação de Python e o slice Todas as classes/tipos do Python que possuem ideia de ordenação podem ser acessadas por partes. e primeiro termo -1. para o primeiro elemento e seguindo uma progressão aritmética de razão 1 até o último termo. através de uma operação denominada slice. variando de 0. Em Python cada representante de um grupo ordenado possui uma numeração na sequência. Exemplo: P 0 -6 Y 1 -5 T 2 -4 H 3 -3 O 4 -2 N 5 -1 O acesso se dá da seguinte forma: nomedavariavel[inicio:fim:passo] Exemplo: 64 . 6.2 Operações com String +  Indica “concatenação” Exemplo *  representa repetição Exemplo 65 .1.1 O comando len(x) Esse comando se refere a todos as classes que possuem ideia de tamanho. Seu valor de entrada x é uma variável pertencente a uma dessas classes e retorna seu “tamanho”. 6. recebe uma string de um único caractere e retorna seu número na tabela ASCII. Os métodos dessa classe.6. estão integrados (built-in) e por esse motivo é necessário a importação de módulos para sua utilização. desde que sejam obedecidos os tipos dos argumentos de entrada e o uso dos parênteses (mesmo que não possua argumentos de entrada). Ou seja. e todas elas exemplificadas para melhor entendimento do leitor. o programador pode simplesmente chamá-los e executá-los sem problemas. 6.3 A função ord(x) A função ord(x). 66 . contudo mais adiante será melhor explicado a diferença entre métodos e os comandos normais.4 A função chr(x) A função chr(x) faz o inverso da função ord. assim como os das demais classes primitivas da linguagem.5 Métodos da classe string Por hora trataremos métodos como tipos diferenciados de funções. Serão apresentadas somente as principais funções da classe. Essa função recebe um número inteiro e retorna o caractere representante na tabela ASCII. 6. Inteiro inicio – Inteiro fim – inteiro 6. a. Por default qtd é toda a string. c [.2 O método lower Esse método é utilizado a fim de retornar uma cópia de uma string em caixa baixa. a.qtd])a – String b – String c – String qtd-Inteiro 67 .5.3 O método replace Esse método retorna uma nova string que substitui na string "a" todas as coincidências de uma string "b" por uma nova string "c". que são utilizados a fim de restringir o tamanho da pesquisa dentro da string.replace(b. [inicio.5. a.String 6.6.5. fim]) a – String b. Por default inicio é a posição 0 da string e fim é a posição do ultimo caractere.count (b.1 O método count Esse método é utilizado para contar quantas vezes uma determinada string "b" aparece em uma string "a". Também recebe um argumento de entrada opcional que chamaremos de quantidade (qtd) que representa a quantidade de substituições que serão feitas na string. Esse método também aceita os argumentos opcionais inicio e fim.lower()a . caso contrário retorna False.split(b[. Caso a string analisada possua somente caracteres alfanuméricos retorna True. Esse método também recebe como dado de entrada opcional uma quantidade de vezes que será realizado o fracionamento.5.Inteiro 6.5.upper() a – String 6. a.qtd])  a – String b – String qtd.5 upper Esse método é utilizado a fim de retornar uma cópia de uma string em caixa alta. a. Por default "b" é considerado como ‘ ‘ e qtd é considerado como toda a string. a.isalnum() a – String 68 .5.4 O método Split Esse método separa a string "a" toda vez que for encontrada a string "b".6 isalnum Esse método é utilizado para verificação dos tipos de caracteres de uma string.6. Cada fracionamento da string será transformado em um item de uma lista. islower() a –String 6.5. caso contrário retorna False. Caso a string analisada possua somente caracteres núméricos retorna True. Caso a string analisada possua somente caracteres alfabéticos retorna True.isdigit()  a – String 6. Caso a string analisada possua somente caracteres que não sejam caixa alta retorna True.8 isdigit Esse método é utilizado para verificação dos tipos de caracteres de uma string.9 islower Esse método é utilizado para verificação dos tipos de caracteres de uma string. caso contrário retorna False.5.isalpha()  a – String 6.10 isupper Esse método é utilizado para verificação dos tipos de caracteres de uma string.6. Caso a string analisada possua somente caracteres que não sejam em caixa baixa True se a string. caso contrário retorna False. caso contrário retorna False. a.5. 69 . a.5.7 isalpha Esse método é utilizado para verificação dos tipos de caracteres de uma string. a. 1 Pular linhas Para mudar de linha coloca-se o parâmetro \n 6. Esse comando funciona somente ao ser executado no modo programado.6.a.6.3 String Unicode Para declarar que uma string está no padrão Unicode. basta colocar a letra u antes da string.2 Tabulação horizontal Para executar uma tabulação horizontal utiliza-se o parâmetro \t. O programa Terá como resultado 6.isupper()a –String 6.6 Formatações avançadas de strings 6.6. 70 . o mesmo acontece com o apostrofo.4 String crua A letra r antes da string indica que ela é uma string crua. ou seja. 6.5 Aspas ou apóstrofos dentro da string Para utilizar aspas dentro de uma string devemos utilizar o parâmetro \”.6. as strings de barra invertida não serão interpretadas. porém seu parâmetro é o \’ 71 .6.6. 6. 72 . uma vez que este define o espaçamento que será dado à direita de um caractere.6.6.7 O método ljust O método ljust(x) pode ser utilizado para formatação da saída. a ljust(x) pode ser utilizada em declarações posteriores. O método rjust(x) pode ser utilizado para formatação da saída.6 O método rjust. Observe o exemplo: Esse método pode ser chamado de forma implícita em tratamentos de declarações posteriores como podemos perceber no exemplo abaixo: 6. Ao contrário da rjust(x). uma vez que este define o espaçamento que será dado à esquerda de um caractere. 7 Exercícios de fixação 1) Escreva um programa Python para verificar a quantidade de caracteres em um nome. Todos os nomes de entrada terminam com ponto final.8 O método Center O contrario do rjust e ljust esse método é um pouco mais complicado de usar.6.6. Contador=1 Ler nome Transformar nome em string Enquanto nome[contador] != “. Observe: 6. Para utiliza-lo deve-se passar como parâmetro obrigatório o tamanho do bloco que ele deverá ser centralizado e como parâmetro opcional com qual caractere será feito o espaçamento.” Faça Contador=Contador+1 Fim enquanto 2) Escreva um programa Python que leia o nome e o imprima quantas vezes forem o número de caracteres. Todos os nomes de entrada terminam com ponto final. Contador=1 Ler nome Transformar nome em string Enquanto nome[contador] != “.” Faça Contador=Contador+1 Fim enquanto 73 . Para i=1 até contador faça Imprimir nome Fim para 3) Qual o resultado dos seguintes códigos sabendo que a) b) c) d) e) 74 . Caso seja necessário escreva seu código e descubra o problema. Considere o caractere de finalização de string sendo “. 5) Escreva um programa Python que simule a o método upper e lower. Decidido a criptografar a seguinte mensagem escreveu seu código.” Faça Se numero-ascii(a[contador]) >96 e numeroascii(a[contador])<123 então b=b+caractere(numero-ascii(a[contador]) . UPPER Ler a b=”” Transformar a em string Enquanto a[contador] != “.32) se não b=b+ a[contador] fim se Fim enquanto LOWER Contador=1 Ler a b=”” Transformar a em string 75 . decidiu que iria criptografar uma mensagem seguindo o seguinte padrão: Se o código na tabela ascii do caractere for par: somar um ao código do caractere Se o código for impar multiplico por 5 e subtraio 3. um aluno que adora álgebra.4) Elias.”. contudo não obteve sucesso. Seu programa deverá utilizar mostrar os resultados duas vezes uma utilizando o método rjust. 8) Palíndromos são palavras que são idênticas se lidas da esquerda para a direita ou da direita para a esquerda.Enquanto a[contador] != “. e outra com a center. a exemplo da palavra ovo. Resposta: Ler A C=numero de caracteres de A 76 . Escreva um algoritmo que verifique se uma palavra é um palíndromo. 7) Escreva um programa que leia uma palavra e exiba seu primeiro e seu ultimo caractere.” Faça Se numero-ascii(a[contador]) >64 e numeroascii(a[contador])<90 então b=b+caractere(numero-ascii(a[contador]) +32) se não b=b+ a[contador] fim se contador=contador+1 Fim enquanto a=b escreva a 6) Elabore um programa que leia um número e imprima seu número e seu quadrado e seu cubo. Seu algoritmo deverá imprimir a frase de forma que ela fique dividida nessa quantidade de linhas 77 .B=”” (palavra sem caracteres) Enquanto C>0 B=B + Caractere de A na posição C (supondo primeira posição como 1) C=C-1 Fim enquanto Se A igual B então São palíndromos Se não Não são palíndromos Fim se 9) Escreva um programa Python que simule o método isdigit que funcione com floats.”)) faça b=b+ a[cont] cont=cont+1 fim enquanto se a[cont+1]=”!” a=b imprima a se não a=booleano(0) imprima a 10) Escreva um programa Python que leia uma frase e um número inteiro que especifique a quantidade de linhas que essa frase deverá ser exibida. Cont=1 Ler a b=”” Transformar a em string Enquanto (((a[cont]>47) e (a[cont]<58)) ou (a[cont]=”. Caractere de finalização de string “!”. Caso o valor não seja número retorne False. especificadas. sem quebrar palavras. Inicio Ler frase Ler linhas Tam1=tam(frase) Tam1=tam1/linhas quebra=0 verificador1=0 verificador2=0 para i=1 até linhas: enquanto frase[tam1+verificador1]!=” “ faça verificador1=verificador1+1 fim enquanto enquanto frase[tam1-verificador2]!=” “ faça verificador2=verificador2+1 fim enquanto se verificador1>verificador2 então quebra=tam1+verificador1 se não quebra=tam1-verificador2 fim se para cada i em frase até quebra: imprima i fim para tam1+=tam1 verificador1=verificador2=quebra=0 fim para fim 78 . por exemplo). Suponha que exista uma função que te diga o tamanho da string e que não existirão inputs impossíveis (uma palavra de duas letras quebrada em 99 linhas. 1 Estrutura de decisão simples if condição : Essa estrutura executa um bloco de instruções caso a condição estabelecida retorne True. if condição : Comando ou bloco de comandos elif condição: Comando ou bloco de comandos .Capitulo VII Estruturas de decisão Esses comandos analisam e executam uma única vez um bloco de instruções de acordo com o valor verdade de uma condição. executa o bloco de instruções e ignora todos os elif e else abaixo. Caso retorne True. if condição: Comando ou bloco de comandos Continuação do código 7. e a ele relacionado. 7...2 Estruturas de decisão compostas elif É verificado caso a condição do if retorne False. else É executado caso todos o if e todas as condições de elif acima dele. retornem falso. elif condição: 79 . 3 Exercícios 1)Faça um programa que leia dois números inteiros A e B da entrada padrão (teclado) e retorne o quociente da divisão entre A e B. 80 . a idade e a mensagem: ACEITA. Caso contrário. a idade e a mensagem não aceita.f. Se a pessoa for do sexo feminino e tiver menos de 25 anos. se o valor de B é diferente de zero.Comando ou bloco de comandos else: Comando ou bloco de comandos Continuação do código 7.M ou m). (Considerar para o Sexo as letras F. imprimir o sexo. imprimir o sexo. 2)Escreva um programa para receber o sexo e a idade de uma pessoa. O programa deve verificar previamente à divisão. 3)Escreva um programa que lê 3 valores. o valor de b se torna o valor de a e o 81 . caso positivo informa se é equilátero. e caso a>b seja verdade. verifica se é um triangulo. 4)Escreva um programa que leia dois valores a e b nessa ordem. isósceles ou escaleno e seu perímetro. b e “valores trocados”. Faça um programa que apresente o nome do paciente e sua faixa de risco. Sabendo-se que o IMC é calculado através da fórmula abaixo: Onde o Peso é dado em Kg e a Altura é dada em metros. caso contrário imprime “valores não alterados”. baseando-se na seguinte tabela: 82 . 5)Um endocrinologista deseja controlar a saúde de seus pacientes e. para isso se utiliza de um índice de massa corporal (IMC).valor de a se torna o de b e imprime a. Seu programa não deve calcular raízes imaginárias.6)Escreva um programa para o cálculo das raízes de uma equação do segundo grau. Lembrando vm= 83 . sendo dados e . 7)Escreva um programa que calcule a velocidade média de um corpo. 84 . Note você deverá ler e informar dia mês e ano e considerar se ele é ou não bissexto. Suponha que as datas serão válidas.8)Escreva um programa que verifique se o usuário inseriu a senha (“senha”) como input. O programa não deverá fazer distinção entre letras maiúsculas ou minúsculas. 9)Escreva um programa que informe o dia seguinte. Escreva um programa que leia dois valores e mostre o número de tropas do guerreiro. Escreva um programa que o simule e trate o caso de inserir um número inteiro. o do 85 . 11) Um guerreiro nunca luta com um exército que tenha um número menor de tropas que o seu.10)O Ceil retorna o menor inteiro maior que um número. 4 Para saber mais 86 .oponente e sua diferença. 7. É recomendado ao programador.1 Estrutura while simples while condição : Comando ou bloco de comandos. na maioria dos casos. 87 .1 Comando while Repete um conjunto de instruções enquanto uma condição for verdadeira.1.1. A condição é testada antes de entrar na estrutura de repetição. FLAG ou sentinela . Devemos estar atentos para que a condição se torne falsa durante a execução para interromper a repetição. que será iniciado no momento em que a condição do while retorne False.2 Estrutura while composta A estrutura while pode vir acompanhada de um else. 8.é um de dado que é utilizado como verificador de continuidade de um laço de repetição.Capitulo VIII Laços de repetição São usados para repetir um conjunto de instruções. 8. Continuação do código 8. a utilização de um flag no lugar de uma comparação a fim de aperfeiçoar o algoritmo. Contudo devemos ficar atentos.. for variável in objeto sequencial: Comando1 .. Para parar a execução de um laço infinito a força. Comando n Continuação do código 8..3 Laços infinitos Ocorre quando o comando while é executado eternamente. Instrução Continuação do código 8. 8.1.. Instrução else: Instrução .. while condição: Instrução .2 Comando for Percorre os itens de objetos e sequências de objetos onde exista a ideia de ordem atribuindo os valores à variável e executando o bloco de comandos após cada atribuição. pois o else. ao contrário do while. será executado somente uma vez.1 O gerador de listas range Essa função gera uma lista cujos elementos são uma sequência que possui início e fim e que seguem uma determinada razão ou 88 . devemos pressionar ctr+c duas vezes na Shell do Python.2.. 3 O comando break Esse comando finaliza o laço de repetição mais interno que o envolve.4 O comando continue O comando continue passa para o próximo passo do laço mais interno. Dessa forma o programa: 89 . passando para o próximo comando fora do laço. range ( inicio . Com base nessa ideia podemos concluir que o programa Produzirá o seguinte resultado: 8. Uma observação importante é que o intervalo percorrido pela função range é que o intervalo é fechado no início e aberto no fim. passo) 8.passo. fim . mas a semântica não requer nenhuma ação.5 A construção pass A Construção pass não faz nada.Produziria o seguinte resultado: 8. Ela pode ser usada quando a sintaxe exige um comando. Produziria o seguinte resultado: 90 . 6 Exercícios 1)Faça um programa que leia um nome e o imprima tantas vezes quantas for a quantidade de letras do seu nome. 91 .8. 2)Elabore um programa que leia uma frase e exiba o número de vogais e consoantes que aparecem nela. 3)Faça um programa que mostre os números entre 1000 e 2000 inclusive que divididos por 11 dão resto 5. .. 5)Faça um programa que leia um valor n inteiro e positivo e x real e que calcule a seguinte soma:     S=x+x/2+x/3+x/4+.+x/n! S= x-x/2!+x/3!-x/4!+.x/n S= x+x/2!+x/3!+x/4!+.4) Faça um programa que leia a nota de um número indeterminado de alunos.. perguntando ao final se ele deseja ou não continuar a executar o programa..+x/n! 92 .± x/n! S= 1+x/2!+x/4!+x/6!+..... é ou não primo. 93 . fornecido pelo usuário.6)Faça um programa que exiba se um número X. Faça um programa que leia as identificações e mostre o número do boi mais pesado.7)Faça um programa que leia o valor e o multiplique por 3 até que ele seja maior que 100. Seu programa deverá tratar os casos em que ocorre loop infinito. 8)Em um frigorífico existem 200 bois. Cada boi tem uma identificação contendo um número maior que 0 e seu peso. 94 . um aluno muito distraído. 95 . Como você explicaria para Hugo o que aconteceu? O problema se deu pelo fato de Hugo ter acreditado que o argumento de entrada era dado em graus. 10) Hugo. O flag é um número negativo.9)Faça um programa que calcule e exiba a média aritmética dos números lidos entre 13 e 73. Na realidade Hugo inseriu um valor próximo de 229°. o que justifica o cosseno negativo. mesmo 4° estando no primeiro quadrante. inseriu o seguinte código e obteve um resultado inesperado: Confuso Hugo indagou o porquê de o cosseno ter dado negativo. enquanto o método lower retorna um dado do tipo string em caixa baixa. já o método endswith verifica se determinada string termina com outra string fornecida. 96 . Escreva programas para simular cada um desses métodos.11) O método startwith da classe string verifica se determinada string começa com uma string fornecida. 12) O método upper retorna um dado do tipo string em caixa alta. Escreva programas que simulem esses métodos. 8. 97 .7 Para saber mais Simule cada um dos métodos da classe string apresentados no capítulo VI. .1.1 Importação de módulos Para incorporar as funções e métodos presentes em algum módulo ao programa deve-se importar o módulo desejado através dos comandos from e import.item2..nome_do_objeto( argumentos_recebidos) Exemplo: 9.itemn Nesse caso podemos chamar os itens especificados a qualquer momento no programa como se estes fossem internos ao Python.2 from nome_do_modulo import item1. Para casos onde é vantajoso importarmos um módulo inteiro podemos utilizar no lugar das funções o *... Importação se dá das seguintes formas: 9.1 import nome_do_modulo Nesse caso o trabalho recai sobre o programador. Toda vez que desejar usar uma algo do módulo o programador deverá chamála através do seguinte comando: nome_do_módulo.Capitulo IX Módulos 9. Observe os exemplos: 98 .1. 9.2 O módulo Math No decorrer desse item serão dados exemplos considerando o modelo de importação mais fácil, porém menos apropriado por questão de conflitos em alguns módulos. 9.2.1 Funções trigonométricas básicas do modulo math Arco cosseno Função: Calcula o arco cosseno do argumento acos(x)  x é um arco medido em radianos Arco seno Função: Calcula o arco seno do argumento asin(x) x é um arco medido em radianos Arco tangente Função: Calcula o arco tangente do argumento tan(x) x é um arco medido em radianos 99 Seno Função: Calcula o seno do argumento sin(x) x é um arco medido em radianos Cosseno Função: Calcula o cosseno do argumento cos(x) x é um arco medido em radianos Tangente Função: Calcula a tangente do argumento tan(x) x é um arco medido em radianos 9.2.2 Outras funções importantes do modulo math Exp Função: Calcula e**x exp(x) Log Função: Calcula o log de x na base y. log(x,y) Onde x é o numero e y é a base. Fatorial Função: Calcula x! factorial(x)  x é um inteiro 100 Raiz quadrada Função: Retorna a raiz quadrada de x sqrt(x)  x é um número Inteiro absoluto Função: Retorna o valor inteiro absoluto de x abs(x)  Onde x é um número inteiro Float absoluto Função: Retorna o float absoluto de x fabs(x)  onde x é um número float Inteiro maior Função: Retorna o menor número inteiro maior que X ceil(x)  x é um float 9.3 O módulo random Assim como o módulo math, o módulo random necessita de importação para ser utilizado. 101 fim e passo: inteiros Shuffle Função: Embaralha uma lista.passo)  Inicio. O intervalo é fechado. randrange(inicio.3. porém o intervalo é aberto e pode-se escolher o passo da formação da lista de números.b)  a valor inicial e b valor final: inteiros Intervalo randômico Função: similar a randint. randint(a.4 O módulo os 102 . random=None. x.9.1 Algumas coisas úteis do módulo random Inteiro randômico Função: retorna um inteiro randômico contido no intervalo especificado. shuffle(self.fim. int=<type 'int'>) 9. a)  onde b representa o diretório e a a permição a ser atribuída. chdir(b)  Onde b representa o diretório 9.O módulo os serve para lidar com o sistema operacional. 9.4.1 O método abort O método abort é utilizado para forçar a parada do interpretador Python abort() 9.b)  a diretório b=modo (por padrão 0777) 9.4. aqui será apresentada apenas uma parte de seu conteúdo e espera-se que o programador tenha bom senso em sua utilização.4. getcwd() 9.4 O método getcwd Esse método retorna o diretório de trabalho atual. 9.2 O método chdir Muda o diretório de trabalho para outro caminho especificado.4.3 O método chmod Esse método altera as permissões de um arquivo chmod(b.4.5 O método mkdir Cria um diretório mkdir(a. remove(a) onde a é o diretório 103 .4.6 O método remove Remove um arquivo. 9.7 O método urandom Retorna um valor de “a” bytes para ser utilizado em criptografia. urandom(a) -> a número de bytes. O valor é retornado em string.4. 104 . 2 Exceções São os erros que são sintaticamente corretos.1Erros de sintaxe: Também conhecidos como erros de parse 10. mas impossíveis de serem executados por algum motivo.2.1.1 Tipos de erro 10. 10. diferentemente dela. Modelo de declaração de try: try: 105 .1. assim como a clausula if funciona uma única vez e. no caso o comando except.2 Tratamento de exceções 10.Capitulo X Tratamento de erro 10.1 O comando try Esse comando. precisa de uma cláusula que a torne composta. para isso basta não apresentar argumentos. Diferentemente do else... Caso os erros não sejam especificados na clausula eles serão entregues a um try mais externo.comando ou bloco de comandos que serão verificados 10. o except aceita argumentos que deverão especificar os tipos de erros tratados. o except só é executado quando o try retorna um erro. 106 .2 O comando except Esse comando é semelhante ao else.2. Modelo de declaração except: except (tipo de erro. tipo de erro): Comando ou bloco de comandos a serem executados A máscara de exceções O Comando except pode executar um conjunto de comandos padrão para qualquer tipo de erro que ocorra. Assim como o else só é executado quando o if retorna False. Caso não exista um tratador é mostrada uma mensagem de erro.. Modelo sem o raise: Modelo com o raise: 10.4 O comando finally O comando finally é utilizado para ações de limpeza.3 Provocando exceções O comando raise permite ao programador forçar a ocorrência de determinado tipo de exceção. Veja os exemplos: 107 . sendo executado tanto quando ocorrer e também quando não ocorrer exceções.10. 2) Escreva um programa que leia dois valores e execute a divisão entre eles.10.5 Exercícios 1) Escreva um programa para ler um número através de raw_input e o converta para float. 3) Em uma fábrica existe um botão de desligamento forçado. 108 . Quando este botão é ativado ele envia o valor 11 para o programa interno. Crie um programa que pare assim que receber o valor 11. 4) Escreva o mesmo programa do número 1 deste capítulo sem o uso do comando try 10.6 Para saber mais Refaça os exercícios dos capítulos anteriores tratando os erros 109 . ou seja. ou ainda alterá-los.  Uma lista PODE conter diferentes tipos de dados inclusive outras listas. O construtor dessa classe é chamado através do comando list (x) 110 . podem ser adicionados novos elementos. *  Os itens da lista são separados por vírgula (.) e escritos entre colchetes []. um operador de slice pode ser aplicado. * Listas são tipos básicos mutáveis do Python.  Quando os dados forem do tipo string. Uma lista dentro de outra lista denomina-se aninhada  Os valores armazenados em uma lista podem ser acessados usando colchetes [] e [ : ] cujos índices iniciam em 0 quando contado a partir do inicio da lista e -1 o último elemento quando contado a partir do fim da lista.Capitulo XI A Classe list Lista é um conjunto ordenado de valores identificado por um índice. Uma lista ou list em Inglês possui as seguintes características:  Os elementos PODEM ser alterados. Porém vale ressaltar que a alteração é feita diretamente na memória causando dessa forma alteração em todos os objetos que apontam para a mesma lista. b)a – Lista.11. uma vez que ambos adicionam um objeto como integrante na lista.1 O método append Esse método é utilizado para acrescentar um objeto b como integrante no final da lista a.count (b) a – Lista.append(b)  a – Lista.1. b – Qualquer 111 . a.insert (pos. a. além do dado que será que será inserido na lista. Caso a posição seja maior que a lista. a.1. b – qualquer 11. o item será acrescentado ao final. contudo esse método recebe como argumento.2 O método count Esse método conta quantas vezes o objeto b aparece na lista a. a posição que ele será inserido. b – qualquer 11.1.3 O método insert O método insert é muito similar ao método append. ao contrário das strings esse método não recebe argumentos opcionais de entrada.1 Métodos da classe list 11. 6 O método sort O método sort é o oposto do shuffle do módulo random.remove(b)a – Lista.11. 112 .1.5 O método remove O método remove. a.1. b – Qualquer 11.1. a.1.4 O método pop O método pop é utilizado para a remoção de um item da lista. sendo utilizado para ordenar listas. a.sort()a – Lista 11. remove a primeira ocorrência de um determinado objeto em uma lista.7 O método reverse Esse método é utilizado para inverter a ordem que os itens de uma lista estão posicionados. Recebe como argumento de entrada a posição que este item ocupa. pos– Inteiro 11.pop(pos)a – Lista. a.Lista 11. Determine um vetor com a seguinte lei de formação: Os termos de ordem impar de A são multiplicados por 3 Os termos de ordem par de A são multiplicados por 2 2)Escreva um programa que sorteie um valor de 1 a 100. 113 . Seu programa deverá receber palpites mostrar se o valor introduzido é mais alto ou mais baixo do que o sorteado.reverse()  a.2 Exercícios 1) Elabore um programa que leia o vetor A com 5 valores inteiros. 4)Elabore um programa que leia duas matrizes m X n e calcule sua soma.3) Escreva um programa que sorteie 6 número números da loteria. que consiste de valores de 1 até 500. 114 . 5)Escreva um programa que calcule o determinante de uma matriz 115 . 116 . 117 .6)Escreva um programa que leia e faça a multiplicação de duas matrizes quadradas de ordem 3. 7)Escreva um programa que leia uma matriz quadrada e escreva sua transposta. 118 . Escreva um programa que gere uma lista desordenada de 20 elementos e a ordene em ordem crescente com o Bubble Sort 119 .8) O Buble Sort é um algoritmo de ordenação que consiste em percorrer uma lista tomando seus elementos um a um e comparando-os com o seguinte. e caso estejam fora de ordem troca as posições. 9) O Selection Sort é um algoritmo baseado em mover sempre o menor/maior valor para a posição desejava. 10) O Insertion Sort ou pesquisa simples é um algoritmo que consiste em selecionar um valor e compara-lo com todos os valores à sua esquerda a fim de reordenar uma lista. 120 . Escreva um programa que gere uma lista desordenada de 20 elementos e a ordene em ordem decrescente pelo Insertion sort. Após isso o processo de identificação do menor valor e a alocação na posição desejada se repete para todos os n-1 valores restantes. ) (h=h*3+1). O valor de h deverá ser o menor número maior que a lista que ordenaremos.13.. na seção “Para Saber Mais” desse capítulo. contudo os melhores resultados foram obtidos através na sequencia de Knuth (1. Caso o leitor ainda tenha dúvidas sobre o funcionamento do algoritmo. Com base no descrito acima escreva um programa que gere uma lista embaralhada de 20 elementos e ordene-a em ordem crescente com o algoritmo Shell Sort 121 . que consiste em realizar trocas a passadas em passadas a uma certa distancia(h) que diminui em um a cada passada. Atualmente não se tem o valor ideal de H.4. constarão links úteis para uma melhor compreensão...11) O Shell Sort é um algoritmo inserção..40. youtube. Shell Sort Shell-sort with Hungarian (Székely) folk dance http://www.3 Para saber mais Existe também um módulo array.com/watch?v=CmPA7zE8mx0&noredirect= 1 122 .11. que talvez seja interessante para alguns. enquanto tuplas são colocados entre parênteses (()) e seus elementos não podem ser modificados. e os seus elementos e tamanho pode ser alterado. O construtor de tuplas é chamando a partir do comando tupple(x). Ao contrário das listas. com características sequenciais não ordenadas e que são utilizados a fim de implementar mapeamentos. no entanto.Capitulo XII Outras classes de python 12. Cada objeto do dicionário é relacionado com uma chave. Uma tupla consiste de uma série de valores separados por vírgula.1 A Classe Tupla Uma tupla é outro tipo de estrutura de dados similar a Lista. são tuplas representadas entre parênteses.2 Dicionários Dicionários são objetos que podem ser modificados. Tuplas podem ser tratadas como listas de somente leitura. As principais diferenças entre listas e tuplas são: Listas são incluídas em colchetes ([]). Essa classe é declarada entre chames {} e utiliza-se dois pontos ":" para separar objetos de suas respectivas chaves. O construtor dessa classe é chamado através do comando dict(x) 123 . 12. 3.3 Métodos da classe dict 12.4 O método items Esse método retorna uma lista contendo cada dos itens pertencentes ao dicionário.3.3.1 O método copy Esse método é utilizado para retornar uma cópia do dicionário. a.copy () a – dicionário 12.keys()a – dicionário 12.3 O método clear Esse método remove todos os itens do dicionário a. a.items()a – dicionário 124 .2 O método keys O método keys retorna uma lista contendo cada uma das chaves de dicionário a.12.3.clear () a – dicionário 12. 5 O método update O método update insere as chaves e itens de b em a a. 2) Escreva um programa que transforme uma lista em dicionário.12. 125 . b – dicionário 9.3.update (b)a – dicionário.4 Exercícios 1) Escreva um programa que transforme uma lista em uma tupla. 3) Escreva um programa que faça o merge de duas tuplas de 20 valores cada uma. 5) Com base em seus conhecimentos sobre a linguagem. objetos de uma lista e como a primeira sendo chave de dicionário da segunda.4) Escreva um programa que imprima duas strings como objetos de uma tupla. diga qual será o resultado dos seguintes comandos: a) b) 126 . c) d) e) f) g) h) 127 . 5 Para saber mais Para saber mais sobre tuplas e dicionários 128 .i) 12. Ao transformarmos qualquer tipo composto de dados em um set. b – objeto 13. sem elementos repetidos e imutáveis.1 O método add Esse método adiciona um objeto ao set a.1.Capitulo XIII Sets e alguns comandos úteis Sets são estruturas de dados do tipo conjunto.1. eliminamos toda e qualquer repetição de integrantes. O construtor da classe set é o comando set(x). Observe o exemplo: 13.1 Métodos de Sets 13. Um conjunto é um agrupamento sem noção de sequência.2 copy Esse método retorna uma cópia do set 129 .add(b)  a – set. b – set 13.3 difference Esse método retorna a diferença entre os conjuntos.intersection(b)  a – set .copy()  a – set 13. b – objeto 13.1. a.4 discard Esse método descarta um objeto do set a.1.difference(b)  a – set.discard(b)  a – set . a. b – set 130 .a.1.5 intersection Esse método retorna um set correspondente a interseção dos dois sets apresentados. 1.6 symmetric_difference Esse método retorna a diferença simétrica entre os dois sets a.2 O comando del O comando del pode ser utilizado para apagar slices e variáveis 131 .1.union(b) 13.symmetric_difference(b)  a – set. b – set 13.13.7 union Esse método retorna a união entre os dois sets a. 13. 13.4 O comando enumerate Através do uso dessa comando pode-se exibir a o objeto e sua respectiva posição ao percorrer um objeto sequencial qualquer. Observe o exemplo: 132 .13.3 Comando iteritems Com esse comando torna-se possível percorrer um dicionário e exibir sua chave simultaneamente.5 Comando zip O comando zip é utilizado para percorrer simultaneamente duas ou mais sequências. diferentemente do que ocorre no método sort de listas.8 Exercícios 1) Escreva um programa que gere uma lista de 200 números aleatórios entre 1 e 50 e imprima: Uma lista ordenada e sem repetições dos números.13.7 Comando sorted O comando sorted ordena uma lista sem uma sequência sem alterá-la na memória. Importante: Você não deverá utilizar mais de duas variáveis. 133 . a quantidade de números que foram retirados da lista inicial e a lista inicial. nessa ordem. Observe o exemplo: 13. Observe: 10.6 Comando reversed O comando reversed é usada para percorrer uma sequencia em ordem reversa. O tamanho das listas não deve superar 100. 134 . 3) Escreva um programa que gere duas listas de tamanhos aleatórios e imprima cada uma das duas listas e os termos que pertencem às duas simultaneamente. Seu programa deverá utilizar somente uma variável. Após isso imprima a lista desordenada inicial.2) Escreva um programa que gere uma lista desordenada de tamanho 30 e a imprima em ordem decrescente. 135 . O tamanho das listas não deve superar 100. O tamanho das listas não deve superar 100.3) Escreva um programa que gere duas listas de tamanhos aleatórios e imprima cada uma das duas listas e os termos que pertencem a uma mas não pertencem a outra. 4) Escreva um programa que gere duas listas de tamanhos aleatórios e imprima cada uma das duas listas e a diferença simétrica entre elas. 136 . refere-se à região do código onde as variáveis são diretamente acessíveis.1 O conceito de escopo Por definição. realizando procedimentos e retornando ou não um valor.Capitulo XIV Funções Função ou sub-rotina é a porção do código que pode receber argumentos de entrada e saída. 14. Observe abaixo o esquema resumido do funcionamento de um programa através de funções: A utilização dessas técnicas facilitam a legibilidade e a manutenção de um código de software. onde são encontradas as variáveis locais. o escopo intermediário contendo as variáveis globais e o escopo externo contendo variáveis predefinidas. 137 . Durante qualquer execução existem escopos internos. 14.2 Passagem de parâmetro por referência A passagem de parâmetro por referência caracteriza-se pela manipulação do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. não se desespere. Caso o leitor esteja meio confuso sobre esse assunto. por razões lógicas sobre seu tipo e funcionamento obtemos um resultado parecido com esse tipo de passagem. e serão tratados no escopo local da mesma forma que seriam no escopo global.1 Passagem de parâmetro por valor A passagem por valor caracteriza-se pela não alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. 14. contudo ao tratarmos de objetos do tipo mutável. Serão parâmetros reais quando forem passados na chamada da função no escopo global. Em Python todas as passagens de parâmetro se dão dessa forma. pois este será exemplificado com comentários na área de criação de funções.2.2. Observe o seguinte código: 138 . 14. Em Python não existe a passagem por referência. Serão parâmetros formais quando forem declarados como argumentos de entrada de uma função. A alteração efetuada no parâmetro formal corresponde à alteração no parâmetro real. Os parâmetros podem ser formais ou reais.2 O conceito de parâmetro Os parâmetros têm como finalidade servir como ponto de comunicação bidirecional entre a função e o programa principal. ou com uma sub-rotina hierarquicamente de nível mais alto. argumento2..3 O comando return O comando return (x) é um comando que finaliza a função e retorna como valor dela o valor da variável x...argumento n): Comando ou bloco de comandos return(valor à ser retornado) # caso a função retorne algo Continuação do código 139 .Mostrar um exemplo de passagem por valor ? Como esperado o resultado será: 14. 14.4 Criando uma função: def nome da função (argumento1.. 14. Para realizarmos tal tarefa utilizamos o comando global x. Caso o leitor ainda assim não entenda segue um exemplo especificando as variáveis locais e globais. Após o termino da execução da função as variáveis serão destruídas. que fará com que todas as variáveis x abaixo dessa chamada sejam tratadas como globais.5 O conceito de variável global e variável local Quando uma atribuição é feita dentro de uma função. é interessante tornar uma variável local em global. em alguns casos. desse modo não será possível acessar a variável de fora da dela. As variáveis globais são aquelas que podem ser acessadas em qualquer área. Dessa forma exemplos de variáveis globais são todas as variáveis criadas até o presente momento. aquelas que não estão dentro de um escopo local. Exemplo: 140 .14. ou seja. por padrão o Python criará uma variável dentro do escopo local da função.6 O comando global Mesmo dentro de uma função. complex.. 141 . como o apresentado. o problema pode ser facilmente evitado da forma apresentada a seguir: 14. float.). conforme foi definido na função dentro. str. Em casos simples. permanecendo o valor 11...7 O Comando type O comando type(x) retorna o tipo da variável x (int.Como podemos notar o comando global não alterou o valor dentro da função fora. permitindo assim que o programador verifique o tipo do argumento de entrada da função antes de passá-lo e executá-la. contudo dentro do escopo global a variável a passou a existir com o valor 5. 8 Atribuição default Em alguns casos a entrada de dados do usuário é algo opcional.9 Passando um número variável de argumentos A passagem de um número indefinido de argumentos sempre deverá aparecer após os argumentos conhecidos. . argumento n = valor default n): comando ou bloco de comandos 14.. Observe o exemplo: 142 .. . def nome (argumento1=valor default 1. isso se dá porque o programador pode definir um valor padrão para a entrada de argumentos que será passado para a função caso não possua dados para a entrada. Declara-se a passagem de um número indefinido de entradas de argumentos de uma função através do uso do símbolo *.14. caso a função possua. 14.10. nos demais serão transformados em tipo lista. 14. Os tipos retornados em casos de string e tupla não serão modificados. 143 . assim como o filter. Esse comando aplica na função cada item da sequencia e retorna a lista de valores retornados. recebe como parâmetros de entrada uma função e uma sequência.1 O Comando filter Esse comando recebe como argumentos uma função e uma sequência.10 Comandos do Python que recebem funções como argumentos 14. O comando aplica os elementos da sequência na função e retorna uma outra sequencia apenas com os elementos que a função retornou verdadeiro.2 O comando map Esse comando.10. 14.10.3 O comando reduce O comando reduce aplica, recursivamente, uma operação a uma sequência de números e é chamada da seguinte forma: reduce(função, lista ou tupla) Observe: 14.11 Exercícios 1) Escreva qual será a saída de cada um dos seguintes comandos: a) b) 144 c) 2) Escreva um programa que calcule a soma de dois números. Seu programa deverá conter a função calcular 3)Uma sequencia é dita feia quando possui números que possuem somente os fatores 2 ou 3. 145 Observe: 2, 3, 4, 6, 8, 9, 12, 16, 18, 24, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108,... Escreva um programa que contenha as funções de cálculo e impressão da sequencia. Importante você não deve imprimir o objeto do tipo lista! 4) Durante nossos primeiros contatos com a matemática, fomos ensinados uma técnica facilitadora na soma, o chamado “vai um”. Escreva um programa que leia dois números inteiros e imprima o valor da soma e a quantidade de “vai um” utilizada. 146 147 . Ao fim do processo o pivô estará em sua posição final e haverá duas “sublistas” não ordenadas. Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores. 3.5) O Quicksort adota a seguinte estratégia rearranjar as chaves de modo que as chaves "menores" precedam as chaves "maiores". Os passos são: 1. e todos os elementos posteriores ao pivô sejam maiores que ele. Divide-se a lista alvo em duas sublistas e ordenar e dividir as sublistas recursivamente até que a lista completa se encontre ordenada. Escolha um elemento da lista. Escreva um programa que implemente o quicksort. Essa operação é denominada partição. 2. Rearranje a lista de forma que todos os elementos anteriores ao pivô sejam menores que ele. 148 . denominado pivô (geralmente o central). 7) A pesquisa binária é um método de pesquisa extremamente rápido para listas ordenadas. Caso seja menor o final da lista se torna o meio-1. 149 . menor ou igual ao valor indicado. por razões obvias a pesquisa é encerrada. caso seja maior o início da lista se torna o meio+1. em ambos os casos refaz-se a pesquisa até que a lista se torne unitária. Sua ideia consiste em verificar se o meio é maior. Caso seja igual. 150 .Implemente a pesquisa binária para Python para uma lista ordenada de tamanho aleatório 100 itens. os dados não são armazenados em nenhum lugar. quando terminamos de executar o programa os dados são perdidos. Ou seja.1 O comando open O comando open abre um arquivo para a utilização. modo: string 12. caso exista qualquer tipo de conteúdo o arquivo será apagado ao ser aberto desse modo. 15. valor default de abertura de arquivos ‘w’  Somente para escrita.1. Através do uso dos arquivos podemos armazenar os dados de um programa de maneira que eles possam ser usados (consultados) novamente.Capitulo XII Arquivos Até o momento.1 Os modos que um arquivo pode ser aberto ‘r’  Somente para leitura. Esse comando é chamado da seguinte forma: open (diretório_do_arquivo. em uma nova execução do programa. retorna um objeto de tipo arquivo. ou seja. 151 .modo)  diretório_do_arquivo : string. ‘a’  Abrir o arquivo para adição. Qualquer escrita será adicionada ao fim do arquivo Podemos também abrir o arquivo com esses 3 modos em binário, basta acrescentarmos o b a um desses modos. Observe o exemplo: 15.2 O método close O método close é utilizado para fechar um arquivo e liberar recursos. Vale ressaltar que qualquer tentativa de acessar o arquivo novamente resultará em falha. Esse método normalmente não recebe argumentos e é chamado da seguinte forma: nome_do_arquivo.close() Observe o exemplo: 15.3 O método write O método write é utilizado para escrever uma string em um arquivo. É chamado da seguinte forma: nome_do_arquivo.write(a)  a: string Observe os exemplos: Podemos também acessar os dados escritos no arquivo através do Windows acessando o diretório e o arquivo especificado. Observe: 152 15.4 O método read O método read é utilizado para ler uma determinada quantidade de dados. Esse método recebe um argumento opcional chamado size, ou tamanho, que caso não seja especificado será considerado como o tamanho total do arquivo. Esse argumento é importante para evitar que programadores inexperientes tentem abrir arquivos cujo conteúdo é maior do que a memória disponível no computador. Esse comando é chamado da seguinte maneira: Nome_do_arquivo.read(tamanho)  tamanho em bytes. Vale ressaltar inclusive que uma vez atingido o fim do arquivo (EOF), o comando retorna uma string vazia (‘’). Observe o exemplo com base em nosso arquivo escrito anteriormente: 153 15.5 O método readline O método readline lê uma única linha do arquivo, avaliado através do caractere de retorno de linha (\n) e que será mantido na impressão após a chamada do método. Em sua segunda chamada lê a segunda linha do arquivo, em sua terceira, a terceira linha e assim sucessivamente até encontrar o EOF. Caso seja chamado após o final do arquivo o método retornará uma string vazia. O readline é declarado da seguinte forma: Nome_do_arquivo.readline() Observe o exemplo: 15.6 O método readlines O método readlines retorna uma lista, onde cada elemento é uma linha do arquivo. Ela recebe como parâmetro opcional o sizehint, que informa a quantidade de bytes aproximado que será lido, essa quantidade será ultrapassada em caso de necessidade de finalizar a linha. O método readlines é declarada da seguinte forma: Nome_do_arquivo.readlines(sizehint) 154 caso seja chamado novamente o método retornará uma lista vazia. O tamanho por default é a posição atual. Recebe como atributos deslocamento e de_onde. Esse método é chamado da seguinte forma: Nome_do_arquivo. Esse método é chamado da seguinte forma: Nome_do_arquivo.7 O método tell O método tell retorna um inteiro que indica a posição corrente de leitura ou escrita no arquivo.tell() 15. 1 para indicar a posição atual e 2 para indicar o fim do arquivo.Após ser lido o EOF.de_onde)  deslocamento é um inteiro medido em bytes a serem deslocados e de_onde pode assumir valores os seguintes valores: 0 para indicar o inicio do arquivo (valor default).seek(deslocamento. Observe o exemplo: 15.9 O método truncate Esse método “trunca” o arquivo em determinado tamanho. medida em bytes. 15. 155 .8 O método seek O método seek é utilizado para deslocar a posição corrente de leitura ou escrita. 15. Importante: Se o valor do tamanho exceder o tamanho do arquivo atual os resultados podem variar dependendo do sistema operacional. Além disso. 156 .10 Para saber mais Procure sobre o argumento opcional buffering do comando open e sobre outros métodos de arquivos.Independente do valor de entrada para o tamanho a posição não será alterada. esse método não funcionará se o arquivo estiver aberto como somente para leitura. A forma correta é: 157 .py . a fim de evitar ter de reescrever o material a ser rodado pelo interpretador e facilitar a manutenção do programa. Observe um passo a passo simples de utilização de módulos: Um aviso importante é que os caracteres do módulo devem ser somente ASCII. 16. dessa forma o módulo acima retornaria erro ao ser chamado.1 Criando e executando um módulo Antes de executar um módulo devemos criá-lo e salva-lo. Observe que o módulo deverá ser salvo com a extensão .Capitulo XVI Módulos Modulos são arquivos contendo o código python que podem ser incorporados a novos programas. tornando-se desnecessária a exemplificação. Os métodos de importação seguem os mesmos padrões especificados no início do livro com o módulo math. torna o arquivo reconhecível pelo interpretador de Python e evita a perda do esquema de cores. que como o programador já deve ter percebido. Observe aqui um pequeno passo a passo para sua utilização: 158 . A execução do código fonte geraria o seguinte output: 159 .Para iniciantes. o modo mais fácil de evitar problemas é salvar o código fonte no mesmo diretório do módulo.
Copyright © 2024 DOKUMEN.SITE Inc.