# Lógica de programação
## com `Python`
----
### criado por Bossa
----
# Aula 01
## Engatinhando
---
# O que é um algoritmo
- Um algoritmo é como uma receita de bolo.
- Ele tem *entradas*, *instruções* e uma *saída*;
---
## Bolo Simples para Café
![image alt](https://vovopalmirinha.com.br/wp-content/uploads/2016/06/bolo-simples-702x336.jpg "Bolo de caneca")
----
### Ingredientes
- 2 xícaras (chá) farinha de trigo
- 2 xícaras (chá) açúcar
- 1 xícara (chá) leite
- 2 ovos
- 4 colheres (sopa) óleo
- 1 pitada de sal
- 1 colher (sopa) fermento em pó
- essência de baunilha a gosto (opcional)
----
### Modo de preparo
- Separe o fermento
- Na batedeira bata os demais ingredientes por aproximadamente 5 minutos
- Retire a tigela da batedeira, junte o fermento e misture cuidadosamente com uma colher
- Despeje a massa do bolo em uma forma de cone untada e enfarinhada
- Leve ao forno preaquecido a 180ºC por aproximadamente 35 minutos ou até que ao espetar um palito ele saia limpo
----
### Rendimento
- 1 porção
> Fonte: [vovopalmirinha.com.br](https://vovopalmirinha.com.br/bolo-simples-para-cafe/)
---
| Algoritmo | | Receita |
| --------- | -- | :----- |
| Entradas | :arrow_right: | ingredientes |
| Instruções | :arrow_right: | modo de preparo |
| Saída | :arrow_right: | :cake: |
| |
----
## :game_die: Dados
Num algoritmo, as *entradas* são os **dados** sobre os quais trabalhamos. Podem vir de
- um banco de dados
- um arquivo
- uma entrada do usuário
----
## :wrench: Instruções
Na parte das *instruções* onde dizemos para o computador o que fazer com esses dados.
- verificar se os dados são consistentes
- realizar computações com esses dados
----
## :computer: Saída
E a *saída* é o resultado do que fazemos com esses dados. Alguns exemplos:
- Mostrar os valores na tela
- Atualizar um banco de dados
- Escrever o resultado do cálculo num arquivo
---
# Mão na massa
Não precisamos instalar o `Python`, podemos rodá-lo online no site [`repl.it`](https://repl.it/languages/python3 "Python online")
---
## O `repl.it`
O repl.it é composto de algumas partes
- Um gerenciador de arquivos
- Um editor de texto
- Um _prompt_ do `python`
<!-- ![](https://i.imgur.com/9K1jg2X.png) -->
---
# Saída de dados
---
## Olá mundo!
Escreva o seguinte código no arquivo `main.py` e pressione ==run ▶==
```python=
print("Olá Mundo!")
```
<span>
<!-- .element: class="fragment" data-fragment-index="1" -->
- a função `print()` imprime na tela o que for passado como argumento
</span>
----
### Mais sobre `print`
- Podemos passar uma lista de coisas para serem impressas
```python
print("Coisa 1", "Coisa 2", "Coisa 3")
```
- Opção `sep` diz como vamos separar os items
```python
print("Coisa 1", "Coisa 2", "Coisa 3", sep=", ")
```
- Opção `end` diz o final da frase
```python
print("Coisa 1", "Coisa 2", "Coisa 3", sep=", ", end=".")
```
---
# Entrada de dados
----
- A função `input` mostra uma mensagem na tela e exige uma entrada.
```python
input("Digite qualquer coisa e aperte enter: ")
```
- Podemos guardar o valor digitado em uma variável
```python
variavel = input("Digite qualquer coisa e aperte enter: ")
```
---
### Exemplo 01
- Vamos criar um programa que pergunta o nome da pessoa e exibe uma saudação
```python
nome = input("Digite seu nome:")
print("Olá,", nome)
```
<!-- .element: class="fragment" data-fragment-index="1" -->
---
### Exemplo 02
- Vamos criar um programa que pede dois números como entrada e retorna a soma deles
```python
a = input("Digite o primeiro número:")
b = input("Digite o segundo número:")
soma = a + b
print("A soma é", soma)
```
<!-- .element: class="fragment" data-fragment-index="1" -->
---
# O que aconteceu?
---
# Tipos de dados
----
O `python` tem alguns tipos de dados "de fábrica"
- **Numéricos**: inteiros, ponto flutuante (número com vírgula), complexos;
- **Texto**;
- ***Booleanos***: verdadeiro ou falso;
- **Estruturados**: listas, tuplas, dicionários, conjuntos.
----
| tipo de dado | nome |
| --------------:| --------- |
| inteiro | `int` |
| "racional" | `float` |
| texto | `str` |
| lista | `list` |
| booleano | `bool` |
----
- Podemos acessar o tipo do dado usando `type`
```python
# vamos declarar o valor das variáveis no
# próprio código
a = 2
b = 3.0
texto = "Olá"
print(type(a), type(b), type(texto))
```
---
# Operadores
----
- Matemáticos: `+`, `-`, `*`, `/`, `//`, `%`, `**`
- Lógicos: `or`, `and`, `not`
- Comparação: `==`, `<=`, `>=`, `!=`, `is`, `is not`
- Outros: `=`, `.`, `[]`, `()`
---
## O que aconteceu:
- A função `input` retorna dados no formato *texto*
- O operador `+` quando aplicado em textos, apenas concatena eles
> Precisamos então converter o texto em número para efetuar a soma
---
### Exemplo 02, consertado 1
```python
a_texto = input("Digite o primeiro número:")
b_texto = input("Digite o segundo número:")
# vamos usar a função `int` para converter
# texto em número inteiro
a = int(a_texto)
b = int(b_texto)
soma = a + b
print("A soma é", soma)
# esse # é usado para escrever um comentário no código
```
----
### Exemplo 02, consertado 2
```python
a_texto = input("Digite o primeiro número:")
b_texto = input("Digite o segundo número:")
# vamos usar a função `float` para converter
# texto em número racional
a = float(a_texto)
b = float(b_texto)
soma = a + b
print("A soma é", soma)
# esse # é usado para escrever um comentário no código
```
----
### Exemplo 02, consertado 3
```python
# podemos também usar a composição de funções
# para reduzir o nosso código
a = float(input("Digite o primeiro número:"))
b = float(input("Digite o segundo número:"))
soma = a + b
print("A soma é", soma)
# esse # é usado para escrever um comentário no código
```
---
# Objetos
- As variáveis em `Python` são _objetos_, que podem ter _métodos_ e _propriedades_
- Acessamos um método ou propriedade de um objeto com o operador `.` ou `[]`
----
## Métodos
- Um método de um objeto é uma maneira de acessar ou alterar alguma informação desse objeto
- Usamos uma das seguintes _sintaxes_
```python
objeto.método(argumento1, argumento2, ...)
objeto[argumentos]
```
---
# Texto
Textos são objetos do tipo `str` e são criados entre aspas duplas `" "` ou aspas simples `' '`
----
## Métodos de texto
- O texto em `python` nada mais é do que uma sequência de caracteres
- Podemos acessar pedaços do texto usando `[]` e indicando as posições que estamos acessando
----
### Acessando pedaços do texto
```python
texto = "Luiz Fernando"
a = texto[0] # é a primeira letra do texto
b = texto[2:5] # retorna os caracteres nas posições 2, 3, 4
c = texto[5:] # retorna os caracteres da posição 5 em diante
d = texto[:6] # retorna os caracteres até a posição 6
e = texto[-1] # retorna o último caractere
print(a,b,c,d,e, sep="|")
```
----
### Exemplo 03
- Vamos criar um programa que pergunta o CPF da pessoa e imprime os dígitos de verificação
```python
cpf = input("Digite um número de CPF:")
verificador = cpf[-2:] # pega o penúltimo e último números
print(verificador)
```
<!-- .element: class="fragment" data-fragment-index="1" -->
----
### Formatando o texto
```python
texto = "LuiZ FerNandO"
a = texto.lower() # retorna o texto todo em minúsculas
b = texto.upper() # retorna o texto todo em maiúsculas
c = texto.swapcase() # troca maiúsculas e minúsculas
d = texto.title() # deixa em formato de título
print(a,b,c,d, sep="\n")
```
----
### Manipulando texto: substituindo
```python
# o método `find` procura um pedaço de texto e retorna
# a posição em que foi encontrada, ou -1 se não foi
# encontrado nada
texto = "Olá, faça a transferência para a conta corrente \
472127-1 agência 1287-2 banco Santander."
# o método `replace` substitui uma palavra por outra no
# texto dado
texto_alterado = texto.replace("transferência", "depósito")
print(texto_alterado)
```
----
### Manipulando texto: procurando
```python
# o método `find` procura um pedaço de texto e retorna
# a posição em que foi encontrada, ou -1 se não foi
# encontrado nada
texto = "Olá, faça a transferência para a conta corrente \
472127-1 agência 1287-2 banco Santander."
pos = texto.find("conta") # retorna a posição que foi encontrada
# A palavra "conta"
print(pos)
print(texto[pos:]) # imprime o texto começando
# na posição indicada
```
----
### Manipulando texto: extraindo
```python
# A função `len` retorna o tamanho de vários objetos.
# No caso de texto, # retorna o número de caracteres.
texto = "Olá, faça a transferência para a conta corrente \
472127-1 agência 1287-2 banco Lehman Brothers."
procurar = "conta corrente" # vamos usar mais vezes esse trecho
tamanho = len(procurar) # tamanho do trecho
pos = texto.find(procurar) # retorna a posição que foi
# encontrado o trecho
# "conta corrente"
print(pos)
# vamos imprimir o texto começando depois do trecho
# "conta corrente", usando para isso o tamanho do trecho
print(texto[pos+tamanho:])
```
---
### Exemplo 04
- Vamos criar um programa que recebe um texto no formato abaixo, extrai as informações importantes, salva nas variáveis e imprime
```python
texto = "[..] conta corrente {xyz} agência {abc} banco {ijk}."
conta={xyz}
agencia={abc}
banco={ijk}
print(banco, agencia, conta)
```
----
#### Solução
```python
texto = "Olá, faça a transferência para a conta corrente \
472127-1 agência 1287-2 banco Lehman Brothers."
cc = "conta corrente"
ag = "agência"
bc = "banco"
# Para cada um dos pedaços acima, vamos criar duas variáveis
# uma para a posição e outra para o tamanho do pedaço
cc_pos = texto.find(cc)
cc_tam = len(cc)
ag_pos = texto.find(ag)
ag_tam = len(ag)
bc_pos = texto.find(bc)
bc_tam = len(bc)
# a conta é o que está entre
# 'conta corrente' e 'agência'
conta = texto[cc_pos+cc_tam:ag_pos]
# a agência é o que está entre
# 'agência' e 'banco'
agencia = texto[ag_pos+ag_tam:bc_pos]
# o banco é o que está entre
# 'banco' e o ponto final
banco = texto[bc_pos+bc_tam:-1]
print(banco, agencia, conta)
```
---
# Condicionais
----
- Todos os programas que fizemos até agora são executados linha por linha
- As vezes, gostaríamos que alguns pedaços do código sejam executados somente em determinadas condições
----
## `if`
O bloco `if` tem a seguinte sintaxe
```python
if condição:
# bloco de código que vai ser executado
# caso a `condição` for verdadeira
# os espaços no início desse bloco são
# estritamente necessários, e são chamados
# de identação
```
----
### condições
- Em `python`, uma expressão booleana possui os valores `True` ou `False`
- Podemos usar os operadores de comparação e combiná-los usando os operadores lógicos `and`, `or` e `not`
```python
if delta > 0 and a > 0:
#....
if x == 3 or y != 4:
#....
```
----
## `if`
```python
a = float(input("Digite um número:"))
b = float(input("Digite um outro:"))
if a > b:
print("O primeiro número é maior")
```
----
## `if ... else`
```python
if condição:
# bloco de código que vai ser executado
# caso a `condição` for verdadeira
else:
# bloco de código que vai ser executado
# caso a `condição` for falsa
```
----
## `if...else`
```python
a = float(input("Digite um número:"))
b = float(input("Digite um outro:"))
if a > b:
print("O primeiro número é maior")
else:
print("O segundo número é maior")
```
----
## `if...elif...else`
```python
if condição1:
# bloco de código que vai ser executado
# caso a `condição1` for verdadeira
elif condição2:
# bloco de código que vai ser executado
# caso a `condição2` for verdadeira
else:
# bloco de código que vai ser executado
# caso contrário
```
----
## `if...elif...else`
```python
a = float(input("Digite um número:"))
b = float(input("Digite um outro:"))
if a > b:
print("O primeiro número é maior")
elif a == b:
print("Os números são iguais")
else:
print("O segundo número é maior")
```
----
### Importante
Quando tempos `if` com uma sequência de `elif`, o python executa o primeiro que tiver a condição verdadeira e depois sai do bloco.
---
# Condições aninhadas
----
Quando temos um `if` dentro de outro `if`, temos condicionais aninhados
```python
if condição_1:
if condição_2:
print("Saída 1")
else:
print("Saída 2")
else:
if condição_3:
print("Saída 3")
else:
print("Saída 4")
```
---
### Exemplo 05
- Vamos criar um programa que pede a data de nascimento da pessoa no formato `DD/MM/AAAA`, e diz qual a idade dela hoje (19/11/2019)
----
### Solução
```python
data = input("Digite sua data de nascimento (DD/MM/AAAA):")
# contando os caracteres do formato da data
# D D / M M / A A A A
# 0 1 2 3 4 5 6 7 8 9
dia = int(data[0:2])
mes = int(data[3:5])
ano = int(data[6:10])
hoje_dia = 19
hoje_mes = 11
hoje_ano = 2019
idade = hoje_ano - ano - 1
# -1 pois não sabemos se a pessoa já fez aniversário
if hoje_mes > mes:
# se já passamos do mes do aniversário
idade = idade + 1
# a idade já aumentou
elif hoje_mes == mes:
# se estamos no mes do aniversário
if hoje_dia >= dia:
# e se já passamos do dia do aniversário
idade = idade + 1
# a idade já aumentou
print("Sua idade é", idade)
```
---
A [sala de aula](https://repl.it/classroom/invite/iN6uHfl) no repl.it contém os exercícios
- Aula01 - Media
- Aula01 - Ano bissexto
- Aula01 - Tirando CNH
que devem ser resolvidos e enviados para correção.
---
# Fim Aula 01
> In reality, programming languages are how programmers express and communicate _ideas_ — and the audience for those ideas is other programmers, not computers.
> [name=Guido van Rossum]
{"metaMigratedAt":"2023-06-15T01:39:12.125Z","metaMigratedFrom":"YAML","title":"Lógica de programação 1 - v2","breaks":true,"description":"Minicurso de lógica de programação.","slideOptions":"{\"theme\":\"blood\",\"transition\":\"none\"}","contributors":"[{\"id\":\"97cff931-683e-4939-8bd1-380f6caced12\",\"add\":27499,\"del\":13487}]"}