Baixe o app para aproveitar ainda mais
Prévia do material em texto
Editora: E d i t o r a SÃO PAULO/ SP Linguagem de Programação </> RAFAEL MUNHOZ ALMEIDA DA SILVA Editora: E d i t o r a 1º EDIÇÃO - 2021 | SÃO PAULO/ SP RAFAEL MUNHOZ ALMEIDA DA SILVA LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM DE PROGRAMAÇÃO EXPEDIENTE COORDENAÇÃO GERAL Nelson Boni COORDENAÇÃO DE REVISÃO ORTOGRÁFICA Esthela Malacrida AUTOR(ES) Rafael Munhoz Almeida da Silva COORDENAÇÃO, PROJETO GRÁFICO E CAPA João Guedes 1º EDIÇÃO - 2021 | SÃO PAULO/ SP Ficha Catalográfica/ ISBN CATALOGAÇÃO ELABORADA POR GLAUCY DOS SANTOS SILVA - CRB8/6353 E d i t o r a 4 Apresentação Prezado Aluno, N este livro você vai entrar em contato com os pri-meiros passos no mundo da programação de computadores. Você verá os principais conceitos tais como variáveis, estruturas de controle de fluxo, laços de repetição. Nos capítulos finais você verá uma introdução a como construir um formulário utilizando uma interface gráfica e por fim uma introdução a uma biblioteca de de- senvolvimento de jogos. Utilizamos a linguagem Python que é muito atual e fácil de usar, depois de estudar este material, você será capaz de ler e escrever código em Python de maneira a expandir os conhecimentos, para outras áreas onde a linguagem Py- thon é muito forte, tais como a área de machine learning, programação de aplicativos web entre outras. Nos últimos anos o mercado vem demandando cada vez mais programadores, portanto aprender a programar, irá abrir novos horizontes e possibilidades de carreira. Além disso, a linguagem Python vem ganhando muita força no mercado, devido a sua simplicidade e quantidade de biblio- tecas disponíveis. Bons Estudos! � SUMÁRIO: UNIDADE 1: CONCEITOS BÁSICOS DA LINGUAGEM ������������������������������1-1 CAPÍTULO 1: MONTANDO O AMBIENTE ����������������������������������������������� 1-2 Exercícios Propostos ������������������������������������������������������� 1-9 CAPÍTULO 2: VARIÁVEIS ���������������������������������������������������������������� 2-1 Exercícios Propostos ����������������������������������������������������� 2-37 UNIDADE 2: ESTRUTURAS DE CONTROLE �����������������������������������������3-1 CAPÍTULO 3: EXPRESSÕES CONDICIONAIS ������������������������������������������� 3-2 Exercícios propostos ����������������������������������������������������� 3-17 CAPÍTULO 4: LAÇOS DE REPETIÇÃO��������������������������������������������������� 4-1 Exercícios propostos ����������������������������������������������������� 4-18 UNIDADE 3: LISTAS/MATRIZES E ARQUIVOS �������������������������������������5-1 CAPÍTULO 5: LISTAS E MATRIZES ����������������������������������������������������� 5-2 Exercícios propostos ����������������������������������������������������� 5-29 CAPÍTULO 6: ARQUIVOS ���������������������������������������������������������������� 6-1 Exercícios propostos ����������������������������������������������������� 6-10 UNIDADE 4: FUNÇÕES, MÓDULOS E STRINGS ������������������������������������7-1 CAPÍTULO 7: FUNÇÕES ������������������������������������������������������������������ 7-2 Exercícios propostos ����������������������������������������������������� 7-23 CAPÍTULO 8: MÓDULOS E STRINGS���������������������������������������������������� 8-1 Exercícios propostos ����������������������������������������������������� 8-11 UNIDADE 5: ORIENTAÇÃO A OBJETO E BANCO DE DADOS ����������������������9-1 CAPÍTULO 9: INTRODUÇÃO A POO ����������������������������������������������������� 9-2 Exercícios propostos ����������������������������������������������������� 9-19 CAPÍTULO 10: BANCO DE DADOS������������������������������������������������������ 10-1 Exercícios propostos ���������������������������������������������������� 10-16 UNIDADE 6: BIBLIOTECAS GRÁFICAS ������������������������������������������� 11-1 CAPÍTULO 11: BIBLIOTECA PYGAME ������������������������������������������������� 11-2 Exercícios propostos ����������������������������������������������������� 11-8 CAPÍTULO 12: BIBLIOTECA KIVY ������������������������������������������������������ 12-1 Exercícios propostos ����������������������������������������������������� 12-9 REFERÊNCIAS ��������������������������������������������������������� 13-1 GABARITO ������������������������������������������������������������� 14-1 D I S C I P L I N A : Linguagem de Programação UNIDADE 1: CONCEITOS BÁSICOS DA LINGUAGEM Caro(a) Aluno(a) Seja bem-vindo(a)! Nesta primeira unidade iremos dar início aos estudos da lin- guagem de programação Python. Iremos abordar a montagem do ambiente de desenvolvimen- to, ou seja, o lugar onde iremos escrever o código e rodar os nos- sos programas. Na sequência vamos estudar o conceito de variá- veis e faremos o nosso primeiro programa. Conteúdos da Unidade Montagem do ambiente, primeiro programa, nomes de variá- veis, tipos de variáveis, valores literais, operadores numéricos, operadores relacionais, operadores lógicos, entrada de dados. Ótimos estudos! D I S C I P L I N A : Linguagem de Programação CAPÍTULO 1: MONTANDO O AMBIENTE 1-3 Linguagem de Programação M O N TA N D O O A M B IE N TE 1< / > 1�1 Instalando o ambiente do Python 1.1.1 Instalando o Python O ambiente de desenvolvimento da linguagem Python é gratuito e pode ser baixado no link https://www.python.org/. O ambiente é multiplataforma então pode ser instalado em vários sistemas operacionais como Linux, Windows e MAC OS X. A instalação fornecida por esse link fornece um editor de tex- tos chamado Idle, e o console do Python, usaremos ambas estas ferramentas durante todo o material, mas o leitor pode ficar à von- tade para escolher o editor de textos que lhe for mais familiar. Alguns sistemas operacionais já vem com o Python instalado porém este material usa a versão 3.7 e pode ser que a instalação padrão do sistema que você vai usar pode não ser compatível, vale a pena verificar a versão, usando o comando python -v na sua linha de comando. 1.1.2 Programa: Olá Mundo (Hello World) Depois que a instalação do Python 3.7 terminar teremos duas ferramentas importantes instaladas, uma delas é o terminal do Python que possui o interpretador em tempo real, podemos fa- zer muitas experiências interessantes com esse console, e é nele que vamos escrever o nosso primeiro programa. A segunda ferramenta que foi instalada é um editor de tex- to que será muito útil quando os programas começarem a ter um maior número de linhas, se continuarmos a usar o console vere- mos que o código ficará difícil de ler. 1-4 Linguagem de Programação M O N TA N D O O A M B IE N TE 1< / > Vamos então ao nosso primeiro programa, como ele será um programa de apenas uma linha o uso do console será muito adequado. Por hora não se preocupe em entender todo o código, pois mesmo para um programa simples alguns conceitos um pouco mais avançados serão utilizados. 1| Python 3.7.7 (v3.7.7:d7c567b08f, Mar 10 2020, 02:56:16) 2| [Clang 6.0 (clang-600.0.57)] on darwin 3| Type “help”, “copyright”, “credits” or “license()” for 4 more information. 4| >>> print(‘Olá Mundo’) 5| Olá Mundo 6| >>> A linha 1 mostra qual é a versão do interpretador do Python que foi instalada e que será usada para interpretar as linhas de có- digo que vão sendo digitadas no console. O Clang mostrado na linha 2 é um programa do sistema ope- racional usado pelo Python para acessar bibliotecas de baixo nível, entre essas bibliotecas estão as que provêm acesso ao disco, tecla- do, vídeo entre outros periféricos. Não se preocupe se essa linha for diferente no seu console, pois esse texto depende de qual sistema operacional está sendo uti- lizado. Esse texto foi retirado de um console que estava rodando no sistema operacional macOS Big Sur. As linhas 3 e 4 mostram 4 comandos que podem ser usados para se obter mais informações sobre a linguagem Python. 1-5 Linguagem de Programação M O N TA N D O O A M B IE N TE1< / > Até agora falamos das linhas que apenas trazem informações sobre o console e sobre a linguagem Python que estamos usando. É na linha 5 que está escrito o código do nosso primeiro comando o print, note que logo na sequência temos um parêntese, esse símbo- lo nos diz que o comando print é uma função do Python. Funções serão tema nos próximos capítulos. Logo na sequência temos um texto ‘Olá Mundo’ entre aspas simples, duas informações importantes podem ser ditas sobre este texto, uma delas é que em Python podemos afirmar que este texto é um tipo muito utilizado no Python chamado de str, esse é o tipo utilizado para representarmos texto. Outro ponto importante é que o texto ‘Olá Mundo’, é tam- bém um parâmetro para a função print, funções em Python po- dem ou não receber um ou mais parâmetros, e fazer algum tipo de operação, no caso da função print, o valor deste parâmetro será exibido como a saída do programa, como vemos na linha 6. Todo programa tem um propósito e o propósito deste simples programa foi mostrar no console do Python a frase: Olá Mundo. 1.1.3 Operadores numéricos Vamos agora utilizar o console do Python para realizarmos algumas operações matemáticas, veja que pelo console podemos resolver algumas expressões matemáticas, podendo utilizá-lo como uma poderosa calculadora. 1| >>> 9 - 2 2| 7 3| >>> 9 + 2 1-6 Linguagem de Programação M O N TA N D O O A M B IE N TE 1< / > 4| 11 5| >>> 3 * 4 6| 12 7| >>> 13 / 2 8| 6.5 9| >>> 13 // 2 10| 6 11| >>> 2 ** 3 12| 8 13| >>> 11 % 2 14| 1 15| >>> Analisando as operações descritas acima percebemos um padrão entre elas, veja que sempre temos número seguido de um símbolo e depois outro número. Ao símbolo que aparece entre os números damos o nome de Operador, e neste caso em particular, chamaremos esses símbolos de Operadores Numéricos. A tabela a seguir mostra em detalhes o que cada um desses operadores significa Tabela 1-1: Operadores Numéricos Operador Descrição da Operação - Operador de Subtração. + Operador de Adição. / Operador de Divisão (Não inteira) 1-7 Linguagem de Programação M O N TA N D O O A M B IE N TE 1< / > * Operador de Multiplicação // Operador de Divisão (Inteira) ** Operador de Potenciação % Operador de Resto (Comumente chamado de módulo) Vale a pena comentarmos sobre alguns operadores que são um pouco diferentes dos ensinados na matemática dos cursos fun- damental e médio. Vamos começar pela diferença entre os operadores / e // para isso analise o código abaixo: 1| >>> 13 / 2 2| 6.5 3| >>> 13 // 2 4| 6 Veja que 13 / 2 foi igual a 6.5 ou seja a divisão gerou um resultado decimal, podemos então afirmar que esse operador de divisão gera resultados não inteiros. Na sequência veja que a operação 13 // 2 gerou um número inteiro, ou seja a divisão parou quando não se podia mais dividir e manter o resultado inteiro. Outro operador muito utilizado em linguagens de computa- dores e algoritmos é o Operador de Resto, comumente chamado de Módulo, o resultado de sua operação é o valor do resto da divi- são entre os dois operandos, como mostrado abaixo: 1| >>> 11 % 2 1-8 Linguagem de Programação M O N TA N D O O A M B IE N TE 1< / > 2| 1 Note que se fizermos uma divisão inteira de 11 por 2 teremos como resultado inteiro o número 10 e como resto o valor 1. Podemos também usar o console do Python para resolver ex- pressões matemáticas utilizando os parênteses como modificador de precedência, veja o exemplo seguinte: 1| >>> ( 1 + 3 ) * 2 2| 8 3| >>> 1 + 3 * 2 4| 7 Na primeira expressão agrupamos a soma dos valores 1 e 3 ou seja a precedência será primeiro calcular o valor 4 e depois mul- tiplicar pelo valor 2 dando como resultado final o valor 8. Na segunda expressão, veja que removemos os parênteses, neste caso a precedência da expressão é primeiro realizar a ope- ração de multiplicação ou seja calcular o valor de 3 multiplicado por 2 que será 6 e por fim somar com o valor 1, tendo assim como resultado final o valor 7. 1-9 � EXERCÍCIOS PROPOSTOS 1) Podemos dizer que a expressão print, da linguagem Python é: ( ) -a) Um operador numérico. ( ) -b) Um comando que não existe. ( ) -c) Uma função. ( ) -d) Uma função que não exibe nada na tela ( ) -e) Uma função que não pode receber nenhum parâmetro 2) Podemos dizer que a expressão ‘Olá Mundo’ em Python é: ( ) -a) Uma variável. ( ) -b) Um valor literal do tipo str. ( ) -c) Retornará um erro. ( ) -d) Não pode ser usado como parâmetro na função print. ( ) -e) É equivalente à expressão Olá Mundo, sem aspas. 3) Quando queremos o valor que representa o resto de uma divisão qual operador usamos ? ( ) -a) Não existe nenhum operador em Python que calcule esta operação. ( ) -b) Usamos operador // que retorna o resultado da divisão jun- tamente com o resto. ( ) -c) O operador **. ( ) -d) O operador % ( ) -e) O operador %% 4) Como o Python avalia a seguinte expressão 15 / 2 ? ( ) -a) Um erro acontecerá pois / não é um operador definido. 1-10 Ex er cí ci os P ro po st os ( ) -b) O resultado será o valor inteiro 7. ( ) -c) Um erro acontecerá pois 15 não possui divisão inteira por 2. ( ) -d) O resultado será o valor decimal 7.5 ( ) -e) NDA. 5) Qual é o tipo numérico retornado como resultado da operação 17 // 2 ? ( ) -a) É um número com representação decimal. ( ) -b) É um número com representação inteira. ( ) -c) Um erro vai acontecer. ( ) -d) Nenhum tipo numérico será retornado. ( ) -e) NDA. 6) Qual é o resultado da expressão 233 % 9 no console do Python ? ( ) -a) Um erro vai acontecer pois % não é um operador válido. ( ) -b) O resultado será 20.97 ( ) -c) O resultado será 8 pois % é o operador de resto e o resto da divisão inteira de 233 por 9 é 8. ( ) -d) O resultado será 25.88 ( ) -e) O resultado será 25 7) Qual é o resultado da operação 133 % 0 no console Python ? ( ) -a) Um erro vai acontecer pois não existe divisão por 0. Pois o operador % é o operador de divisão inteira. ( ) -b) O resultado será 0. ( ) -c) O resultado será 133. ( ) -d) Um erro vai acontecer pois não existe divisão por 0. Pois o operador % é o operador que retorna o valor do resto de uma divisão. ( ) -e) O resultado será 1. 8) Qual é o resultado da operação ( 1 + 4 ) ** 2 no console Python ? ( ) -a) O valor é 25. 1-11 Ex er cí ci os P ro po st os ( ) -b) Um erro vai acontecer pois o operador ** não existe ( ) -c) O valor é 17. ( ) -d) O valor é 8. ( ) -e) Um erro vai acontecer pois não podemos usar os parênteses com o operador **. 9) Qual é o resultado da operação 7 + 2 ) // 3 no console Python ? ( ) -a) O valor é 3. ( ) -b) Um erro de sintaxe vai aparecer pois está faltando um dos parentes. ( ) -c) O valor é 4.66 ( ) -d) Um erro de sintaxe vai aparecer pois o operador // não existe. ( ) -e) NDA. 10) Qual é o resultado da chamada da função print (Olá Mundo) ( ) -a) O texto Olá mundo será mostrado no console. ( ) -b) Um erro vai acontecer informando que o valor passado como parâmetro é um número. ( ) -c) Um erro vai acontecer pois a função print não foi definida na linguagem Python. ( ) -d) Um erro de sintaxe vai acontecer pois estamos passando o parâmetro do tipo str, porém sem aspas simples. ( ) -e) Um erro vai acontecer pois a função print não pode receber nenhum parâmetro. D I S C I P L I N A : Linguagem de Programação CAPÍTULO 2: VARIÁVEIS 2-2 Linguagem de Programação V A R IÁ V EI S 2< / > 2�1 Introdução ao conceito de variáveis Todo programa de computador tem como funcionalidade básica receber um dado, fazer um determinado processamento e exibir uma resposta. Vemos isso em programas de planilha eletrô- nica, processadores de texto, sistemas operacionais complexos, jo- gos de videogame e até mesmo pequenos programas que calculam a média de notas de uma disciplina. O dado é fornecido ao programa, por algum dispositivo de entrada, como um teclado, mouse, joystick, leitor de código de barras, câmera etc, para que o programa consigareter esses dados para executar um processamento é necessário que esse dado fique armazenado em alguma posição na memória RAM. O Python faz essa reserva de memória e armazenagem do dado por meio das variáveis do programa. 2.1.1 Declarando uma variável Vamos escrever nosso primeiro programa que faz uso de uma variável, o propósito desse programa vai ser bem simples, exibir na tela o valor que foi atribuído para a variável. Desta vez ao invés do console do Python vamos utilizar o editor de texto que vem junto com a instalação da linguagem para criar um arquivo que armazenará o programa. Crie um novo arquivo e digite o código abaixo, depois salve o arquivo com o nome programa_2_1.py. Todo o código que será mostrado neste material será exibido com o número das linhas para facilitar a explicação ao digitar o código no editor de textos ou no console do Python ignore e não digite os números que indicam as linhas. 2-3 Linguagem de Programação V A R IÁ V EI S 2< / > 1| # Programa 2.1 - Mostrando o valor da variável 2| x = 7 3| print(x) Como desta vez utilizamos o editor de texto ao invés do con- sole Python precisamos salvar o arquivo e executar o programa, para isso utilize a tecla F5 ou no menu do editor na opção Run, depois clique em Run Module. Veja que o valor 7 foi mostrado na tela do console Python. Vamos agora detalhar linha por linha o que faz esse progra- ma, veja que na linha 1 temos um texto que começa com o caractere #, isso indica ao interpretador do Python que essa linha é um co- mentário e será ignorada durante o processo. Comentários podem ser colocados em quaisquer linhas bastando começar com o caractere #. Podemos usar comentários para deixar pistas de como e por que escrevemos o código da- quela maneira. Isso é muito útil quando vamos compartilhar um código mais complicado com um colega ou mesmo quando, depois de um tempo, abrimos o código e não lembramos mais o que o pro- grama fazia. Agora vamos para a Linha 2, é nesta linha que está o obje- tivo deste capítulo, é nesta linha que declaramos a variável x e na sequência atribuímos a ela o valor 7 por meio do operador de atribuição representado pelo símbolo =. Neste momento o Python reserva e armazena na memória RAM o valor 7, como entre a linha 2 e alinha 3 não modifica- mos o valor dessa variável podemos garantir que o dado que será 2-4 Linguagem de Programação V A R IÁ V EI S 2< / > mostrado na tela é o número 7 como vemos no texto abaixo retira- do do console: 7 >>> 2.1.2 Nomeando uma variável Como mostrado anteriormente utilizamos uma variável para armazenar um determinado dado na memória do computador, para que esse dado seja utilizado futuramente em algum tipo de processamento. Que no caso do exemplo anterior foi mostrar o va- lor desta variável no console do Python. Posto isso, veja que é muito interessante dar nomes a variá- veis de maneira que esses nomes refletem de uma maneira sucinta qual é a finalidade do dado que essa variável armazena. Além disso, a linguagem Python exige que o nome de uma variável deverá começar com uma letra, mas símbolos e números podem ser usados em outras partes do nome da variável. Por convenção é muito comum vermos em nomes de variá- veis utilizando o símbolo _ para representar espaço em branco no nome de uma variável, já que o espaço em branco não é permitido no meio do nome de uma variável. Vamos supor que queremos armazenar o nome de um usuá- rio num programa que faz uma consulta no banco de dados, para isso podemos chamar essa variável da seguinte maneira: nome_ usuario. Isso seria permitido pelo Python, mas se quisermos cha- mar essa mesma variável de: nome usuario geramos um erro no interpretador. 2-5 Linguagem de Programação V A R IÁ V EI S 2< / > 1| >>> nome usuario = “Joe Doe” 2| SyntaxError: invalid syntax 3| >>> nome_usuario = “Joe Doe” 4| >>> Veja que na linha 1 tentamos definir o nome da variável como nome usuario, mas na linha 2 o interpretador nos retornou um erro avisando que a sintaxe estava errada. Logo na linha 3 renome- amos a variável para um nome permitido e o erro de sintaxe não aconteceu mais. Confira na tabela abaixo alguns nomes de variáveis válidos e outros inválidos Tabela 2-1: Nomes de variáveis válidos e inválidos Nome da variável Validade Resultado y1 é válido Começa com uma letra e o número vem depois, então pode ser usado. altura é válido O nome só possui letras portanto é válido altura1 é válido O nome possui um letra e um número só no final o que o deixa válido nome_candidato é válido É permitido pois usa letras e o símbolo _ que é permitido nome candidato é invalido Não é permitido, pois nomes de variáveis não podem ter espaços em branco. 1x é invalido Esse nome não é permitido pois começa com um número. A versão 3 da linguagem Python permite o uso de caracteres UTF-8 ou seja podemos colocar nos nomes das variáveis acentos, porém nos códigos de exemplo deste livro os acentos não serão 2-6 Linguagem de Programação V A R IÁ V EI S 2< / > utilizados, com isso mantemos a compatibilidade com outras ver- sões mais antigas do Python. Quando definimos uma variável em Python não fica explícito no código mas nos bastidores a variável também recebe um tipo dependendo do valor que foi armazenado nela, este tipo pode ser de números inteiros, número de ponto flutuante, cadeias de caracteres muito conhecidas como strings e o tipo booleano que pode ter apenas dois valores sendo eles verdadeiro representa- do por True ou falso representado por False. 2.1.3 Variáveis do tipo numérico A variável do tipo numérico pode armazenar valores inteiros, ou seja números sem casa decimal, ou valores de ponto flutuante, ou seja valores onde a casa decimal é necessária. No Python para representar as casas decimais de um número de ponto flutuante utilizamos o caractere ponto e nunca a vírgula como estamos acostumados, isso acontece pois na língua inglesa o separador de casas decimais é o ponto e não a vírgula. Vamos nos adiantar um pouco e usar uma função ainda não apresentada que é a type, a função type recebe como parâmetro uma variável e mostra qual é o tipo desta variável, veja no código abaixo como o Python escolhe automaticamente o tipo das variá- veis que foram declaradas: 1| >>> x = 1.2 2| >>> type(x) 3| <class ‘float’> 4| >>> y = 1 2-7 Linguagem de Programação V A R IÁ V EI S 2< / > 5| >>> type(y) 6| <class ‘int’> Já na linha 1 definimos uma variável chamada x com o va- lor inicial de 1.2, ou seja, um número com a parte inteira de valor 1 e a parte decimal de valor 2, veja que o separador é o ponto e não a vírgula. Na linha 2 utilizamos a função type, passando como parâ- metro a variável x. Note que na linha 3 temos a resposta do inter- pretador mostrando que o tipo da variável x é float. Em Python o tipo de variável de ponto flutuante é chamado float. Agora na linha 4 definimos a variável y, atribuindo-lhe o va- lor 1, veja que o valor 1 não possui o separador decimal ou seja podemos afirmar que o valor 1 é um valor inteiro. Novamente usando a função type, checamos o tipo da variá- vel y, que é mostrado na linha 6. Note que em Python o tipo inteiro é chamado de int. 2.1.4 Variáveis lógicas ou booleanas É muito comum na computação usarmos variáveis para re- presentar situações com apenas dois valores possíveis, como no caso de ligado ou desligado, certo ou errado, verdadeiro ou falso. Para essas situações utilizamos as variáveis do tipo lógico, essas variáveis aceitam apenas dois possíveis valores, que podem ser True ou False. Veja no código abaixo como declarar esse tipo de variável no console do Python. 1| >>> ligado = True 2-8 Linguagem de Programação V A R IÁ V EI S 2< / > 2| >>> type(ligado) 3| <class ‘bool’> Definimos na linha 1 uma variável de nome ligado e logo na linha 2 utilizamos novamente função type passando como parâ- metro a variável ligado. Na linha 3 vemos escrito o nome do tipodessa variável que é bool, portanto em Python variáveis lógicas ou booleanas são definidas como do tipo bool. 2.1.5 Operadores relacionais Operadores relacionais necessitam de dois operandos e rea- lizam comparações com estes operandos tendo como resultado um valor do tipo booleano. Veja tabela abaixo Tabela 2-2: Operadores relacionais Operador relacional Operação == Verifica igualdade entre dois operandos, retorna o valor True se os operandos forem iguais e False caso contrário. != Verifica se dois operandos são diferentes, retorna True se os operandos são diferentes e False se os operan- dos são iguais. > Verifica se o operando da esquerda é maior que o operando da direita, retorna True se isso for verdadeiro ou False caso contrário. < Verifica se o operando da esquerda é menor que o operando da direita, retorna True se isso for verdadeiro ou False caso contrário. >= Verifica se o operando da esquerda é maior ou igual ao operando da direita, retorna True se isso for verdade ou False caso contrário. 2-9 Linguagem de Programação V A R IÁ V EI S 2< / > Operador relacional Operação <= Verifica se o operando da esquerda é menor ou igual ao operando da direita, retorna True se isso for verdade ou False caso contrário. Vamos agora utilizar o console do Python, para fazer algu- mas experiências com os operadores relacionais. 1| >>> x = 1 2| >>> y = 6 3| >>> z = 3 4| >>> w = 1 5| >>> x == w 6| True 7| >>> x != w 8| False 9| >>> z < y 10| True 11| >>> x <= w 12| True 13| >>> z > x 14| True 15| >>> z >= x 16| True 2-10 Linguagem de Programação V A R IÁ V EI S 2< / > Nas linhas 1 até 6 definimos as variáveis numéricas x, y, z e w, com os respectivos valores 1, 6 ,3 e 1. Na linha 5 utilizamos o operador de igualdade utilizando as variáveis x e w como operan- dos, veja que como x possui o valor 1 e w também possui o valor 1 o resultado da operação é True, pois os valores são iguais. Agora é a vez do operador !=, veja que na linha 7 o operando da direita é novamente a variável x e o da esquerda a variável w, porém neste caso o resultado será False, pois ambos possuem o mesmo valor. Na sequência temos o operador <, o operando da esquerda é a variável z e o operando do lado direito é a variável y, como o valor de z é 3 e o valor de y é 6 ou seja z é menor que y, vemos na linha 10 o valor True. Vamos agora analisar o operador da linha 11 que é o <=, o operando do lado esquerdo é a variável x e o operando do lado direito é a variável w e como w e x possuem o mesmo valor então veremos que na linha 12 temos o resultado da operação com o va- lor True. Chegamos na linha 13, o operador utilizado aqui foi o >, o operando da esquerda é a variável z e o operando da direita é a variável x, o valor de z é 3 e o valor de x é 1 ou seja z é maior que x logo o valor da operação que vai aparecer na linha 14 é True. Por fim vamos verificar o operador >=, neste caso o operan- do da esquerda é a variável z e o operando da direta é a variável x, seus valores são respectivamente 3 e 1, veja que os valores não são iguais mas 3 é maior que 1 deste modo o resultado da operação será True, como mostrado na linha 16. 2-11 Linguagem de Programação V A R IÁ V EI S 2< / > 2.1.6 Operadores lógicos Operações com variáveis do tipo bool, ou seja variáveis boo- leanas são muito utilizadas em programação, suponha a situação onde se o salário de um funcionário é maior que R$2000,00 reais e se o funcionário tem mais de 2 anos de casa, então se essas duas afirmações forem verdadeiras iremos dar um bônus de R$100,00 ao funcionário. Veja que neste caso temos duas afirmações e caso as duas sejam verdadeiras então teremos uma consequência que é o bônus que será pago ao funcionário. Nesta situação, fizemos uso implici- tamente do operador lógico e que em Python é representado pela palavra and. Veja na tabela abaixo os operadores lógicos disponí- veis na linguagem Python. Tabela 2-3: Operadores lógicos Operador lógico em Python Operação lógica and operação lógica e or operação lógica ou not operação lógica não Podemos afirmar que os operadores lógicos and e or, são operadores binários pois necessitam de dois operandos. E o ope- rador lógico not é um operador unário, pois necessita de apenas um operando. É possível escrever todos os possíveis valores resultantes das operações lógicas numa tabela, à qual damos o nome de ta- bela verdade. 2-12 Linguagem de Programação V A R IÁ V EI S 2< / > 2.1.6.1 O operador lógico not O operador not inverte o valor da variável booleana, de ma- neira que se o valor da variável é True, então após a operação com not, o valor dessa variável será False. Caso o valor da variável seja False, após a operação com not, o valor da variável será True. Vamos usar o console do Python para verificar as afirmações escritas logo acima. 1| >>> p1 = True 2| >>> p2 = False 3| >>> not p1 4| False 5| >>> not p2 6| True Nas linhas 1 e 2 definimos as variáveis p1 e p2, com valores True e False respectivamente na linha 3 fizemos a operação not com a variável p1 e veja que na linha 4 o resultado dessa operação foi o valor False. Para demonstrar o outro caso na linha 5 aplicamos o ope- rador not na variável p2, lembre-se que o valor da variável p2 é False, e por isso na linha 6 vemos que o valor que aparece é True. Na sequência vamos montar a tabela verdade para o operador not. 2-13 Linguagem de Programação V A R IÁ V EI S 2< / > Tabela 2-4: Tabela verdade operador not. valor not valor True False False True 2.1.6.2 O operador lógico or Agora vamos analisar o operador lógico or, em resumo essa operação lógica apenas retornará o valor True quando pelo menos um dos operandos for diferentes de False. Fazendo algumas experiências com o console do Py- thon temos: 1| >>> val1 = True 2| >>> val2 = False 3| >>> val1 or val2 4| True 5| >>> val2 or val1 6| True 7| >>> val1 or val1 8| True 9| >>> val2 or val2 10| False Nas linhas 1 e 2 declaramos novamente duas variáveis com os nomes de val1 e val2, atribuímos a essas variáveis respectiva- mente os valores True e False. 2-14 Linguagem de Programação V A R IÁ V EI S 2< / > Agora na linha 3 realizamos a primeira operação com o ope- rando or, veja que neste caso bastou a variável val1 possuir o va- lor True para que o resultado da operação mostrado na linha 4 seja True. Na linha 5 invertemos os operandos, mas sabemos que o operando val1, ainda possui o valor True, neste caso novamente na linha 6 teremos como resultado o valor True. Vamos mudar um pouco agora e utilizarmos apenas a vari- ável val1, neste caso ambos os operandos possuem valor igual a True e por isso na linha 8 temos o resultado True. Por fim, vamos analisar o caso onde ambos os operandos possuem o valor False, como dito anteriormente, é apenas nesse caso que o resultado da operação or vai retornar o valor False, como podemos ver na linha 10 do código. Com base nesses resultados podemos montar a tabela verda- de para o operador or. Tabela 2-5: Tabela verdade operador or. valor1 valor2 valor1 or valor2 True False True False True True True True True False False False 2.1.6.3 O operador lógico and Analisaremos agora o operador and, em resumo, uma ope- ração com and só vai retornar o valor True, no caso onde os dois operandos possuem o valor True. Podemos ver que essa afirmação é verdadeira no console to Python: 2-15 Linguagem de Programação V A R IÁ V EI S 2< / > 1| >>> exp1 = True 2| >>> exp2 = False 3| >>> exp1 and exp2 4| False 5| >>> exp2 and exp1 6| False 7| >>> exp2 and exp2 8| False 9| >>> exp1 and exp1 10| True Começando pelas linhas 1 e 2 definimos duas variáveis cha- madas exp1 e exp2, com valores True e False respectivamen- te. Logo na linha 3 efetuamos uma operação lógica e como o va- lor de exp2 é False temos na linha 4 o resultado esperado como sendo False. Agora vamos trocar a ordem dos operandos e colocar variá- velexp2 como sendo o primeiro operando, porém o valor de exp2 ainda é False, e novamente o resultado dessa operação lógica será False, como exibido na linha 6. Vamos testar o caso onde ambos os operandos possuem o valor False, para isso vamos usar a variável exp2 em ambas as posições, como mostrado na linha 7, novamente neste caso temos como resultado da operação o valor False, que é exibido na linha 8. Por fim, vamos ver o único caso onde o resultado desta ope- ração será True, para isso vamos usar a variável exp1 em ambas posições da operação, como feito na linha 9, lembre-se que o valor 2-16 Linguagem de Programação V A R IÁ V EI S 2< / > da variável exp1 é True, neste caso o resultado da operação será True como mostrado na linha 10. Com base nesses dados vamos montar a tabela verdade da operação lógica and: Tabela 2-6: Tabela verdade operador and valor1 valor2 valor1 and valor2 True False False False True False True True True False False False 2.1.7 Variáveis do tipo string (texto) Até agora vimos como armazenar números e valores lógicos em variáveis, veremos neste capítulo como armazenar um texto em uma variável. É muito comum na programação nos referimos a um texto como sendo uma cadeia de caracteres, por isso no Python o nome do tipo que é dado a uma variável de texto é chamado de str, que é do inglês significa linha, fio ou corrente, podemos então pensar no tipo string como sendo uma “linha” de caracteres. Vamos usar uma frase clássica na programação que é a “Olá Mundo”, é muito comum sempre que estamos aprendendo uma lin- guagem nova usarmos essa frase durante as experiências iniciais. Nem de perto isso é mandatório, mas é tradicional entre os programadores que estão aprendendo uma nova linguagem. Va- mos então usar o console para fazermos algumas experiências in- teressantes com esse novo tipo que vamos estudar: 2-17 Linguagem de Programação V A R IÁ V EI S 2< / > 1| >>> texto = ‘Olá Mundo’ 2| >>> type(texto) 3| <class ‘str’> 4| >>> texto[0] 5| ‘O’ 6| >>> texto[2] 7| ‘á’ 8| >>> len(texto) 9| 9 Começando pela linha 1 definimos a variável texto, com o valor ‘Olá Mundo’, quando escrevemos algo entre aspas simples estamos criando uma string literal, na mesma linha temos o sím- bolo de atribuição então em resumo o que fizemos foi atribuir uma string literal a uma variável com nome texto. Criando desta ma- neira uma variável do tipo str como mostrado na linha 3 por meio da função type. Note que escrevemos a frase entre aspas simples ‘ ‘, pode- ríamos ter usado aspas duplas “ ”, mas para manter o padrão do material vamos usar aspas simples. Podemos pensar que a string foi armazenada na memória como uma lista indexada onde cada posição dessa lista corres- ponde a um caractere do texto da string, como mostrado na ta- bela abaixo. 2-18 Linguagem de Programação V A R IÁ V EI S 2< / > Tabela 2-7: Modelo em memória de uma string O l á m u n d o 0 1 2 3 4 5 6 7 8 Veja que na linha 4 acessamos a posição 0 dessa lista inde- xada usando a notação [0], vale a pena atentar para o fato de que essa lista indexada começa sempre no índice 0. Na linha 5 vemos que o caractere ‘O’ apareceu pois ele é o primeiro caractere e está armazenado na posição 0 da variável que chamamos de texto do tipo str. Vamos fazer mais um experimento e acessar o caractere da posição 2, partindo do índice 0 e contando até o índice 2 vemos que o valor armazenado nesta posição é o caractere ‘á’, como mostrado na linha 7 do código do terminal. Por fim, vamos demonstrar o uso da função len que como visto na linha 8 recebe um parâmetro do tipo str e retorna o núme- ro de caracteres desta string, como mostrado na linha 9. 2.1.8 Operações comuns com strings Agora que já sabemos como definir uma variável do tipo string, podemos efetuar algumas operações que são muito úteis no dia a dia de um programador. Uma dessas operações permite “juntar” uma string com ou- tra, a essa operação chamamos de concatenação. Em outras situações queremos dividir a string em alguma posição, como vimos anteriormente podemos pensar na string como sendo uma lista indexada de caracteres, podemos pegar uma dessas posições e criar 2 strings a partir de uma. 2-19 Linguagem de Programação V A R IÁ V EI S 2< / > Por fim, às vezes, temos a necessidade de injetar uma outra variável entre os caracteres de uma string 2.1.8.1 Concatenação de strings Vamos usar o seguinte código no console do Python para en- tendermos com funciona a concatenação de strings: 1| >>> nome = ‘João’ 2| >>> sobre_nome = ‘Silva’ 3| >>> nome + ‘ ‘ + sobre_nome 4| ‘João Silva’ Começaremos pela linha 1, veja que nesta linha definimos uma variável chamada nome, do tipo string com o valor ‘João’ e na linha 2 uma outra variável chamada sobre_nome, também do tipo string, e com valor ‘Silva’. Na linha 3 fazemos a operação de concatenação utilizando o operador +. Veja que na linha 4 temos a resposta desta operação, ou seja a string com o valor ‘João Silva’. Como dito anteriormente podemos pensar na operação de concatenação como sendo uma operação que junta os valores de duas ou mais variáveis. Vamos fazer uma experiência agora de tentar concatenar uma variável do tipo int com uma variável do tipo str. 1| >>> val1 = 2 2| >>> texto = ‘meu número’ 2-20 Linguagem de Programação V A R IÁ V EI S 2< / > 3| >>> texto + val1 4| Traceback (most recent call last): 5| File “<pyshell#5>”, line 1, in <module> 6| texto + val1 7| TypeError: can only concatenate str (not “int”) to str Na linha 1 definimos uma variável val1, do tipo int com value 2 e na linha 2 definimos mais uma variável do tipo str com valor ‘meu número’. Vamos então tentar concatenar as duas variáveis, veja que a variável chamada texto é do tipo str e a variável chamada val1, é do tipo int, por isso nas linhas 5, 6 e 7 temos um erro, onde a men- sagem mais importante está na linha 7 e indica que apenas valores do tipo str podem ser concatenados. Para corrigirmos esse comportamento é necessário transfor- marmos a variável val1 em uma variável do tipo str para isso usa- mos a função str, passando como parâmetro a variável val1, veja isso na linha 3. 1| >>> val1 = 2 2| >>> texto = ‘meu número’ 3| >>> texto + str(val1) 4| ‘meu número2’ Agora não temos mais o erro, podemos ver que na linha 4 temos a concatenação das strings e o resultado dessa operação é: ‘meu número 2’ 2-21 Linguagem de Programação V A R IÁ V EI S 2< / > 2.1.8.2 Divisão de strings Vimos anteriormente que é possível acessarmos individual- mente os caracteres de uma variável do tipo str por meio da nota- ção: [índice], onde o valor de índice é do tipo inteiro. Vamos usar a tabela abaixo para representar a string ‘Frase de teste’ Tabela 2-8: Modelo em memória de uma string F r a s e d e t e s t e 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1| >>> texto = ‘Frase de teste’ 2| >>> len(texto) 3| 14 4| >>> texto[6:14] 5| ‘de teste’ 6| >>> texto[:5] 7| ‘Frase’ 8| >>> texto[-5:] 9| ‘teste’ 10| >>> texto[9:14] 11| ‘teste’ Na primeira linha definimos uma variável do tipo str chama- da texto, com o valor ‘Frase de teste’. Na linha 2 usamos a função 2-22 Linguagem de Programação V A R IÁ V EI S 2< / > len, passando como parâmetro a variável chamada texto, para mostrarmos o número de caracteres armazenados, na linha 3. Usando a notação [limite_inferior: limite_superior], dizemos que o parâmetro limite_inferior, marca o índice onde o corte da string vai começar, incluindo o próprio índice. O limite_superior, é o índice que marca até onde o corte da string vai se estender, porém o índice passado no parâmetro limite_superior, não será considerado no corte da string. Voltando ao código digitado no console do Python, na linha 4 temos o código texto[6:14], olhando para a tabela que representa o modelo da string em memória vemos que o caractere que está no índice 6 é o ‘d’. Na sequência, temos o índice 14, como ditoanteriormen- te o parâmetro limite_superior não é considerado no corte da string, logo devemos considerar o índice 13, onde está armazena- do o caractere ‘e’. Na linha 5 temos então o resultado do corte da string que é o texto ‘de teste’, ou seja, o código texto[6:14] quer dizer o Python para pegar os caracteres começando do índice 6, inclusive até o indice 13, pois o índice 14 não está incluso. Vamos agora ao código da linha 6, temos então texto[:5], neste caso omitimos o parâmetro limite_inferior, isso faz com que o Python use como limite inferior do corte o índice 0 e como superior o índice 4, lembre-se que o valor do limite su- perior é desconsiderado sendo que no lugar dele sempre tere- mos limite_superior - 1. Com isso vemos na linha 7 a string ‘Frase’, pois o coman- do texto[:5], pega os caracteres do índice 0 inclusive até o ín- dice 4, veja que no modelo de memória temos os caracteres que 2-23 Linguagem de Programação V A R IÁ V EI S 2< / > formam a string ‘Frase’ dentro do intervalo de índices que vai de 0 a 4, incluindo o 0. Por fim vamos considerar agora a linha 8, que possui o co- mando texto[-5:], neste caso o Python entende que devemos pe- gar o limite inferior como sendo índice 9 pois como vimos na linha 13 o número de caracteres da string armazenada na variável cha- mada texto é 14. Note que temos um sinal de menos que acompanha o núme- ro 5 no primeiro parâmetro, isso nos faz calcular que o primeiro índice do corte será 9 = 14 - 5, ou seja o primeiro índice do corte será o 9, como não passamos nenhum valor para o segundo parâ- metro devemos considerar é o índice do final do corte será o 13, que segundo o modelo de memória da string é o último índice da string. Podemos então entender que texto[-5:] é igual a tex- to[9:14] e na linha 9 veremos a string ‘teste’’. Como forma de comparação, a linha 10 mostra que o comando texto[9:10] resul- ta no mesmo valor como mostrado na linha 11. Por curiosidade, vamos tentar acessar um índice da variável texto que não está definido, neste caso vemos que o último índice da string é o 13. Vamos usar o console do Python para saber qual é o valor armazenado no índice 14 1| >>> texto[14] 2| Traceback (most recent call last): 3| File “<pyshell#23>”, line 1, in <module> 4| texto[14] 5| IndexError: string index out of range 2-24 Linguagem de Programação V A R IÁ V EI S 2< / > Logo na linha 1 usamos o comando do Python para tentar acessar o índice 14 da variável texto, mas olhando para o modelo de memória da string, vemos que o último índice é o 13, ou seja o índice 14 não está definido portanto vemos nas linhas 2 até 5 uma mensagem de erro informando que o índice que foi usado como parâmetro está fora do intervalo de índices definidos pelo modelo de memória da string. 2.1.8.3 Interpolação de strings Vamos agora estudar uma maneira de inserir uma nova va- riável no meio de uma string já definida, este conceito é muito utilizado quando queremos fazer uma saída de dados com algum processamento realizado pelo nosso programa. Para isso vamos começar usando o console do Python, digi- tando um programa bem simples, como mostrado abaixo: 1| >>> lado = 3 2| >>> área = lado ** 2 3| >>> ‘O lado do quadrado é %d e a área é %d’ %(lado, área) 4| ‘O lado do quadrado é 3 e a área é 9’ Na linha 1 definimos a variável do tipo int chamada de lado com o valor 3. Na segunda linha definimos a variável área como sendo a variável lado elevada à segunda potência. Agora queremos mostrar os dados armazenados nessas duas variáveis em uma única frase, de maneira que os seus valores apa- reçam no meio da frase, como mostrado na linha 3, note que usa- mos dois marcadores iguais descritos como %d. 2-25 Linguagem de Programação V A R IÁ V EI S 2< / > Nesta mesma linha fora da definição da string temos o có- digo %(lado, área), isso indica que o primeiro marcador %d será substituído pelo valor da variável inteira lado, e o segundo mar- cador do mesmo tipo %d será substituído pelo valor da variável área, por isso o valor final da string mostrado na linha 4 é ‘O lado do quadrado é 3 e a área é. Além do marcador do tipo %d que é utilizado quando quere- mos interpolar inteiros numa string, temos outros dois marcado- res, o %f que é utilizado para variáveis do tipo float e o %s quando for o caso de interpolar variáveis do tipo string. Agora veremos um exemplo de interpolação de string com todos os marcadores: 1| >>> n = ‘Lúcia’ 2| >>> q = 3 3| >>> p = ‘bala’ 4| >>> v = 1.55 5| >>> ‘%s comprou %d %s(s) no total de R$%2.2f’ %(n, q, p, q * v) 6| ‘Lúcia comprou 3 bala(s) no total de R$4.65’ Começando na linha 1 definimos a variável com nome n do tipo string que irá armazenar o valor ‘Lúcia’, ou seja o nome do nosso cliente. Na sequência a variável q, que vai representar a quantidade do produto que o nosso cliente comprou, e será do tipo inteiro com o valor 3. 2-26 Linguagem de Programação V A R IÁ V EI S 2< / > Na linha 3 a variável p, que será do tipo string e vai armaze- nar o nome do produto, por fim definimos a variável v do tipo float que vai guardar o valor do produto que nesse caso é representado pelo número decimal 1,55. Agora vamos a definição da string interpolada, veja que usamos os marcadores %s, para mostrar o nome do cliente, na sequência o marcador %d que irá exibir a quantidade do pro- duto que foi comprada, seguido do marcador %s que vai mostrar o nome do produto e por fim o marcador %f, que foi utilizado para mostrar o número do tipo float onde estará armazenado o cálculo total do valor que o cliente deve pagar no caixa. Por fim, a linha 6 exibe a string resultante das interpolações. 2.1.9 A Entrada de dados Até agora, nos exemplos estudados, a entrada de dados foi feita por meio de valores armazenados em variáveis, veja que não usamos nenhum tipo de periférico de entrada, tais como teclado, mouse ou joystick para fornecer os dados de entrada. Veremos agora como fazemos em Python para pegar um texto digitado no teclado e armazenar este texto numa variável do tipo string. O propósito deste programa é pedir ao usuário um nome e um sobrenome, ou seja, esta será a entrada do programa, e a saída do programa será a concatenação dessas duas strings para formar o nome completo baseado nos dados que foram entra- dos pelo usuário do programa. Para isso vamos usar o editor de textos que vem com a insta- lação do Python para codificarmos este programa. 2-27 Linguagem de Programação V A R IÁ V EI S 2< / > 1| # Programa 2 - Nome e sobrenome com en- trada de dados 2| 3| nome = input(‘Digite o nome: ‘) 4| sobre_nome = input(‘Digite o sobre nome: ‘) 5| 6| print(‘O nome completo é %s %s.’ %(nome, sobre_nome)) O que vemos de novo neste código é a função input, veja que ela recebe como parâmetro uma string, é essa string que será apresentada ao usuário do programa, informando a ele que um nome deverá ser digitado. Veja que a função input, na linha 1, retorna um valor que é armazenado na variável nome, a função input sempre retorna um valor do tipo string, ou seja consequentemente o tipo da vari- ável nome será string. Na linha 3 utilizamos da mesma maneira a função input, mas agora vamos pedir ao usuário o sobrenome, que agora será armazenado na variável sobre_nome, atente ao fato de que se usássemos a mesma variável nome para armazenar o sobre_ nome perderíamos a informação do nome que foi digitada pelo usuário e o programa não faria aquilo ao que ele se propõe a fazer. Por fim, na última linha utilizamos a interpolação de strings com variáveis para exibir o resultado de uma maneira legível ao usuário, veja que usamos dois marcadores %s, pois ambos os valo- res das variáveis nome e sobre_nome são do tipo string. Como escrevemos o programa no editor de textos do Python, precisamos rodar o programa clicando no menu Run e na opção 2-28 Linguagem de Programação V A R IÁ V EI S 2< / > Run Module, ou simplesmentefazendo uso do atalho a esse menu que está na tecla F5. A resposta será como a que está mostrada logo abaixo: 1| Digite o nome: Joe 2| Digite o sobre nome: Doe 3| O nome completo é Joe Doe. Ao executar o programa, iremos perceber que o console do Python vai parar na linha 1, e o cursor para entrada de texto vai aparecer logo depois da frase ‘Digite o nome:’, no meu caso eu di- gitei o nome Joe e logo depois apertei a tecla enter. Esse comportamento de esperar a entrada e finalizar com o pressionamento da tecla enter é todo fornecido pela função input, neste caso o programador apenas deve esperar que isso aconteça e não precisa fazer mais nada para pegar o dado do usu- ário do teclado. Na linha 2 o mesmo vai acontecer, o console vai parar no fi- nal da frase ‘Digite o sobre nome’ e esperar do usuário a entrada de dados, logo após a tecla enter ser pressionada o programa mostra a linha 3 com o resultado esperado, que é a concatenação das vari- áveis nome e sobre_nome na frase ‘O nome completo é Joe Doe’. Seria interessante o leitor digitar este simples programa no editor de textos do Python, executar e fazer algumas experiências para se familiarizar tanto com o ambiente do Python quanto com o modo que o programa se comporta com a entrada de dados. Vamos fazer uma experiência para mostrarmos que a função input retorna um valor do tipo string, para isso vamos escrever o seguinte programa. 2-29 Linguagem de Programação V A R IÁ V EI S 2< / > 1| # Programa 3 - Erro de entrada tipo string usado como número 2| 3| qtd = input(‘Digite a quantidade: ‘) 4| valor_unitario = input(‘Digite o va- lor unitário: ‘) 5| 6| total = qtd * valor_unitario 7| 8| print(‘O valor total é: R$%2.2f’ % total) O primeiro dado pedido ao usuário será a quantidade de um determinado item, este valor por natureza será inteiro. Este valor será armazenado na variável qtd, lembre-se que a função input sempre retorna um valor do tipo string, então já na linha 3 podemos afirmar que o tipo da variável qtd é string. Na próxima linha, é pedido para o usuário entrar com o valor unitário do item, neste caso o usuário irá digitar algum valor deci- mal, mas de novo, como a função input sempre retorna um valor do tipo string, podemos dizer que o tipo da variável valor_uni- tario é string. Na linha 6 efetuamos a operação de multiplicação e atribu- ímos o valor do resultado à variável definida com o nome de to- tal. Antes de prosseguir reflita um pouco, tente adivinhar qual é o tipo da variável total, será que essa operação de multiplicação vai se realizar? Executando este programa temos como resultado o có- digo abaixo: 2-30 Linguagem de Programação V A R IÁ V EI S 2< / > 1| Digite a quantidade: 2 2| Digite o valor unitário: 1.89 3| Traceback (most recent call last): 4| File 5| ”/Users/munhra/Desktop/programas 6| /code/prg_3_erro_tipo_input.py”, line 6, in <module> 7| total = qtd * valor_unitario 8| TypeError: can’t multiply sequence by non-int of type ‘str’ Como esperado nas linhas 1 e 2 temos a função input entran- do em ação, e os valores 2 e 1.89 fornecidos pelo usuário, porém na linha 3 acontece algo diferente, temos o começo de uma mensagem de erro, que termina na linha 8 informando ao usuário que: não é possível multiplicar uma sequência por um tipo não in- teiro do tipo string. Confuso não ? Para entendermos esse erro, vamos fazer uma rápida experiência no terminal do Python: 1| >>> ‘x’ * 3 2| ‘xxx’ Veja que na linha 1 estamos multiplicando uma string por um número inteiro, e isto é válido na linguagem Python, na linha 2 temos o resultado desta operação que é a própria string multi- plicada por 3. Voltando ao erro do programa anterior, vemos que o Python está informando que não conseguiu multiplicar a sequência, no 2-31 Linguagem de Programação V A R IÁ V EI S 2< / > caso podemos entender a sequência como sendo uma string por um tipo não inteiro que não é uma string, ou seja, se lembrar- mos que a função input sempre retornar um tipo string estamos tentando multiplicar uma string por outra, o que não é válido na linguagem Python. Para simplificar, veja o código abaixo digitado no terminal: 1| >>> ‘x’ * ‘3’ 2| Traceback (most recent call last): 3| File “<pyshell#69>”, line 1, in <module> 4| ‘x’ * ‘3’ 5| TypeError: can’t multiply sequence by non-int 6| of type ‘str’ Para reproduzir o erro modificamos na linha 1 o tipo do li- teral de valor 3 note que agora o 3 aparece entre aspas ‘3’, isso faz com que o Python entenda que estamos tentando multiplicar uma string por outra, o que não é válido. Veja que o erro gerado neste simples exemplo é o mesmo que aconteceu no nosso programa que multiplica a quantidade pelo va- lor unitário. Para corrigir este programa, precisamos transformar os va- lores que são devolvidos pela função input, para valores numéri- cos, no caso da quantidade devemos transformar o valor em um inteiro, e no input que pega o preço unitário, devemos transfor- mar para float, para isso usamos a função float que recebe uma 2-32 Linguagem de Programação V A R IÁ V EI S 2< / > string como parâmetro e a função int que também recebe uma string no caso da quantidade. 1| # Programa 4 - Custo total 2| qtd = int(input(‘Digite a quantidade: ‘)) 3| valor_unitario = float(input(‘Digite o valor unitário: ‘)) 4| total = qtd * valor_unitario 5| print(‘O valor total é: R$%2.2f’ % total) Neste código vale a pena destacar as linhas 2 e 3, veja que na linha 2 utilizamos a função int e passamos como parâmetro o resultado da função input diretamente para ela, deste modo pode- mos afirmar que o tipo da variável qtd é inteiro. Na linha 2, fizemos algo parecido, mas no lugar da função int, utilizamos a função float, neste caso o tipo da variável va- lor_unitario, será float. Agora, como o tipo da variável qtd é inteiro e o tipo da vari- ável valor_unitario é float, podemos afirmar que o tipo da vari- ável total será float, logo o erro não acontecerá mais. Por fim, na última linha temos o comando print, com o mar- cador %2.2f, que irá interpolar o valor da variável total, ao texto da frase, como mostrado abaixo na saída do programa. Digite a quantidade: 3 Digite o valor unitário: 1.89 O valor total é: R$5.67 2-33 Linguagem de Programação V A R IÁ V EI S 2< / > Agora que já sabemos fazer uma entrada de dados pelo tecla- do, vamos escrever mais um programa, que pede como entrada o valor total de uma compra em unidades monetárias, na sequência o programa deverá pedir ao usuário o número de parcelas que o valor total deverá ser dividido. Por fim, o programa terá como saída uma frase que mostra para o usuário qual será o valor de cada parcela. 1| # Programa 5 - Cálculo do valor da parcela 2| 3| total = float(input(‘Digite o total da compra: ‘)) 4| qtd_parcelas = int(input(‘Digite o núme- ro de parcelas: ‘)) 5| 6| valor_parcela = total / qtd_parcelas 7| 8| print(‘O valor de cada parcela será R$%2.2f’ %valor_parcela) Neste código na linha 3 usamos a função float para trans- formar o valor do tipo string retornado pela função input, logo a variável chamada total terá um valor do tipo float. Na linha 4 fazemos algo similar, mas desta vez transforman- do o tipo string retornado pelo método input no tipo integer, e armazenando este valor na variável qtd_parcelas. 2-34 Linguagem de Programação V A R IÁ V EI S 2< / > Logo em seguida na linha 6 fizemos o cálculo do valor da par- cela, ou seja dividimos a variável total pela quantidade de parcelas armazenado como um valor inteiro na variável qtd_parcelas. O resultado dessa divisão será armazenado na variável va- lor_parcela, que será do tipo float, pois o resultado armazenado veio de uma operação entre uma variável do tipo int e outra do tipo float. Finalmente na linha 8 mostramos a string interpolada com o valor da variável valor_parcela sendo impresso com duas ca- sas decimais conforme definido no marcador. No códigoabaixo é mostrada a saída do programa: Digite o total da compra: 30.50 Digite o número de parcelas: 3 O valor de cada parcela será R$10.17 Agora vamos fazer uma reflexão e nos perguntar, o que será que aconteceria se no número de parcelas fosse entrado pelo usu- ário o valor 0. Inspecionando o código percebemos que este valor 0 seria o denominador da divisão que acontece na linha 6, sabemos da ma- temática básica que não existe divisão por 0, veja o código abaixo onde fica demonstrado como o Python reage a esse erro: 1| Digite o total da compra: 15.90 2| Digite o número de parcelas: 0 3| Traceback (most recent call last): 4| File “/Users/teste/Desktop 2-35 Linguagem de Programação V A R IÁ V EI S 2< / > 5| /python/code/prg_5_calc_parcela.py”, 6| line 6, in <module> 7| valor_parcela = total / qtd_parcelas 8| ZeroDivisionError: float division by zero Na linha 2 entramos com o valor 0 e já na linha 03 temos o começo do erro, veja que como o código foi escrito num arquivo o interpretador do Python, mostra o caminho e o nome do arqui- vo, além de mostrar em qual linha do arquivo o erro aconteceu, isso é muito útil quando estamos tentando resolver falhas em nos- sos programas. Neste caso, o interpretador da linguagem mostra que o erro aconteceu na linha 6 do arquivo. E em seguida diz a natureza do erro, lendo a frase percebemos que aconteceu uma divisão por 0. Agora vamos forçar outro cenário de erro, vamos supor que no lugar da quantidade de parcelas o usuário digite um texto, re- flita um pouco antes de olhar a explicação, e pense no que pode acontecer neste caso. Depois disso analise o código escrito abaixo e tente entender o que aconteceu. 1| Digite o total da compra: 14.50 2| Digite o número de parcelas: duas 3| Traceback (most recent call last): 4| File “/Users/user1/Desktop/python/code/ 5| prg_5_calc_parcela.py”, line 4, in <module> 6| qtd_parcelas = int(input 2-36 Linguagem de Programação V A R IÁ V EI S 2< / > 7| (‘Digite o número de parcelas: ‘)) 8| ValueError: 9| invalid literal for int() with base 10: ‘duas’ Novamente nas linhas 1 e 2 o programa pede ao usuário para ele entrar o total da compra e na sequência o número de parcelas, neste caso o usuário digitou a string ‘duas’. Logo na linha 3 aparece o erro, veja que o interpretador do Python tentou converter a string ‘duas’ em um valor inteiro, mas neste momento aconteceu um erro e o interpretador informou que não tinha um literal válido para uma conversão em um inteiro de base 10, ou seja o interpretador Python, obviamente, não é capaz de gerar um valor inteiro partindo de uma string de texto que não representa um valor inteiro de base 10. Esses são alguns dos erros que podem aparecer durante a en- trada de dados, alguns dos possíveis erros poderiam ser resolvidos fazendo o uso de expressões de condição, este será o assunto do próximo capítulo. Mas já que tocamos no assunto de tratamento de erros, também veremos em outros capítulos posteriores o conceito de exceções. 2-37 � EXERCÍCIOS PROPOSTOS 1) O que acontece se definirmos uma variável da seguinte maneira salário do usuário = 1000.00 ? ( ) -a) Criaremos uma variável com sucesso de nome salário do usuário do tipo float com o valor 1000.00 ( ) -b) Criaremos uma variável com sucesso de nome salário do usuário do tipo int com valor 1000.00 ( ) -c) Um erro vai acontecer, mas mesmo assim uma variável do tipo float, chamada salário do usuário com o valor 1000.00 será criada. ( ) -d) Um erro de sintaxe inválida vai acontecer pois o valor 1000.00 é invalido. ( ) -e) Um erro de sintaxe inválida vai acontecer pois o nome da variável salário do usuário é invalido, pois temos espaços en- tre as palavras que definem a variável e isso é uma definição invalida para um nome de variável. 2) Ao declararmos uma variável da seguinte maneira taxa_juros = 1.0 qual será o resultado correto ? ( ) -a) Um erro de sintaxe vai acontecer pois não podemos usar o caractere _ na definição do nome da variável. ( ) -b) Um erro de sintaxe vai acontecer pois o valor literal repre- senta uma string e não poderá ser armazenado nesta variá- vel que é do tipo float. ( ) -c) A variável de nome taxa_juros, será criada com sucesso e seu tipo será int. ( ) -d) A variável de nome taxa_juros, será criada com sucesso e seu tipo será str. ( ) -e) A variável de nome taxa_juros, será criada com sucesso e seu topo será float. 2-38 Ex er cí ci os P ro po st os 3) Qual o resultado da expressão 2.0 == 2 ? ( ) -a) O resultado será False pois o lado esquerdo é um literal do tipo float e o lado direito é um literal do tipo int. ( ) -b) Um erro de sintax acontecerá pois uma variável com nome 2.0 não poderá ser definida. ( ) -c) Uma variável chamada 2.0 será definida com sucesso e o seu valor será 2, e seu tipo será int. ( ) -d) O resultado será True pois o valor literal 2.0 e o literal 2 são matematicamente iguais. ( ) -e) Nda. 4) Considere as variáveis p1 = True, p2 = False, p3 = 3 > 5, qual é o resulta- do da expressão not p1 and p3 or p2. ( ) -a) O resultado será True. ( ) -b) O resultado será False. ( ) -c) Não tem como saber pois 3 > 5 não é um valor booleano. ( ) -d) Um erro de sintaxe vai acontecer pois 3 > 5 não pode ser operando do operador or. ( ) -e) Nda. 5) Considere a variável texto = ‘Este é um curso de Python’, encontre a al- ternativa verdadeira: ( ) -a) O tipo da variável é int. ( ) -b) O valor armazenado em texto[1] é o caractere ‘E’. ( ) -c) O valor armazenado em texto[25] é o caractere ‘n’. ( ) -d) Não é possível acessar o caractere texto[0]. ( ) -e) O valor armazenado em texto[0] é o caractere ‘E’. 6) Considere a variável t1 = ‘casa’ e a variável t2 = ‘branca’ e escolha a afirmação correta: ( ) -a) A operação t1 * t2 é uma operação válida e o seu resultado é ‘t1 * t2’. 2-39 Ex er cí ci os P ro po st os ( ) -b) A operação t1 - t2 é uma operação válida e o seu resultado é ‘casa - branca’. ( ) -c) A operação t1 + t2 é uma operação válida e o seu resultado é ‘casabranca’ ( ) -d) A operação t1 + t2 não é válida, pois t1 e t2 são do tipo str ( ) -e) A operação t1 + ‘ ‘ + t2 não é válida. 7) Considere a variável v1 = ‘carro’ e a variável v2 = 10, e escolha a afirma- ção correta: ( ) -a) A operação v1 + v2 resulta num erro pois não é possível con- catenar uma variável do tipo str, com uma do tipo int. ( ) -b) A operação v1 + v2 é válida e o resultado será ‘carro10’. ( ) -c) A operação v1 + v2 é inválida e resulta num erro pois só po- demos concatenar valores do tipo int, porém v1 é do tipo int e v2 é do tipo str. ( ) -d) O resultado da operação v2 + v1 será ‘10carro’. ( ) -e) Nda. 8) Considere a variável texto = ‘Python é uma linguagem de programação’, escolha a alternativa verdadeira. ( ) -a) O valor de texto[:6] será igual a ‘Python’. ( ) -b) O valor de texto[0:6] irá resultar num erro pois o índice da variável texto igual a 0 não está definido. ( ) -c) O valor de texto[-100:] irá resultar num erro pois a string armazenada na variável possui apenas 37 caracteres. ( ) -d) O valor de texto[1:4] será ‘Pyth’. ( ) -e) O valor de texto[-1:] irá resultar num erro pois estamos pas- sando como parâmetro um índice de valor negativo. 9) Considere o programa abaixo e escolha a alternativa correta 1| # Programa 17 - Erro de interpolação 2| 3| aresta = 3 2-40 Ex er cí ci os P ro po st os 4| volume = aresta ** 3 5| 6| print(‘A aresta do cubo é %d e seu volume é %d.’ 7| %(aresta, volume)) ( ) -a) O programa dá um erro de execução pois o tipo da variável aresta é float, e o marcador de formatação é %d o que repre- senta um inteiro. ( ) -b) O programa termina com sucesso e a sua resposta será: ‘A aresta do cubo é 3 e seu volume é 27.’ ( ) -c) O programa dá um erro de execução pois não podemos in- terpolar duas variáveis em uma mesma string. ( ) -d) O programa dá um erro de execução pois o operador ** não é definido. ( ) -e) O programa termina com sucesso e a suaresposta será: ‘A aresta do cubo é 3.00 e seu volume é 27.00.’ 10) Considere o programa abaixo e escolha a alternativa correta: 1| # Programa 18 - Meses de vida 2| 3| anos_de_vida = input(‘Digite quantos anos você tem: ‘) 4| meses_de_vida = anos_de_vida * 12 5| 6| print(‘Você tem %d meses de vida.’ %(meses_de_vida)) ( ) -a) O programa executa com sucesso e no caso do valor digitado ser igual a 12 a resposta será: ‘Você tem 144 meses de vida.’ ( ) -b) Acontece um erro de execução, pois o tipo da variável anos_ de_vida é float, e o marcador %d da linha 6 só opera com variáveis do tipo int. 2-41 Ex er cí ci os P ro po st os ( ) -c) Acontece um erro pois o tipo da variável meses_de_vida é float e o marcador %d da linha 6 só opera com variáveis do tipo int. ( ) -d) O programa executa com sucesso e no caso do valor digitado ser igual a 12 a resposta será: ‘Você tem 12 meses de vida.’ ( ) -e) Acontece um erro de execução, pois o tipo de valor retor- nado pela função input é str, isso faz com que a variável meses_de_vida se torne do tipo str, desta maneira, deixará invalido o marcador %d da linha 6. D I S C I P L I N A : Linguagem de Programação UNIDADE 2: ESTRUTURAS DE CONTROLE Caro(a) Aluno(a) Seja bem-vindo(a)! Nesta unidade veremos como controlar o fluxo do programa por meio de estruturas condicionais e laços de repetição. Você verá que nem todo código de um programa sempre será executa- do e que é possível repetir um bloco de código várias vezes. Conteúdos da Unidade Estruturas de controle de fluxo, if, else, elif, definição de bloco de código aninhado, estruturas de repetição while, break, con- tinue, conceitos básicos de performance, estruturas de repeti- ção aninhadas, teste de mesa. Ótimos estudos! D I S C I P L I N A : Linguagem de Programação CAPÍTULO 3: EXPRESSÕES CONDICIONAIS 3-3 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > 3�1 Introdução às expressões condicionais No final do capítulo anterior estudamos alguns casos possí- veis de erro que poderiam acontecer, um deles era se o usuário en- trasse com um valor igual a 0 e esse valor fosse usado numa divisão então teríamos um erro que pararia o programa. É uma boa prática no desenvolvimento de programas que to- dos os possíveis erros sejam tratados de maneira a nunca chegar a derrubar o programa e além disso sempre mostrar ao usuário uma mensagem que explique quais passos ele deve fazer para que o programa possa prosseguir. Veja que para tratar esse simples cenário, onde um valor invalido foi fornecido pelo usuário, podemos usar uma simples expressão condicional implementada pelo if, como veremos logo em seguida. 3.1.1 O comando if O comando if cria uma condição que servirá como uma bar- reira que se o resultado lógico avaliado em sua condição for ver- dadeiro então o bloco de código aninhado abaixo da expressão da condição será executado, caso contrário esse bloco aninhado não será executado, e o fluxo do programa seguirá para as próxi- mas linhas Entenda como bloco aninhado o código escrito abaixo da ex- pressão de condição contando 4 espaços do comando if. Veja na sequência, de maneira genérica como é o código de uma expressão condicional em Python: 3-4 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > if <condição>: bloco verdadeiro Saindo da definição genérica mostrada acima, vamos para um exemplo concreto: 1| # Programa 6 - Checando uma senha 2| senha_secreta = ‘9871’ 3| senha_de_entrada = input(‘Usuário digite a sua senha: ‘) 4| if senha_secreta == senha_de_entrada: 5| print(‘Bem vindo usuário, senha secreta correta !!!’) Como já foi estudado anteriormente na linha 1 definimos uma variável chamada senha_secreta do tipo string com o valor ‘9871’. Na linha 3 pedimos ao usuário entrar com uma senha, este valor do tipo string será armazenado na variável senha_de_en- trada, que também é do tipo string, até agora nada de novo. Já na linha 4 temos o assunto desse capítulo que é uma expressão condicional, veja que estamos comparando se a variável senha_secreta possui o mesmo valor da variável se- nha_de_entrada, para isso usamos o operador == que testa a igualdade e caso a condição retorne um valor verdadeiro ou seja True a mensagem ‘Bem vindo usuário, senha secreta correta !!!’ será exibida no console do Python. Caso contrário se a condição da expressão retornar falso ou seja o valor False, então esta mesma mensagem não será mostra- da ao usuário. 3-5 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > Um erro muito comum quando se começa a programar em Python é muito comum esquecermos o caractere dois pontos:, no final da expressão condicional, portanto fique atento e tente se lembrar deste detalhe. Outro ponto que devemos ficar atentos é que um bloco de código é, por padrão, definido por uma endentação de 4 espaços 3.1.2 A expressão else Podemos entender que a expressão else executa o bloco de código quando a condição do if retorna o valor False, vamos olhar de maneira genérica como ficaria esta construção if <condição>: bloco verdadeiro else: bloco falso Vamos modificar o exemplo concreto utilizado anteriormen- te, agora quando o usuário errar a senha uma mensagem será exi- bida para ele informando esse fato. 1| # Programa 7 - Checando uma senha e re- tornando mensagem de erro 2| 3| senha_secreta = ‘9871’ 4| senha_de_entrada = input(‘Usuário digite a sua senha: ‘) 3-6 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > 5| 6| if senha_secreta == senha_de_entrada: 7| print(‘Bem vindo usuário, senha secreta correta !!!’) 8| else: 9| print(‘Senha inválida !!!’) Na linha 3 definimos a variável chamada senha_secreta, e na sequência, pedimos ao usuário que ele entre com o valor de uma senha. Como anteriormente na linha 6 temos a condição que veri- fica se o valor da variável senha_secreta for igual ao valor da va- riável senha_de_entrada, então o valor da condição será igual a True, neste caso o bloco de código da linha 7 será executado. A diferença deste código e do anterior é a expressão else, ou seja neste caso quando a condição senha_secreta == senha_ de_entrada retornar o valor False, então o bloco de código da linha 9 será executado. Vamos agora executar o código descrito acima e ver o que acontece nos diferentes cenários cobertos, no primeiro caso, va- mos acertar a senha, para isso vamos digitar como entrada do pro- grama o valor ‘9871’, sem as aspas. 1| Usuário digite a sua senha: 9871 2| Bem vindo usuário, senha secreta correta !!! Veja que nesse caso a mensagem que aparece na linha 2 é de que o usuário acertou a senha, como foi esperado pois a string ‘9871’ é igual ao valor da variável senha_secreta. 3-7 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > Agora vamos errar a senha propositalmente, para isso, basta digitar qualquer valor que não seja ‘9871’, vamos escolher o va- lor ‘2231’ 1| Usuário digite a sua senha: 2231 2| Senha inválida !!! Como tínhamos previsto, neste caso o bloco de código que foi executado é o que está aninhado com 4 espaços logo abaixo da expressão else. Uma dica para os iniciantes na programação Python é pensar na expressão condicional em português da seguinte forma: Se <condição> então <bloco verdadeiro> Senão <bloco falso> Até agora vimos um simples programa para mostrar como as expressões condicionais funcionam, vamos agora estudar a seguin- te situação, suponha que numa empresa sempre no final do ano os funcionários recebem um bônus que é calculado com base nos anos que o funcionário tem de casa, seguindo as regras: ● Se o funcionário possuir tempo de casa inferior a 4 anos, então seu bônus será de 1% sobre o seu salário atual. ● Se o funcionário possuir tempo de casa igual a 4 anos, en- tão o seu bônus será de 5% sobre o seu salário atual ● Se o funcionáriopossuir tempo de casa igual a 5 anos, en- tão o seu bônus será de 10% sobre o seu salário atual ● Se o funcionário possuir tempo de casa igual a 6 anos, en- tão o seu bônus será de 15% sobre o seu salário atual. 3-8 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > ● Se o funcionário possuir tempo de casa igual a 7 anos ou mais, então o seu bônus será de 25% sobre o seu salá- rio atual. Para melhor esclarecer as regras descritas anteriormente, considere o exemplo onde um funcionário possui 6 anos de casa, e recebe um salário de R$1200,00, neste caso, como ele possui 6 anos de casa, seu bônus será de 15% sobre o salário de R$1200,00 ou seja ele receberá de bônus o valor de R$180,00. Um outro exemplo seria um funcionário com 10 anos de casa que recebe R$5000,00, neste caso por ter mais do que 7 anos de casa ele receberia um bônus de 25% sobre o salário, que neste caso é de R$5000,00 ou seja ele receberia o valor de R$1250,00. Um programa escrito em Python que resolve este problema está escrito abaixo: 1| # Programa 8 - Complicando o cálculo do bônus de fim de ano 2| 3| tempo_de_casa = int(input(‘Digite o tem- po de casa em anos: ‘)) 4| salario_base = float(input(‘Digite o sa- lário atual: ‘)) 5| 6| if tempo_de_casa < 4: 7| porcentagem_bonus = 1 8| else: 9| if tempo_de_casa == 4: 3-9 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > 10| porcentagem_bonus = 5 11| else: 12| if tempo_de_casa == 5: 13| porcentagem_bonus = 10 14| else: 15| if tempo_de_casa == 6: 16| porcentagem_bonus = 15 17| else: 18| if tempo_de_casa >= 7: 19| porcentagem_bonus = 25 20| 21| valor_do_bonus = (salario_base * porcen- tagem_bonus) / 100 22| print(‘Parabéns você ganhou R$%2.2f de bônus’ %(valor_do_bonus)) Veja que agora temos um programa um pouco mais comple- xo, o objetivo deste exemplo será mostrar que podemos aninhar expressões condicionais dentro de outras expressões condicionais, o que às vezes pode elevar a complexidade do programa assim como seu entendimento, e dificultar a sua manutenção em caso de algum problema Analisando este programa vemos que nas linhas 3 e 4 esta- mos fazendo a entrada dos dados necessários para a solução do problema proposto, veja que armazenamos na variável tempo_ de_casa o valor em anos que o funcionário trabalha na empresa, note que o tipo desta variável será int. 3-10 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > Na sequência pedimos ao usuário o valor do salário do fun- cionário, este valor do tipo float será armazenado na variável sa- lario_base, e será desta variável que obteremos o valor do bônus aplicando a porcentagem que será escolhida dependendo do tem- po de casa do funcionário. A primeira condição checamos na linha 4 é se o funcionário possui um tempo de casa menor que 4 anos, ou seja os possíveis valores que vão cair neste caso são 0, 1, 2, 3. Neste caso o valor do bônus será de 1%, veja que na linha 7 armazenamos o valor da porcentagem do bônus na variável chamada porcentagem_bo- nus, mais adiante essa variável vai ser utilizada na linha 21 para o cálculo do valor em Reais que o funcionário vai receber. Caso contrário, se o valor da variável tempo_de_casa for maior que 4 então cairemos no bloco de código aninhado abaixo da expressão else da linha 8, ou seja este bloco de código começa na linha 9, com a expressão condicional que verifica se a variável tem- po_de_casa é igual a 4, caso essa afirmação seja verdadeira, en- tão o valor 5 será armazenado na variável porcentagem_bonus, para ser usado mais adiante no cálculo final do valor do bônus. Se a variável tempo_de_casa, não possuir o valor 4, então o fluxo do programa, irá parar na linha 11, veja que nessa linha temos uma nova expressão else, neste caso o bloco de código que será executado está logo abaixo na linha 12 e já começa com a ex- pressão condicional que verifica se a variável tempo_de_casa é igual a 5, se essa condição for verdadeira ou seja retornar o valor True, então o bloco de código da linha 13 será executado e o valor 10 será armazenado na variável porcentagem_bonus, para ser utilizado mais a frente. 3-11 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > Mas no caso do valor da variável tempo_de_casa, não ser igual a 5 então a próxima linha a ser executada é a linha 15, ou seja a primeira linha do bloco de código da expressão else da linha 14. Novamente temos uma expressão condicional que vai ava- liar se o valor da variável tempo_de_casa é igual a 6 e se isso for verdade, então o bloco de código da linha 16 será executado, e o valor 15 será armazenado na variável porcentagem_bonus e será usado posteriormente no cálculo do valor do bônus que é o objetivo do nosso programa. Ainda temos o caso do valor da variável tempo_de_casa não ser igual a 6 ou seja a condição da linha 15 vai retornar o valor lógico False, neste caso o fluxo do programa vai para a linha 18, pois temos uma expressão else na linha 17. Agora é a vez da expressão condicional que verifica se o va- lor da variável tempo_de_casa, é maior ou igual a 7, se isso for verdade, ou seja se a condição retornar o valor lógico True, então o bloco de código da linha 19 será executado, e o valor 25 vai ser armazenado na variável porcentagem_bonus. Por fim temos a linha 21 que vai fazer o cálculo do valor do bônus, utilizando como porcentagem o valor armazenado na variá- vel valor_do_bonus, que foi escolhido pela sequência de expres- sões condicionais definidas nas linhas de 9 até 19. E na linha 22, uma mensagem será exibida ao usuário informado a ele qual será o valor do bônus que o funcionário deverá receber no final do ano. Neste exemplo podemos notar que ao aninhar expressões condicionais utilizando o else, vemos que com 4 expressões o có- digo já começa a ficar difícil de ler, imagine só, se mais 2 expressões fossem necessárias para resolver o nosso problema teríamos mais blocos de código aninhados, ou seja aumentamos a complexidade e consequentemente a dificuldade da manutenção deste código. 3-12 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > Outro ponto interessante para citar neste exemplo é o fato de que nem todo o código será executado sempre, ou seja dependendo dos valores de entrada do programa, algumas linhas serão execu- tadas e outras não. Sabendo que nem todo código pode ser executado, mesmo nesse simples exemplo, como faríamos para garantir que todas as condições funcionam da maneira que desejamos? Uma possível resposta para esta pergunta é nós mesmos tes- tarmos o código para ver se tudo está correto. Veja que neste pequeno programa, precisamos montar os seguintes ce- nários de teste: 1. Vamos usar um valor inteiro menor que 4 para que a condição da linha 6 seja verdadeira, ou seja retorne o valor True, vamos escolher o valor 1 para a variá- vel tempo_de_casa. 2. Precisamos testar agora o bloco de código da linha 10, ou seja, temos que colocar o valor 4 na variável tem- po_de_casa, com isso executaremos o bloco de código desta linha. 3. Agora queremos um cenário para que a condição da li- nha 9 seja verdadeira, para isso devemos escolher um valor para a variável tempo_de_casa, que torne essa expressão condicional verdadeira, neste caso o único va- lor possível é o inteiro 5. 4. Chegou a vez de testarmos a condição da linha 15, neste caso devemos escolher o valor 6 para a variável tem- po_de_casa, fazendo isto teremos certeza de que o bloco de código da linha 16 será executado. 3-13 Linguagem de Programação E X P R ES S Õ ES C O N D IC IO N A IS 3< / > 5. Mais uma vez, só que agora precisamos executar o bloco de código da linha 19 para isso precisamos escolher um valor que seja igual a 7 ou maior que 7 para a variável tempo_de_casa, vamos escolher o valor 11. Pronto, com isso temos todos os possíveis
Compartilhar