Prévia do material em texto
Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital Autores: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 8 de Fevereiro de 2021 . 1 69 Sumário Lógica de Programação ............................................................................................................................ 5 1 – Conceitos Básicos ............................................................................................................................ 5 2 – Representações de Algoritmos ...................................................................................................... 6 2.1 – Linguagem Natural ................................................................................................................... 6 2.2 – Linguagem de Máquina............................................................................................................ 7 2.3 – Linguagem de Programação .................................................................................................... 8 2.4 – Pseudocódigo............................................................................................................................ 9 2.5 – Fluxograma .............................................................................................................................. 10 Noções de Python ................................................................................................................................... 11 1 – Conceitos Básicos .......................................................................................................................... 11 2 – Tipos de Operadores ..................................................................................................................... 14 3 – Funções ........................................................................................................................................... 16 4 – Comentários ................................................................................................................................... 19 5 – Tipos e Variáveis ............................................................................................................................ 20 5.1 – Definições ................................................................................................................................ 20 5.2 – Identificadores ......................................................................................................................... 22 5.3 – Tipos de Dados ....................................................................................................................... 23 5.4 – Tipos de Coleção .................................................................................................................... 26 6 – Controle de Fluxo .......................................................................................................................... 36 6.1 – Estrutura de Decisão (If-Elif-Else) ........................................................................................... 36 6.2 – Estrutura de Repetição (While) .............................................................................................. 41 6.3 – Estrutura de Repetição (For) .................................................................................................. 45 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 2 69 Questões Comentadas ............................................................................................................................ 48 Lista de Questões .................................................................................................................................... 60 Gabarito .................................................................................................................................................... 66 API (Application Programming Interface) .............................................................................................. 67 1 – Conceitos Básicos .......................................................................................................................... 67 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 3 69 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ==15c02a== 4 69 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 . . 5 69 Professor, e o que seria uma instrução? É um conjunto de regras ou normas simples e bem definidas para a realização ou emprego de algo, indicando ao computador uma ação ou função elementar a ser executada Um computador é excelente para realizar cálculos e processamentos, mas ele não consegue pensar sozinho. Já o programador é ótimo em pensar sozinho sobre como resolver problemas, mas ele não tem capacidade de fazer bilhões de cálculos e processamentos. Logo, eles se juntam de forma que o programador possa pensar na forma de resolver um problema e criar um conjunto de instruções para que o computador apenas as execute. (Câmara de Juiz de Fora/MG – 2018) Lógica de programação é o modo como se escreve um programa de computador, um algoritmo. Um algoritmo é uma sequência de passos para se executar uma função. _______________________ Comentários: conforme vimos em aula, a questão está perfeita (Correto). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Destacar ANUSCA Destacar 6 69 Todos os programas de um computador ou dispositivos são representações de algoritmos! Inclusive o Candy Crush no meu celular? Sim! O Uber, Waze e Spotify também? Também conhecida como Descrição Narrativa, trata-se da maneira como expressamos nosso raciocínio e trocamos informações. Um computador não é por si só uma máquina inteligente – no sentido de que não pode aprender com a própria experiência para melhorar seu comportamento futuro. Ao contrário, um computador é somente capaz de realizar estritamente as tarefas que lhe forem delegadas e que façam parte do conjunto daquelas ações que ele pode executar. Neste sentido, é necessário compreender que tipo de instruções podem ser executadas pelos computadores. Por que? Uma descrição narrativa utiliza a linguagem natural para especificar os passos para a realização das tarefas – são ambíguas e não estruturadas. (EBC – 2011) A descrição narrativa é uma forma de algoritmo que utiliza linguagem estruturada e, embora sua estrutura e simbologia apresentem pequenas diferenças em relação à língua portuguesa, também é chamada de português estruturado. _______________________ Comentários: a descrição narrativa utiliza linguagem natural para especificar os passos para a realização das tarefas. Isso dá margem a más interpretações e ambiguidades. O português estruturado – pseudocódigo –realmente utiliza uma linguagem estruturada, mas não é a mesma coisa que descrição narrativa (Errado). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA SublinharANUSCA Destacar ANUSCA Retângulo ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar 7 69 Além do fato de o computador necessitar que lhe instruam com ações bem específicas, estas ações devem ser passadas para o computador numa linguagem que ele possa entendê-las, chamada linguagem de máquina. Esta linguagem é composta somente por números, representados de forma binária (0 e 1), que – sob o ponto de vista do computador – representam as operações e os operandos que serão usados no processamento do programa. Para um ser humano, a linguagem de máquina é extremamente difícil de se compreender. Querem um exemplo? A saudação “Olá, Estratégia Concursos” em linguagem de máquina seria: 01001111011011001110000100101100010001010111001101 11010001110010011000010111010011101001011001110110 10010110000101000011011011110110111001100011011101 010111001001110011011011110111001100100001 Vocês já imaginaram alguém programando na linguagem de máquina? Seria inviável! Existe, portanto, uma linguagem representada por comandos, mas que reproduz as tarefas que serão executadas dentro do computador, chamada Linguagem de Montagem (Assembly). No entanto, mesmo a linguagem de montagem é difícil de programar – além de outros problemas como a especificidade do processador. Vejam como seria a mesma saudação em Assembly: 4F6CE12C457374726174E9676961436F6E637572736F7321 (IFC/SC – 2015) Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas, é necessário que ele seja programado, isto é, que seja transcrito para uma linguagem que o computador possa “entender”, direta ou indiretamente. Os computadores só podem executar diretamente os algoritmos expressos em: a) Linguagem de máquina. Comentários: conforme vimos em aula, computadores só “entendem” Linguagem de Máquina (Letra A). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Destacar ANUSCA Destacar 8 69 Para facilitar a tarefa de programar um computador, foram criadas várias linguagens de programação. Estas linguagens são uma maneira de tentar escrever as tarefas que o computador vai realizar de maneira mais parecida com a linguagem natural. Embora ainda seja muitas vezes complexo em comparação com a linguagem natural, um programa escrito em uma linguagem de programação é muito mais fácil de ser implementado, compreendido e modificado. As linguagens de programação são um meio termo entre a linguagem de máquina e a linguagem natural. As linguagens mais parecidas com a linguagem de máquina são classificadas como linguagens de baixo nível. Já as linguagens mais parecidas com a linguagem natural são classificadas como linguagens de alto nível. Como um computador não entende diretamente linguagens de programação, ela deve ser traduzida em código de máquina antes de ser executada. Esse processo é chamado de tradução e é responsável por converter os comandos da linguagem de programação nas instruções em linguagem de máquina, que o computador é capaz de processar! Em suma: as linguagens de programação surgem – portanto – como uma solução para abstrair a comunicação entre seres humanos e computadores de modo que o computador nos entenda e nós os entendamos. A mesma saudação em uma linguagem de programação seria: Nesse caso, a linguagem de programação utilizada foi a linguagem Python, mas existem centenas de outras. Assim como seres humanos se comunicam por meio de diversas línguas (Exemplo: português, inglês, francês, japonês, dinamarquês, entre outras), as máquinas também podem se comunicar por meio de diversas linguagens de programação (Exemplo: Java, PHP, C++, Python, Ruby, entre outras). Bem, acho que todo mundo já ouviu falar alguma vez na vida em Código-Fonte. Se você não sabe o que é um código-fonte, eu tenho uma tarefa para você executar agora: abra algum navegador web (Ex: Google Chrome, Mozilla Firefox ou Microsoft Edge), acesse qualquer site que vocês queiram e pressionem a Tecla F12. Pronto, vocês verão o código-fonte por trás do site bonitinho que você está vendo... Um código-fonte é uma versão do software da forma em que ele foi originalmente escrito – digitado em um computador – por um programador humano em texto puro (caracteres alfanuméricos humanamente legíveis). Todo software ou site possui um código-fonte, que é um conjunto de palavras organizadas de acordo com regras específicas. Essas palavras que formam o algoritmo são escritas – em geral – utilizando linguagens de programação. Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar 9 69 Uma vantagem interessante da linguagem de programação em relação à linguagem de máquina é que um programa escrito em linguagem de máquina – como contém instruções escritas para um processador específico – só poderá ser utilizado naquele processador ou em similares. Em contrapartida, uma linguagem de programação, como contém somente instruções abstratas do que fazer, pode ser executado em qualquer processador ou máquina. (Câmara de Juiz de Fora/MG – 2018) A linguagem de programação é como uma língua normal, um grupo de palavras com significados. No caso da programação, a maioria das linguagens é escrita em Inglês. Estas linguagens fazem o computador assimilar cada comando e função de um algoritmo, depois executar cada função. _______________________ Comentários: conforme vimos em aula, as linguagens de programação realmente são similares a uma língua normal que geralmente utilizam palavras em inglês e que servem de padrão comum entre humanos e máquinas (Correto). O pseudocódigo é uma linguagem intermediária entre a linguagem natural e a linguagem de programação. - Em suma, um pseudocódigo é uma representação abstrata de um algoritmo utilizando uma linguagem simples sem necessidade de conhecer a sintaxe correta de nenhuma linguagem de programação. Pode-se dizer também que ele é uma simulação de uma linguagem de programação real, mas que – na verdade – é uma linguagem de programação “de mentirinha”. Logo, ela não pode ser utilizada para criar softwares de verdade, mas são excelentes para ajudar a entender a lógica. Um tipo de pseudocódigo brasileiro é o Portugol ou Português Estruturado. O que é isso, Diegão? Cara, é uma pseudolinguagem utilizada para ensinar algoritmos em português. Sim, em português! Porque vocês perceberão que a imensa maioria das linguagens de programação do mercado utilizam como base a língua inglesa. Professor, esse português estruturado é moleza de entender? Galera, embora ele seja uma linguagem simplificada, ele possui todos os elementos básicos necessários para construir um algoritmo por meio de uma estrutura semelhante à de uma linguagem de programação de computadores. Dessa forma, resolver problemas com português estruturado pode ser uma tarefa tão complexa quanto a de escrever um programa em uma linguagem de programação qualquer, porém utilizando Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar 10 69 uma linguagem mais simples! Bacana? A imagem anterior é um exemplo de português estruturado. Comparem com o exemplo da linguagem de programação e vocês notarão que a diferença está na língua utilizada, mas continua sendo um algoritmo. (CFO/DF – 2017) O portugol é uma das formas de se representar um algoritmo. _______________________Comentários: portugol é realmente uma das formas de se representar algoritmos (Correto). Além do português estruturado, é possível representar um algoritmo também por meio de um Fluxograma! O que é isso, professor? É uma espécie de diagrama utilizado para documentar processos, ajudando o leitor a visualizá-los, compreendê-los mais facilmente e encontrar falhas ou problemas de eficiência, como mostra a imagem abaixo. Nada como usar imagens – agora vai ficar beeeeem mais fácil de entender. Vamos ver um exemplo... Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Retângulo ANUSCA Destacar 11 69 Antes de iniciar a aula, é importante mencionar que vários exemplos dessa aula foram retirados ou inspirados em exemplos do W3Tutorials (www.w3schools.com/python). Não fizemos isso porque somos preguiçosos, mas por dois motivos: (1) os exemplos são excelentes; (2) essa é umadas fontes de inspiração das bancas. Além disso, eu sugiro que vocês tenham sempre aberta uma janela com um interpretador online para que vocês possam testar o que veremos. Recomendo esse: O que é Python? Python é uma linguagem de programação de alto nível, interpretada, multiparadigma e case-sensitive sendo bastante utilizada para desenvolvimento web, criação de fluxos de trabalho, conexão com bancos de dados, resolução de problemas matemáticos, prototipação de software, entre outros. Trata-se de uma linguagem de alto nível porque é uma linguagem com nível de abstração bastante elevado, bem longe do código de máquina e mais próximo da linguagem humana. Em outras palavras, o Python está muito mais próximo à forma humana de pensar/escrever do que dos comandos entendidos por um processador. Trata-se de uma linguagem interpretada porque seu código-fonte é executado linha a linha por um interpretador (software que traduz uma linguagem em outra) e depois pelo sistema operacional, isto é, seu código -fonte não precisa ser totalmente transformado em código de máquina para somente depois ser executado1. Trata-se de uma linguagem multiparadigma porque suporta mais de um paradigma de programação. No caso, eles são: imperativo, procedural, funcional e orientado a objetos. Paradigmas são formas diferentes de resolver problemas – alguns utilizam funções, outros utilizam objetos, outros procedimentos e assim por diante. 1 Isso significa que o código-fonte pode ser executado linha por linha em tempo real à medida que sendo traduzida pelo interpretador. Há outras linguagens que são compiladas, isto é, primeiro traduz todo o programa e só depois pode ser executada. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Retângulo 12 69 Trata-se de uma linguagem case-sensitive, isto é, capaz de diferenciar maiúsculas e minúsculas. Em outras palavras, isso significa que as variáveis nome, Nome e NOME são diferentes entre si, uma vez que possuem diferenças de caixa em sua grafia. Python é uma linguagem multiplataforma, podendo ser utilizada no Windows, Linux, MacOS, etc. Além disso, ele é fácil de aprender e possui uma linguagem simples extremamente semelhante com o inglês comum. Pode-se afirmar também que é uma linguagem menos verbosa, isto é, sua sintaxe permite escrever softwares com menos palavras e linhas que outras linguagens semelhantes. Acabou? Ainda não... Python é uma linguagem de tipagem forte e dinâmica. Como é, Diego? Linguagens de programação possuem um conjunto de regras sobre como tratar tipos de dados, sendo que a tipagem de uma variável pode ser estática/dinâmica ou fraca/forte. Linguagens com tipagem estática não permitem alteração de tipo de variável durante a execução do código-fonte; já linguagens com tipagem dinâmica permitem essa alteração. No código abaixo, nós declaramos uma variável com nome de var1 e a atribuímos o valor ‘Diego’, logo a linguagem já infere que se trata de uma variável do tipo string (conjunto de caracteres)2. Em seguida, nós atribuímos o valor 2020 (que é do tipo int) a essa mesma variável e não ocorre nenhum erro. Ela permite que a variável var1 tenha seu tipo modificado de string para int (inteiros). Se uma linguagem permite esse tipo de alteração durante a execução, trata-se de uma tipagem dinâmica. var1 = ‘Diego’ var1 = 2020 Linguagens com tipagem forte não permitem realizar algumas operações com variáveis de tipos diferentes sem conversão; já linguagens com tipagem fraca permitem realizar esse tipo de operação. No código abaixo, declaramos uma variável com nome de var2 e a atribuímos o valor ‘20’, logo a linguagem já infere que se trata de uma variável do tipo string. Ué, Diego? Como assim? Galera, tudo que vier entre aspas é considerado uma string (até mesmo números). var2 = ‘20’ print(10 + var2) 2 Essa inferência é conhecida como Duck Typing (Tipagem de Pato). Esse nome vem da expressão: “Se anda como pato, nada como um pato e faz quack como um pato, então provavelmente é um pato”. Em outras palavras, isso significa que o tipo de uma variável é inferido pelo interpretador em tempo de execução pelo valor que foi atribuído a ela. Se eu atribuo um valor do tipo string, significa que a variável é do tipo string; se eu atribuo um valor do tipo inteiro, significa que a variável é do tipo inteiro; e assim por diante. ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar 13 69 Python tem tipagem forte, logo teríamos que fazer uma conversão explícita transformando var2 em um inteiro antes de imprimir o valor em tela. Se ela tivesse tipagem fraca, faria essa conversão implicitamente, sem a necessidade de o programador indicar que deseja fazer uma conversão. Enfim, Python é uma linguagem de tipagem forte e dinâmica, porque não possui conversão implícita de tipos e porque permite alterar o tipo de uma variável durante a execução do código. Por fim, essa linguagem de programação apresenta código-fonte agrupado por indentação. O que diabos é isso, professor? Indentar é o recuo do texto em relação a sua margem! Em outras palavras, se antes de escrevermos uma instrução, utilizarmos quatro espaçamentos da margem esquerda até a instrução propriamente dita, podemos dizer que a indentação utilizada possui quatro espaços. Esse termo vem do inglês indentation e é bastante comum em linguagens de programação. Algumas linguagens utilizam marcadores textuais para identificar e delimitar blocos de código, como chaves ({ }) ou palavras-chave (begin/end). O Python não utiliza nenhum marcador textual para isso – ele utiliza apenas a profundidade da indentação. Dessa forma, códigos que estiverem rente a margem esquerda farão parte do primeiro nível hierárquico; os que estiverem a quatro espaços da margem esquerda estarão no segundo nível hierárquico; e assim por diante. Todos os blocos são delimitados pela profundidade da indentação e, por conta disso, sua organização é vital para o programa escrito nessa linguagem. A sua má utilização acarretará à não execução ou no mal funcionamento do software. Assim, se você criar um while e quiser colocar 4 comandos dentro dele, terá que colocar todos com uma indentação de alguns espaços. Quantos espaços? Quantos você quiser – desde que seja a mesma quantidade no bloco. Veja o exemplo:No código da esquerda, a linha 2 cria um loop de repetição em que as linhas 3 a 6 serão repetidas enquanto i < 3. Sabemos disso porque todas essas linhas estão com indentação interna ao comando while. Por sua vez, a linha 5 está em um bloco pertencente ao if da linha 4, pois está quatro espaços para dentro do if. Dessa forma, a indentação (ou endentação) em Python é estrutural e não apenas um elemento de organização visual, tanto que o código da esquerda é diferente. Python permite utilizar ponto-e-vírgula (;) para delimitar comandos, mas de forma opcional – assim como em outras linguagens como JavaScript e Typescript. Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar 14 69 Python é distribuída sob uma licença própria (compatível com a GPL), que permite a distribuição – comercial ou não – tanto da linguagem quanto de aplicações desenvolvidas nela, em formato binário ou código fonte, bastando cumprir a exigência de manter o aviso de copyright. Python permite que programas sejam compilados para um formato portável chamado de bytecode. Essa característica faz com que programas escritos nessa linguagem com uma biblioteca padrão sejam executadas da mesma forma em diversos sistemas operacionais que possuam um software interpretador de Python. Python possui uma interface com muitas bibliotecas e sistemas de janela, sendo extensível em C/C++. Além disso, pode ser utilizada como linguagem de extensão para aplicações que necessitam de uma interface programável (muito comum em aplicativos, jogos, processamento de textos, dados científicos e motores de busca). Python possui funcionalidades para expressões regulares; sockets; threads; data/tempo; analisadores XML; analisadores de arquivos de configuração; manipulação de arquivos e diretórios; persistência de dados; unidades de testes; bibliotecas clientes para os protocolos HTTP, FTP, IMAP, SMTP e NNTP. Python suporta o paradigma orientado a objetos com todos os seus componentes, tais como herança (simples ou múltipla), polimorfismo, sobrescrita, encapsulamento, abstração, reflexão, introspecção, etc! Não é necessário entender o que isso significa exatamente, apenas saber que ele suporta e que tudo em Python é um objeto3. Galera, apenas para finalizar é importante mencionar que houve algumas mudanças introduzidas na virada da versão do Python de 2.x para o Python 3.x. Vocês podem acabar fazendo questões de provas antigas e ficarem um pouco confusos, por isso estou fazendo essa ressalva! Em termos de concurso, acredito que vale mencionar apenas uma mudança: o print mudou de instrução para função. O que isso significa na prática? Significa apenas que agora precisa de parênteses: print 'Olá Mundo' # até versão 2.7 print('Olá Mundo')# a partir da versão 3.0 (IF/RS – 2019) Em relação às características da linguagem Python, é correto afirmar que: a) tem tipagem fraca e dinâmica. b) deve ser usada, exclusivamente, para programação web. c) tem suporte a herança múltipla. d) a tupla é um tipo mutável. _______________________ Comentários: (a) Errado, tem tipagem forte e dinâmica; (b) Errado, pode ser utilizada para desenvolvimento web, criação de fluxos de trabalho, conexão com bancos de dados, resolução de problemas matemáticos, prototipação de software, entre outros; (c) Correto, ele realmente suporta orientação a objetos e herança múltipla; (d) Errado, tupla é tipo imutável (Letra C). Assim como na matemática, operadores são elementos utilizados em linguagens de programação para realizar operações. Existem quase 40 operadores em Python, mas nós não vamos ver todos 3 Esse paradigma trata um software como uma coleção de agentes interconectados chamados de objetos, que são uma posição na memória que funciona como abstração para qualquer coisa que tenha atributos e comportamentos (Ex: se eu quero representar pessoas em um software, eu posso criar um Objeto Pessoa e configurar seus atributos – pessoa tem nome, idade, altura, etc – e seus comportamentos – pessoa fala, come, anda, etc. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Retângulo 15 69 porque diversos deles possuem um péssimo custo/benefício e não valerá a pena! Vamos nos ater – portanto – aos operadores mais cobrados em prova. Abaixo serão apresentadas categorias de operadores com suas descrições e exemplos. Operadores Matemáticos são os mais simples e mais comuns. Nós aprendemos todos eles na época de escola, então vocês não terão dificuldades: + Soma 10 + 10 = 20. - Subtração 20 - 20 = 0. * Multiplicação 15 * 25 = 375. / Divisão 25 / 4 = 6,25. // Divisão com Piso 25 // 4 = 6 (6,25 arredondado para baixo) . ** Potenciação 2 ** 5 = 32. % Módulo 30 % 7 = 2 (resto da divisão). Operadores de Atribuição são usados para atribuir valores a variáveis! Considerem na tabela abaixo que as operações seguem uma sequência (o resultado da linha atual depende da linha anterior)4: = Atribuição Simples x = 10 é o mesmo que atribuir o valor 10 a x. += Atribuição com Soma x += 1 é o mesmo que x = x + 1, logo x = 10 + 1 = 11. -= Atribuição com Subtração x -= 6 é o mesmo que x = x - 6, logo x = 11 – 6 = 5. *= Atribuição com Produto x *= 2 é o mesmo que x = x*2, logo x = 5 * 2 = 10. /= Atribuição com Divisão x /= 5 é o mesmo que x = x / 5, logo x = 10 / 5 = 2. Operadores de Comparação são utilizados para comparar valores! Nos exemplos abaixo, considere sempre que x = 1 e y = 2. Vejamos... == Igual x == y retorna Falso. != Diferente x != y retorna Verdadeiro. > Maior que x > y retorna Falso. < Menor que x < y retorna Verdadeiro. >= Maior ou igual a x >= y retorna Falso. <= Menor ou igual a x <= y retorna Verdadeiro. Operadores Lógicos são utilizados para combinar condições em expressões e também são frequentemente utilizados em Python. Nos exemplos abaixo, considerem que x = 10 e y = 20: 4 Diferente de outras linguagens, Python não possui o operador incremento (++) e decremento (--). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever OPERADORES MATEMÁTICOS ANUSCA Retângulo ANUSCA Retângulo ANUSCA Sublinhar 16 69 and Retorna Verdadeiro se ambas condições forem Verdadeiras x == 10 and y > 20 retorna Falso. or Retorna Verdadeiro se uma das condições for Verdadeira x == 10 or y > 20 retorna Verdadeiro. not Inverte o resultado de uma condição qualquer not(x == 10 or y > 20) retorna Falso. Operadores de Associação são utilizados para verificar se um conjunto de valores está presente em um objeto. Vejamos como funciona: in Retorna Verdadeiro se o conjunto de valores estiver presente no objeto x = [“Flamengo”, “Vasco”] y = “Botafogo” in x print(y) retornará Falso porque Botafogo não está na lista. not in Retorna Verdadeiro se o conjunto de valores não estiver presente no objeto x = [“Flamengo”, “Vasco”] y = “Flamengo” not in print(y) retornará Falso porque Flamengo está na lista. (AL/RR – 2010 – Letra E) O operador lógico de conjunção ("e", como em a e b) é &&. _______________________ Comentários: o operador lógico de conjunção (“e”, como em a e b) é o and e, não, && (Errado).(CEV – 2018 – Letra A) O operador lógico de conjunção (“e”, como em aa e bb) é &&. _______________________ Comentários: o operador lógico de conjunção (“e”, como em aa e bb) é o and e, não, && (Errado). (IFC/SC – 2015 – Item I) b %= a é equivalente a b = b % a. _______________________ Comentários: b %= a é a forma reduzida de representar b = b % a – assim como b += a equivale é b = b+a (Correto). Uma função é um bloco de código que é executado apenas quando é invocado. São três passos bem simples: (1) uma função é invocada; (2) é passado algum dado como parâmetro ou não; (3) e algum dado é retornado como resultado. No Python, uma função é definida utilizando a palavra- chave def. Sempre que você vir essa palavra em um código-fonte, saiba que ela está definindo uma função. Vamos ver alguns exemplos... Sintaxe: def NomeFunção(argumentos): Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Máquina de escrever OPERADORES LÓGICOS ANUSCA Máquina de escrever ê ANUSCA Máquina de escrever ou ANUSCA Máquina de escrever negação ANUSCA Máquina de escrever OPERADORES DE ASSOCIAÇÃO ANUSCA Retângulo 17 69 def BomDia(): print('Bom dia!') No código acima, foi definida uma função chamada BomDia(). Toda vez que essa função for invocada, será impresso na tela as palavras “Bom dia!”. Professor, o que você quer dizer com invocar uma função? Invocar significa chamar essa função para que ela seja executada. Caso eu deseje que essa função seja executada em algum ponto do meu código-fonte, eu posso invocá-la bastando apenas chamar seu nome: BomDia(). Professor... e se a minha função precisar de alguns dados para que ela consiga processar alguma informação e retornar um resultado? Sem problemas! Nós podemos passar alguns parâmetros – também chamados de argumentos – dentro dos parênteses separados por vírgulas. Modificando um pouco a função definida no código anterior, nós podemos inserir um nome como parâmetro de modo que seja impressa uma mensagem que dependerá do parâmetro passado: def BomDia(nome): print('Bom dia, ',nome) Note que agora a função precisa de um parâmetro para que possa ser executada! Logo, se eu invoco essa função como BomDia(‘Diego’), será impressa a mensagem “Bom dia, Diego”. Vejam só: BomDia('Diego Carvalho') #Retornará Bom dia, Diego Carvalho BomDia('Renato da Costa') #Retornará Bom dia, Renato da Costa BomDia('Ricardo Vale') #Retornará Bom dia, Ricardo Vale BomDia('Herbert Almeida') #Retornará Bom dia, Herbert Almeida Como já dissemos, é possível também passar mais de um parâmetro para uma função. Para tal, basta separá-los por vírgula dentro dos parênteses: def BomDia(nome1, nome2): print('Bom dia, ' + nome1 + ' e ' + nome2) BomDia('Diego','Renato') #Retornará Bom dia, Diego e Renato Em todas as funções apresentadas, não se retornou nenhum resultado (dados apenas foram impressos em tela). No entanto, é possível retornar algum valor usando a palavra-chave return: def MultiplicaPorCinco(numero): return 5*numero #Retornará o número do parâmetro multiplicado por 5 MultiplicaPorCinco(1) #Retornará 5*1 = 5 MultiplicaPorCinco(2) #Retornará 5*2 = 10 MultiplicaPorCinco(3) #Retornará 5*3 = 15 MultiplicaPorCinco(4) #Retornará 5*4 = 20 MultiplicaPorCinco(5) #Retornará 5*5 = 25 Um dado importante é que uma variável somente está disponível dentro da região em que ela é criada – chamamos isso de escopo! Como é, Diego? Vejam o código-fonte abaixo: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 18 69 def minhaFuncao(y): x = y + y #Escopo Local print(x) return x x = 5 #Escopo Global minhaFuncao(x) print(x) Notem que definimos inicialmente uma função chamada minhaFuncao( ). Toda variável criada dentro dessa função possui um escopo local, logo somente podem ser utilizadas dentro dessa função. Em seguida, temos x = 5 com uma indentação diferente, logo ele não possui escopo local daquela função, ele possui um escopo global. Por que? Porque ele não foi criado dentro da função, portanto ele existe e pode ser utilizado em qualquer parte do código. Dito isso, vamos analisar o código! A função é definida (linhas 1 a 4), depois cria-se uma variável x com valor 5 e chama-se a função com esse parâmetro (linha 7), logo minhaFuncao(5). Quando essa variável vai para dentro da função, ela é recebida como y (minhaFuncao(y)). E essa função cria uma variável x (que só existe dentro dela) e diz que x = y + y. Ora, quanto é y? y = 5, logo x = 5+5 = 10. Na linha 3, a função imprime x (logo, imprime 10) e retorna 10. Quando voltamos ao corpo principal do código-fonte, temos um print(x). Ora, quanto é x? Agora que vem o pulo do gato! Aquele x utilizado na função só existe lá dentro porque ele tem escopo local. Logo, quando voltamos ao corpo principal, ele não existe! No entanto, existe outro x no corpo principal. Qual? Aquele definido na linha 6! Logo, a linha 8 imprimirá 5! Legal, né? Imprimimos x duas vezes, mas dentro da função ele tem valor 10 e fora da função ele tem valor 5. (Prefeitura de Criciúma/SC – 2018) Uma função no Python é um conjunto nomeado de código, que pode também ter uma lista opcional de argumentos. Assinale a alternativa que corresponde a forma padrão de uma função na linguagem Python: c) def function name (argument) : Comentários: a sintaxe de uma função é: def NomeFunção(argumentos):. Logo, a única opção que é adequada a essa sintaxe é def function name (argument) : (Letra C). Por fim, é importante falar sobre funções/expressões lambda. O que é isso, Diego? São pequenas funções anônimas! Como assim? Galera, essas funções são úteis para deixar o código mais simples e legível. Elas são funções de uma única linha, isto é, não possuem nome e são declaradas como variáveis. Além disso, sua sintaxe não utiliza a palavra-chave def e nem utilizam a palavra return antes do comando porque se considera que haverá um retorno implícito. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar 19 69 Sintaxe: lambda lista_de_argumentos : expressão Uma função anônima é útil principalmente nos casos em que precisamos de uma função para ser passada como parâmetro para outra função e que não será mais necessária após isso – como se fosse “descartável”. Vejam no exemplo abaixo a criação de uma função anônima que recebe dois parâmetros – x e y – e retorna a soma das duas variáveis. Essa função anônima é atribuída à variável s, que quando é invocada retorna essa soma: s = lambda x,y : x+y print(s(10,20)) #Retornará 10+20 = 30 Para finalizar, vamos ver uma comparação de uma função comum apresentada anteriormente com uma função lambda. Vejamos... def quadrado(x): return x*x print(quadrado(2)) #Retornará 4 Notem que se trata de uma função comum. Como poderíamos transformar essa função em uma expressão lambda? Basta utilizar a sintaxe apresentada anteriormente. Logo, teríamos... quadrado = lambda x: x*x print(quadrado(2)) #Retornará 4 (UFPRE – 2019) Funções lambda em Python são úteis para deixar o código mais simples e legível. Abaixo temos a descrição de uma função lambda em Python. O valor resultante da expressão será: ((lambda x: (lambda y: x**2 - y))(29))(31) a) 810 b) 27 c) 932 d) 33 e) 872 _______________________ Comentários:notem que temos uma função lambda dentro de outra função lambda. É importante dizer que é possível aplicar um argumento na função lambda rodeando a função e seus argumentos entre parênteses (Ex: (lambda x:x+1)(5) retornará 5+1 = 6. Para facilitar a visualização, podemos reescrever a função como (lambda x,y : x**2-y)(29,31). Dessa forma, temos 29²-31 = 841-31 = 810 (Letra A). A utilização de comentários é uma prática comum em programação. Seu objetivo é adicionar descrições em partes especificas do código, seja para documentá-lo, seja para descrevê-lo, ou mesmo, para marcar que uma determinada linha, ou um conjunto de linhas, não devem ser Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever If(): for(): while(): Todas essas três funções precisam dos dois pontos : 20 69 executadas. Podem ser utilizados para documentar programas, classes, funções, variáveis, constantes ou o que mais você desejarmos. Quando criamos uma funcionalidade, é importante que o código possua uma documentação para que os outros programadores (e até nós mesmos) entendam qual foi a lógica utilizada. Para adicionarmos comentários, utilizamos uma marcação especial a fim de informar ao interpretador para não interpretar os caracteres contidos na notação que demarca trechos de comentários. E que marcação seria essa, professor? No caso do Python, há notações diferentes para comentários de uma única linha e comentários de mais de uma linha. Caso você deseje fazer um comentário de apenas uma linha, pode utilizar o caractere cerquilha (#). Tudo que estiver à frente desse caractere deve ser ignorado pelo interpretador. Caso você deseje fazer um comentário com mais de uma linha, pode utilizar aspas triplas (simples ou duplas). Vejamos alguns exemplos: # Comentário para documentar a função "Olá, Mundo!" print("Olá, Mundo!") ’’’ Comentário para documentar a função "Olá, Mundo!" com mais de uma linha e aspas simples ’’’ print("Olá, Mundo!") ””” Comentário para documentar a função "Olá, Mundo!" com mais de uma linha e aspas duplas ””” print("Olá, Mundo!") Em nível de hardware, seu computador possui um componente chamado Memória RAM, que é responsável – grosso modo – por armazenar dados, sendo composta por milhões e milhões de posições ou espaços físicos. Em nível de software, dados são armazenados – em geral – em variáveis, que são essas posições na memória responsáveis por armazenar dados e identificadas por um nome. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar 21 69 Notem abaixo que há uma posição na memória do computador que guarda um espaço físico e que nós demos o nome dessa posição de numeroDaConta. Logo, esse é o nome que identifica esse endereço na memória do computador. Essa posição pode armazenar uma variável, que são dados que podem variar com o tempo ou circunstância. Note pela imagem que atualmente essa variável está armazenando o valor 4823 na posição numeroDaConta. O conteúdo de uma variável pode ser alterado, consultado ou apagado diversas vezes durante a execução de um algoritmo, porém o valor apagado será perdido. Eu gosto de pensar na variável como uma caixa aberta, em que você inserir, retirar ou modificar coisas de dentro. Em contraste com uma constante, que seria uma caixa em que – uma vez inserido algo dentro – não mais permite inserções, alterações ou remoções enquanto o programa estiver sendo executado. Galera, assim como as línguas faladas, as linguagens de programação possuem o que chamamos de declarações. O que são declarações? Basicamente são pensamentos completos e individuais – por exemplo: “Eu quero café” ou “Está chovendo”. Usando palavras diferentes, podemos mudar o significado – por exemplo: “Eu quero café” para “Eu quero unicórnios”. No entanto, não podemos mudar de “Eu quero café” para “Eu quero chovendo” – que não faz sentido gramatical. O conjunto de regras que governam a estrutura e composição de declarações em uma linguagem é chamado de sintaxe. Assim como o idioma Português possui uma sintaxe, todas as linguagens de programação também possuem. Vejam só: a é igual a 5 é uma declaração na língua portuguesa; a = 5 também é uma declaração, mas na linguagem de programação Python. Neste caso, a declaração diz que uma variável chamada a armazena o número inteiro 5. Galera, quando uma declaração atribui um valor a uma variável, nós chamamos isso de "declaração de atribuição". É possível também expressar coisas mais complexas como: A é 5; B é 10; C é A mais B; O que o algoritmo acima está querendo dizer? Este algoritmo diz ao computador para definir a variável A como 5, a variável B como 10, e, finalmente, somar A e B e armazenar o resultado na variável C. Legal, não é? Note que podemos chamar as variáveis de qualquer coisa que nós quisermos desde que cumpra a sintaxe da linguagem de programação escolhida. Em vez de A, B e C, poderíamos chamar de Maçã, Pera e Uva. Pessoal, é claro que uma melhor prática seria nomeá-las com coisas que façam sentido no caso de alguém mais tentar entender seu código. Imaginem vocês tentando ler um código escrito por outra pessoa! Fica mais fácil de compreender Maçã, Pera e Uva do que A, B e C. Concordam? Legal! As Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar 22 69 declarações atribuem identificadores para variáveis, tipos, funções, entre outros. Vamos agora ver como tudo isso funciona especificamente no Python! \o/ O que é uma variável? Variáveis são uma espécie de contêiner para armazenar valores de dados. No Python, as variáveis possuem duas particularidades: (1) variáveis são consideradas um tipo de objeto; (2) variáveis não precisam ser previamente declaradas. Como é, Diego? Em outras linguagens de programação, é necessário usar um comando para declarar uma variável. No Python, não é necessário usar comando nenhum, basta informar o nome e o valor que será armazenado. nome = "Diego" idade = 31 Vejam acima que não é necessário usar nenhum comando, eu simplesmente inseri o nome da variável e o seu valor! Em outras linguagens de programação, eu teria que fazer algo como: var nome = "Diego" var idade = 31 Além disso, não é necessário informar qual é o tipo da variável var string nome = "Diego" var int idade = 31 É possível fazer várias atribuições de variáveis em uma mesma linha. Para tal, basta separar os identificadores por vírgula do lado esquerdo da atribuição e manter a mesma ordem no lado direito: nome, idade = "Diego", 31 Identificadores de variáveis válidos devem obedecer às seguintes regras: ▪ Começar necessariamente com uma letra ou _ (underline); ▪ Jamais devem começar com um número; ▪ Conter caracteres alfanuméricos e undelines (a-z, A-Z, 0-9 e _); ▪ São Case-Sensitive, isto é, capazes de diferenciar maiúscula de minúscula. Essa mesma regra vale também para identificação de funções, classes, módulos, entre outros. Vejamos alguns exemplos de nomes válidos e inválidos: nomevariavel = "Diego" 2nomevariavel = "Diego" Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Editalwww.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Retângulo ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Retângulo ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 23 69 nome_variavel = "Diego" nome-variavel = "Diego" _nome_variavel = "Diego" nome variavel = "Diego" nomeVariavel = "Diego" nome#variavel = "Diego" NOMEVARIAVEL = "Diego" Nome%variavel = "Diego" nomevariavel2 = "Diego" n0m3v@r1@vel = "Diego" O Python possui uma função chamada print() responsável por imprimir na tela do computador o valor de uma variável. Vejamos como funciona: nome = "Diego" idade = 31 print(nome) #Imprimirá: Diego print(idade) #Imprimirá: 31 Para imprimir um texto junto com o valor de uma variável, basta utilizar o caractere +. Lembrando que esse caractere serve tanto para somar o valor de variáveis quanto para realizar concatenações. nome = "Diego" idade = 31 print("Prof. " + nome + " tem " + str(idade) + " anos") #Imprimirá: Prof. Diego tem 31 anos Professor, o que é essa função str( ) com o parâmetro idade! Muito observador você... nós vamos entender no próximo tópico :) Booleano bool x = True x = False Inteiro int x = 10 x = -5 Ponto Flutuante float x = 10.7 x = -2.8 Complexo complex x = 345j x = 2-9j Texto str x = 'texto' x = "texto" Lista list x = [4, 8] x = list() Tupla tuple x = (5, 10) x = tuple() Set set x = {2, 4} x = set( ) Dicionário dictionary x = {'nome': 'Diego', idade: 31} Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever [ ] ANUSCA Máquina de escrever ( ) ANUSCA Máquina de escrever { } 24 69 Por fim, variáveis textuais/literais são cadeias de caracteres chamadas de string. Trata-se de uma sequência de caracteres geralmente utilizada para representar caracteres, palavras, frases ou textos. Os valores podem vir dentro de aspas simples ou aspas duplas (Ex: ‘Diego’ ou “Diego”). Além disso, os caracteres que compõem uma string podem ser acessados individualmente. Para tal, basta utilizar colchetes. Vejamos... nome = "Diego" print(nome[0]) #Retornará o caractere de índice 0 = “D” capitalize() Converte o primeiro caractere em maiúscula. x = “olá, mundo!” print(x.capitalize()) #retorna “Olá, mundo!” find() Retorna a posição da primeira ocorrência de um valor em uma string ou -1 se não existir. x = “Uma vez Flamengo, sempre Flamengo!” print(x.find(“vez”)) #retorna 4 index() Semelhante ao find(), mas retorna uma exceção caso o valor não exista. x = “Uma vez Flamengo, sempre Flamengo!” print(x.index(“vasco”)) #retorna ValueError len() Retorna o tamanho da string. x = “Uma vez Flamengo, sempre Flamengo!” print(len(x)) #retorna 34 split() Divide substrings encontradas a partir de um separador especificado e retorna uma lista. x = “Olá, Mundo!” print(x.split(“,”)) #retorna ['Olá', ' Mundo!'] strip() Remove os espaços em branco do início e do fim da string. x = “ Olá, mundo! ” print(x.strip()) #retorna “Olá, Mundo!” (PF – 2018) Considere os seguintes comandos na programação em Python. a = " Hello, World! " print(a.strip()) Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Sublinhar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 25 69 Esses comandos, quando executados, apresentarão o resultado a seguir. a[0]=Hello, a[1]=World! _______________________ Comentários: opa... nada a ver! A função strip() é responsável por remover espaços no início e no fim de uma string, portanto o resultado esperado será: “Hello, World!” – sem os espaços iniciais e finais(Errado). É importante falar rapidamente sobre casting! Esse é um recurso que permite definir ou converter o tipo de uma variável. Em geral, isso é feito por meio de três funções: int() Converte variáveis do tipo inteiro, ponto flutuante ou string em um inteiro. #Exemplos: x = int(100) #x será 100 y = int(4.8) #y será 4 z = int('5') #z será 5 float() Converte variáveis do tipo inteiro, ponto flutuante ou string em um ponto flutuante. #Exemplos: x = float(100) #x será 100.0 y = float(3.6) #y será 3.6 z = float('2') #z será 2.0 str() Converte variáveis do tipo inteiro, ponto flutuante ou string em uma string. #Exemplos: x = str('Diego') #x será ‘Diego’ y = str(1234567) #y será ‘1234567’ z = str(3.14159) #z será ‘3.14159’ (CRECI – 2016) Qual alternativa representa a declaração de uma variável do tipo texto, na linguagem de programação Python? a) var valor = 3; b) boolean inicio = falso; c) textp = “texto de exemplo”; d) int i = 1; _______________________ Comentários: (a) Errado, essa é a declaração de uma variável do tipo inteiro e não é necessário utilizar a palavra-chave var; (b) Errado, essa é a declaração de uma variável do tipo booleana e não é necessário definir o tipo como boolean; (c) Correto, não utiliza palavras-chave nem o tipo da variável e o valor está entre aspas; (d) Errado, essa é a declaração de uma variável do tipo inteiro e não é necessário definir o tipo como int (Letra C). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever CASTING - DEFINIR CONVERTER 26 69 Meus queridos, nós estudamos cinco tipos de dados no tópico anterior (booleano, inteiro, ponto flutuante, complexo e textual). Todos eles possuem uma característica em comum: são capazes de armazenar um único dado. No entanto, existe um novo tipo de dado capaz de armazenar múltiplos itens dentro de uma única unidade. Nós estamos falando sobre as coleções (collections). Vamos entender isso melhor... Uma coleção é um contêiner utilizado para armazenar uma coleção de dados. Em outras palavras, trata-se de uma estrutura de dados utilizada para armazenar objetos. Galera, em algumas situações você precisa armazenar um conjunto de valores e – não apenas – um único valor. Para escolher qual coleção será utilizada, é importante entender as propriedades de cada tipo a fim de tirar o melhor possível de cada estrutura. Bem, existem quatro tipos de coleção... Trata-se de uma coleção de valores ordenados, mutáveis e indexáveis que pode conter valores duplicados. Trata-se de uma coleção de valores ordenados, imutáveis e indexáveis que pode conter valores duplicados (também podem ser chamadas de sequências). Trata-se de uma coleção de valores desordenados, mutáveis e não indexáveis que não pode conter valores duplicados. Trata-se de uma coleção de valores desordenados, mutáveis e indexáveis que não pode conter valores duplicados. 5.4.1 – Listas Uma lista é uma coleção de valores ordenados, mutáveis e indexáveis que pode conter valores duplicados e são delimitadas por colchetes. Vejamos um exemplo: ListaFrutas = ["maçã", "carambola", "banana"] print(ListaFrutas) #Retornará ['maçã', 'carambola', 'banana'] Vejam que realmente se trata de uma coleção, uma vez que armazena múltiplosvalores em uma única variável. Legal, mas e se eu quiser acessar uma fruta específica? Vejamos... ListaFrutas = ["maçã", "carambola", "banana"] print(ListaFrutas[1]) #Retornará carambola Galera, cada valor em uma lista é indexado por um número inteiro. O que isso significa? Significa que existe um número inteiro que referencia cada valor da lista com o intuito de facilitar seu Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Retângulo ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever LIST TUPLE SET DICTIONARY ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Sublinhar ANUSCA Máquina de escrever ORDENADOS MUTÁVEIS INDEXÁVEIS VALORES DUPLICADOS COLCHETES ANUSCA Sublinhar 27 69 acesso. Professor, não deveria ter retornado maçã em vez de carambola, uma vez que foi utilizado o índice [1]? Não, porque – por convenção – adotou-se que o índice de lista começa sempre pelo [0] (zero). Vejam só o que aconteceria se o código fosse assim: ListaFrutas = ["maçã", "carambola", "banana"] print(ListaFrutas[0]) #retornará maçã print(ListaFrutas[1]) #retornará carambola print(ListaFrutas[2]) #retornará banana print(ListaFrutas[3]) #retornará IndexError: list index out range Note que se eu tentar acessar o índice [3], retornará Erro de Índice: índice da lista fora de alcance. Professor, e se eu quiser modificar algum valor dessa lista? É muito simples também... ListaFrutas[0] = "manga" ListaFrutas[2] = "carambola" print(ListaFrutas) #retornará ['manga', 'carambola', carambola] Percebam que eu mudei o valor armazenado no índice [0] e índice [1] da lista e o resultado correspondeu aos novos valores. Dito isso, vamos relembrar nossa definição inicial de lista? Uma lista é uma coleção de valores ordenados, mutáveis e indexáveis que pode conter valores duplicados. Uma lista é uma coleção de valores? Sim, nós vimos que ele é capaz de armazenar múltiplos dados. Os valores de uma lista são ordenados? Sim, ser ordenado significa que há uma ordem qualquer. Professor, é necessariamente uma ordem alfabética ou numérica? Não, pode ser qualquer ordem! Os valores de uma lista são mutáveis? Sim, nós vimos que é possível modificar seus valores no exemplo anterior. Os valores de uma lista podem ser duplicados? Sim, em nossa lista final, há duas ocorrências da fruta ‘carambola’. Bem, agora nós já conseguimos entender cada ponto da definição de lista, então chegou o momento de nos aprofundar mais... O que acontece se eu utilizar um índice negativo em uma lista? Galera, um índice negativo significa que a lista começa do fim para o início. Como é, Diego? É só ver a lista de modo invertido, olha só... ListaFrutas = ["maçã", "carambola", "banana"] print(ListaFrutas[-1]) #retornará banana print(ListaFrutas[-2]) #retornará carambola print(ListaFrutas[-3]) #retornará maçã print(ListaFrutas[-4]) #retornará IndexError: list index out range Note que há uma observação: “maçã” está no índice [0] e no índice [-3]. Além disso, é possível especificar uma extensão de índices também... ListaFrutas = ["maçã", "carambola", "banana", "pera", "laranja", "amora"] print(ListaFrutas[1:2]) #retornará [‘carambola’] print(ListaFrutas[1:3]) #retornará [‘carambola’, ‘banana’] print(ListaFrutas[1:4]) #retornará ['carambola', 'banana', 'pera'] Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 28 69 print(ListaFrutas[1:5]) #retornará ['carambola', 'banana', 'pera', 'laranja'] Note que o valor contido na posição do índice à esquerda dos dois-pontos é retornado, mas o valor contido na posição do índice à direita, não. Há também algumas variações: ListaFrutas = ["maçã", "carambola", "banana", "pera", "laranja", "amora"] print(ListaFrutas[:2]) #retornará ['maçã', 'carambola'] print(ListaFrutas[3:]) #retornará ['pera', 'laranja', 'amora'] Note que – se não inserirmos nenhum valor à esquerda – considera-se como [0] ; e – se não inserirmos nenhum valor à direita, considera-se até o final da lista. Galera, nós temos visto diversos exemplos em que todos os valores da lista são do tipo texto, mas eles poderiam ter outros tipos (inclusive tipos diferentes em uma mesma lista). Por essa razão, dizemos que uma lista é um tipo de coleção heterogênea. Galera, nós já vimos que é possível criar funções em Python, mas já existem diversas funções (ou métodos) prontos para serem utilizados. Vamos conhecê-los... len( ) Função utilizada para retornar quantos itens uma lista possui. ListaQualquer = [2020, "Flamengo", True] print(len(ListaQualquer)) #Retornará 3 append( ) Função utilizada para adicionar um item ao final da lista. Pensando como uma pilha, de modo inverso a uma lista, ele adiciona um item no topo.5 ListaQualquer = [2020, "Flamengo", True] ListaQualquer.append(5) print(ListaQualquer) #Retornará [2020, "Flamengo", True, 5] insert( ) Função utilizada para adicionar um item a um índice especificado. ListaQualquer = [2020, "Flamengo", True, 5] ListaQualquer.insert(3,"Bola") print(ListaQualquer) #Retornará [2020, "Flamengo", True, 'Bola', 5] remove( ) Função utilizada para remover a primeira ocorrência de um item especificado em uma lista. ListaQualquer = [2020, "Flamengo", True, "Bola", 5] ListaQualquer.remove(2020) print(ListaQualquer) #Retornará ["Flamengo", True, "Bola", 5] pop( ) Função utilizada para remover item especificado (ou o último item se nenhum item for especificado). Pensando como uma pilha, de modo inverso a uma lista, essa função recupera o primeiro item quando não é espeficiado. ListaQualquer = ["Flamengo", True, "Bola", 5] ListaQualquer.pop() print(ListaQualquer) #Retornará ["Flamengo", True, "Bola"] ListaQualquer.pop(2) print(ListaQualquer) #Retornará ["Flamengo", True"] 5 Em programação, existe o conceito de pilha. O que é uma pilha? Pensem em uma pilha de pratos: o último prato a ser adicionado é o primeiro a ser lavado. Em programação, é semelhante: o último elemento a ser adicionado na pilha é o primeiro a ser recuperado, em contraste com a lista, em que o primeiro elemento a ser adicionado é também o primeiro a ser recuperado (como em uma fila). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar 29 69 del( ) Função utilizada para remover um item especificado (ou a lista inteira se o nenhum índice for especificado). Caso a lista seja excluída, ela não poderá mais ser referenciada. ListaQualquer = ["Flamengo", True, "Bola", 5] del ListaQualquer[3] print(ListaQualquer) #Retornará ["Flamengo", True, "Bola"] del ListaQualquer #Excluirá a lista clear( ) Função utilizada para esvaziar uma lista. ListaQualquer = ["Flamengo", True, "Bola", 5] ListaQualquer.clear() print(ListaQualquer) #Retornará a lista vazia [] copy( ) Função utilizada para copiar uma lista. ListaQualquer= ["Flamengo", True, "Bola", 5] ListaQualquer2 = ListaQualquer.copy() print(ListaQualquer2) #Retornará ["Flamengo", True, "Bola", 5] list( ) Função utilizada para criar uma nova lista. ListaQualquer = list(("Flamengo", True, "Bola", 5)) print(ListaQualquer) #Note que deve ter parênteses duplos count( ) Função utilizada para retornar a quantidade de vezes que um valor específico aparece em uma lista. ListaQualquer = ["Flamengo", True, "Flamengo", 5] print(ListaQualquer.count("Flamengo")) #Retornará 2 (“Flamengo aparece duas vezes”) extend( ) Função utilizada para adicionar elementos específicos de uma lista ao final de outra lista. ListaQualquer1 = ["Bola", 5] ListaQualquer2 = ["Flamengo", True] ListaQualquer1.extend(ListaQualquer2) print(ListaQualquer1) #Retornará ["Bola", 5, "Flamengo", True] index( ) Função utilizada para retornar o índice da primeira ocorrência de um valor especificado. ListaQualquer = ["Flamengo", True, "Bola", 5] print(ListaQualquer.index("Flamengo")) #Retornará 0 print(ListaQualquer.index(True)) #Retornará 1 print(ListaQualquer.index("Bola")) #Retornará 2 print(ListaQualquer.index(5)) #Retornará 3 reverse( ) Função utilizada para inverter a ordem dos elementos de uma lista. ListaQualquer = ["Flamengo", True, "Bola", 5] ListaQualquer.reverse() print(ListaQualquer) #Retornará [5, 'Bola', True, 'Flamengo'] sort( ) Função utilizada para ordenar uma simples em ordem ascendente (por padrão – sem necessidade de parâmetros) ou descendente (parâmetro reverse=True). ListaQualquer = ["Flamengo", "Vasco", "Santos", "Bahia"] ListaQualquer.sort() print(ListaQualquer) #Retornará ['Bahia', 'Flamengo', 'Santos', 'Vasco'] ListaQualquer.sort(reverse=True) print(ListaQualquer) #Retornará ['Vasco', 'Santos', 'Flamengo', 'Bahia'] range() Função utilizada para retornar uma lista de números, começando do zero (por padrão) e incrementando em uma unidade (por padrão) e parando em um número especificado. Sua sintaxe é: range(start, stop, step) – sendo que start é opcional e incluso; listaQualquer = range(5, 20, 3) print(list(listaQualquer)) #retorna [5, 8, 11, 14, 17] listaQualquer = range(4, 10) print(list(listaQualquer)) #retorna [4, 5, 6, 7, 8, 9] listaQualquer = range(6) print(list(listaQualquer)) #retorna [0, 1, 2, 3, 4, 5] Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 30 69 step é opcional e pode ser negativo; e stop é obrigatório e não é incluso. Vamos resumir as características básicas de uma lista (list) em uma tabelinha que será incrementada à medida que estudarmos os outros tópicos sobre coleções: (IF/PE – 2016) Uma das estruturas de dados existentes na linguagem de programação Python são as listas. Considere o trecho de código abaixo: candidatos = ['José', 'João', 'Cibelly', 'Sonivaldo','Dariane'] É CORRETO afirmar que: a) candidatos.len() obtem o tamanho da lista. b) o método append é utilizado para adicionar um elemento no início da lista. c) o comando insert('Antônio') insere “Antônio” no início da lista. d) candidatos[-2] retornaria o penúltimo elemento da lista. e) candidatos.size() obtem o tamanho da lista. _______________________ Comentários: (a) Errado, essa função utilizada para retornar o tamanho de uma lista, mas a sintaxe é len(candidatos); (b) Errado, ele é utilizado para adicionar um elemento no fim da lista; (c) Errado, essa função é utilizada para adicionar um item a um índice especificado – para adicionar ao início da lista, a sintaxe deveria ser insert(0,’Antônio’); (d) Correto, quando se utiliza um número negativo, a contagem do índice é de traz para frente, logo seria o segundo item do final para o começo; (e) Errado, para obter o tamanho da lista, deve-se usar len(candidatos) (Letra D). 5.4.2 – Tuplas Uma tupla (ou sequência) é uma coleção de valores ordenados, imutáveis e indexáveis que pode conter valores duplicados e são delimitadas por parênteses. Vejamos um exemplo: TuplaFrutas = ("maçã", "carambola", "banana") print(TuplaFrutas) #Retornará ('maçã', 'carambola', 'banana') Vejam que realmente se trata de uma coleção, uma vez que armazena múltiplos valores em uma única variável. Legal, mas e se eu quiser acessar uma fruta específica? Vejamos... Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Retângulo ANUSCA Retângulo ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 31 69 TuplaFrutas = ("maçã", "carambola", "banana") print(TuplaFrutas[0]) #Retornará maçã print(TuplaFrutas[1]) #Retornará carambola print(TuplaFrutas[2]) #Retornará banana print(TuplaFrutas[3]) #Retornará IndexError: list index out range Note que a tupla é delimitada por parênteses, mas o índice sempre será representado entre colchetes. Galera, tuplas são muito parecidas com listas, isto é, a forma de acessar é semelhante, existem índices negativos, é possível acessar uma extensão de índices. No entanto, há uma diferença fundamental: tuplas são imutáveis! Isso significa que – uma vez criada – você não poderá mais modificar seus itens. Diego, eu não posso modificar, mas eu posso inserir ou remover itens? Não, você não pode modificar absolutamente nada! Caso seja necessário, a única alternativa seria convertê-la em lista: TuplaFrutas = ("maçã", "carambola", "banana") print(TuplaFrutas) #Retornará ('maçã', 'carambola', 'banana') ListaFrutas = list(TuplaFrutas) #Converte a Tupla em uma Lista ListaFrutas[1] = "abacate" print(ListaFrutas) #Retornará ['maçã', 'abacate', 'banana'] Vejamos agora algumas funções (ou métodos) que podem ser utilizadas com tuplas (ou sequências). Fiquem tranquilos, agora são apenas quatro: len( ) Função utilizada para retornar quantos itens uma tupla possui. TuplaQualquer = (2020, "Flamengo", True) print(len(TuplaQualquer)) #Retornará 3 count( ) Função utilizada para retornar a quantidade de vezes que um valor específico ocorre em uma tupla. TuplaQualquer = (8, 6, 1, 9, 1, 9, 1, 6, 5, 1) print(TuplaQualquer.count(2)) #Retornará 0 print(TuplaQualquer.count(6)) #Retornará 2 print(TuplaQualquer.count(1)) #Retornará 4 print(TuplaQualquer.count(9)) #Retornará 2 index( ) Função utilizada para buscar por um valor específico e retornar o índice de sua primeira ocorrência na tupla. TuplaQualquer = (8, 6, 1, 9, 1, 9, 1, 6, 5, 1) print(TuplaQualquer.index(5)) #Retornará 8 print(TuplaQualquer.index(6)) #Retornará 1 print(TuplaQualquer.index(1)) #Retornará 2 print(TuplaQualquer.index(9)) #Retornará 3 tuple( ) Função utilizada para criar uma nova tupla. TuplaQualquer = tuple(("Flamengo", True, "Bola", 5)) print(TuplaQualquer) #Note que deve ter parênteses duplos Vamos resumir as características básicas de uma tupla (tuple) em uma tabelinha que será incrementada à medida que estudarmos os outros tópicos sobre coleções: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Sublinhar ANUSCA Sublinhar32 69 (IF/PI – 2016 – Item IV) No Python3, uma Tupla é uma sequência mutável onde podemos inserir elementos ao final. _______________________ Comentários: uma tupla é uma sequência imutável onde não se pode inserir elementos (Errado). 5.4.3 – Sets Um set (ou conjunto) é uma coleção de valores desordenados, mutáveis e não indexáveis que não pode conter valores duplicados e são delimitadas por chaves. Vejamos um exemplo: SetFrutas = {"maçã", "carambola", "banana"} print(SetFrutas) #Retornará uma sequência desses três valores em ordem aleatória Apesar de termos declarado o conjunto acima como maçã, carambola e banana, não existe uma ordem! Se eu executar várias vezes o comando print acima, poderíamos ter resultados diferentes para cada execução. No caso acima, poderíamos ter uma das seis possibilidades apresentadas abaixo. Como não há uma ordenação, não há como indexar os valores por nenhum número inteiro. Entendido? {"maçã", "carambola", "banana"} ou {"maçã", "banana", "carambola"} ou {"carambola", "maçã", "banana"} ou {"carambola", "banana", "maçã"} ou {"banana", "maçã", "carambola"} ou {"banana", "carambola", "maçã"} Nós não vamos nos estender nesse tipo de coleção, porque ela quase não cai em prova (tanto que não encontrei nenhuma questão sobre ela). De todo modo, vejamos algumas funções: len( ) Função utilizada para retornar quantos itens um conjunto possui. SetQualquer = {2020, "Flamengo", True} print(len(SetQualquer)) #Retornará 3 add( ) Função utilizada para adicionar um item a um conjunto. SetQualquer = {2020, "Flamengo", True, 5} SetQualquer.add("Bola") print(SetQualquer) Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Retângulo ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever DESORDENADOS MUTÁVEL NÃO INDEXÁVEL VALORES DUPLICADOS CHAVES 33 69 #Retornará o set original com “Bola” dentro do conjunto update( ) Função utilizada para adicionar elementos específicos de um conjunto ao final de outro conjunto. SetQualquer1 = {"Bola", 5} SetQualquer2 = {"Flamengo", True} SetQualquer1.update(SetQualquer2) print(SetQualquer1) #Retornará a união dos dois conjuntos em alguma ordem remove( ) Função utilizada para remover a primeira ocorrência de um item especificado em um conjunto. SetQualquer = {2020, "Flamengo", True, "Bola", 5} SetQualquer.remove(2020) print(SetQualquer) #Retornará o set original sem 2020 dentro do conjunto clear( ) Função utilizada para esvaziar um conjunto. SetQualquer = {"Flamengo", True, "Bola", 5} SetQualquer.clear() print(SetQualquer) #Retornará o set vazio {} del( ) Função utilizada para remover um conjunto (set) inteiro. SetQualquer = {"Flamengo", True, "Bola", 5} del SetQualquer #Excluirá o set Vamos resumir as características básicas de um conjunto (set) em uma tabelinha que será incrementada à medida que estudarmos os outros tópicos sobre coleções: 5.4.4 – Dicionários Um dicionário é uma coleção de valores desordenados, mutáveis e indexáveis que pode não conter valores duplicados e são delimitadas por chaves. Galera, como funciona um dicionário de língua portuguesa? Você basicamente procura uma palavra e encontra seu significado. Aqui o dicionário funciona de maneira semelhante, no entanto – em vez de utilizar uma estrutura de palavra:significado – utiliza uma estrutura de chave:valor. Essa é uma primeira diferença sobre as coleções dos tópicos anteriores – as chaves delimitam um conjunto de chave:valor. Vamos ver um exemplo para ficar mais claro: DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Máquina de escrever DESORDENADOS MUTÁVEL INDEXÁVEIS VALORES DUPLICADOS - CHAVES 34 69 print(DicioQualquer) #Retornará {'marca': 'Ford', 'modelo': 'Fiesta', 'ano': 2015} Vejam que realmente se trata de uma coleção, uma vez que armazena múltiplos valores em uma única variável. Legal, mas se eu quiser acessar um valor específico? Vejamos... DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } print(DicioQualquer["modelo"]) #Retornará Fiesta Observem que eu passei como parâmetro uma chave e ele me retornou um valor. O acesso a esse valor específico também poderia ser feito utilizando a função get(): print(DicioQualquer.get("modelo")) #Retornará Fiesta E se eu quiser modificar um valor do meu dicionário, também é muito simples! Basta informar o valor da chave e o nome valor a ser atribuído: DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } DicioQualquer["modelo"] = "Ranger" print(DicioQualquer) #Retornará {'marca': 'Ford', 'modelo': 'Ranger', 'ano': 2015} E para adicionar um novo valor ou deletar um valor existente, Diego? Também é completamente possível, porque lembrem-se que essa coleção é do tipo mutável: DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } DicioQualquer["cor"] = "Prata" print(DicioQualquer) #Retornará 'marca': 'Ford', 'modelo': 'Fiesta', 'ano': 2015, 'cor': 'Prata'} del DicioQualquer["ano"] print(DicioQualquer) #Retornará marca': 'Ford', 'modelo': 'Fiesta', 'cor': 'Prata'} Por fim, é importante mencionar os itens são indexados por string e, não, por inteiros. Além disso, ele não pode conter duplicatas nas chaves, mas pode conter duplicadas nos valores. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 35 69 len( ) Função utilizada para retornar quantos itens um dicionário possui. DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } print(len(DicioQualquer) #Retornará 3 copy Função utilizada para copiar um dicionário para outro. DicioQualquer = { "marca": "Ford", "modelo": "Fiesta", "ano": 2015 } DicioQualquer2 = DicioQualquer1.copy() #Outra forma de implementar seria usando dict(): DicioQualquer2 = dict(DicioQualquer1) Chegamos finalmente à versão final da nossa tabela comparativa entre tipos de coleções inserindo dicionários (dictionary). Essa tabela será muito útil para vocês, então guardem-na com carinho! (UFPR – 2017) Três tipos de dados fundamentais em Python são as listas (“lists”), sequências ou ‘tuplas’ (“tuples”) e dicionários (“dictionaries”). A respeito dessas estruturas, é correto afirmar: a) Listas não podem ser modificadas depois de criadas, ao passo que sequências e dicionários podem. b) Listas podem ser modificadas, mas seu tamanho não pode ser modificado após a criação, ao passo que sequências e dicionários não têm essa limitação. c) Dicionários não podem ser modificados depois de criados, ao passo que listas e sequências podem. d) Listas e sequências são indexadas por inteiros, ao passo que dicionários podem ser indexados por “strings”. e) Listas e dicionários são indexados por inteiros, ao passo que sequências podem ser indexadas por “strings”. _______________________ Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 36 69 Comentários: (a) Errado, listas podemser modificadas ao passo que sequências não podem; (b) Errado, listas podem ser modificadas, assim como seu tamanho – sequências não podem ser modificadas; (c) Errado, dicionários podem ser modificados a qualquer momento; (d) Correto; (e) Errado, dicionários são indexados por string e sequências são indexados por inteiro. Notem que a questão não menciona os sets, mas isso não a invalida (Letra D). Galera, em geral as instruções de uma receita de bolo – como a mostrada no início da aula – aparecem de forma vertical de cima para baixo. Vocês se lembram, não é? Em programas de computador, ocorre da mesma forma! O programa começa na primeira instrução e desce uma de cada vez até atingir eventualmente o seu fim. Até agora, nós mostramos poucas instruções, mas um software pode possuir muitas linhas de código (Ex: Windows possui mais de 2 milhões). Vocês se lembram que uma forma de representar algoritmos é por meio de um fluxograma? Pois é, um fluxograma representa os possíveis fluxos ou caminhos que um programa pode tomar. Eu disse que as instruções de um software são lidas verticalmente uma após a outra, mas isso não significa que todas as instruções devem ser executadas na ordem apresentada. Por que? Por conta das Estruturas de Controle de Fluxo! Nós vamos estudar a seguir as principais estruturas de controle de fluxo: Estruturas de Decisão (If) e Estruturas de Repetição (While e For). Vamos lá... Também chamadas de Estruturas de Seleção ou Condição, elas permitem interferir na sequência natural de instruções executadas dependendo de uma condição de teste. Nós vimos que a execução de instruções em geral ocorre em uma sequência uma após a outra, porém – por meio de condições – é possível mudar a sequência natural de execução. A estrutura de condição mais simples em algoritmos é conhecida como If (Se) e é utilizada da seguinte forma: if expressão-lógica: bloco-de-instruções A <expressão-lógica> é uma expressão/condição que retorna um valor verdadeiro ou falso e, caso o resultado dessa expressão seja verdadeiro, será executado o bloco de comandos que está dentro dessa estrutura; caso seja falso, a execução do programa ignora o bloco de comandos e continua na linha seguinte à estrutura de condição. Uma condição falsa poderia ser: 10 > 20; e uma condição verdadeira poderia ser 30 = 30. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 37 69 O bloco-de-instruções é uma sequência de código que será executada somente quando o resultado da expressão lógica for verdadeiro. Por fim, é preciso tomar cuidado com a indentação (o recuo no começo da linha) para definir o escopo dessa instrução. Dito isso, vamos analisar o código apresentado abaixo. Note que ele define duas variáveis (a e b) e – em seguida – apresenta uma instrução if que avalia uma expressão lógica. a = 20 b = 50 if b > a: print("b é maior que a") #Retornará b é maior que a Perceba que b é realmente maior que a, logo a expressão lógica é verdadeira. Se ela é verdadeira, o comando na linha abaixo – que possui um recuo maior – será executado. E se não tiver recuo? a = 20 b = 50 if b > a: print("b é maior que a") #Retornará IndentationError: expected na indented block Caso não haja esse recuo (indentação), o código retornará um erro porque é obrigatório que haja um bloco de instruções indentado para executar a instrução. Dessa forma, podemos dizer que a instrução se é como uma bifurcação na estrada. O caminho que você toma depende da avaliação da expressão lógica (se é verdadeira ou falsa). Pronto, nós acabamos de aprender nossa primeira declaração condicional. Só que ainda não acabou... Há uma outra palavra-chave utilizada quando uma condição não foi satisfeita, mas eu gostaria de fazer outro teste. Para tal, utiliza-se a palavra-chave elif. Como funciona, Diego? A sintaxe é... if expressão-lógica1: bloco-de-instruções1 elif expressão-lógica2: bloco-de-instruções2 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 38 69 Vamos ver um exemplo semelhante ao apresentado anteriormente, mas agora o código testará uma condição e, se ela não for verdadeira, ele testará outra condição: a = 50 b = 50 if b > a: print("b é maior que a") elif a == b: print("a e b são iguais") #Retornará a e b são iguais No exemplo acima, analisa-se a primeira expressão lógica (linha 4): b > a. Essa expressão é verdadeira ou falsa? É falsa, logo não se executa a instrução da linha 5. Em seguida, analisa-se a segunda expressão lógica (linha 6): a == b. Essa expressão é verdadeira ou falsa? É verdadeira, logo executa-se a instrução da linha 7 e imprime na tela a mensagem: a e b são iguais. Bacana! Estamos aumentando nosso vocabulário. Agora vamos aprender mais uma palavra-chave: else. if expressão-lógica1: bloco-de-instruções1 elif expressão-lógica2: bloco-de-instruções2 else: bloco-de-instruções3 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar 39 69 Para ficar mais claro, imagine o software de uma faculdade que calcula se um aluno qualquer foi aprovado, reprovado ou se ficou de recuperação a partir de expressões lógicas: if media < 5.0: print("Aluno Reprovado") elif media >= 7.0: print("Aluno Aprovado") else: print("Aluno de Recuperação") Vamos interpretar esse algoritmo? Suponha que um aluno qualquer tenha uma nota média de 5.1. A primeira expressão lógica é falsa porque a média do aluno não é menor que 5.0 e a segunda expressão lógica é falsa porque a média do aluno não é maior ou igual a 7.0, logo o terceiro bloco de instruções será necessariamente executado porque se a média do aluno não é menor que 5.0 e não é maior ou igual a 7.0, então a média dele é entre 5.0 e 6.9, portanto ele está de recuperação. Nós vimos exemplos em que há apenas uma instrução dentro do bloco de cada expressão lógica, mas você pode colocar quantas desejar. Caso tenha apenas uma instrução, pode escrever assim: if media < 5.0: print("Aluno Reprovado") elif media >= 7.0: print("Aluno Aprovado") else: print("Aluno de Recuperação") Lembrando também que você não é obrigado a usar o elif. Caso só haja duas opções, você pode utilizar apenas if e else. Veja só o código abaixo: if idade >= 18: print("Maior de Idade") else: print("Menor de Idade") Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 40 69 Se você tiver apenas uma instrução para executar, uma para if e outra para else, poderá colocar tudo na mesma linha conforme apresentado a seguir: if idade >= 18: print("Maior de Idade") else: print("Menor de Idade") Por fim, é importante saber que é possível ter um if dentro de outro if (e assim por diante). Quando isso ocorre, dizemos que temos um if aninhado ou encadeado. if x > 10: print("Número acima de 10!") if x > 20: print("E também acima de 20!") if x > 30: print("E também acima de 30!") else: print("Mas abaixo de 30!") else: print("Mas abaixo de 20!") else: print("Número abaixode 10!") (CRC/SC – 2019) Considerando a função abaixo, escrita em Python, se o valor dos parâmetros quantidade De Horas for igual a 40 e valor Hora = 40 ,teremos como resultado: def calcular (quantidadeDeHoras, valorHora): horas = float(quantidadeDeHoras) taxa = float(valorHora) if horas <= 40: salario=horas*taxa else: h_excd = horas - 40 salario = 40*taxa+(h_excd*(1.5*taxa)) return salario a) Uma exceção. b) 80. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 41 69 c) 16000. d) 0. e) 1600. _______________________ Comentários: vamos começar a fazer algumas questões um pouquinho mais interessantes! Note que o enunciado afirma que os parâmetros Quantidade de Horas é 40 e Valor Hora é 40. Dito isso, vamos analisar o código: Primeira observação: temos uma função! Como você sabe, professor? Observem a palavra-chave def definindo uma função chamada calcular que recebe como parâmetro quantidadeDeHoras e valorHora. Pelo enunciado, nós já sabemos que esses dois parâmetros correspondem, respectivamente, a 40 e 40. Na linha seguinte, podemos substituir como: horas = float(40) #float() é uma função que converte variáveis em um ponto flutuante, logo significa que dizer que horas = 40.0 taxa = float(40) #mesma coisa da linha anterior – retornará taxa = 40.0 Agora vamos analisar o ponto principal! Temos uma estrutura de if-else: if horas <= 40: salario = horas*taxa #Como horas = 40, salario = 40.0 * 40.0 = 1600.0 Pronto! Não precisamos sequer avaliar o que há no else porque a condição já foi satisfeita. Na verdade, o mais correto é que houvesse uma opção 1600.0, mas vamos na mais correta (Letra E). Uma das principais características que consolidaram o sucesso na utilização dos computadores para a resolução de problemas foi a sua capacidade de repetir o processamento de um conjunto de operações para grandes quantidades de dados. Exemplos de conjuntos de tarefas que repetimos diversas vezes dentro de uma situação específica podem ser observados invariavelmente no nosso dia a dia. As estruturas de repetição nos fornecem um modo de repetir instruções até que determinado objetivo seja atingido, quando a repetição se encerra. Todas as estruturas de repetição têm em comum o fato de haver uma condição de controle, expressa através de uma expressão lógica, que é testada em cada ciclo para determinar se a repetição prossegue ou não. Em outras palavras, se você manda o computador repetir algo, você tem que dizer quando ele deve parar! Por exemplo: um sistema que vende ingressos para um show deve armazenar em alguma variável a quantidade de ingressos disponíveis. A cada ingresso vendido, esse valor deve ser decrementado e, quando o valor chegar a zero, a venda de ingressos deve ser interrompida uma vez que a carga de ingressos acabou. Há infinitas utilidades e é uma estrutura extremamente comum em qualquer algoritmo de qualquer linguagem de programação. As estruturas de repetição são basicamente duas: while e for. A diferença básica é que a estrutura while é iterada/repetida (em loop) baseada em uma expressão lógica (True ou False) e a estrutura for é iterada/repetida (em loop) baseada em coleções (ou objetos multivalorados). Calma, tudo Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 42 69 ficará claro! A estrutura de repetição while avalia uma expressão lógica e só executa os comandos do bloco de instruções se essa expressão for considerada verdadeira. Após a execução dos comandos, a expressão lógica é novamente avaliada. Caso o resultado seja falso, o algoritmo sai da estrutura de repetição (chamada de loop) e segue para a próxima linha: while expressão-lógica: bloco-de-instruções Vamos imaginar um contexto em que um candidato precisa de 100 votos para ser eleito síndico de um condomínio de apartamentos. Vejamos como funciona: voto = 0 while voto < 100: print("Votos Insuficientes") voto = voto + 1 print("Habemus Síndico!") #Imprimirá “Votos Insuficientes” 100 vezes (0 a 99) e, por fim, imprimirá “Habemus Síndico!” Notem que eu inicializo a variável voto com valor 0. Em seguida, há uma expressão lógica que avalia se o valor armazenado na variável é menor que 100. Como inicialmente essa expressão é verdadeira, executa-se o bloco de instruções imprimindo uma mensagem de “Votos Insuficientes”e incrementando em uma unidade o valor da variável voto. Isso se repete diversas vezes até um momento em que a variável armazenará o valor 99. O que acontece nesse momento? Quando voto = 99, analisamos: 99<100? Sim, isso é verdadeiro! Imprime a mensagem de “Votos Insuficientes” e incrementamos a variável voto em uma unidade, logo voto = 100. Voltamos no loop Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 43 69 e analisamos: 100>100? Não, isso é falso! Se é falso, imprime-se a mensagem “Habemus Síndico!”, saímos desse bloco de instruções e prosseguimos com o nosso código normalmente. A variável dentro do bloco de instruções sendo incrementada/decrementada é chamada de contador. Se não houver um contador ou alguma outra forma de escape do nosso bloco de instruções, o algoritmo ficará em repetição para sempre – isso é chamado de loop infinito. Vejam no exemplo apresentado abaixo que – como não há um escape do bloco de instrução – não existe uma condição de saída da estrutura de repetição. Logo, esse bloco de instruções continuará sendo repetido indefinidamente causando problemas de memória ao computador. voto = 0 while voto < 100: print("Eu nunca mais vou sair daqui! MUA-HA-HA-HA-HA") #Esse código imprimirá infinitamente “Eu nunca mais vou sair daqui! MUA-HA-HA-HA-HA” Galera, existe uma outra forma de escapar do loop. Sabe como? Utilizando a declaração break! Essa declaração permite interromper um loop mesmo que a expressão lógica ainda seja verdadeira: contador = 0; while contador < 6: print(contador) if contador == 3: break contador = contador + 1 #Esse código imprimirá 0 1 2 3 Note que o while será executado incrementando o contador normalmente. No entanto, se em algum momento o contador for 3, ele interrompe o loop (break). Da mesma forma que existe um comando específico para parar, há também um comando específico para continuar! Como assim? Por vezes, você não quer que o restante do bloco de instruções seja executado dada determinada condição. Vamos ver um exemplo para ficar mais claro: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 44 69 contador = 0; while contador < 6: contador = contador + 1 if contador == 3: continue print(contador) #Esse código imprimirá 1 2 4 5 6 Notem que, quando contator = 3, o continue esquece tudo que há abaixo dele dentro do bloco de instrução e retorna para a expressão lógica do while, logo não imprime o número 3. (Prefeitura de Teresina – 2016) Considere o código-fonte abaixo, criado na linguagem Python. def dados(n): resultado = [] a, b = 0, 1 while a < n: resultado.append(a) a, b = b, a+b return resultado op = dados(100) print op O valor finalcontido na posição de índice 6 de op é: a) 1. b) 8. c) 5. d) 6. e) 13. _______________________ Comentários: inicialmente, podemos ver que existe uma função chamada dados que recebe n como parâmetro: def dados(n). Como eu sei que é uma função? Por causa do def! Em seguida, podemos ver que existe uma lista chamada resultado. Como eu sei que é uma lista? Porque vem entre colchetes! Em seguida são definidas duas variáveis: a = 0 e b = 1 (o programador poderia ter colocado cada definição em uma linha, mas decidiu colocar ambas em uma mesma linha). Então, temos um loop while e uma expressão lógica: enquanto a for menor que n, deve-se repetir duas instruções: (1) resultado.append(a), que insere o valor de a na lista resultado; (2) a recebe o valor e b, e b recebe o valor de a+b. Vamos ver como seria essa iteração: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 45 69 Pré-iteração: resultado = [ ]; a = 0; b = 1; 1ª iteração: resultado = [0]; a = 1; b = 1; #note que a recebe o valor de b e depois b recebe o valor de a+b 2ª iteração: resultado = [0, 1]; a = 1; b = 2; #note que a recebe o valor de b e depois b recebe o valor de a+b 3ª iteração: resultado = [0, 1, 1]; a = 2; b = 3; #note que a recebe o valor de b e depois b recebe o valor de a+b 4ª iteração: resultado = [0, 1, 1, 2]; a = 3; b = 5; #note que a recebe o valor de b e depois b recebe o valor de a+b 5ª iteração: resultado = [0, 1, 1, 2, 3]; a = 5; b = 8; #note que a recebe o valor de b e depois b recebe o valor de a+b 6ª iteração: resultado = [0, 1, 1, 2, 3, 5]; a = 8; b = 13; #note que a recebe o valor de b e depois b recebe o valor de a+b 7ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8]; a = 13; b = 21; #note que a recebe o valor de b e depois b recebe o valor de a+b ... Note que a penúltima linha de código é: op = dados(100). Em outras palavras, a função dados(n) deve ser executada com n = 100, no entanto nós não precisamos fazer até chegar em 100 porque o enunciado pede o valor final contido na posição de índice 6. Vejam a lista criada até a sétima iteração: o valor de resultado[6] é 8. Essa é uma questão bem bacana e representa a Sequência de Fibonacci! Alguém se lembra das aulas de matemática do segundo grau? Pois é! (Letra B). Na estrutura de repetição while, a iteração (loop) era realizada baseado em uma expressão lógica, que poderia ser verdadeira ou falsa. A estrutura de repetição for funciona de maneira um pouco diferente – a iteração é realizada baseado em uma coleção (ou objeto iterável). Logo, a iteração é realizada sobre itens de listas, tuplas, sets, dicionários ou – até mesmo – strings. Vamos ver a sua sintaxe para ficar um pouco mais claro... for variável-de-controle in variavel-colecao bloco-de-instruções Percebam que – em contraste com a estrutura while – não é necessário declarar uma variável de controle antecipadamente porque a própria estrutura necessita de uma variável de controle. listaFrutas = ["maçã", "carambola", "banana"] for x in listaFrutas: print(x) #Imprimirá maçã carambola banana Essa estrutura percorre todos os elementos da lista. O interessante é que isso vale para outras coleções como tuplas e conjuntos – vejam alguns exemplos: TuplaFrutas = ("maçã", "carambola", "banana") for x in TuplaFrutas: print(x) #Imprimirá maçã carambola banana SetFrutas = {"maçã", "carambola", "banana"} for x in SetFrutas: print(x) #Imprimirá maçã carambola banana E o dicionário, Diego? Também funciona! No entanto, vocês devem se lembrar que o dicionário apresenta um conjunto de chave-valor, então você pode escolher apresentar a chave ou o valor: DicioFrutas = {"fruta1": "maçã", "fruta2": "carambola", "fruta3": "banana"} for x in DicioFrutas: print(x) #Imprimirá fruta1 fruta2 fruta 3 Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 46 69 DicioFrutas = {"fruta1": "maçã", "fruta2": "carambola", "fruta3": "banana"} for x in DicioFrutas: print(DicioFrutas[x]) #Imprimirá maçã carambola banana Por fim, essa estrutura de repetição também é capaz de iterar sobre uma string. Ora, a string é um conjunto de caracteres, logo é possível iterar sobre cada caractere. Vejam só: for x in "Estratégia Concursos": print(x) #Imprimirá E s t r a t é g i a C o n c u r s o s Note que ele imprimirá letra por letra! Galera, não vou entrar em detalhes porque nós já vimos isso no tópico anterior, mas essa estrutura de repetição também permite utilizar break e continue. É importante mencionar também que essa estrutura também é utilizada frequentemente com a função range( ). Vocês se lembram o que essa função faz? Ela retorna uma sequência de números, começando do 0 (por padrão), incrementando por 1 (por padrão) e termina no número especificado. Ela pode ser utilizada em conjunto com a função for para iterar sobre um bloco de instruções por um número específico de vezes. Vamos ver como funciona... for x in range(6): print(x) #Imprimirá 0 1 2 3 4 5 Lembrem-se também que essa função pode ser um pouco mais complexa quando possui todos os seus três parâmetros: start, stop e step. Vejamos... for x in range(2, 20, 3): print(x) #Imprimirá 2 5 8 11 14 17 Note que o for itera sobre o conjunto de valores que se inicia em 2 (incluso) até 20 (não incluso), pulando de três em três unidades. Fechado? (FGV – 2015) Analise o trecho de programa, escrito em Pyhton na versão 2.7, mostrado a seguir. X=[ ] for i in range(10,1,-1): X.append(i) print X[3:] O trecho exibe: a) [7, 6, 5] b) [7] c) [] d) [7, 6, 5, 4, 3, 2] Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar ANUSCA Destacar 47 69 e) [7, 6, 5, 4, 3, 2, 1] _______________________ Comentários: questão excelente para revisar vários conceitos vistos em aula: Note que x possui colchetes vazios, logo é uma lista vazia. A linha seguinte apresenta um loop for que vai iterar sobre o range(10,1,-1). O que isso significa? Significa que se trata de uma lista de valores que se inicia no 10 (incluso) e termina no 1 (não incluso) por meio de passos de -1, portanto 10, 9, 8, 7, 6, 5, 4, 3, 2. Na linha seguinte, temos X.append(i) – essa função é utilizada para adicionar um item ao final da lista X. Logo, a lista X será: X = [10, 9, 8, 7, 6, 5, 4, 3, 2]. Por fim, há um comando X[3:]. Quando o lado direito dos dois-pontos está vazio, considera-se que a extensão de valores será até o fim da lista (último valor não incluso). Logo, será impresso o valor de índice 3 até o valor do último índice. Qual é o valor do índice 3 dessa lista? X[0] = 10; X[1] = 9; X[2] = 8; X[3] = 7. Opa... então vamos imprimir do X[3] até o final, portanto será impresso ao final: [7, 6, 5, 4, 3, 2]. Professor, por que não imprime o 1? Porque o último valor não é incluso (Letra D). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 48 69 1. (FGV - 2015 – CM/Caruaru - Analista Legislativo - Informática) Analise o código Python a seguir. L1=[10,20,30] L2=[40,50] L1.append(L2) print L1 Assinale a opção que descreve corretamente o que acontece quando esse programa é executado no Python 2.7: a) Produz uma mensagem de erro, porque tenta executar uma operação inválida. b) Exibe “[10, 20, 30, [40, 50]]”.c) Exibe “[10, 20, 30, 40, 50]”. d) Exibe “[10, 20, 30], [40, 50]”. e) Exibe “[]”. Comentários: O comando append inclui o valor da variável L2 na posição final do vetor L1. Como o conteúdo da variável L2 é uma lista de tamanho 2 [40,50], ele que será incluído na 4ª posição de L1. Professor, porque a resposta não é letra C? Muito bem observado, padawan! O método append inclui a lista L2 como se fosse só um elemento, isto é, a lista final tem 4 elementos ao invés de 5, pois L2 é tratado como se fosse uma coisa só! Gabarito: Letra B 2. (IESES - 2015 - IFC-SC - Programação Web e Dispositivos Móveis) Sobre listas em Python 3.1.5: a) list.remove(a) remove o primeiro item da lista cujo valor é a. b) list.pop(a) adiciona um item de valor a ao início da lista. c) list.append(a) adiciona um item à lista cujo índice será a. d) list.index(a) retorna o valor do item cujo índice é a. Comentários: (a) Correto. E caso não exista o valor "a", retorna erro; (b) Errado, ele remove o item na posição "a" da lista ou – caso seja chamado sem argumento – remove o último item da lista; (c) Errado, ele Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar 49 69 adiciona o valor "a" na última posição da lista; (d) Errado, index retorna a posição da primeira ocorrência de "a" na lista. Gabarito: Letra A 3. (IESES - 2015 - IFC-SC - Programação Web e Dispositivos Móveis) O conjunto correto de palavras reservadas para a construção de uma estrutura de controle em Python 3.4.3 é: a) “if”, “elsif” e “else”. b) “if”, “else if” e “else”. c) Somente “if”; o restante da estrutura de controle (“senão se” e “senão”) é realizado simplesmente com indentação. d) “if”, “elif” e “else”. Comentários: A estrutura correta completa é: if, elif e else. Gabarito: Letra D 4. (UERJ - UERJ - Analista De Sistemas - Grid) Considere o trecho do programa Python abaixo: def dobra (y): x = y + y return x x = 5 dobra(x) dobra(x) print x O valor impresso ao executarmos o programa é: a) 5 b) 10 c) 15 d) 25 Comentários: Primeiro, uma observação: as variáveis possuem escopos diferentes. Como assim, Diego? Há duas ocorrências de “x” no código-fonte, mas uma está dentro do escopo local da função dobra( ) e o outro está fora (escopo global). Dito isso, se x = 5, temos que dobra(5). Logo, dentro do escopo Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 50 69 dessa função, ele é recebido como y. Então, x = y + y = 5 + 5 = 10. Depois, chama-se a função dobra(x) novamente, mas – dentro desse escopo – x continua igual a 5. Logo, repetiremos o que acabamos de fazer: x = y + y = 5 + 5 = 10. Por fim, imprime-se x. Ora, o x impresso aqui tem escopo global e, não, local. Logo, ele terá valor = 5. Gabarito: Letra A 5. (UERJ - UERJ - Analista De Sistemas) A linguagem Python possui a seguinte característica: a) é uma linguagem compilada. b) exige declaração de código. c) a tupla é um tipo mutável. d) é orientada a objetos. Comentários: (a) Errado, é uma linguagem interpretada; (b) Errado, não sei o que a questão quis dizer com declaração de código. Se for declaração de tipo, então não exige; (c) Errado, a tupla é equivalente a uma lista, porém imutável; (d) Correto, é realmente orientada a objetos. Gabarito: Letra D 6. (FCC – TRT/MG - Técnico Judiciário - Tecnologia Da Informação) Considere o código fonte Python abaixo. Para que seja exibido [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] a lacuna "I" precisa ser preenchida corretamente com: a) resultado.add(a) a, b = b, a+b b) resultado.insert(a) a, b = b, a+b c) resultado.append(a) a, b = b, a+b d) resultado.add(a) Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 51 69 a, b = a, a+b e) resultado.append(a) a, b = a+b, b Comentários: Primeiro temos que saber que o correto a ser utilizado é o append, pois queremos inserir valores a cada iteração sem perder os anteriores. Então, ficamos entre a letra (c) e (e). Em (c), temos a, b = b, a+b equivale a a = b e b = a+b; e em (e), temos que a, b = a+b, b equivale a a = a+b e b = b. Vamos testar a letra (e)! Antes de entrar na estrutura de repetição while, nós temos que: a = 0 b = 1 Depois, temos que: a = a + b b = b Note que – se antes b = 1 e depois b = b – então b nunca vai mudar, b sempre será 1. Como antes a = 0 e depois a = a + b, então a sempre aumentará em uma unidade. Logo, resultado em uma sequência [1, 2, 3, 4, 5, 6, 8, 9, ...]. Dessa forma, a resposta é (c)! Notem que ele se trata de uma Sequencia de Fibonacci. 1ª iteração: resultado = [0]; a = 1; b = 1; 2ª iteração: resultado = [0, 1]; a = 1; b = 2; 3ª iteração: resultado = [0, 1, 1]; a = 2; b = 3; 4ª iteração: resultado = [0, 1, 1, 2]; a = 3; b = 5; 5ª iteração: resultado = [0, 1, 1, 2, 3]; a = 5; b = 8; 6ª iteração: resultado = [0, 1, 1, 2, 3, 5]; a = 8; b = 13; 7ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8]; a = 13; b = 21; 8ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8, 13]; a = 21; b = 34; 9ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8, 13, 21]; a = 34; b = 55; 10ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]; a = 55; b = 89; 11ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]; a = 89; b = 144; 12ª iteração: resultado = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]; a = 144; b = 233; Gabarito: Letra C 7. (FGV - 2015 – TJ/BA - Analista Judiciário) Analise o trecho de programa Python, na versão 2.7, apresentado a seguir. L=[1,2,3,4,5,6,7,8] print L[::-1] Ao ser executado, o resultado exibido é: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 52 69 a) [1, 2, 3, 4, 5, 6, 7, 8] b) [8] c) [ ] d) [8, 7, 6, 5, 4, 3, 2, 1] e) [1] Comentários: O operador de acesso a itens em coleções (listas, sets, tuplas) usam três argumentos: L[Start:Stop:Step] Start - primeira posição a ser acessada: Pode ser: (1) valor positivo - posição inicial de acesso (por exemplo, 0 é a primeira, 1 é a segunda); (2) valor negativo - posição a partir do final do array (por exemplo, -1 é a última posição, -2 é a penúltima); (3) não fornecido - primeira posição do array (posição 0). Stop - última posição a ser acessada: Pode ser: (1) valor positivo - posição de acesso (por exemplo, 0 é a primeira, 1 é a segunda); (2) valor negativo - posição a partir do final do array (por exemplo, -1 é a última posição, -2 é a penúltima); (3) não fornecido - última posição do array (posição -1). Step - valor do incremento no acesso: Pode ser: (1) número positivo - ordem direta de incremento em incremento; (2) número negativo - ordem inversa de incremento em incremento; (3) não fornecido - ordem de 1 em 1. Quando só step é fornecido e ele é negativo, ele acessa a coleção de forma invertida a partir do último elemento. Dessa forma, o acesso L[::-1] acessará da primeira até a última posição do array em ordem inversa, ou seja, [8, 7, 6, 5, 4, 3, 2, 1]. Gabarito: Letra D 8. (CETAP – 2010 – AL/RR – Analista de Sistemas) Sobre a linguagem de programação PYTHON, marque a alternativa INCORRETA. a) Python suporta a maioria das técnicas da programação orientada a objetos. b) Python suporta e faz uso constante de tratamentode exceções como uma forma de testar condições de erro e outros eventos inesperados no programa. c) As funções são definidas em Phyton utilizando a palavra chave def. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 53 69 d) A separação de blocos de código em Phyton é feita utilizando a indentação de código. e) O operador lógico de conjunção ("e", como em a e b) é &&. Comentários: (a) Correto, ele realmente suporta a maioria das técnicas da programação orientada a objetos; (b) Correto, ele realmente suporta e faz uso constante de tratamento de exceções como uma forma de testar condições de erro e outros eventos inesperados no programa. Caso haja algum erro, o programa não é interrompido – o erro é tratado sem interromper o programa; (c) Correto, funções são definidas por meio da palavra-chave def; (d) Correto, a separação de blocos se dá por meio da indentação – ignorem o nome errado: é Python e, não, Phyton; (e) Errado, o operador lógico de conjunção é and e, não, &&. Gabarito: Letra E 9. (FCC – 2012 – MPE/PE – Analista de Sistemas) Em Python, os métodos de lista permitem utilizar listas como pilhas, onde o item adicionado por último é o primeiro a ser recuperado. Para adicionar um item ao topo da pilha, e para recuperar um item do topo da pilha utilizam-se, respectivamente os métodos: a) append() e pop(). b) insert() e top(). c) addTop() e pop(). d) add() e get(). e) addItem() e top(). Comentários: append( ) é utilizado para adicionar um elemento no final de uma lista ou no topo de uma pilha; pop( ) é utilizado para recuperar um item de uma lista ou do topo de uma pilha. Gabarito: Letra A 10. (FCC – 2012 – TRE/CE – Analista de Sistemas) Sobre Python é correto afirmar: a) é uma linguagem compilada, ou seja, o código-fonte de um programa é lido pelo compilador, que cria um arquivo binário, executável diretamente pelo hardware. b) É uma linguagem fortemente tipada, ou seja, é preciso declarar variáveis e seus tipos. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 54 69 c) Suporta funcionalidades comuns na orientação a objetos: herança, herança múltipla, polimorfismo, reflexão e introspecção. d) Uma lista em Python é um conjunto de valores acessados por um índice numérico, inteiro, começando em 1. Assim como em outras linguagens, a lista pode armazenar apenas valores de um mesmo tipo. e) Uma String Python é uma sequência imutável, alocada estaticamente, com restrição de tamanho. Comentários: (a) Errado, é uma linguagem interpretada; (b) Errado, ele realmente possui tipagem forte, mas não precisa declarar variáveis e seus tipos; (c) Correto, ele realmente suporta funcionalidades comuns da orientação a objetos como herança simples e múltipla, polimorfismo, reflexão e introspecção; (d) Errado, a lista pode armazenar valores de tipos diferentes e começa em zero; (e) Errado, ela não possui restrição de tamanho. Gabarito: Letra C 11. (CESPE – 2011 – ECT – Analista de Sistemas) A linguagem Python e seu interpretador estão disponíveis para as mais diversas plataformas. Para que seja usado em determinado sistema operacional não suportado, é possível gerar o Python a partir do programa fonte utilizando um compilador C. Nesse caso, o código fonte é traduzido para o formato bytecode, que é multiplataforma e pode ser distribuído de forma independente. Comentários: Ele realmente é multiplataforma. Além disso, permite que programas sejam compilados para um formato portável chamado de bytecode. Essa característica faz com que programas escritos nessa linguagem com uma biblioteca padrão sejam executadas da mesma forma em diversos sistemas operacionais que possuam um software interpretador de Python. Gabarito: Correto 12. (CESPE – 2008 – SERPRO – Analista de Sistemas) Python é uma linguagem livre de alto nível, orientada a objetos e de difícil leitura, pois não permite identação de linhas de código. Comentários: Ela realmente é de alto nível, orientada a objetos e de fácil leitura. Além disso, permite indentação de linhas de código. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 55 69 Gabarito: Errado 13. (CESGRANRIO – 2004 – SECAD/TO – Analista de Sistemas) Um programador de Python recebeu a tarefa de criar uma função chamada calcular que recebe dois parâmetros. Para executar sua atividade, ele deve utilizar a expressão: a) def calcular (a,b): b) function calcular (a,b): c) import calcular (a,b): d) procedure calcular (a,b): e) sub calcular (a,b): Comentários: Uma função é definida por meio da palavra-chave def. Gabarito: Letra A 14. (CESPE – 2013 – MPOG – Analista de Sistemas) Em Python, o comando int("1") cria um objeto do tipo int, que recebe 1 como parâmetro no seu construtor. Comentários: Essa é uma função de casting! O que ela faz? Bem, ela converte variáveis do tipo inteiro, ponto flutuante ou string em um inteiro. No caso, ele está recebendo um número como string (por conta das aspas) e convertendo em um inteiro. Esse número serve de parâmetro para o seu construtor (que é um método que cria um objeto, mas vocês não precisam saber disso). Gabarito: Correto 15. (UNIRIO – 2014 – UNIRIO) Sobre o comando range para construção de listas na linguagem Python, é CORRETO afirmar que: a) range(4,6) gera a lista [4,5]. b) range(5) gera a lista [1,2,3,4,5]. c) range(4,6) gera a lista [4,5,6,7,8,9]. d) range(5,1) gera a lista [5]. e) range(5,1,-2) gera a lista [4,5]. Comentários: (a) Correto, range(4,6) retorna a lista [4, 5] porque não inclui o valor de índice [6]; (b) Errado, range(5) retorna a lista [0, 1, 2, 3, 4]; (c) Errado, já vimos que range(4,6) retorna a lista [4, 5]; (d) Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 56 69 Errado, range(5,1) retorna [ ] porque o step padrão é 1 e o stop é menor que o start; (e) Errado, range(5,1,-2) retorna [5, 3] porque o step é negativo. Gabarito: Letra A 16. (FGV – 2014 – MPE/AL) Analise o código Python 2.7 a seguir. L = [10, 12, 14, 16] for k in range(4, -5, -1): print L[k] Esse programa causa: a) erro de sintaxe. b) erro de execução. c) a exibição de 4 valores, 16,14,12,10, nessa ordem. d) a exibição de 8 valores, 16,14,12,10,16,14,12,10, nessa ordem. e) a exibição do valor 16, somente. Comentários: A questão é fácil de responder porque ela possui erro de sintaxe! A sintaxe exige que o bloco for tenha um corpo, e o corpo precisa seguir o ":" ou estar dentro de um bloco indentado abaixo do "for". Perceba que não acontece nenhum dos dois casos na questão: não existe nada depois do ":", nem existe comando indentado abaixo do "for". E mesmo que estivesse corretamente indentado, ainda haveria um erro de execução porque o range(4, -5, -1) percorre de 4 a -4 em passos de -1 e não teria como imprimir L[4] porque esse valor sequer existe, L só vai de 0 a 3. Diego, então a questão tem duas respostas? Não, porque o erro de sintaxe vem sempre antes do erro de execução. Se houver algum erro de sintaxe, o programa nem é executado! Gabarito: Letra A 17. (FGV – 2018 – ALE/RO) Analise o código Pyhton a seguir. for k in range(0, 4, -1): print k Assinale a opção que indica o número de valores printados na execuçãodesse código. a) Zero. b) Um. c) Dois. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 57 69 d) Quatro. e) Cinco. Comentários: A função range(0, 4, -1) retornará os valores iniciando zero, terminando em 4 (sem incluir o 4) e um passo de -1 em -1. No entanto, de -1 em -1, nunca chegaremos em 4, logo a função range não retorna nenhum valor! Gabarito: Letra A 18. (QUADRIX – 2018 – COREN/RS) No que se refere à linguagem de programação Python, assinale a alternativa correta. a) A Python é uma linguagem de alto nível e robusta. Ela possui seu próprio framework e é incompatível com frameworks de terceiros. b) A Python utiliza a duck typing (tipagem dinâmica), que nada mais é do que definir um tipo para a variável, com as operações que podem ser aplicadas, antes mesmo de ela ter sido criada, com base em conhecimento prévio do programa. Esta tarefa é executada pelo interpretador. c) O caractere “/” marca o início de comentário. Qualquer texto depois do “/”será ignorado até o fim da linha. d) A Python permite que os conteúdos das variáveis sejam sempre alterados, não existindo, dessa forma, tipos imutáveis. e) Pode ser utilizada como linguagem principal no desenvolvimento de sistemas e também pode ser utilizada como linguagem script em vários softwares. Comentários: (a) Errado, ela realmente é uma linguagem de alto nível e robusta, mas seu framework (coleção de pacotes e módulos de extensão) é totalmente compatível com frameworks de terceiros; (b) Errado, ela realmente utiliza Duck Typing, mas não é necessário definir um tipo para variável antes de ela ser criada – isso pode ser inferido pelo interpretador; (c) Errado, comentários são inicializados por meio do caractere “#” e, não, “/”; (d) Errado, tipos podem ser mutáveis ou imutáveis; (e) Correto, além de ser utilizado como linguagem principal no desenvolvimento de sistemas, o Python também é muito utilizado como linguagem script em vários softwares. Gabarito: Letra E Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 58 69 19. (IFPI – 2012 – IFPI) Com relação à linguagem de programação Python, é INCORRETA a afirmação: a) Disponibiliza o conceito de herança múltipla, ou seja, uma classe pode ter mais de uma classe pai. b) A sintaxe Python permite o uso de somente uma instrução por linha de código. Para que seja possível colocar mais de uma, é necessário separá-las com um “;”, entretanto, essa prática é desaconselhada, visto que sua utilização prejudica a legibilidade do código. c) Os comentários são iniciados com um caractere “#”. Para fazer comentários com múltiplas linhas, utilizam-se os caracteres “#”, para o início, e “#*” para o final . d) Diferentemente de outras linguagens de programação que utilizam elementos léxicos para definir os blocos de código, a própria endentação do código é usada, em Python, para essa função. e) Em Python, os nomes de variáveis, funções, módulos e classes são conhecidos como identificadores. O identificador _quantidade é correto em Python. Comentários: (a) Correto, ele realmente possui herança múltipla, isto é, uma classe com mais de um pai; (b) Correto, Python deve ser bastante legível. É possível inserir ponto-e-vírgula para separar instruções em uma mesma linha, mas prejudica a visibilidade – o ideal mesmo é deixar somente uma instrução por linha; (c) Errado, para comentários de mais de uma linha, utiliza-se três aspas simples ou duplas; (d) Correto, a indentação delimita blocos de código; (e) Correto, esse é um identificador válido. Gabarito: Letra C 20. (CESPE – 2018 – PF) Considere o programa a seguir, na linguagem Python. letras == [“P”, “F”] for x = in letras { print (x) } A sintaxe do programa está correta e, quando executado, ele apresentará o seguinte resultado: PF Comentários: Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 59 69 Essa questão nos dá três chances de acertar. Vejamos... Primeiro, a primeira linha apresenta um operador de comparação (==). A ideia não é comparar, mas – sim – atribuir valores à variável letras. Logo, o correto seria utilizar = em vez de ==; Segundo, a segunda linha tem um sinal de igual desnecessário e não tem os dois-pontos ao final da declaração for – lembrando que eles são obrigatórios; Terceiro, a terceira linha apresenta chaves para delimitar o bloco. Nós vimos insistentemente que a delimitação de blocos é feita por meio da indentação. Dessa forma, o código correto seria: letras = ["P","F"] for x in letras: print (x) Gabarito: Errado Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 60 69 1. (FGV - 2015 – CM/Caruaru - Analista Legislativo - Informática) Analise o código Python a seguir. L1=[10,20,30] L2=[40,50] L1.append(L2) print L1 Assinale a opção que descreve corretamente o que acontece quando esse programa é executado no Python 2.7: a) Produz uma mensagem de erro, porque tenta executar uma operação inválida. b) Exibe “[10, 20, 30, [40, 50]]”. c) Exibe “[10, 20, 30, 40, 50]”. d) Exibe “[10, 20, 30], [40, 50]”. e) Exibe “[]”. 2. (IESES - 2015 - IFC-SC - Programação Web e Dispositivos Móveis) Sobre listas em Python 3.1.5: a) list.remove(a) remove o primeiro item da lista cujo valor é a. b) list.pop(a) adiciona um item de valor a ao início da lista. c) list.append(a) adiciona um item à lista cujo índice será a. d) list.index(a) retorna o valor do item cujo índice é a. 3. (IESES - 2015 - IFC-SC - Programação Web e Dispositivos Móveis) O conjunto correto de palavras reservadas para a construção de uma estrutura de controle em Python 3.4.3 é: a) “if”, “elsif” e “else”. b) “if”, “else if” e “else”. c) Somente “if”; o restante da estrutura de controle (“senão se” e “senão”) é realizado simplesmente com indentação. d) “if”, “elif” e “else”. 4. (UERJ - UERJ - Analista De Sistemas - Grid) Considere o trecho do programa Python abaixo: def dobra (y): x = y + y return x Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 61 69 x = 5 dobra(x) dobra(x) print x O valor impresso ao executarmos o programa é: a) 5 b) 10 c) 15 d) 25 5. (UERJ - UERJ - Analista De Sistemas) A linguagem Python possui a seguinte característica: a) é uma linguagem compilada. b) exige declaração de código. c) a tupla é um tipo mutável. d) é orientada a objetos. 6. (FCC – TRT/MG - Técnico Judiciário - Tecnologia Da Informação) Considere o código fonte Python abaixo. Para que seja exibido [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] a lacuna "I" precisa ser preenchida corretamente com: a) resultado.add(a) a, b = b, a+b b) resultado.insert(a) a, b = b, a+b c) resultado.append(a) a, b = b, a+b d) resultado.add(a) a, b = a, a+b e) resultado.append(a) a, b = a+b, b Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br .. 62 69 7. (FGV - 2015 – TJ/BA - Analista Judiciário) Analise o trecho de programa Python, na versão 2.7, apresentado a seguir. L=[1,2,3,4,5,6,7,8] print L[::-1] Ao ser executado, o resultado exibido é: a) [1, 2, 3, 4, 5, 6, 7, 8] b) [8] c) [ ] d) [8, 7, 6, 5, 4, 3, 2, 1] e) [1] 8. (CETAP – 2010 – AL/RR – Analista de Sistemas) Sobre a linguagem de programação PYTHON, marque a alternativa INCORRETA. a) Python suporta a maioria das técnicas da programação orientada a objetos. b) Python suporta e faz uso constante de tratamento de exceções como uma forma de testar condições de erro e outros eventos inesperados no programa. c) As funções são definidas em Phyton utilizando a palavra chave def. d) A separação de blocos de código em Phyton é feita utilizando a indentação de código. e) O operador lógico de conjunção ("e", como em a e b) é &&. 9. (FCC – 2012 – MPE/PE – Analista de Sistemas) Em Python, os métodos de lista permitem utilizar listas como pilhas, onde o item adicionado por último é o primeiro a ser recuperado. Para adicionar um item ao topo da pilha, e para recuperar um item do topo da pilha utilizam-se, respectivamente os métodos: a) append() e pop(). b) insert() e top(). c) addTop() e pop(). d) add() e get(). e) addItem() e top(). 10. (FCC – 2012 – TRE/CE – Analista de Sistemas) Sobre Python é correto afirmar: a) é uma linguagem compilada, ou seja, o código-fonte de um programa é lido pelo compilador, que cria um arquivo binário, executável diretamente pelo hardware. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 63 69 b) É uma linguagem fortemente tipada, ou seja, é preciso declarar variáveis e seus tipos. c) Suporta funcionalidades comuns na orientação a objetos: herança, herança múltipla, polimorfismo, reflexão e introspecção. d) Uma lista em Python é um conjunto de valores acessados por um índice numérico, inteiro, começando em 1. Assim como em outras linguagens, a lista pode armazenar apenas valores de um mesmo tipo. e) Uma String Python é uma sequência imutável, alocada estaticamente, com restrição de tamanho. 11. (CESPE – 2011 – ECT – Analista de Sistemas) A linguagem Python e seu interpretador estão disponíveis para as mais diversas plataformas. Para que seja usado em determinado sistema operacional não suportado, é possível gerar o Python a partir do programa fonte utilizando um compilador C. Nesse caso, o código fonte é traduzido para o formato bytecode, que é multiplataforma e pode ser distribuído de forma independente. 12. (CESPE – 2008 – SERPRO – Analista de Sistemas) Python é uma linguagem livre de alto nível, orientada a objetos e de difícil leitura, pois não permite identação de linhas de código. 13. (CESGRANRIO – 2004 – SECAD/TO – Analista de Sistemas) Um programador de Python recebeu a tarefa de criar uma função chamada calcular que recebe dois parâmetros. Para executar sua atividade, ele deve utilizar a expressão: a) def calcular (a,b): b) function calcular (a,b): c) import calcular (a,b): d) procedure calcular (a,b): e) sub calcular (a,b): 14. (CESPE – 2013 – MPOG – Analista de Sistemas) Em Python, o comando int("1") cria um objeto do tipo int, que recebe 1 como parâmetro no seu construtor. 15. (UNIRIO – 2014 – UNIRIO) Sobre o comando range para construção de listas na linguagem Python, é CORRETO afirmar que: a) range(4,6) gera a lista [4,5]. b) range(5) gera a lista [1,2,3,4,5]. c) range(4,6) gera a lista [4,5,6,7,8,9]. d) range(5,1) gera a lista [5]. e) range(5,1,-2) gera a lista [4,5]. 16. (FGV – 2014 – MPE/AL) Analise o código Python 2.7 a seguir. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 64 69 L = [10, 12, 14, 16] for k in range(4, -5, -1): print L[k] Esse programa causa: a) erro de sintaxe. b) erro de execução. c) a exibição de 4 valores, 16,14,12,10, nessa ordem. d) a exibição de 8 valores, 16,14,12,10,16,14,12,10, nessa ordem. e) a exibição do valor 16, somente. 17. (FGV – 2018 – ALE/RO) Analise o código Pyhton a seguir. for k in range(0, 4, -1): print k Assinale a opção que indica o número de valores printados na execução desse código. a) Zero. b) Um. c) Dois. d) Quatro. e) Cinco. 18. (QUADRIX – 2018 – COREN/RS) No que se refere à linguagem de programação Python, assinale a alternativa correta. a) A Python é uma linguagem de alto nível e robusta. Ela possui seu próprio framework e é incompatível com frameworks de terceiros. b) A Python utiliza a duck typing (tipagem dinâmica), que nada mais é do que definir um tipo para a variável, com as operações que podem ser aplicadas, antes mesmo de ela ter sido criada, com base em conhecimento prévio do programa. Esta tarefa é executada pelo interpretador. c) O caractere “/” marca o início de comentário. Qualquer texto depois do “/”será ignorado até o fim da linha. d) A Python permite que os conteúdos das variáveis sejam sempre alterados, não existindo, dessa forma, tipos imutáveis. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 65 69 e) Pode ser utilizada como linguagem principal no desenvolvimento de sistemas e também pode ser utilizada como linguagem script em vários softwares. 19. (IFPI – 2012 – IFPI) Com relação à linguagem de programação Python, é INCORRETA a afirmação: a) Disponibiliza o conceito de herança múltipla, ou seja, uma classe pode ter mais de uma classe pai. b) A sintaxe Python permite o uso de somente uma instrução por linha de código. Para que seja possível colocar mais de uma, é necessário separá-las com um “;”, entretanto, essa prática é desaconselhada, visto que sua utilização prejudica a legibilidade do código. c) Os comentários são iniciados com um caractere “#”. Para fazer comentários com múltiplas linhas, utilizam-se os caracteres “#”, para o início, e “#*” para o final . d) Diferentemente de outras linguagens de programação que utilizam elementos léxicos para definir os blocos de código, a própria endentação do código é usada, em Python, para essa função. e) Em Python, os nomes de variáveis, funções, módulos e classes são conhecidos como identificadores. O identificador _quantidade é correto em Python. 20. (CESPE – 2018 – PF) Considere o programa a seguir, na linguagem Python. letras == [“P”, “F”] for x = in letras { print (x) } A sintaxe do programa está correta e, quando executado, ele apresentará o seguinte resultado: PF Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 66 69 1. LETRA B 2. LETRA A 3. LETRA D 4. LETRA A 5. LETRA D 6. LETRA C 7. LETRA D 8. LETRA E 9. LETRA A 10. LETRA C 11. CORRETO 12. ERRADO 13. LETRA A 14. CORRETO 15. LETRA A 16. LETRA A 17. LETRA A 18. LETRA E 19. LETRA C 20. ERRADO Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 67 69 O assunto agora é bem pequeno e quase não cai em prova diretamente: Application Programming Interface (Interface de Programação de Aplicações) éum intermediário de software que permite que duas aplicações ou mais conversem entre si. Sempre que você utiliza um aplicativo como o Facebook, envia uma mensagem no WhatsApp ou verifica o clima no seu celular, você está utilizando uma API. Professor, eu ainda não saquei! Explica de outra maneira? Claro, vamos lá! Entendam uma API como uma espécie de mensageiro que recebe pedidos ou requisições (também chamados de requests) de várias pessoas e lugares diferentes, diz para o sistema o que você quer fazer e depois retorna a resposta (também chamado de response) para as pessoas que solicitaram, como é apresentado na imagem a seguir. Ih, professor! Ainda não entendi. Não tem problema, eu vou te explicar de uma maneira que com certeza agora você vai entender. Eu quero que vocês imaginem uma API como um garçom em um restaurante. Quando você chega em um restaurante, você recebe um cardápio com uma porrada de coisas que você pode pedir. Correto? Esse restaurante possui uma cozinha, que é responsável por produzir o que você escolher. É comum você entrar na cozinha do restaurante, chamar os cozinheiros e comunicá-los diretamente qual foi o prato que você escolheu? Eu espero que não! Você chama o garçom (API), ele anota o seu pedido ou requisição (Request) e diz para a Cozinha (Sistema) o que você deseja. A cozinha executa o pedido e o garçom retorna com a sua comida (Response). Ficou fácil de entender agora? A API funciona apenas como um mensageiro – uma interface! Eu sei que esse exemplo foi muito lúdico, então vamos agora para o mundo da informática! Imaginem que vocês precisam viajar para fazer uma prova de concurso em outro estado (cenário Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 68 69 típico para muitos candidatos). Vocês entram em um site de alguma companhia aérea, inserem a data e o local. Como resposta, o site busca em seu banco de dados e te informa se há disponibilidade de voo e o valor da passagem. Tudo perfeito até aqui? Mas... e se, em vez de eu acessar diretamente um site de uma companhia aérea, eu utilizar um daqueles sites que comparam valores de passagens aéreas (Ex: Decolar, Submarino, Expedia, etc). Ora, esses sites não têm acesso direto à base de dados de cada companhia aérea. Ué, professor... então como ele consegue descobrir a disponibilidade e o preço da passagem. Agora é que vem a mágica da tecnologia! Cada companhia aérea oferece a sua API (seu mensageiro, seu garçom, lembram?). Dessa forma, quando você insere a data e o local do seu voo, o site agregador que compara preço de passagens aéreas diz para todas as APIs os dados que você informou, elas acessam cada uma a sua base de dados com a sua requisição, fazem a pesquisa e retornam uma resposta. Dessa forma, o site comparador consegue informações de várias companhias aéreas em um único local. Galera, é assim que as aplicações, dados e dispositivos interagem entre si! Eles frequentemente utilizam APIs que permitem uma interação e conectividade maior entre sistemas diferentes. Assim, sempre que vocês pensarem em API, lembrem-se que é apenas um garçom indo e voltando com requisições e respostas entre aplicações, bancos de dados e dispositivos para criar conectividade de forma transparente para o usuário (ele sequer sabe que isso está ocorrendo). Acabou? Não! Essa API explicada acima é a mais comum e se chama API Web. No entanto, nós temos também API Desktop, que funciona como uma biblioteca de software que descreve e prescreve comportamentos esperados de um software. A API é um tipo de interface que define como um sistema pode se comunicar com outros, independentemente da linguagem de programação em que cada um deles foi feito ou como processam dados internos. APIs são desenvolvidas por desenvolvedores para desenvolvedores! Isso porque uma API somente é acessível programaticamente, logo um usuário não percebe sua utilização. Para ele, essa interface é totalmente transparente. É como se tudo o que foi realizado pelo sistema a que o usuário tem acesso tivesse sido feito somente por esse conjunto, quando, na verdade, o processamento pode ter sido dividido entre várias partes, através das conexões estabelecidas pelas APIs. Sistemas Operacionais também possuem suas APIs. Por exemplo: o Windows possui APIs como a Telephony API, Win16 API e Win32 API. Quando um usuário executa um programa que envolva algum processo do sistema operacional, é possível que o Windows faça uma conexão entre o software e alguma de suas APIs. Dessa forma, quem precisa usar a funcionalidade apenas terá que saber quais as entradas são necessárias e qual será o formato da saída retornada. Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . 69 69 Reitero: não interessa o código interno de uma funcionalidade – uma API se preocupa apenas com a interface (formato de entrada/saída de dados). Certinho? Exercícios... (PF – 2018) Uma API restringe a interface entre duas aplicações, nesse sentido, não é possível que uma API especifique uma interface entre uma aplicação e o sistema operacional, já que estão em camadas diferentes de programação. _______________________ Comentários: uma API pode – sim – especificar uma interface entre uma aplicação e o sistema operacional. Não importa se estão em camadas diferentes. A ideia é justamente que não se tenha que se preocupar com a tecnologia, linguagem, arquitetura, camada, etc das funcionalidades para que haja uma comunicação eficiente (Errado). (PF – 2018) Devido às características de uma API, a separação entre ela e sua implementação permite que programas escritos em uma linguagem usem bibliotecas escritas em outra linguagem. _______________________ Comentários: é exatamente essa a ideia – a separação entre a interface e sua implementação permite que bibliotecas de funcionalidades que utilizam tecnologias diferentes se comuniquem normalmente (Correto). (PF – 2018) Para utilizar uma API que trabalhe com entrada/saída de arquivos, é necessário entender as operações do sistema de arquivo ao se utilizar a função copiar um arquivo de um dispositivo para outro. _______________________ Comentários: as questões vão falar de diversos contextos e perguntar basicamente a mesma coisa. Galera, você não precisa saber como funciona a operação de entrada/saída de arquivos – o que importa é que não é necessário entender as operações do sistema de arquivo ao se utilizar a função copiar um arquivo de um dispositivo para outro. Por que? Porque conhecer como é a operação, o código-fonte, a implementação é irrelevante! O que importa é apenas a interface, isto é, como é o formato de entrada/saída de dados (Errado). Diego Carvalho, Raphael Henrique Lacerda, Renato da Costa, Thiago Rodrigues Cavalcanti Aula 24 Informática p/ Polícia Federal (Agente) Pós-Edital www.estrategiaconcursos.com.br . . ANUSCA Destacar