Curso de Python
Curso de Python
de conteúdos
Introdução 1.1
Você deveria aprender Python 1.2
Começando com Python 1.3
Desvios condicionais, fazendo seu programa tomar decisões 1.4
Valores None, Strings e Listas 1.5
Listas 1.6
Laços de Repetição - I 1.7
Laços de Repetição - II 1.8
Dicionários 1.9
Modularização de código com Funções 1.10
Expressões Lambda 1.11
Conclusão 1.12
Resolução dos exercícios 1.13
2
Introdução
Prefácio
O mundo está cada vez mais conectado, a necessidade de desenvolvermos o pensamento
computacional e a capacidade de solucionar problemas por meio de programação é
crescente.
Sobre o autor
Gabriel Schade Cardoso é desenvolvedor de software na plataforma .NET desde 2008,
além disso, atua como professor no curso de ciência da computação e sistemas para
internet.
Linkedin
Github
Blog pessoal
3
Introdução
Todos os capítulos possuem uma lista de exercícios para fixação, é bastante recomendável
que você busque materiais externos para complementar seu aprendizado.
Além disso, é fortemente sugerido que os exercícios sejam feitos imediatamente após a
leitura do capítulo, para garantir a prática junto com a teoria.
Espero que você aproveite essa jornada pelo mundo da programação utilizando uma das
linguagens mais simples disponíveis!
4
Você deveria aprender Python
Se você quer começar a programar, qual a melhor linguagem? - Como sempre, depende.
Caso você tenha um entendimento básico (bem básico) de inglês e deseja iniciar com uma
linguagem de mercado, eu sugiro fortemente a linguagem Python. Por isso, vamos utilizá-la
neste livro.
Mas como eu disse antes, nem tudo é preto no branco, dependendo da sua experiência e
noções do idioma inglês, eu sugiro dar uma olhadinha na linguagem Portugol.
Esta linguagem é mantida pela universidade UNIVALI e tem o objetivo de facilitar a iniciação
em programação utilizando termos em português e uma sintaxe simplificada.
Mas novamente, vale a pena frisar que, apesar do ótimo cunho educacional, Portugol não é
uma linguagem de mercado, portanto, vamos utilizar Python.
Python é uma linguagem sensacional, de verdade. E podemos fazer muitas coisas com
ela, muitas mesmo, chega a ser assustador.
Eu costumo dizer que tanto C# quanto F# são linguagens de propósito geral, ou seja,
podem ser aplicadas para vários cenários, mas nenhuma delas é tão versátil quanto
Python.
5
Você deveria aprender Python
Como se isso não fosse o bastante, Python ainda é uma linguagem com uma sintaxe super
simples. Fazendo com que o código se pareça muito com uma versão simplificada do
inglês.
Neste primeiro capítulo vamos chegar apenas até o começo do começo, o maior hit da
computação, o grande: "Hello World"!
print("Hello World")
E é isso! Não há nada omitido no código, não há declaração de nenhum nome complicado
como namespace, importação de pacote, função main , nada.
Outro ponto bem legal sobre o Python é que ele utiliza uma sintaxe baseada em
espaçamento, algo que o F# reaproveitou e também fez.
Isso faz a linguagem ser consideravelmente mais enxuta, porque não é necessário pontos e
vírgulas, chaves e todo o ruído normalmente presente nos códigos que os programadores
escrevem.
Você pode acessar o site: https://repl.it/ e selecionar a linguagem Python, com isso você já
poderá programar em Python sem precisar instalar nada!
Caso queria uma ferramenta mais completa, você pode utilizar a documentação de como
instalar a ferramenta e a linguagem Python neste link.
6
Começando com Python
É importante ressaltar que para este livro estou utilizando a versão 3.6 do Python e o Visual
Studio 2017 como IDE, você poderá escolher um ambiente diferente, mas recomendo
utilizar o mesmo para evitar possíveis conflitos.
V vamos começar do começo. Bem do começo mesmo. Veremos variáveis, tipos e entrada
e saída (IO).
Declarando Variáveis
A coisa mais básica que podemos encontrar em uma linguagem de programação são as
variáveis. Mas o que são variáveis?
De forma simples, variáveis são os dados manipulados pelo seu programa. Estes dados
são armazenados de modo temporário na memória de seu computador.
Antigamente era necessário ter muito mais cuidado ao utilizar variáveis demais, por conta
da limitação da memória dos computadores, hoje em dia isso ainda precisa ser levado em
consideração, mas temos muito mais liberdade do que antes.
O que você faz quando precisa dizer para alguém onde você mora?
A memória do computador faz a mesma coisa, cada espaço possível tem um endereço
único, assim seu computador saberá onde encontrar a informação.
Se você não for bem estranho, provavelmente usa o sistema de coordenadas muito pouco,
certo? - Fazemos isso porque ele não é intuitivo para a maioria das pessoas, assim como
os endereços de memória em seu computador.
7
Começando com Python
Resolvemos este problema criando nomes para os países, cidades e ruas. Nessa mesma
lógica, não utilizamos o sistema de endereçamento de memória do computador, ele é
complicado demais e nem temos total controle de onde as coisas são armazenadas (e isso
é ótimo).
Peraí, tipo? -É, tipo, mas por enquanto você não precisa se preocupar com isso.
Como criar uma variável em Python? -É muito simples, basta dar um nome à ela e atribuir
um valor utilizando o operador = , veja:
valor = 42
E é isso.
O interessante é que você pode realizar operações com estes valores também, veja:
valor = 42
resultado = 42 + 10
Assim como em muitas outras linguagens, você pode utilizar uma variável como um valor.
Ou seja, qualquer lugar em que você colocaria um valor, você pode substituir por uma
variável.
valor = 42
resultado = valor + 10
Viram só, apesar do valor armazenado na varíavel resultado ser o mesmo do outro
exemplo (52), agora estamos utilizando a variável para calcular.
Você pode exibir o resultado armazenado nas variáveis com a função print , veja:
valor = 42
resultado = valor + 10
print(resultado)
8
Começando com Python
Vamos praticar
Faça um algoritmo para resolver a equação z = x + y - 4, armazenando o resultado na
variável z. Considere que os valores iniciais de x e y são, respectivamente, 10 e 5.
Depois disso exiba o resultado.
Atenção
Conseguiu responder? -Eu espero que sim! Caso não tenha dado certo, você pode conferir
as respostas no link acima.
Agora que você já realizou alguns pequenos testes, vamos falar dos tipos.
Lembra que falamos que uma variável é composta por: identificador, dado e tipo? Pois é.
Acredito que tenha ficado muito claro a questão do identificador e do valor, mas talvez o tipo
ainda esteja confuso, mas calma, eu explico.
O tipo é o que define a característica do dado que a variável armazena, em Python não
precisamos dizer explícitamente isso em nenhum momento, mas podemos deduzir.
Nos exercícios fizemos algumas operações matemáticas, mas nem todos os dados são
números. As vezes precisamos armazenar valores de outros tipos, vamos conhecê-los:
Uma coisa muito interessante sobre os tipos é que, após conhecermos eles, podemos
simplesmente trabalhar como fizemos com os números antes. Você talvez nem tenha
reparado, mas no segundo exercício utilizamos tanto números inteiros como floats.
9
Começando com Python
Você pode utilizar qualquer um deles e seu programa irá entender que se trata de uma
string.
print("Olá Python!")
Particularmente eu prefiro utilizar a sintaxe com aspas duplas, mas esteja livre para usar a
que mais lhe agradar.
Vamos juntos fazer um programa que solicite o nome do usuário e depois exiba-o no
console! Para solicitar uma informação ao usuário utilize a função input , conforme código:
Legal né? - Note que você pode utilizar a função input para obter dados de qualquer tipo,
não só para textos, mas nos outros casos será preciso transformar o tipo.
Teremos um capítulo complementar sobre o tipo string, ele possui diversas características
específicas. Então por enquanto vamos para o próximo tipo: O tipo lógico!
Variáveis do tipo lógico ou boolean são utilizadas para definir verdades (True) e mentiras
(False). Este tipo de variável só consegue armazenar estes dois valores.
Veja um exemplo:
verdade = True
mentira = False
Geralmente nas outras linguagens os valores deste tipo são escritos em letras minúsculas,
mas em Python estes valores começam com letra maiúscula, mas as diferenças acabam aí.
Assim como os valores numéricos, também é possível realizar operações com valores
lógicos. Neste caso utilizamos os operadores: não ( not ), e ( and ) e ou ( or ).
Hoje deu sol pela manhã -> considere esta frase como verdade
Hoje choveu pela tarde -> considere esta frase como mentira
10
Começando com Python
sol_pela_manha = True
chuva_pela_tarde = False
Hoje não deu sol pela manhã -> se a primeira afirmação era verdade, esta afirmação é
mentira
Hoje não choveu pela tarde -> se a segunda afirmação era mentira, esta afirmação é
verdade
Perceberam algo?
O operador de negação inverte o valor de um valor lógico! O que antes era verdade agora é
mentira e vice-versa.
Veja no código:
sol_pela_manha = True
chuva_pela_tarde = False
O segundo operador é o operador e. Este operador relaciona dois valores diferentes para
produzir um novo. Neste caso, para o resultado de uma operação e ser verdade, os dois
valores relacionados precisam ser verdadeiros.
Hoje deu sol pela manhã e choveu pela tarde -> será uma mentira, pois definimos que
não houve chuva pela tarde.
Hoje deu sol pela manhã e não choveu pela tarde -> será verdade, pois ao negarmos o
valor da chuva, os dois valores relacionados retornarão verdadeiro.
O operador ou funciona de forma bastante similar ao e, mas nesse caso o valor produzido
será verdadeiro sempre que um dos valores seja verdadeiro. Este caso é o que funciona
pior comparado à nossa linguagem, mas acho que ainda ajuda a entender:
Hoje deu sol pela manhã ou choveu pela tarde -> se uma das afirmações for
verdadeira, a frase é uma verdade.
11
Começando com Python
Veja no código:
Para ajudar a entender estas operações temos as famosas "Tabelas Verdade", veja:
Negação ( not )
Valor Resultado
True False
False True
E ( and )
Primeiro Valor Segundo Valor Resultado
Ou ( or )
Primeiro Valor Segundo Valor Resultado
True True True
Além destes operadores, os tipos lógicos também podem ser produzidos ao compararmos
valores de qualquer tipo, por exemplo: 5 > 3 (cinco é maior que três?), esta expressão
retorna um valor lógico!
12
Começando com Python
Operador Descrição
== (igual) Retorna True caso os dois valores são iguais
!=
Retorna True caso os dois valores sejam diferentes
(diferente)
Perceba que para compararmos os valores utilizamos dois iguais == , isso porque quando
utilizamos somente um igual estamos atribuindo um valor. Veja:
x = 5
y = 10
Vamos praticar
1. Faça um algoritmo que solicite um número ao usuário
2. Faça um algoritmo que solicite o nome do usuário e depois escreva o nome da pessoa
no console.
3. Faça um algoritmo que pergunte ao usuário quantos anos ele tem, depois disso,
escreva True no console, caso ele já tenha alcançado a maioridade (18 anos), caso
contrário escreva False .
4. Faça um algoritmo que solicite um número ao usuário, depois disso, escreva True no
console, caso o número tenha dois dígitos (Esteja entre 10 e 99), caso contrário
escreva False .
13
Começando com Python
Atenção
14
Desvios condicionais, fazendo seu programa tomar decisões
Criaremos um desvio condicional, ou seja, vamos fazer com que o programa siga por um
caminho ou outro de acordo com uma condição.
Assim como quase tudo que venho falando por aqui, a sintaxe para criar um desvio
condicional em Python é bastante simples.
A primeira coisa que precisamos entender é: quando falamos de uma a condição, significa
que precisamos saber se algo é verdade ou mentira, ou seja, precisamos utilizar um tipo
lógico.
A ideia por trás dos desvios condicionais é utilizada o tempo todo em nossas conversas do
dia-a-dia, veja este exemplo:
Veja o raciocínio por trás! Precisamos checar se o mercado tem leite em estoque, se ele
tiver vamos comprá-lo, mas caso não tenha, vamos comprar água.
Como Python utiliza o inglês como idioma padrão a condição se é traduzida para o
comando if , veja:
leite_em_estoque = True
if leite_em_estoque:
print("Comprei leite")
else:
print("Comprei água")
Execute este algoritmo, depois altere o valor da variável para False e execute-o
novamente!
Você precisa utilizar o comando else para o caso negativo, ele seria o equivalente à um
"senão", ou seja: se condição entao faça x senao faça y.
15
Desvios condicionais, fazendo seu programa tomar decisões
Perceba também que após a condição é necessário colocar os dois pontos, isso é
necessário para a sintaxe do Python.
Crie uma variável numérica para representar uma nota de uma prova, depois disso
exiba a mensagem "Aprovado" caso a nota seja maior ou igual à 7, caso contrário
exiba a mensagem "Reprovado".
nota = 5
if nota >= 7:
print("Aprovado")
else:
print("Reprovado")
Neste caso você pode optar por duas abordagens distintas: salvar o resultado da
comparação em uma variável lógica e comparar ela ou utilizar a expressão diretamente no
comando if .
Também acontece de precisarmos tratar mais de dois casos, ou seja, há situações em que
um se e um senao não são suficientes para atender todas as condições, veja este exemplo:
Um aluno que tira acima de 7 já está aprovado, se tirar 7 ou 6 ele irá para recuperação e
abaixo disso estará reprovado. Como fazer?
nota = 6
if nota > 7:
print ("Aprovado")
else:
if nota == 7 or nota == 6:
print("Recuperacao")
else:
print ("Reprovado")
Você pode colocar vários comandos if e else aninhados, ou seja, um dentro do outro.
Este código funcionará sem problemas, mas isso não significa que esta é a melhor forma de
fazer isso.
16
Desvios condicionais, fazendo seu programa tomar decisões
Para casos onde é necessário uma expressão: senão se, utilize o comando elif . Este
comando é uma mescla dos dois anteriores. Ele funciona como um if , mas só será
testado caso o if anterior ter resultado em False , veja:
if nota > 7:
print ("Aprovado")
else:
print ("Reprovado")
Valores confiáveis
Outro conceito interessante no Python é a questão dos Truthy values, este conceito define
quando os valores são confiáveis, ou verdadeiros para uso. Por exemplo, no caso de um
número, qualquer valor que seja diferente de zero é um valor confiável (incluindo números
negativos).
O mesmo se aplica para textos (strings), qualquer texto diferente de vazio é considerado
como confiável, ou seja, apenas o valor "" não é.
Esta funcionalidade permite que a variável seja avaliada diretamente, sem precisarmos
fazer a comparação, veja o exemplo com um valor inteiro:
valor = 4
if valor != 0:
print("Valor não é zero")
if valor:
print("Valor não é zero")
Os dois códigos irão fazer a mesma coisa, mas a segunda forma é ainda mais simples! O
mesmo serve para as strings:
17
Desvios condicionais, fazendo seu programa tomar decisões
texto = "teste"
if texto != "":
print("Texto não está vazio")
if texto:
print("Texto não está vazio")
nota1 = 7
nota2 = 10
deu_sol = True
if not deu_sol:
print("Choveu")
Esta outra forma é conhecida como condição ternária. Ela é utilizada principalmente para
condições curtas e permite uma sintaxe mais ágil, geralmente de uma única linha.
A ordem das coisas muda um pouco, mas ainda se parece bastante com linguagem natural.
Veja esta frase:
nota = 6
if nota >= 7:
print("Aprovado")
else:
print("Reprovado")
Agora veja como esta mesma operação fica ao utilizarmos uma condição ternária
nota = 6
print( "Aprovado" if nota >= 7 else "Reprovado" z )
18
Desvios condicionais, fazendo seu programa tomar decisões
A ordem das palavras muda um pouco, mas não se assuste, vamos com calma que logo
você se acostuma.
Vamos Praticar
1. Faça um algoritmo que solicite 3 notas para o usuário, calcule a média e indique se o
aluno foi aprovado ou reprovado (nota precisar ser maior ou igual à sete para o aluno
ser aprovado).
2. Faça um algoritmo que solicite o ano que o usuário nasceu, depois disso, faça o
programa descrever se o usuário fará ou já fez 18 anos neste ano.
3. Faça um programa que solicite ao usuário sua idade, depois disso, exiba a
classificação etária de acordo com as faixas de valores:
Atenção
19
Valores None, Strings e Listas
Valores None são utilizados para descrever variáveis que foram criadas, mas que não
possuem nenhum valor associado à elas. Espera, como assim?
Eu explico.
Para utilizar uma variável, você precisa declará-la antes, certo? Vamos fazer um teste!
Execute o código abaixo:
print(teste)
Este código, por mais simples e inofensivo que possa parecer gera um erro em sua
aplicação.
Este erro ocorre porque a variável teste não foi criada antes, então ocorre o que
chamamos de NameError .
Mas e se não quisermos que este erro ocorra, mas ao mesmo tempo também não
queremos alocar memória para a variável teste , como fazer? - Use o None !
teste = None
print(teste)
Problema resolvido!
Outro ponto importante é que os desvios condicionais sempre resultarão em False quando
realizado com uma variável que contenha o valor None :
teste = None
if teste:
print(teste) # -> não será executado
20
Valores None, Strings e Listas
Este tipo permite uma série de operações diferentes. Podemos verificar se o texto contém
somente números, colocar a primeira letra maiúscula, substituir uma letra no texto e muitas
outras coisas.
Todas estas operações são chamadas de funções. Este é um conceito bastante poderoso
nas linguagens de programação.
Por definição, uma função é um comportamento que pertence à algo, enquanto uma
variável é uma característica de algo.
Como assim? - Imagine um carro. Algumas características de seu carro são: quantidade de
portas, cor, marca, ano e assim por diante. Todas estas características podem ser
transcritas para um programa na forma de variáveis.
Mas o seu carro também liga, acelera e freia. Todas estas coisas são comportamentos, ou
seja, são ações do carro. As ações são traduzidas para um programa através de funções.
Vamos fazer o primeiro exemplo juntos, vamos transformar a primeira letra de uma string
em maiúsculo, faremos isso através da função capitalize :
nome = "gabriel"
nome_maiusculo = nome.capitalize()
print(nome_maiusculo) # -> Gabriel
Note que quando executamos uma função é necessário utilizar () , isso ocorre porque
existem casos ontem precisamos informar valores para realizar uma ação, para substituir
uma letra com a função replace , por exemplo.
Neste caso precisamos informar dois valores diferentes: o primeiro indica a letra que será
substituída e o segundo indica a letra que a substituirá, veja:
nome = "gabriel"
nome_com_letra_alterada = nome.replace('e','a')
print(nome_com_letra_alterada) # -> gabrial
Estes valores que são passados para uma função são chamados de parâmetros.
Outra função muito útil na strings é a função format , ela permite, como o nome sugere,
formatar textos.
21
Valores None, Strings e Listas
Então eu posso colocar um texto em itálico? - Não, nós não estamos falando deste tipo de
formatação.
Neste contexto a função format permite que você misture um texto livre com variáveis ou
valores, veja um exemplo!
Ok, mas isso ficou confuso demais! - Calma, não é nada demais.
O que a função format faz é substituir no texto a formatação "{N}" pelo parâmetro N.
Onde N é a ordem dos parâmetros, começando por zero (0). Veja outro exemplo:
Viu só? O primeiro parâmetro entrou no lugar de "{0}" , o segundo no lugar de "{1}" e
assim por diante!
Como pode ser visto no código, todas as ocorrências desta formatação são substituídas
pelo parâmetro!
Na verdade, existe uma segunda forma para misturarmos texto livre com variáveis, ela se
chama interpolação de strings.
Eu considero esta sintaxe mais simples de entender. Para fazermos uma interpolação de
strings precisamos colocar a letra "f" antes da string.
Com essa notação, a sintaxe não é mais baseada em posição de parâmetro, basta
colocarmos direto o nome da variável entre chaves.
22
Valores None, Strings e Listas
Vamos agora para a última função de strings que vou mostrar aqui, ela se chama split !
Esta função é muito útil e bastante popular. Neste caso, escolhemos um caractere para
quebrar o texto em partes diferentes. Por exemplo, imagine uma variável com o seguinte
valor: "prato,garfo,copo" .
Esta variável contém o nome de alguns itens de cozinha, mas e se precisássemos separá-
los? -Simples, utilize a função split separando os valores pela vírgula!
itens_cozinha = "prato,garfo,copo"
print(itens_cozinha.split(",")) # -> ["prato", "garfo", "copo"]
Quando utilizamos a função split dividimos o texto em vários pedaços diferentes, afinal,
agora temos três itens ao invés de um texto.
Para nossa sorte há um tipo especial chamado lista. Este tipo funciona como uma coleção
de valores, você utiliza apenas um identificador/nome para acessar vários valores
diferentes.
itens = itens_cozinha.split(",")
Ok, mas agora como eu faço para acessar os valores individuais? -Simples, utilizamos um
índice.
Não se preocupe, é bem simples, afinal você já trabalhou com índices na função format ,
isso mesmo, índices são números sequenciais que no caso do Python começam com zero
(0).
itens = itens_cozinha.split(",")
print(itens[0]) # -> prato
print(itens[1]) # -> garfo
print(itens[2]) # -> copo
Sempre temos que tomar cuidado ao acessar um índice, pois quando acessamos índices
além dos limites da lista é gerado um erro!
23
Valores None, Strings e Listas
Tenha em mente que sempre o maior índice da lista vai ser igual à seu tamanho -1, no
nosso exemplo temos três itens diferentes, portanto o último índice válido é 2.
Vamos Praticar!
1. Faça um programa que solicite o nome do usuário e depois disso faça uma saudação
no formato: "Olá {nome digitado pelo usuário}"
2. Faça um programa que solicite uma mensagem qualquer para o usuário e exiba esta
mensagem com todas as letras em maiúsculo.
4. Faça um programa que solicite o nome completo do usuário e exiba somente o seu
segundo nome/primeiro sobrenome.
Atenção
Alguns exercícios utilizam funções que não foram mostradas neste post, você pode
buscá-las através da internet, documentação do Python ou simplesmente digite a string
no Visual Studio e pressione ctrl + espaço (ele mostrará as funções disponíveis).
24
Listas
Você não precisa criar uma variável para cada item da lista! Como vimos no capítulo
passado, você pode manipular múltiplos valores sob uma única variável. Estas variáveis se
chamam Listas!
Assim como os exemplos descritos anteriormente, todo tipo de informação que precisa ser
agrupada em algum tipo de conjunto utiliza este recurso, um exemplo disso, foi a função
split que vimos no capítulo anterior.
Vamos começar vendo como criar uma lista vazia, ou seja, uma varíavel que se identifique
com o tipo lista, mesmo não contendo nada dentro de si, assim como muitas outras coisas,
é muito fácil definir uma lista em Python, basta declarar o nome da variável e utilizar
colchetes vazios, veja:
lista_de_compras = []
Simples assim! Além disso, você também pode criar a lista já incluindo alguns itens nela!
Basta separar cada item da lista por vírgula!
Perceba que cada item da lista é inicializado individualmente e separados por vírgula. Você
lembra como acessamos cada item da lista? -Através de seu índice!
É importante lembrar que o índice sempre começa no zero, tentar obter o primeiro elemento
utilizando o índice 1 é um erro bem comum em iniciantes, mas com o tempo você se
acostuma.
Um ponto interessante no Python é que você também pode acessar a lista de trás para
frente, mas agora o índice começa do -1:
25
Listas
print(lista_de_compras[-1])
print(lista_de_compras[-2])
print(lista_de_compras[-3])
print(lista_de_compras[-4])
Você pode alterar o valor de um item em uma lista tão fácil quanto obtê-lo, basta utilizar o
índice e realizar a alteração como uma variável normal.
O código altera o item "Leite" para "Suco de Laranja", funcionando da mesma forma que
uma variável comum.
Até agora apenas alteramos o valor de itens já existentes, mas se precisarmos adicionar um
novo item, como fazemos?
O que ocorre se tentarmos acessar a posição após o término da lista? -Em nosso caso, a
posição 4. Veja:
lista_de_compras[4] = "Café"
Este código não irá funcionar, pois esta atribuição deve ser utilizada apenas para alterar o
valor de itens já existentes!
Para incluir um novo item é necessário utilizar a função append e informando o item que
será adicionado na lista, conforme exemplo.
lista_de_compras.append("Café")
26
Listas
Agora sim!
Ao utilizar o append , adicionamos um item ao fim da lista, ou seja, ele será o último
elemento. Além do append existem diversas outras funções e recursos para trabalharmos
com listas. Um dos recursos disponíveis é a palavra reservada in .
Podemos utilizar este comando para checar se um item está na lista, basta utilizar a
seguinte sintaxe: item in lista , isso irá retornar um valor lógico True ou False ,
dependendo se a lista contém ou não o item informado.
if "Café" in lista_de_compras:
print("Preciso comprar café")
Outra tarefa bem comum é a necessidade de contar quantos itens uma determinada lista
possui, para fazer isso utilizamos a função len embutida na linguagem.
A função len é uma abreviação para length, palavra em inglês para tamanho. Esta função
deve receber uma lista por parâmetro e ela retornará um inteiro com a quantidade de
elementos.
Perceba que a quantidade de elementos não é a mesma coisa que a posição máxima do
índice. Em nosso exemplo, a lista contém cinco itens, portanto temos como índices válidos
0 até 4.
Já vimos como adicionar itens em uma lista, como verificar se um item está contido nela e
até verificar a quantidade de itens, mas ainda não vimos como remover um item da lista.
Algum palpite?
lista_de_compras[2] = None
O raciocínio até que faz um pouco de sentido, se eu digo que não há nada na posição 2,
então este item não deve existir, certo? -Errado.
Ao fazer a operação acima, você irá dizer que o item na posição 2 não contém nada e não
que não há item na posição 2. Percebe a diferença sutíl?
27
Listas
No primeiro caso você diz que a posição 2 existe, mas não há nada nela, enquanto no
segundo caso, você remove ela da lista.
Ok, mas como fazemos para remover ela da lista? Da mesma forma que temos uma
abreviação para lenght também há uma abreviação para delete. Este comando chama-se
del .
del lista_de_compras[3]
Simples assim.
Agora é importante você notar que, a posição 3 não deixará de existir. O que acontece de
fato, é que todos os itens que estavam em uma posição maior que a do item excluído são
deslocados uma posição para a esquerda.
Ou seja, tínhamos o café na posição 4 e agora ele está na posição 3, fazendo com que a
posição 4 deixe de existir.
Vamos Praticar
1. Faça um programa que inicialize uma lista com o nome das pessoas da sua família.
2. Faça um programa que inicialize uma lista vazia e solicite ao usuário 3 nomes de
cidades, um por vez, cada vez que o usuário digitar um nome, o programa deve incluir
este nome na lista de cidades.
3. Faça um programa que inicialize uma lista com vários números diferentes, depois
disso, solicite ao usuário um número, verifique se o número está ou não na lista e exiba
uma mensagem notificando o usuário do resultado.
4. Faça um programa que inicialize uma lista vazia e a preencha com 5 nomes diferentes
digitados pelo usuário, depois disso solicite um número de 0 até 4 e remova o elemento
desta posição.
Atenção
28
Listas
29
Laços de Repetição - I
No capítulo anterior foi explicado o funcionamento das listas então continuaremos usando
listas aqui.
través de seu índice! Vamos fazer um exemplo criando uma lista de dez números, veja:
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print (numeros[0])
print (numeros[1])
print (numeros[2])
print (numeros[3])
print (numeros[4])
print (numeros[5])
print (numeros[6])
print (numeros[7])
print (numeros[8])
print (numeros[9])
Perceba que esta tarefa é bastante trabalhosa, além disso, podemos ter problemas com
listas maiores. Este tipo de tarefa repetitiva pode ser substituída por um laço de repetição!
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Muito mais simples, não é mesmo? Mas calma, vamos entender como funciona este
comando.
30
Laços de Repetição - I
Pelo resultado é notável que as instruções abaixo do comando for executam mais de
uma vez, na verdade por isso que se chamam laços de repetição. Porque repetem as
instruções até um determinado ponto.
Vamos lá, primeiro a sintaxe para o comando: é necessário usar a palavra reservada for
para iniciar o comando, parecido com o que fizemos com o comando if .
Então declaramos uma variável, seguida do comando in e do nome de uma variável que
seja uma lista.
Com esta estrutura definimos que, a variável que criamos ( numero , no nosso exemplo)
receberá um item da lista em cada interação do laço, ou seja, primeiro a variável numero
recebe o primeiro valor da lista, executa todas as operações do laço de repetição (neste
caso apenas um print) e volta para o início do bloco, alterando o valor da variável para o
próximo item da lista.
Isso ocorre até a lista chegar ao fim, neste momento o laço de repetição é encerrado e o
programa continuará normalmente.
Mas então só podemos utilizar o laço de repetição para percorrer listas? -Definitivamente,
não.
Podemos utilizá-los também para repetir uma série de instruções, mesmo que não haja uma
lista envolvida, para fazer isso temos a função range disponível no Python.
valor = 0
for indice in range(5):
valor += 10
print(valor)
Neste caso serão exibidos os valores: 10, 20, 30, 40 e 50. Isso porque a função range
indica que o laço deve ser repetido 5 vezes. Para garantir isso, ela cria uma lista com os
valores [0, 1, 2, 3, 4].
Esta função cria uma lista neste formato por padrão, mas é possível alterar este
comportamento através de parâmetros. É possível, por exemplo, utilizar dois parâmetros
diferentes, um com o valor inicial e outro com o valor limite.
Neste caso a lista criada conterá os valores: [5, 6, 7, 8, 9]. Note que o valor limite nunca é
incluído na lista, ele de fato, define o limite dela e não seu último valor.
31
Laços de Repetição - I
Um último modificador possível na função range é o salto entre cada valor. Podemos
especificar para os valores subirem de dois em dois, dez em dez e assim por diante. Basta
inserirmos um último parâmetro!
Vamos Praticar
1. Faça um programa que inicialize uma lista de compras com 5 itens diferentes e exiba
todos utilizando um laço de repetição.
2. Faça um programa que inicialize que crie uma lista com os valores de 1 até 10 e depois
exiba apenas os números pares.
3. Faça um programa que exiba todos os valores ímpares entre 50 e 100 utilizando o
range.
4. Faça um programa que inicialize uma lista vazia, solicite ao usuário 10 números
diferentes, um por vez. Caso o número digitado seja par, acrescente um ao seu valor.
Depois disso, exiba os 10 números digitados.
5. Faça um programa que exiba as tabuadas de 1 até 10 no formato: "2 x 3 = 6", (utilize
dois comandos for )
Atenção
32
Laços de Repetição - II
Sua sintaxe é um pouco diferente da sintaxe do for , mas muito parecida com a sintaxe do
comando if , mas não se engane, as semelhanças entre o if e o while acabam aí.
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
A ideia por trás do comando while é repetir uma tarefa enquanto uma condição for
verdadeira, ou seja, na declaração do comando precisamos realizar uma comparação, caso
esta comparação seja verdadeira o bloco de instruções do while será executado.
O programa voltará para o início do bloco depois que a última instrução deste comando for
executada, fazendo novamente a comparação.
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
posicao = 0
while posicao < len(numeros):
print(numeros[posicao])
posicao += 1
Note que acaba ficando um pouco diferente do comando for . Neste caso precisamos
armazenar a posição da lista em uma variável e alterá-la manualmente a cada repetição do
laço.
Isso pode causar um problema sério em seu programa! Se por um acaso esquecermos de
alterar os valores que fazem a comparação do while podemos ficar presos em um loop
infinito, ou seja, nosso programa nunca irá acabar!
Vamos fazer a experiência! Retire a instrução que adiciona 1 para a variável posicao e
execute o programa:
33
Laços de Repetição - II
numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
posicao = 0
while posicao < len(numeros):
print(numeros[posicao])
Se por algum motivo aleatório, você decidir que quer fazer um laço de repetição infinito,
basta utilizar o comando desta forma:
while True:
print("INFINITO")
Agora vamos para dois novos comandos que podem ser utilizados em um laço de
repetição, devo dizer que, não gosto de nenhum deles, mas eles existem e não pretendo
ignorá-los.
São eles: continue e o break , ambos interferem nas interações do laço de repetição.
34
Laços de Repetição - II
O comando continue faz com que o laço de repetição volte para o início do bloco, ou seja,
para que ele continue com a próxima iteração, mas interrompe imediatamente a interação
atual.
Vamos fazer um exemplo para escrever todos os elementos da lista de números, exceto a
posição 5:
posicao = 0
while posicao < len(numeros):
posicao += 1
if posicao == 5:
continue
print(numeros[posicao-1])
Eis a questão que me faz não gostar desta instrução, você pode simplesmente remanejar
as instruções para que não precise utilizar o continue , veja:
posicao = 0
while posicao < len(numeros):
posicao += 1
if posicao != 5:
print(numeros[posicao-1])
O resultado final é o mesmo e neste caso você não interrompe o fluxo principal do
programa.
A outra instrução é o break , neste caso a interrupção é mais agressiva, ela interrompe o
próprio laço de repetição inteiro, não somente a iteração atual.
Isso significa que, ao utilizarmos o comando break vamos sair do laço de repetição
mesmo se comparação ainda for verdadeira, quebrando inclusive loops infinitos.
posicao = 0
while posicao < len(numeros):
posicao += 1
if posicao == 5:
break
print(numeros[posicao-1])
Com o código acima, seriam exibidos os números da posição 0 até a posição 4. Nenhum
número depois da posição 4 será exibido no console, porque o break interrompeu todo o
laço de repetição.
35
Laços de Repetição - II
A estratégia para evitar o break é simples. Se você está utilizando-o provavelmente sua
lógica de verificação no laço de repetição não está cumprindo seu papel. No exemplo acima
não queremos percorrer até o final da lista como a condição sugere, mas sim, até a quarta
posição:
posicao = 0
while posicao < 5:
print(numeros[posicao])
posicao += 1
Vamos Praticar
1. Faça um programa que inicialize uma lista de compras com 5 itens diferentes e exiba
todos utilizando um laço de repetição while .
2. Faça um programa que inicialize uma lista com os valores de 1 até 10 e depois exiba
apenas os números pares utilizando while .
3. Faça um programa que inicialize uma lista vazia, solicite ao usuário 10 números
ímpares diferentes, um por vez. Caso o número digitado seja par, solicite novamente
um número, até que o valor seja um número ímpar. Depois disso, exiba os 10 números
digitados.
4. Faça um programa que exiba um menu para o usuário selecionar uma das três opções:
1 - Olá mundo
2 - Eu programo em Python
3 - Laços de repetição
O programa deve solicitar ao usuário uma das 3 opções, caso o usuário digite um valor
diferente das opções (1, 2 ou 3), o programa deve apresentar novamente o menu de
opções até que uma delas seja escolhida. Por fim, o programa deve exibir uma mensagem
diferente para cada opção.
36
Laços de Repetição - II
Atenção
37
Dicionários
Imagine que você deseja armazenar dados sobre uma pessoa. Você precisará guardar o
nome, sobrenome, idade e quantas outras informações forem necessárias. É possível criar
todas estas variáveis separadas? Mas é claro que sim!
Se você já viu alguma vez um objeto em JSON , você verá que existem muitas semelhanças
entre estas duas coisas, veja como um dicionário em Python se parece:
pessoa = {
"nome": "Gabriel",
"sobrenome": "Schade",
"idade": 27
}
No nosso caso as chaves são valores do tipo string , mas não há uma obrigatoriedade
nisso (apesar de ser bastante comum) enquanto que os valores comumente variam de
tipos.
Assim como nas listas, podemos alterar e obter os valores de um dicionário, mas neste
caso ao invés de utilizarmos um índice, utilizamos a chave. Isso faz com que os dicionários
sejam extremamente simples de se trabalhar, veja o código a seguir:
Este código é bem parecido com alterar o valor de um item na lista e faz a mesma coisa,
mas desta vez alterando um valor de um dicionário.
38
Dicionários
nome_da_pessoa = pessoa["nome"]
Ao usar dicionários você precisa tomar cuidado, porque se a chave não existir a aplicação
irá lançar um erro! Faça o teste:
cpf = pessoa["cpf"]
Sabendo disso, existe uma outra forma no Python para obtermos um valor de um dicionário.
Podemos fazer isso através da função get . Para esta função precisamos enviar duas
informações: a chave e um valor padrão para o caso da chave não existir.
Através do get podemos buscar um valor em um dicionário de forma segura, fazendo com
que a aplicação não gere erros.
Além da função get , também estão disponíveis as funções keys e values , elas
retornam respectivamente uma lista contendo todas as chaves ou todos os valores do
dicionário.
chaves = pessoa.keys()
for chave in chaves:
print (chave)
valores = pessoa.values()
for valor in valores:
print (valor)
39
Dicionários
Podemos utilizar estas funções para escrever cada chave e seu respectivo valor, por
exemplo:
chaves = pessoa.keys()
for chave in chaves:
valor = pessoa[chave]
texto = chave + ": " + str(valor)
print ( texto )
O código acima foi separado para ficar claro o passo-a-passo das instruções, mas você
pode incluir todas estas instruções em apenas uma linha de código se achar mais
confortável:
chaves = pessoa.keys()
for chave in chaves:
print ( chave, ":", str( pessoa[chave]) )
Por fim, assim como fizemos com as listas, também podemos apagar um elemento do
dicionário com o comando del . É importante dizer que o del remove completamente o
item chave-valor do dicionário.
del pessoa["sobrenome"]
print (pessoa["sobrenome"])
O código acima irá gerar um erro, porque a partir do momento que o comando del foi
aplicado à chave-valor "sobrenome", ela deixa de existir no dicionário, portanto, tome
cuidado!
Vamos Praticar
1. Faça um programa que crie um dicionário para definir um produto, contendo sua
descrição e seu preço.
2. Faça um programa que inicialize uma lista de compras com 5 itens diferentes, onde
cada item é um dicionário contendo a descrição e preço do produto. Depois disso,
percorra a lista e exiba as informações de cada item.
3. Utilize a lista de compras do programa anterior para identificar qual o produto mais
barato e qual o produto mais caro da lista de compras.
40
Dicionários
4. Faça um programa que tenha uma lista com 5 de pessoas, onde cada pessoa tem seu
nome e sobrenome armazenado em um dicionário, depois disso, exiba todos os nomes
e sobrenomes. Para complicar um pouco as coisas, vamos simular que estes dados
foram obtidos da web e com isso recebemos algumas inconsistências. Duas das cinco
pessoas possuem o dicionário onde as chaves estão em maiúsculo e os outros três em
minúsculo.
Atenção
41
Modularização de código com Funções
Este capítulo talvez seja um pouco mais teórico que os anteriores, mas não se preocupe,
vamos programar bastante aqui também!
A criação de soluções mais complexas e programas maiores se torna uma tarefa bastante
difícil se continuarmos programando da maneira que estamos. Precisamos fazer com que o
programa seja separado em peças menores.
Dessa forma, todas as vezes que precisarmos resolver um problema mais complexo,
podemos conectar essas peças para formar uma solução.
Para isso, precisamos que estas peças sejam reutilizáveis, assim como peças de lego.
42
Modularização de código com Funções
Estas peças reutilizáveis são chamadas de funções . Elas são formadas por um bloco de
código que executa uma determinada ação.
De modo geral, cada função deve realizar apenas uma ação. Desta forma ela se torna mais
reutilizável e útil para seus programas.
Sempre que você tiver uma função que realiza mais de uma tarefa fique atento, isso
provavelmente é um sinal de código ruim. Talvez esta função deva ser quebrada em duas
ou mais funções.
Vamos ver como podemos definir uma função em nosso código Python!
def ola_mundo():
print("Olá mundo")
Primeiro é necessário utilizar a palavra reservada def , esta palavra é responsável por
definir a função. Depois disso incluímos o nome da função, esse nome deve seguir as
mesmas regras para nome de variáveis.
43
Modularização de código com Funções
Mas há uma diferença importante, ao definirmos uma função não fazemos com que aqueles
comandos sejam executados, estamos apenas descrevendo o que irá acontecer quando
executarmos a função.
Para executar uma função você precisa utilizar o nome dela seguido dos parênteses, veja:
Você pode colocar dentro de uma função quantos comandos desejar e todos eles serão
executados assim que a função for executada.
Depois que uma função é definida, é como se a chamada para executá-la fosse um novo
comando do Python, a partir de agora, estamos criando nossas próprias instruções e elas
se comportam da mesma maneira que as funções do Python.
Veja como fica o fluxo de execução do programa considerando que esta chamada é
realizada entre operações que já vimos antes.
numero = 10
numero2 = 15
ola_mundo()
resultado = numero + numero2
Quando isso acontece a execução do código principal "congela" para executar todas as
instruções da função. Depois disso ele retorna para a próxima instrução.
44
Modularização de código com Funções
Parâmetros
É comum precisarmos de dados para realizar algum tipo de operação. Veja a função print
por exemplo, a tarefa desta função é escrever qualquer coisa no console certo? -Certo.
Para permitir que isso seja possível, a função print precisa receber um parâmetro. No
caso da função print o parâmetro é o texto que será escrito, mas os parâmetros podem ser
utilizados para tarefas diferentes.
def elevar_ao_quadrado(numero):
print(numero * numero)
45
Modularização de código com Funções
elevar_ao_quadrado(9)
elevar_ao_quadrado(9)
elevar_ao_quadrado(4 + 5)
nove = 9
elevar_ao_quadrado(nove)
Em todos os casos o resultado da função será o mesmo, afinal estamos passando o mesmo
parâmetro!
Agora vamos criar uma função que some dois números diferentes! Sim, você pode criar
múltiplos parâmetros! Basta separá-los por vírgula, veja:
soma(2, 5) # -> 7
soma(3, 3) # -> 6
soma(10, 5) # -> 15
Legal né?
Além disso, não há restrição sobre o tipo enviado por parâmetro, veja mais um exemplo:
def saudacao(nome):
print("Olá", nome)
Retornos
Além de receber informações (parâmetros) as funções também podem produzir resultados.
Esses resultados são chamados de retornos.
Nem todas as funções produzem resultados, veja a função saudacao criada anteriormente.
De fato ela não precisa produzir nenhum resultado.
46
Modularização de código com Funções
Por outro lado, não faz muito sentido a função soma apenas escrever o resultado da soma.
A função se tornaria muito mais reutilizável produzindo um resultado. Desta forma o
desenvolvedor poderia fazer o que bem entendesse com o resultado, inclusive escrevê-lo.
Sempre que precisamos criar um retorno utilizamos a palavra reservada return . Ela faz
com que a função produza um resultado, assim como uma expressão.
Basta pensar que a função passa a se comportar uma expressão, portanto conseguimos
realizar atribuições, somas e qualquer outra operação que poderíamos fazer com uma
expressão. Veja:
resultado = soma(1,2)
print(resultado) # -> 3
resultado = soma(2,2) * 3
print(resultado) # -> 12
resultado = soma(5,5) - 2 * 5
print(resultado) # -> 0
print(soma(3,7)) # -> 10
A palavra reservada return força a interrupção da função para que o resultado seja
retornado, portanto é bastante comum que este comando esteja no final da função. Apesar
de não haver nenhuma obrigatoriedade não é uma boa prática interromper o código com
um return .
def exemplo(valor):
numero = valor * 2
if numero > 10:
return numero
valor = valor + 5
return valor
Neste exemplo, caso a variável numero seja maior do que 10 a função será interrompida.
Caso contrário será retornado o valor da variável valor somado à 5.
47
Modularização de código com Funções
É importante que você compreenda que este código não está necessariamente errado, mas
cria-se uma complexidade que não precisa existir, vamos manter a funcionalidade e
reescrevê-lo para termos apenas uma instrução de retorne, veja:
def exemplo(valor):
resultado = None
numero = valor * 2
return resultado
Em Python podemos encurtar esta função um pouco mais utilizando o desvio condicional
ternário:
def exemplo(valor):
numero = valor * 2
return numero if numero > 10 else valor + 5
Com isso passamos por todos os conceitos envolvidos na criação de uma função!
Vamos Praticar
1. Faça um programa que escreva "Minha primeira função", esta escrita deve ser
realizada a partir da chamada de uma função.
2. Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso
exiba a mensagem: "{nome} possui {idade} anos.". Esta mensagem deve ser escrita em
uma função.
3. Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles.
A multiplicação deve ser calculada em uma função.
4. Faça um programa que solicite ao usuário três números diferentes e exiba o dobro do
maior número. Para fazer isso separe seu código em duas funções diferentes: Uma
função para retornar o maior dos três números e outra função para dobrar o número.
48
Modularização de código com Funções
5. Faça um programa que inicialize uma lista vazia, depois disso solicite 5 nomes
diferentes ao usuário (utilize laço de repetição). Cada nome digitado deve ser
adicionado à lista e por fim, todos os nomes devem ser escritos no console. Utilize uma
função para solicitar e retornar o nome digitado, uma função para adicionar o nome à
lista (passando o nome e a lista por parâmetro) e outra função para escrever todos os
nomes no console.
Atenção
49
Expressões Lambda
Para compreender este post é essencial que você tenha compreendido antes o assunto do
capítulo anterior: funções.
Todas as características de uma função lambda são muito parecidas com as funções
comuns que já vimos, com exceção de duas coisas: elas não possuem uma definição em
código, ou seja, são declaradas como variáveis e não possuem um def próprio; e elas são
funções de uma linha, que funcionam como se houvesse a instrução return antes do
comando.
A função acima é uma função de soma normal, por ser uma função de uma linha podemos
transformá-la em uma função lambda, ou em uma expressão lambda. Para isso, utilize o
comando lambda conforme código:
Notem que a sintaxe é um pouco diferente, utilizamos a palavra reservada lambda para
declarar o início da expressão, depois disso, inserimos os parâmetros separados por
vírgula. Por fim, colocamos o corpo da expressão.
Lembrando que o corpo da expressão sempre deve conter apenas uma linha de comando e
ela funciona como se houvesse uma instrução de return antes dessa linha.
Portanto as duas funções de soma são definições diferentes para a mesma função:
print(soma(1,2)) # -> 3
print(soma_lambda(1,2)) # -> 3
Também podemos ter uma função lambda sem parâmetros, quando for o caso, basta
omitirmos a declaração de parâmetros normalmente:
obter_valor = lambda: 3 + 2
50
Expressões Lambda
Na prática essa função não faz tanto sentido, mas é um bom exemplo para entendermos o
que está acontecendo. Nesse caso criamos uma função chamada obter_valor que
sempre retorna o número cinco. A definição padrão desta função ficaria da seguinte
maneira:
def obter_valor():
return 3 + 2
Perceba que um dos pontos fortes de expressões lambda é sua síntese, ela são uma forma
rápida de definir funções simples.
Veja que estamos utilizando uma função lambda que não possui retorno e nem parâmetros!
Mas tudo funcionará corretamente.
Talvez você estranhe um pouco, afinal, eu havia escrito antes que as expressões lambda
funcionam como se houvesse um return antes da instrução e a função print não gera
retornos. Então como ele entende?
Na prática você pode obter o valor de retorno da função print , mas ele será um valor do
tipo None ! Portanto, a mesma sintaxe de lambda continua funcionando normalmente.
Utilização
Ok, entendi o conceito, mas para o que isso serve? Agora vem a parte mais complicada
desta lição, existem funções que podem receber outras funções por parâmetro!
Sim, você não leu errado, uma função recebe como parâmetro outra função. Estes são os
exemplos onde as expressões lambda são mais utilizadas.
Vamos declarar uma lista com diversos números diferentes, depois disso, copiaremos
apenas os números pares para uma segunda lista e o exibiremos no console. Tranquilo,
certo?
51
Expressões Lambda
numeros = [0,2,3,4,5,7]
pares = []
for numero in numeros:
if numero % 2 == 0:
pares.append(numero)
# Exibe os números
for par in pares:
print(par)
Utilizamos um laço de repetição para fazer a filtragem da lista que contém todos os
números para uma nova lista que contenha somente os números pares.
Neste laço de repetição obtemos os números um por um, verificamos se ele é par ou não e
caso seja, adicionamos ele à lista de pares.
Este comportamento de filtro em uma lista é bastante comum, por conta disso, a linguagem
oferece um recurso para simplificar esta implementação. Esse recurso é a função filter !
Esta função recebe dois parâmetros: um deles é a lista que vai ser filtrada, claro e o outro
parâmetro é a função que realiza o filtro da lista!
Essa função de filtro deve possuir apenas um parâmetro (do mesmo tipo de cada elemento
da lista) e deve retornar um boolean .
Dessa forma, todas as listas, de qualquer tipo, podem utilizar a mesma função filter .
No nosso caso, temos uma lista de números, portanto nossa função deve receber um
número e retornar um valor lógico, na prática, ela é a mesma comparação que já fizemos na
implementação anterior: numero % 2 == 0 , veja como fazemos a mesma coisa utilizando o
filter:
numeros = [0,2,3,4,5,7]
pares = filter(lambda valor: valor % 2 == 0, numeros)
Transformamos todo nosso laço de repetição com um desvio condicional em uma única
instrução! Legal né?
O filter não é a única função capaz de realizar este tipo de operação, mas é um bom
exemplo para você entender o poder das expressões lambda!
Vamos Praticar
52
Expressões Lambda
1. Faça um programa que escreva "Minha primeira função", esta escrita deve ser
realizada a partir da chamada de uma função que foi declarada como uma expressão
lambda.
2. Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso
exiba a mensagem: "{nome} possui {idade} anos.". Esta mensagem deve ser escrita em
uma função lambda.
3. Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles.
A multiplicação deve ser calculada em uma função lambda.
4. Faça um programa que solicite cinco números ao usuário, depois disso, exiba apenas
os números maiores do que 10. Utilize a função filter para fazer isso.
5. Faça um programa que solicite dez números ao usuário, depois disso, exiba todos
números pares e só então exiba todos os números ímpares. Utilize a função filter
para fazer isso.
Atenção
53
Conclusão
Conclusão
O objetivo deste livro é ser um ponta pé inicial para o mundo da programação, existem
muitos tópicos que não foram abordados aqui, como: orientação a objetos, programação
funcional, programação web, inteligência artificial e assim por diante.
Não tome este livro como única fonte de estudo de nenhuma maneira, existem diversos
materiais disponíveis online.
Espero que tenha sido uma boa fonte de estudo e fique à vontade para me enviar qualquer
tipo de feedback!
54
Resolução dos exercícios
2. Faça um algoritmo que pergunte ao usuário quantos anos ele tem, depois disso, escreva
True no console, caso ele já tenha alcançado a maioridade (18 anos), caso contrário
escreva False .
3. Faça um algoritmo que solicite um número ao usuário, depois disso, escreva True no
console, caso o número tenha dois dígitos (Esteja entre 10 e 99), caso contrário escreva
False .
55
Resolução dos exercícios
if media >= 7:
print("Aprovado")
else:
print("Reprovado")
2. Faça um algoritmo que solicite o ano que o usuário nasceu, depois disso, faça o
programa descrever se o usuário fará ou já fez 18 anos neste ano.
if idade == 18:
print("O usuário fará ou vez 18 anos este ano.")
3. Faça um programa que solicite ao usuário sua idade, depois disso, exiba a classificação
etária de acordo com as faixas de valores:
56
Resolução dos exercícios
4. Faça um programa que solicite ao usuário 2 valores, utilize uma condição ternária para
escrever qual o maior valor: o primeiro ou o segundo (caso os valores sejam iguais,
considere o segundo).
2. Faça um programa que solicite uma mensagem qualquer para o usuário e exiba esta
mensagem com todas as letras em maiúsculo.
57
Resolução dos exercícios
if idade.isdigit():
print(f"Você tem {idade} anos.")
else:
print("Você digitou uma idade inválida")
4. Faça um programa que solicite o nome completo do usuário e exiba somente o seu
segundo nome/primeiro sobrenome.
2. Faça um programa que inicialize uma lista vazia e solicite ao usuário 3 nomes de
cidades, um por vez, cada vez que o usuário digitar um nome, o programa deve incluir este
nome na lista de cidades.
cidades = []
3. Faça um programa que inicialize uma lista com vários números diferentes, depois disso,
solicite ao usuário um número, verifique se o número está ou não na lista e exiba uma
mensagem notificando o usuário do resultado.
58
Resolução dos exercícios
numeros = [1,3,6,10,5,23]
numero_digitado = int(input("Digite um número: "))
if numero_digitado in numeros:
print(f"O número {numero_digitado} está na lista")
else:
print(f"O número {numero_digitado} não está na lista")
4. Faça um programa que inicialize uma lista vazia e a preencha com 5 nomes diferentes
digitados pelo usuário, depois disso solicite um número de 0 até 4 e remova o elemento
desta posição.
nomes = []
nomes.append(input("Digite o primeiro nome: "))
nomes.append(input("Digite o segundo nome: "))
nomes.append(input("Digite o terceiro nome: "))
nomes.append(input("Digite o quarto nome: "))
nomes.append(input("Digite o quinto nome: "))
posicao_para_excluir = int( input("Escolha uma posição de 0(zero) até quatro para excl
uir da lista: "))
del nomes[posicao_para_excluir]
print(nomes)
2. Faça um programa que inicialize que crie uma lista com os valores de 1 até 10 e depois
exiba apenas os números pares.
3. Faça um programa que exiba todos os valores ímpares entre 50 e 100 utilizando o range.
59
Resolução dos exercícios
4. Faça um programa que inicialize uma lista vazia, solicite ao usuário 10 números
diferentes, um por vez. Caso o número digitado seja par, acrescente um ao seu valor.
Depois disso, exiba os 10 números digitados.
numeros = []
for numero in range(10):
item_digitado = int ( input("Digite um valor: ") )
if(item_digitado % 2 ==0):
item_digitado += 1
numeros.append(item_digitado)
5. Faça um programa que exiba as tabuadas de 1 até 10 no formato: "2 x 3 = 6", (utilize dois
comandos for )
2. Faça um programa que inicialize uma lista com os valores de 1 até 10 e depois exiba
apenas os números pares utilizando while .
60
Resolução dos exercícios
3. Faça um programa que inicialize uma lista vazia, solicite ao usuário 10 números ímpares
diferentes, um por vez. Caso o número digitado seja par, solicite novamente um número, até
que o valor seja um número ímpar. Depois disso, exiba os 10 números digitados.
numeros = []
numero = 0
quantidade_sobrando = 10
while quantidade_sobrando > 0:
numero = 0
while numero % 2 == 0:
numero = int( input("Digite um número ímpar: ") )
numeros.append(numero)
quantidade_sobrando -= 1
posicao = 0
4. Faça um programa que exiba um menu para o usuário selecionar uma das três opções:
1 - Olá mundo
2 - Eu programo em Python
3 - Laços de repetição
O programa deve solicitar ao usuário uma das 3 opções, caso o usuário digite um valor
diferente das opções (1, 2 ou 3), o programa deve apresentar novamente o menu de
opções até que uma delas seja escolhida. Por fim, o programa deve exibir uma mensagem
diferente para cada opção.
opcao = 0
opcoes = [1, 2, 3]
while opcao not in opcoes:
print("Selecione uma das opções abaixo: ")
print("1 - Olá mundo ")
print("2 - Eu programo em Python ")
print("3 - Laços de repetição ")
opcao = int ( input ("Selecione a opção: ") )
if opcao == 1:
print("Olá mundo!")
elif opcao == 2:
print("Já estou na minha sexta lição de Python!")
else:
print("Nesta lição estou estudando o laço de repetição While")
61
Resolução dos exercícios
produto = {
"descrição": "Água",
"preço": 2.00
}
2. Faça um programa que inicialize uma lista de compras com 5 itens diferentes, onde cada
item é um dicionário contendo a descrição e preço do produto. Depois disso, percorra a lista
e exiba as informações de cada item.
lista_compras = [
{"descrição": "Água", "preço": 2.00},
{"descrição": "Leite", "preço": 3.00},
{"descrição": "Carne", "preço": 18.00},
{"descrição": "Pizza", "preço": 9.00},
{"descrição": "Chocolate", "preço": 6.50},
]
62
Resolução dos exercícios
3. Utilize a lista de compras do programa anterior para identificar qual o produto mais barato
e qual o produto mais caro da lista de compras.
mais_barato = None
mais_caro = None
indice = 0
while indice < len(lista_compras):
item_compra = lista_compras[indice]
if indice == 0:
mais_caro = item_compra
mais_barato = item_compra
else:
if item_compra["preço"] > mais_caro["preço"]:
mais_caro = item_compra
indice = indice + 1
4. Faça um programa que tenha uma lista com 5 de pessoas, onde cada pessoa tem seu
nome e sobrenome armazenado em um dicionário, depois disso, exiba todos os nomes e
sobrenomes. Para complicar um pouco as coisas, vamos simular que estes dados foram
obtidos da web e com isso recebemos algumas inconsistências. Duas das cinco pessoas
possuem o dicionário onde as chaves estão em maiúsculo e os outros três em minúsculo.
pessoas = [
{"nome": "Joãozinho", "sobrenome": "da Silva" },
{"NOME": "Mariazinha", "SOBRENOME": "de Souza" },
{"nome": "Gabriel", "sobrenome": "Schade" },
{"NOME": "Joana", "SOBRENOME": "da Silva" },
{"nome": "Everton", "sobrenome": "Schmit" },
]
print(nome, sobrenome)
63
Resolução dos exercícios
def minha_funcao():
print("Minha primeira função")
minha_funcao()
2. Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso
exiba a mensagem: "{nome} possui {idade} anos." . Esta mensagem deve ser escrita em
uma função.
escrever_nome_idade(nome_digitado, idade_digitada)
3. Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles. A
multiplicação deve ser calculada em uma função.
4. Faça um programa que solicite ao usuário três números diferentes e exiba o dobro do
maior número. Para fazer isso separe seu código em duas funções diferentes: Uma função
para retornar o maior dos três números e outra função para dobrar o número.
64
Resolução dos exercícios
def dobrar(numero):
return numero * 2
maior = obter_maior(numero,numero2,numero3)
print(dobrar(maior))
5. Faça um programa que inicialize uma lista vazia, depois disso solicite 5 nomes diferentes
ao usuário (utilize laço de repetição). Cada nome digitado deve ser adicionado à lista e por
fim, todos os nomes devem ser escritos no console. Utilize uma função para solicitar e
retornar o nome digitado, uma função para adicionar o nome à lista (passando o nome e a
lista por parâmetro) e outra função para escrever todos os nomes no console.
def solicitar_nome():
return str ( input("Digite um nome: ") )
def escrever_nomes(lista):
for nome in lista:
print(nome)
nomes = []
for contador in range(0,5):
nome = solicitar_nome()
adicionar_nome_na_lista(nomes, nome)
escrever_nomes(nomes)
65
Resolução dos exercícios
1. Faça um programa que escreva "Minha primeira função", esta escrita deve ser realizada
a partir da chamada de uma função que foi declarada como uma expressão lambda.
2. Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso
exiba a mensagem: "{nome} possui {idade} anos.". Esta mensagem deve ser escrita em
uma função lambda.
3. Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles. A
multiplicação deve ser calculada em uma função lambda.
4. Faça um programa que solicite cinco números ao usuário, depois disso, exiba apenas os
números maiores do que 10. Utilize a função filter para fazer isso.
numeros = []
for indice in range(1,5):
numero = int(input("Digite um número: "))
numeros.append(numero)
5. Faça um programa que solicite dez números ao usuário, depois disso, exiba todos
números pares e só então exiba todos os números ímpares. Utilize a função filter para
fazer isso.
66
Resolução dos exercícios
def escrever_array(array):
for valor in array:
print(valor)
numeros = []
for indice in range(1,10):
numero = int(input("Digite um número: "))
numeros.append(numero)
67