Fundamentos de
Programação
Programas manipulam valores/dados (textos, números, ...) de tipos
distintos
O tipo de dado define o conjunto de valores válidos e disponibiliza um
conjunto de operações que podem ser efetuadas
Em Python os dados são objetos de um determinado tipo.
Todo objeto tem um tipo e um valor que são determinados quando é
criado e é armazenado na memória no formato de seu tipo.
É necessário conhecer como a linguagem Python lida com os tipos de
dados para evitar erros como realizar operações incompatíveis ao tipo
Tipos de dados
float 3.141592653589793 str Mia#0 int 2017Dados Tipo Valores Válidos Exemplos Numéricos Inteiros int N Z precisão fixa 5 101 6 -943 -4 Numéricos com parte fracionária float Q R Precisão variável mantissa (m) e expoente (e) 15.3 -0.37 6. .37 15e-5 Textuais ou string Sequência de letras, dígitos, símbolos igual ao número de 'a' '?' '6' '101' '12@34#$'
Uma variável é uma associação entre um nome e um valor.
Pode ser utilizada e alterada pelo programa e deve ser criada antes de ser
usada.
O nome de uma variável pode ter um ou mais caracteres. Regras:
• 1º caratere: letra ou underscore('_')
• Demais caracteres: letras, números ou underscore ('_')
• Letras maiúsculas e minúsculas são consideradas diferentes; • Proibido: caracteres especiais, espaços ou palavras reservadas
Em Python, o tipo da variável é o tipo do valor associado operações
mudam de acordo com o tipo
Variável
; str Mia#0 nome float 3.141592653589793 pi int 2017 ano Na 1ª atribuição: a variável é criada e seu conteúdo referencia o valor
resultante da expressão.
Nas demais atribuições: o valor da variável é substituído pelo resultado
da expressão
Atribuição
(1/5)nomeVariável = expressão
Atribuição
(2/5)Operação Operador Aritmético
Soma + Subtração -Multiplicação * Divisão / Divisão de inteiros // Resto da divisão % Potenciação ** Negativo
-<operando> operador aritmético -<operando> expressão aritmética:
nomeVariável = expressão
Valor constante
Variável ou retorno da chamada de uma função
Expressão Aritmética
expressão aritmética:
A expressão é avaliada de acordo com a prioridade dos operadores
1) Exponenciação (**)
2) Multiplicação e Divisão (*,/,//,%) 3) Soma e Subtração (+, -)
A ordem de avaliação pode ser modificada por parênteses
Atribuição
(3/5)import math
total = 100 # Cria variável total que referencia o objeto inteiro 100 peso = 10.5 # Cria variável peso que referencia o objeto real 10.5 angulo = math.pi # Cria variável angulo que referencia o objeto real pi
nome = 'Mia' # Cria variável nome que referencia o objeto string "Mia"
int 100 total float 10.5 peso angulo float 3.141592653589793 pi str Mia nome
Operações válidas com total operações do
tipo inteiro (+, -, *, /, //, %, **)
Atribuição
(4/5)import math
total = 100 # Cria variável total que referencia o objeto inteiro 100 peso = 10.5 # Cria variável peso que referencia o objeto real 10.5 angulo = math.pi # Cria variável angulo que referencia o objeto real pi
nome = 'Mia' # Cria variável nome que referencia o objeto string "Mia"
total = 'Não sei...'
int 100
total angulo float
3.141592653589793 pi
Atribuição
(5/5)import math
total = 100 # Cria variável total que referencia o objeto inteiro 100 peso = 10.5 # Cria variável peso que referencia o objeto real 10.5 angulo = math.pi # Cria variável angulo que referencia o objeto real pi
nome = 'Mia' # Cria variável nome que referencia o objeto string "Mia"
total = 'Não sei...'
float 10.5 peso angulo float 3.141592653589793 pi str Mia nome Operações válidas com total operações do tipo string (+,*) str Não sei... total
Operador +: adiciona ou concatena
Se ambos operandos são numéricos : soma os números Se ambos operandos são textos : concatena os textos
Demais casos: erro de execução (TypeError: não converte tipos implicitamente)
float 100 total float 102 dTot Str Mia@gmail.com email str Mia nome
dTot = total + 2 # dTot é criado e associado ao objeto int resultante de 100+2
total = total + 4.2 # total é associado ao objeto float resultante de 100+4.2
email = nome+ '@gmail.com' # email é criado e associado ao objeto str da concatenação
Operador *: multiplica ou replica
Se ambos operandos são numéricos: multiplica os números
Se um operando é texto e outro nº inteiro: replica a string nº vezes Demais casos: erro de execução (TypeError: não converte tipos implicitamente)
int 104.2 total int 204 a str MiaMiaMia nomRep str Mia nome
a = dTot * 2 # dTot é criado e associado ao objeto int resultante de 100+2
b = dTot * 2.0 # total é associado ao objeto float resultante de 100+4.2
nomRep = nome * 3 # noRep é criado e associado ao objeto str com 'Mia' replicado 3 vezes
float cAng int 102 dTot Exemplos: float 204.0 b
Strings são sequências de caracteres.
As posições dos carateres na sequência são numeradas por índices: da esquerda para direita, iniciando em 0.
da direita para a esquerda iniciando em -1.
É possível acessar um caractere ou um intervalo (fatia/slice) da string,
mas não modificá-los.
Mais sobre Strings: índices
string s:
Um caractere é uma string de comprimento 1.
Um elemento pode ser selecionado (indexado) pelo seu índice (sua
posição na sequência) utilizando o operador de indexação [ ]:
Operações em Strings:
acesso aos elementos
string s:
string[expressão inteira]
'm' '!' s[-9] s[-1] -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
U
m
a
f
r
a
s
e
!
0 1 2 3 4 5 6 7 8 9 s[0] s[3] s[9] 'U' ' ' '!'Seleciona um intervalo (fatia) da string da posição a (inclusive) até a posição b (exclusive) de n em n.
Operações em Strings: fatias
string s:
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1
U m a f r a s e !
0 1 2 3 4 5 6 7 8 9
■ Se a não for definido, será considerado como zero
■ Se b não for definido, será considerado o tamanho da string. ■ Se o intervalo n (entre os caracteres), não for definido, será 1.
Exemplo:
Exemplos de fatias de strings
s[:5] s[4:] s[-1:-3:-1] s[-1:-3] s[-3:-1] s[:] s[::2] s[0:4:2] s[4:0:-2] string s: -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 U m a f r a s e ! 0 1 2 3 4 5 6 7 8 9 'Uma f' 'frase!' '!e' '' 'se' 'Uma frase!' 'Uafae' 'Ua‘ ‘fa‘ Qual a string resultante?Fatias (slices): Resumo
seq[a:b: n]
seq[a : b] - cria uma cópia de a (inclusive) até b (exclusive)
seq[a : ] - cria uma cópia a partir de a (inclusive)
seq[ : b] - cria uma cópia até b (exclusive)
seq[ : ] - cria uma cópia de todos os elementos
seq[a : b: n] - cria uma cópia de a (inclusive) até b (exclusive) de n em n
Variável String x Atribuição
(1/6)emailProf = 'Mia@gmail.com' # Cria variável emailProf
Variável String x Atribuição
(2/6)emailProf = 'Mia@gmail.com' # Cria variável emailProf
emailPart = 'Mia123@hotmail.com' # Cria variável emailPart
str
Mia@gmail.com emailProf
Variável String x Atribuição
(3/6)emailProf = 'Mia@gmail.com' # Cria variável emailProf
emailPart = 'Mia123@hotmail.com' # Cria variável emailPart
emailProf = 'Mia@puc-rio.br' # Associa outro valor à variável emailProf
str Mia@gmail.com emailProf str Mia123@hotmail.com emailPart
Representação
Variável String x Atribuição
(4/6)emailProf = 'Mia@gmail.com' # Cria var emailProf
emailPart = 'Mia123@hotmail.com' # Cria var emailPart
emailProf = 'Mia@puc-rio.br' # Associa outro valor à variável emailProf
str
Mia@puc-rio.br emailProf
Variável String x Atribuição
(5/6)emailProf = 'Mia@gmail.com' # Cria var emailProf
emailPart = 'Mia123@hotmail.com' # Cria var emailPart
emailProf = 'Mia@puc-rio.br' # Associa outro valor à variável emailProf
emailProf[0] = 'a' str Mia@puc-rio.br emailProf str Mia123@hotmail.com emailPart
Representação
Variável String x Atribuição
(6/6)emailProf = 'Mia@gmail.com' # Cria var emailProf
emailPart = 'Mia123@hotmail.com' # Cria var emailPart
emailProf = 'Mia@puc-rio.br' # Associa outro valor à variável emailProf
emailProf[0] = 'a'
#ERRO!!!!!
str Mia@puc-rio.br emailProfRepresentação
emailProf[0]='a'
1. Crie uma string com o 2º e o 3º caractere da frase "Oie, tudo bem" replicados 4 vezes. Exemplo: ‘ieieie'
Dicas: associe a frase inicial a uma variável
Uma fatia pode ser "separada" com o uso do operador [a:b:n] o operador + concatena strings
o operador * replica strings
2. A operadora de celular em uma cidade guarda os números no formato abaixo. '+55(021)8888-8888' . Como a região trocou de 8 para 9 algarismos:
• Separe o país • Separe a área
• Separe o número do telefone
• Crie a string com paísáreanº(velho)
• Coloque o 9 antes do nº do telefone no formato da operadora • Crie a string com paísáreanº(novo)
3. Crie a string alfabeto
>>>alfabeto = "abcdefghijklmnopqrstuvwxyz" e, a partir da string alfabeto:
a) crie uma string com o caractere do meio b) Importe o módulo random
• Veja o help da função choice : help(random.choice) • Veja o help da função randint : help(random.randint)
c) Mostre o caractere do alfabeto escolhido pelas duas funções (choice
e o randint)
CUIDADO: A função randint gera um nº em um intervalo. Para saber o
4. Guarde seu nome em uma variável. Exemplo: nome= 'Pedro José Silva Só'
a) Exiba o sobrenome seguido de vírgula e do resto do nome(Só,Pedro José Silva)
b) Exiba uma string formada por '*' com mesmo comprimento de seu nome (*******************).
Dica: a função len(string) retorna o comprimento da string a) Exiba seu primeiro nome invertido ('ordeP')
b) Replique o caractere do meio de seu nome, para que tenha o mesmo comprimento de seu primeiro nome ('ééééé')
5. Guarde sua data de nascimento em uma variável no formato 'dd/mm/aaaa'. Exemplo dt = '01/01/1984'
a) Exiba apenas o ano ('1984') b) Exiba o ano invertido ('4891')
c) Exiba toda a data invertido ('4891/10/10')
6. Um operador de crossover pode ser aplicado a duas strings s1 e s2 e consiste em sortear aleatoriamente um ponto de s1 e s2. Escolhido este ponto, então, é realizada a troca de informações de s1 e s2 tal como mostrado no esquema da Figura abaixo
a) crie duas strings s1 e s2
b) considere um ponto de quebra sorteado via randint
Em geral computa valores a partir de valores recebidos:
uma função pode receber e/ou retornar valores.
As funções são ativadas pelo nome por outra função, módulo ou
diretamente no interpretador
Quando a função termina, o controle retorna para o ponto de onde a
função foi chamada (invocada/ativada)
Funções
Uma função é uma sequência de instruções (bloco de código) independente, a qual se atribui um nome e que realiza uma tarefa específica
Desenvolvimento da solução por partes
P
ermite pensar no problema em diversos níveis Modularização
Testes independentes – facilita a correção de erros
Reuso
Mais legível (código menor)
Facilita a manutenção
Definição da função inicia com "def"
o cabeçalho termina com :
Definição da função inicia com "def" Nome da função
o cabeçalho termina com :
Definição da função inicia com "def" Nome da função
o cabeçalho termina com : Parâmetros
Definição da função inicia com "def" Nome da função o cabeçalho termina com : Parâmetros Identação
Definindo Funções
(4/6)Definição da função inicia com "def" Nome da função o cabeçalho termina com : Parâmetros Identação "return" encerra a função, podendo retornar um valor
Definindo Funções
(5/6)Definindo Funções
(6/6)Definição da função inicia com "def" Nome da função
o cabeçalho termina com : Parâmetros Identação "return" encerra função, podendo retornar um valor docstring Texto sucinto que descreve o objetivo da função
Formato geral:
onde:
– nome : nome associado à sequência de instruções
– v1..vn: parâmetros - nomes associados aos valores transmitidos à função na sua chamada e necessários para realizar sua tarefa
• Uma função pode ter 0, 1 ou mais parâmetros
– comandos: sequência de instruções que será executada quando a função é
invocada
O comando return <exp>
a) força o encerramento da função, retornando para quem a chamou.
Funções: Sintaxe
def funcao_qualquer (v1, v2, ... v2): """ texto de documentação""" comando . . . comando return algo A definição da função deve ser feita antes da sua chamada para que o
Python reconheça o seu nome.
Não pode haver funções e variáveis com o mesmo nome!
Os valores recebidos são associados aos parâmetros na ordem que
estão na chamada.
A chamada da função deve incluir um valor para cada parâmetro
(exceção: parâmetros com valores default)
Uma função pode ter 0, 1 ou mais return. Uma função pode chamar outra função.
Observações sobre Funções
def f(x,y):
return x-y
def g(x,y):
Observações
O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
A declaração da função deve ser feita antes da sua chamada para que o Python reconheça o seu nome.Funções: definição e uso
(1/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a A função só é executada se for ativada em algum comandoFunções: definição e uso
(2/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a b int 4Funções: definição e uso
(3/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a b int 4 A função só é A chamada da função deve incluir um valor para cada parâmetroFunções: definição e uso
(4/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 4 x y int 3Os valores são recebidos e associados aos parâmetros na ordem que estão na chamada.
Funções: definição e uso
(5/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 4 x y int 3Funções: definição e uso
(6/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
1Funções: definição e uso
(7/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a b int 4 c Int 1Funções: definição e uso
(8/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a b int 4 c Int 1Funções: definição e uso
(9/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 x y int 4Os valores são recebidos e associados aos parâmetros na ordem que estão na chamada.
Funções: definição e uso
(10/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 4 x y int 3Funções: definição e uso
(11/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
-1Funções: definição e uso
(12/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
int 3 a b int 4 c Int 1 d int -1Funções: definição e uso
(13/14) O que acontece???def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
e=x-3
O que acontece???
Funções: definição e uso
(14/14)def
f
(x,y):
return
x-y
a=3
b=4
c=f(b,a)
#c:1
d=f(a,b)
#d:-1
e=x-3
e=x-4NameError: name 'x' is not defined
Os parâmetros e demais variáveis
definidas dentro da função são locais a
ela, isto é, só existem onde foram
definidas
As variáveis locais são descartadas quando a função é finalizada
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço (URL) do site da disciplina.
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço da site da disciplina
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
URL: desenvolvendo a solução
(1/5)I. Qual o objetivo desta função?
Responder a quem a ativou o endereço do site da disciplina retornar uma string
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço da site da disciplina
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
URL: desenvolvendo a solução
(2/5)I. Qual o objetivo desta função?
Responder a quem a ativou o endereço do site da disciplina retornar uma string
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço da site da disciplina
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
URL: desenvolvendo a solução
(3/5)I. Qual o objetivo desta função?
Responder a quem a ativou o endereço do site da disciplina retornar uma string
II. Do que a função precisa para realizar sua tarefa?
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço da site da disciplina
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
URL: desenvolvendo a solução
(4/5)I. Qual o objetivo desta função?
Responder a quem a ativou o endereço do site da disciplina retornar uma string
II. Do que a função precisa para realizar sua tarefa?
Faça a função nomeSite que receba o código de uma disciplina da PUC, construa e retorne o endereço da site da disciplina
Exemplo: código da disciplina: inf1025
String de retorno: www.inf.puc-rio.br/~inf1025
URL: desenvolvendo a solução
(5/5)I. Qual o objetivo desta função?
Responder a quem a ativou o endereço do site da disciplina retornar uma string
II. Do que a função precisa para realizar sua tarefa?
Do nome da disciplina (uma string)
III. Como ela realiza sua tarefa?
1. Separa o código do departamento
URL: uma possível solução
def
nomeSite
(codigoDaDisciplina):
""" Nome do site dada disciplina"""
dep = codigoDaDisciplina [:3]
site = '
www.
‘\
+ dep\
+ '
.puc-rio.br/~
‘\
Escopo dos nomes
(1/3) importrandom
def
f
(x,y):
a=random.randint(x,y) return a+x-ya=3
b=4
c=f(b,a)
d=f(a,b)
escopo 1- Módulo escopo 2 - Função O escopo define a visibilidade de
nomes em blocos de códigos (módulo,função,comando):
Espaço de nomes (name space) -nomes acessíveis em um ponto do programa.
Um programa começa no escopo
do módulo, global (escopo1) e cada função / bloco acrescenta um escopo próprio – local
Escopo dos nomes
(2/3) importrandom
def
f
(x,y):
a=random.randint(x,y) return a+x-ya=3
b=4
c=f(b,a)
d=f(a,b)
escopo 2 - Função Variável criada fora de um bloco
é visível em qualquer lugar
Variável criada dentro de um
bloco, só existe se esse bloco for executado
Quando um nome é acessado,
todos os escopos são
Escopo dos nomes
(3/3) importrandom
def
f
(x,y):
a=random.randint(x,y) return a+x-ya=3
b=4
c=f(b,a)
d=f(a,b)
escopo 1- Módulo escopo 2 - Função Variáveis Locais Variáveis Globais a foi 'ofuscada', pois foi (re)definida na função Escopo 1 – Módulo Nomes: função f Variáveis: a,b,c,d Instruções imediatamente executadas pelo interpretador Escopo 2 – Função f Nomes:Variáveis locais: a,x,y Variáveis Globais: b,c,d Instruções executadas só quando ativadas em um bloco de código
Variável criada dentro de um bloco só existe se esse bloco for executado:
Blocos e variáveis: cuidado!!
nome =''
for letra in nome k=letra*2 nome=nome+k
Variável criada dentro de um bloco só existe se esse bloco for executado:
Bloco não roda, não cria variável!
nome =''
for letra in nome k=letra*2 nome=nome+k
nome=nome+k
NameError: name 'k' is not defined
Nome está vazio
bloco do for não é executado
a variável k não foi criada!!
Uma função pode chamar a si própria, isso é chamado de função recursiva.
Cada vez que a função é chamada, uma nova instância de suas variáveis e parâmetros é criada.
Um módulo basicamente é um arquivo contendo funções, variáveis e
constantes, com extensão .py
Python fornece uma biblioteca padrão com inúmeros módulos
O programador pode criar seus próprios módulos, salvando seus
arquivos com extensão .py.
• Cuidado: para importar um módulo do programador, este deve estar
salvo na mesma pasta do módulo atual ou em um caminho conhecido do Python...
Um módulo pode ser importado por outro módulo para que este possa
fazer uso da suas funcionalidades pelo comando import
import móduloX:
insere uma referência ao móduloX no namespace do módulo atual. Todos os nomes definidos no móduloX podem ser acessados.
móduloX.função(...) – ativa uma função do móduloX from móduloX import * :
Todos as definições do móduloX são inseridas diretamente no namespace atual.
Basta o nome da função definida no móduloX para ativá-la from móduloX import f1, f2, f3 :
apenas as funções f1, f2 e f3 do móduloX são inseridas no namespace do módulo atual. Útil em módulos com muitas funções:
1. a) construa uma função que recebe as coordenadas de dois pontos e retorna a distância euclidiana entre eles.
A fórmula da distância euclidiana é: d² = (Xa-Xb)² + (Ya-Yb)².
b) construa uma função que recebe as coordenadas de três pontos quaisquer do plano que formam um triângulo (ou seja, as coordenadas x e y do ponto A, do ponto B e do ponto C) e retorne o perímetro deste triângulo calculado por:
d(A,B) + d(A,C) + d(B,C)
Exemplo: perimetro(-100,100,140,0,-290,290) 535.6643996204651
c) crie a função desenhaTri, que recebe um tartaruga e os 3 pontos, desenha o triângulo formado pelos pontos com o uso do módulo turtle e escreve na coordenada 0,0 o valor do perímetro. Veja as funções goto() e write() do módulo
turtle
Observações: As funções distância, perimetro e desenhaTri, devem estar no módulo “functriangulo.py”.
Outro módulo chamado de “progTri.py” deve importar o módulo “functriangulo”,
2. a) construa uma função que recebe o raio de um círculo e retorna sua área
b) construa uma função que recebe um raio, calcule a área de cada alvo conforme esquema abaixo e retorne um string com:
' Área verde: ... Área amarela:... Área preta: ... ‘
• O círculo externo, de cor verde, tem raio igual ao recebido,
• O raio do intermediário, de cor amarela, é 2/3 do raio do círculo
externo
Exercícios
(2/5)3. Dizem que para saber o seu número da sorte basta você seguir os seguintes passos:
Multiplique sua idade por 4. Some 8.
Multiplique o resultado por 60. Divida por 240.
Some 22.
Subtraia a sua idade.
PARABENS! Esse é seu número da sorte.
Escreva um função que receba o nome e a idade de uma pessoa e retorne a frase: "Parabéns fulano! seu número da sorte é x!", onde fulano é o nome da pessoa, e x é o número da sorte encontrado.
Faça uma função separada para calcular o número da sorte.
4. a) Faça uma função sopaletras, que recebe uma string e retorna esta string rotacionada para a esquerda (a 1
ª
letra vira última).Exemplo: >>> sopaletras ('abcdef') bcdefa
b) DESAFIO: crie uma função que recebe uma string e constrói todas suas rotações.
Exemplo: >>> sopaletras ('abcdef')
' bcdefa cdefab defabc efabcd fabcde'
5. Faça um função que receba um verbo regular terminado em er e retorne uma string com sua conjugação no presente do indicativo.
Exemplo: >>> conjugar('absorver‘)
6. a) Faça uma função que receba uma string e retorna uma string apenas com os caracteres de índices pares
b) Faça um função que receba uma string e retorne uma string com os caracteres da string recebida ao contrário
c) Faça uma função que recebe o nome de uma pessoa e a data de nascimento ('dd/mm/aaaa' ) e crie e retorne sua senha de acordo com a seguintes regra:
caracteres dos índices pares + dia do nascimento +
caracteres dos índices pares invertidos
Exemplo: senha('Patinhas', '22/12/1900') 'Ptna22antP'