Sei sulla pagina 1di 67

Tabela

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.

Várias instituições no Brasil e no mundo estão adotando disciplinas de programação de


software no ensino fundamental e médio. Tendo isso em vista, este livro busca auxiliar o
processo inicial ao mundo de desenvolvimento e programação.

O principal objetivo é desmistificar a programação através de exemplos práticos e


exercícios, para que possamos deixar de ser apenas usuários de tecnologia, mas também
nos tornarmos criadores dela.

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.

É bastante relacionado com a comunidade de desenvolvimento de software nacional, por


conta de suas contribuições recebeu o prêmio de Microsoft MVP (Most Valuable
Professional) na categoria Development Technologies.

Mestre em computação aplicada com foco em inteligência artificial e bacharel em Ciência


da Computação. Consumidor e criador de jogos no tempo livre, apaixonado por tecnologia,
literatura fantástica e card games.

Você pode encontrar o autor em:

Linkedin
Github
Blog pessoal

O que você encontrará nesse livro?


Este livro é um produto gratuito composto por publicações do blog
http://gabrielschade.github.io. As publicações foram editadas para melhorar a experiência
de leitura.

3
Introdução

Cada capítulo aborda de forma direta um tema básico sobre programação de


computadores, utilizando a linguagem de programação Python como exemplo.

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

Você deveria aprender Python


Como já dito anteriormente, eu programo majoritariamente na plataforma .NET, mas
considero um erro enorme os programados se fecharem em seu mundinho, seja ele Java,
.Net ou qualquer plataforma que seja.

As linguagens de programação de modo geral, possuem diferentes características, o


objetivo deste livro é iniciar você no universo da programação, o que nos leva a pergunta:

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.

Você pode usar Python para:

Criar scripts de automação, por exemplo, a cada N minutos dê um ping em todas as


páginas do site;
Grafos;
Visão computacional;
Aplicações Desktop multi-plataforma;
Aplicativos Android;
Aplicações Web;
Machine Learning;

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.

Tão simples quanto isso, Legal né?

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.

Eu não coloquei nada sobre a instalação do Python e sobre o ambiente de


desenvolvimento, isso porque existem diversas formas de programar em Python, desde
ambientes web até ambientes de desenvolvimento completos.

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

Capítulo 2 - Começando com Python


Pois bem, vamos começar! Sem muita teoria agora, vamos por a mão na massa!

É 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.

Mas como sabemos as variáveis estão armazenadas na memória? -Bom, a memória do


computador funciona parecido com nosso sistema social.

O que você faz quando precisa dizer para alguém onde você mora?

Você passa o endereço, certo?

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.

Imagine que o endereço são as coordenadas de latitude e longitude de um lugar, é bem


específico e não se repete. Mas com que frequência você passa seu endereço no sistema
de coordenadas?

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).

Para acessar os dados em memória, utilizamos identificadores, ou seja, nomes. Uma


variável no final das contas é uma composição de três coisas: identificador de acesso +
dado armazenado + tipo.

Peraí, tipo? -É, tipo, mas por enquanto você não precisa se preocupar com isso.

Vamos para o código!

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

Neste caso, a informação armazenada na variável resultado será o resultado da


expressão matemática.

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.

Faça um algoritmo para resolver a equação z = a * a - b + c, armazenando o resultado


na variável z. Considere que os valores iniciais de a, b e c são, respecitvamente, 4, 6.5
e 10.5. Depois disso exiba o resultado.

Atenção

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui, tome cuidado para não receber
spoilers dos próximos exercícios.

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:

Números: inteiros (int) e com casas decimais (float)


Textos (string ou str)
Lógicos (bool)

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.

Bastou declararmos as variáveis b e c com valores decimais.

Vamos para os textos agora!

Para definir que um valor é uma string existem 3 opções:

Entre aspas simples: 'texto' ;

9
Começando com Python

Entre aspas duplas: "texto" ;


Entre uma trinca de aspas duplas: """texto""" ;

Você pode utilizar qualquer um deles e seu programa irá entender que se trata de uma
string.

Vamos fazer um exemplo com a função print:

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:

nome = input("Digite seu nome: ")


print(nome)

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 ).

Vamos aplicar estes operadores em sentenças de linguagem natural:

Hoje deu sol pela manhã -> considere esta frase como verdade
Hoje choveu pela tarde -> considere esta frase como mentira

Estas afirmações em português podem ser interpretadas como:

10
Começando com Python

sol_pela_manha = True
chuva_pela_tarde = False

Agora vamos aplicar os operadores, começando pelo operador de negação ( not ):

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

sol = not sol_pela_manha # -> False


chuva = not chuva_pela_tarde # -> True

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.

Vamos novamente para as sentenças:

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.

sol_e_chuva = sol_pela_manha and chuva_pela_tarde # -> False


sol_e_nao_chuva = sol_pela_manha and not chuva_pela_tarde # -> True

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:

sol_ou_chuva = sol_pela_manha or chuva_pela_tarde # -> True


sol_ou_nao_chuva = sol_pela_manha or not chuva_pela_tarde # -> True
nao_sol_ou_chuva = not sol_pela_manha or chuva_pela_tarde # -> False

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

True True True


True False False
False True False
False False False

Ou ( or )
Primeiro Valor Segundo Valor Resultado
True True True

True False True


False True True

False False False

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

cinco_maior_que_tres = 5 > 3 # -> True

Temos diversos operadores para realizar estas comparações!

Operador Descrição
== (igual) Retorna True caso os dois valores são iguais
!=
Retorna True caso os dois valores sejam diferentes
(diferente)

Retorna True caso o valor à esquerda do operador seja maior que o


> (maior)
valor à direita do operador
>= (maior Retorna True caso o valor à esquerda do operador seja maior ou igual
ou igual) que o valor à direita do operador
Retorna True caso o valor à esquerda do operador seja menor que o
< (menor)
valor à direita do operador
<= (maior Retorna True caso o valor à esquerda do operador seja menor ou igual
ou igual) que o valor à direita do operador

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

x = y # -> estamos fazendo a variável x receber o mesmo valor da variável y


x == y # -> estamos comparando se os valores de x e y são iguais

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

14
Desvios condicionais, fazendo seu programa tomar decisões

Capítulo 3 - Desvios condicionais, fazendo


seu programa tomar decisões!
Agora que você já viu os tipos básicos e já trabalhou bastante com valores lógicos, iremos
introduzir uma complexidade para nossos programas.

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:

Vá até o mercado e compre leite, se não tiver, compre água.

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!

Viu só? Agora podemos fazer os algoritmos tomarem decisões!

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.

Vamos fazer mais um exemplo!

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 .

Geralmente é mais comum utilizarmos a expressão diretamente no comando, salvo em


casos onde esta mesma comparação precisa ser feita mais de uma vez, nestes casos é
melhor armazenarmos o resultado e reutilizá-lo ao invés de fazer a comparação várias
vezes.

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")

elif nota == 7 or nota == 6:


print("Recuperacao")

else:
print ("Reprovado")

Este exemplo é bastante simples, mas já dá para entendermos a utilização do elif . É


importante ressaltar também que este comando de desvio permite apenas um if e um
else que estejam conectados, mas você pode inserir quantos elif forem necessários.

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")

Outra coisa que podemos explorar normalmente é a questão de múltiplas condições.


Podemos utilizar os operadores not , and e or para criar uma condição da mesma
forma que usamos para a atribuição de um valor lógico.

nota1 = 7
nota2 = 10

if nota1 > 5 and nota2 >= 7:


print("Aprovado")

deu_sol = True

if not deu_sol:
print("Choveu")

Por fim, existe mais uma forma de descrevermos o comando if .

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:

Ele foi aprovado se tirou 7 ou mais, senão ele foi reprovado.

Vamos traduzir isso para Python com o comando que já conhecemos:

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:

Criança para 0 até 11 anos;


Adolescente para 12 até 18 anos;
Jovem para 19 até 24 anos;
Adulto para 25 até 40 anos;
Meia Idade para 41 até 60 anos;
Idoso acima de 60 anos.
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).

Atenção

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

19
Valores None, Strings e Listas

Capítulo 4 - Valores None, Strings e Listas


Neste ponto você já deve ser capaz de criar variáveis e criar desvios condicionais em seu
programa. Mas vamos dar um passo para trás e vamos olhar um pouco mais de perto
algumas características dos tipos em Python!

Vamos começar apresentando um novo tipo de valor, os valores None .

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)

Simples assim, apenas uma linha de código.

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

Bem simples né?

20
Valores None, Strings e Listas

Explorando um pouco mais das strings


Já usamos algumas vezes variáveis do tipo string, mas ainda há muito trabalho para fazer!

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.

Mas não se assuste, é muito fácil de usar!

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!

mensagem = "Olá {0}".format(nome_maiusculo)


print(mensagem) # -> Olá Gabriel

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:

segunda_mensagem = "Olá {0}, me chamo {1}".format(nome_maiusculo, "Python")


print(segunda_mensagem) # -> Olá Gabriel, me chamo Python

Viu só? O primeiro parâmetro entrou no lugar de "{0}" , o segundo no lugar de "{1}" e
assim por diante!

Mas o que acontece se colocarmos mais de um "{0}" ? Vamos testar!

terceira_mensagem = "Olá {0}, me chamo {1}. {0}".format(nome_maiusculo, "Python")


print(terceira_mensagem) # -> Olá Gabriel, me chamo Python. Gabriel

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.

mensagem = f"Olá {nome_maiusculo}"


print(mensagem) # -> Olá Gabriel

O problema desta abordagem é que nem todas as ferramentas de desenvolvimento


entendem a interpolação, então talvez você precise digitar o nome da variável em um texto,
o que pode causar um erro na sua aplicação, caso você digite o nome da variável errado.

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"]

O que são esses colchetes? Vamos entender o que está acontecendo.

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.

Mas se só podemos armazenar um valor em uma variável como guardaríamos os 3 itens?

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.

Vamos guardar o resultado do split em uma variável, veja:

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).

No caso das listas utilizamos colchetes para definir os índices, veja:

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

print(itens[3]) # -> Gera um erro

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.

3. Faça um programa que solicite a idade do usuário, verifique se o texto informado só


contém números. Caso contenha somente números exiba a mensagem: "Você tem
{idade digitada} anos.", caso contrário exiba a mensagem: "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.

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).

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

24
Listas

Capítulo 5 - Operações com Listas


Se você tem praticado em Python você já deve ter se deparado com o problema de criação
de variáveis para descrever listas, por exemplo, um conjunto de estudantes, um conjunto de
carros estacionados ou até uma lista de compras!

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!

lista_de_compras = ["Pão", "Água", "Leite", "Ovos"]

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!

print(lista_de_compras[0]) # -> Pão


print(lista_de_compras[1]) # -> Água
print(lista_de_compras[2]) # -> Leite
print(lista_de_compras[3]) # -> Ovos

É 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])

Tente imaginar a lista conforme o desenho abaixo:

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.

lista_de_compras[2] = "Suco de Laranja"

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.

Isso nos permite criar desvios condicionais, por exemplo, veja:

if "Café" in lista_de_compras:
print("Preciso comprar café")

Bem simples né?

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.

len( lista_de_compras ) # -> 5

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?

Muitos iniciantes tentam realizar a seguinte operação:

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 .

Vamos remover os ovos(posição 3) da nossa lista de compra!

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 entender melhor cada função com alguns exercícios!

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

28
Listas

29
Laços de Repetição - I

Capítulo 6 - Laços de Repetição - Parte 1


Neste capítulo veremos um dos recursos mais importantes em qualquer linguagem de
programação: Os laços de repetição, também conhecidos como loops.

No capítulo anterior foi explicado o funcionamento das listas então continuaremos usando
listas aqui.

Você deve se lembrar de como acessamos um item de uma lista, certo?

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]

Como faríamos para imprimir cada número individualmente no console?

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!

Veja outra forma de realizar esta tarefa:

numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

for numero in numeros:


print (numero)

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.

Esta função permite criar listas sob demanda, veja:

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.

for valor in range(5, 10):


print(valor)

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!

for valor in range(0, 10, 2):


print(valor)

Neste caso a lista resultante é: [0, 2, 4, 6, 8], bem legal né?

Agora que já vimos as variações do range e deste comando, vamos praticar!

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

32
Laços de Repetição - II

Capítulo 7 - Laços de Repetição - Parte 2


O capítulo anterior introduziu o conceito de laços de repetição utilizando o comando for .
Mas esta não é a única forma de realizar este tipo de operação!

Além do for , temos o comando while !

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í.

Para fins de exemplo, vamos utilizar a mesma lista do capítulo passado!

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.

Quando esta comparação resultar em um valor False o bloco de instruções do while


será pulado e o programa continuará normalmente. Vamos fazer um exemplo?

Vamos imprimir todos os números da lista numeros , veja:

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])

Portanto, não esqueça de alterar os valores que influenciam na comparação!

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")

Ao invés de realizarmos uma comparação, marcamos diretamente o resultado da


comparação como True , mas cuidado, isso pode dar ruim!

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.

1. Remove a instrução break e a instrução continue do laço de repetição abaixo:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


posicao = 0
while posicao < len(numeros):
posicao += 1
if posicao == 3:
continue
elif posicao == 6:
break
print(numeros[posicao-1])

36
Laços de Repetição - II

Atenção

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

37
Dicionários

Capítulo 8 - Use Dicionários!


Neste ponto, você já deve estar familiarizado com listas e laços de repetição, agora já está
na hora de criarmos mais estruturas, desta vez, vamos usar os dicionários!

Os dicionários permitem ao desenvolvedor armazenar pares de chave-valor facilmente! Na


prática isso significa que conseguimos criar uma estrutura para armazenar mais de uma
informação correlacionada.

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!

O problema desta abordagem é que o seu programa não conseguiria relacionar as


informações. Para o seu programa é como se aquelas variáveis fossem dados separados
entre si, ou seja, sem nenhuma relação.

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
}

Como dito anteriormente, um dicionário organiza as informações em pares no formato


chave-valor. No exemplo acima, as chaves são: nome, sobrenome e idade e os valores
respectivos são: Gabriel, Schade e 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:

pessoa["sobrenome"] = "Schade Cardoso"

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

Podemos fazer o mesmo processo para obter um valor do dicionário e armazená-lo em


outra variável, veja:

nome_da_pessoa = pessoa["nome"]

Com isso conseguimos manipular as informações relacionadas em um mesmo dicionário.


Podemos por exemplo, exibir no console o nome completo da pessoa:

print( pessoa["nome"], pessoa["sobrenome"] )

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.

cpf = pessoa.get("cpf", None)


print (cpf) # -> None

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.

Vamos começar utilizando a função keys !

chaves = pessoa.keys()
for chave in chaves:
print (chave)

O mesmo vale para obtermos todos os valores:

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

41
Modularização de código com Funções

Capítulo 9 - Modularização de código com


Funções
Neste capítulo vamos aprender sobre como podemos quebrar nossos códigos em partes
menores, ou seja, modularizá-lo!

Vamos fazer isso utilizando nossas próprias 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!

Até o momento estamos programando soluções pequenas. Cada exercício se baseava em


um problema específico que conseguimos resolver com poucas linhas de código, mas em
aplicações reais é comum um único programa resolver diversas coisas diferentes.

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.

Na verdade, durantes os exercícios anteriores, já utilizamos funções disponíveis no Python


várias vezes. O print e o input são exemplos de funções disponíveis, mas o mais
interessante disso é que podemos definir nossas próprias funções!

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

Por fim, estamos incluindo os caracteres () , a partir daqui utilizamos os : e todos os


comandos pertencentes à este bloco segue as mesmas regras dos comandos já vistos:
if , while , for e etc.

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:

def ola_mundo(): # -> Definição


print("Olá mundo")

ola_mundo() # -> Chamada para realizar a execução

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

O que acontece neste fluxo?

Bom, primeiro as duas variáveis numero e numero2 são declaradas e os valores 10 e 15


são atribuídos à elas respectivamente. Depois dessas duas linhas iniciais a função
ola_mundo é executada.

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

Dividir um algoritmo em partes menores também auxilia bastante a testabilidade de um


programa. Sempre será mais simples testar um bloco pequeno do que o programa por
completo.

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.

Vamos criar uma função que eleve qualquer número ao quadrado!

def elevar_ao_quadrado(numero):
print(numero * numero)

45
Modularização de código com Funções

Basta colocarmos o parâmetro entre os parêntenses na definição da função! Como já


utilizamos várias vezes a função print você deve imaginar como passamos um número
para está função né?

elevar_ao_quadrado(9)

É interessante notar que também podemos passar variáveis e expressões no parâmetro,


veja só:

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:

def soma(numero1, numero2):


print(numero1 + numero2)

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.

Vamos refatorar a função soma :

def soma(numero1, numero2):


return numero1 + numero2

Ok, mas como obter o resultado desta função? -Simples!

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 .

Veja este exemplo:

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

if numero > 10:


resultado = numero
else:
resultado = valor + 5

return resultado

Desta forma, centralizamos a regra na variável resultado , sempre retornando-a,


independente de qual valor foi atribuido à ela.

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

Agora ficamos com um código bem mais curto e simples!

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

49
Expressões Lambda

Capítulo 10 - Expressões Lambda


Este é o último capítulo para introdução à programação utilizando Python, vamos fechar o
aprendizado com um tipo diferente de função: as expressões lambdas!

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.

def soma(numero1, numero2):


return numero1 + numero2

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:

soma_lambda = lambda numero1, numero2: numero1 + numero2

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.

Mas e para funções sem retorno? -Nenhum problema!

ola = lambda: print('Olá mundo')


ola() # -> Olá mundo

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 fazer um exercício utilizando os conceitos que já sabemos e depois refazê-lo


utilizando expressões lambda!

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)

for par in pares:


print(par)

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

É fortemente recomendado que você tente fazer os exercícios antes de ver as


respostas. Você pode encontrar as respostas aqui.

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.

As possibilidades são imensas e tudo está mais perto de você agora.

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

Resolução dos exercícios

Capítulo 2 - Começando com Python


1. Faça um algoritmo que solicite o nome do usuário e depois escreva o nome da pessoa no
console.

nome = input("Qual seu nome? ")


print(nome)

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 .

idade = int( input("Quantos anos você tem? ") )


maioridade = idade >= 18
print(maioridade)

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 .

numero = int( input("Digite um numero: ") )


dois_digitos = numero >= 10 and numero <= 99
print(dois_digitos)

Capítulo 3 - Desvios condicionais, fazendo seu


programa tomar decisões!
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).

55
Resolução dos exercícios

nota1 = float(input("Digite a primeira nota: "))


nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))
media = ( nota1 + nota2 + nota3 ) / 3

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.

ano_nascimento = int (input ("Digite o ano que você nasceu: "))


idade = 2018 - ano_nascimento

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:

Criança para 0 até 11 anos;


Adolescente para 12 até 18 anos;
Jovem para 19 até 24 anos;
Adulto para 25 até 40 anos;
Meia Idade para 41 até 60 anos;
Idoso acima de 60 anos.

56
Resolução dos exercícios

idade = int (input("Digite sua idade: "))

if idade >= 0 and idade <= 11:


print("Criança")

elif idade >= 12 and idade <= 18:


print("Adolescente")

elif idade >= 19 and idade <= 24:


print("Jovem")

elif idade >= 25 and idade <= 40:


print("Adulto")

elif idade >= 41 and idade <= 60:


print("Meia Idade")

elif idade > 60:


print("Idoso")

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).

primeiro_valor = int( input("Digite um valor: "))


segundo_valor = int( input("Digite um valor: "))
print( "Primeiro" if primeiro_valor > segundo_valor else "Segundo")

Capítulo 4 - Valores None, Strings e Introdução


à Listas
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}".

nome = input("Digite seu nome: ")


print (f"Olá {nome}")

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.

mensagem = input ("Digite uma mensagem: ")


print(mensagem.upper())

57
Resolução dos exercícios

3. Faça um programa que solicite a idade do usuário, verifique se o texto informado só


contém números. Caso contenha somente números exiba a mensagem: "Você tem {idade
digitada} anos.", caso contrário exiba a mensagem: "Você digitou uma idade inválida".

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.

nome_completo = input("Digite seu nome completo: ")


nome_completo_dividido = nome_completo.split(" ")
print(nome_completo_dividido[1])

Capítulo 5 - Operações com Listas


1. Faça um programa que inicialize uma lista com o nome das pessoas da sua família.

familia = ["Gabriel", "Anderson", "Luluzinha", "Mariazinha", "Joãozinho"]


print(familia)

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 = []

cidade = input("Digite o nome da primeira cidade: ")


cidades.append(cidade)

cidades.append(input("Digite o nome da segunda cidade: "))


cidades.append(input("Digite o nome da terceira cidade: "))
print(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)

Capítulo 6 - Laços de Repetição - Parte 1


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.

itens_compra = ["Arroz", "Leite", "Ovos", "Feijão", "Tomate"]


for item in itens_compra:
print(item)

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.

for numero in range(1,11):


if numero % 2 == 0:
print(numero)

3. Faça um programa que exiba todos os valores ímpares entre 50 e 100 utilizando o range.

for numero in range(51,101,2):


print(numero)

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)

for numero in numeros:


print(numero)

5. Faça um programa que exiba as tabuadas de 1 até 10 no formato: "2 x 3 = 6", (utilize dois
comandos for )

for operador in range(1,11):


for operador_2 in range(1,11):
resultado = operador * operador_2
print(f"{operador} X {operador_2} = {resultado}")

Capítulo 7 - Laços de Repetição - Parte 2


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 .

itens_compra = ["Arroz", "Leite", "Ovos", "Feijão", "Tomate"]


posicao = 0
while posicao < len(itens_compra):
print(itens_compra[posicao])
posicao+=1

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 .

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


posicao = 0
while posicao < len(numeros):
numero = numeros[posicao]
if numero % 2 == 0:
print(numero)
posicao+=1

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

while posicao < len(numeros):


print(numeros[posicao])
posicao += 1

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

5. Remove a instrução break e a instrução continue do laço de repetição abaixo:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


posicao = 0
while posicao < len(numeros):
posicao += 1
if posicao == 3:
continue
elif posicao == 6:
break
print(numeros[posicao-1])

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


posicao = 0
while posicao < 5:
if posicao != 2:
print(numeros[posicao])
posicao += 1

Capítulo 8 - Use Dicionários!


1. Faça um programa que crie um dicionário para definir um produto, contendo sua
descrição e seu preço.

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},
]

for item_compra in lista_compras:


print("Produto:", item_compra["descrição"], "por", str(item_compra["preço"]), "rea
is.")

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

if item_compra["preço"] < mais_barato["preço"]:


mais_barato = item_compra

indice = indice + 1

print("Produto mais caro: ", mais_caro["descrição"], "por", mais_caro["preço"],"reais"


)
print("Produto mais barato: ", mais_barato["descrição"], "por", mais_barato["preço"],"
reais")

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" },
]

for pessoa in pessoas:


nome = pessoa.get("nome", None)
sobrenome = pessoa.get("sobrenome", None)
if not nome:
nome = pessoa.get("NOME", None)
if not sobrenome:
sobrenome = pessoa.get("SOBRENOME", None)

print(nome, sobrenome)

63
Resolução dos exercícios

Capítulo 9 - Modularização de código com


Funções!
1. Faça um programa que escreva "Minha primeira função", esta escrita deve ser realizada
a partir da chamada de uma função.

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.

def escrever_nome_idade(nome, idade):


print(nome, "possui",idade,"anos.")

nome_digitado = str(input("Digite seu nome: "))


idade_digitada = int(input("Digite sua idade: "))

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.

def multiplicar(numero1, numero2):


return numero1 * numero2

numero = int(input("Digite o primeiro número: "))


numero2 = int(input("Digite o segundo número: "))
resultado = multiplicar(numero, numero2)
print(resultado)

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 obter_maior(numero, numero2, numero3):


maior = None
if numero > numero2 and numero > numero3:
maior = numero
elif numero2 > numero and numero2 > numero3:
maior = numero2
else:
maior = numero3
return maior

def dobrar(numero):
return numero * 2

numero = int(input("Digite o primeiro número: "))


numero2 = int(input("Digite o segundo número: "))
numero3 = int(input("Digite o terceiro número: "))

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 adicionar_nome_na_lista(lista, nome):


lista.append(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)

Capítulo 10 - Funções Lambda

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.

minha_funcao = lambda: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 lambda.

escrever_nome_idade = lambda nome, idade: print(nome, "possui",idade,"anos.")


nome_digitado = str(input("Digite seu nome: "))
idade_digitada = int(input("Digite sua idade: "))
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 lambda.

multiplicar = lambda numero1, numero2: numero1 * numero2

numero = int(input("Digite o primeiro número: "))


numero2 = int(input("Digite o segundo número: "))
resultado = multiplicar(numero, numero2)
print(resultado)

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)

maiores = filter(lambda numero: numero > 10, numeros)


for maior in maiores:
print(maior)

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)

pares = filter(lambda numero: numero % 2 == 0, numeros)


impares = filter(lambda numero: numero % 2 == 1, numeros)
escrever_array(pares)
escrever_array(impares)

67

Potrebbero piacerti anche