Escolar Documentos
Profissional Documentos
Cultura Documentos
Apresentação
Um dos maiores obstáculos no desenvolvimento de algoritmos está relacionado à
transcrição do que se propõe a resolver para um código que a máquina vá entender.
Sabemos que problemas de Engenharia não são simples, tornando a tarefa de
programar ainda mais difícil; além disso, é recorrente a manipulação de diversas
estruturas de dados, como números de alta precisão, textos, datas e horas.
Objetivos
Programar algoritmos lidando com estruturas e dados com maior complexidade;
Construir programas a partir das principais bibliotecas disponíveis na linguagem.
Programação Estruturada
O maior problema em grandes sistemas de software reside na enorme
complexidade desses sistemas, cuja apreensão vai geralmente muito além da
capacidade intelectual de um ser humano.
Separando Strings
Exemplo
Podemos dividir a string ppr meio da função split()! Por exemplo, para
dividir o texto “Olá Mundo ” através do comando “Olá Mundo ”.split(‘’). As
aspas dentro dos parênteses indicam que o critério de divisão será o
espaço entre as palavras da string. Voltando ao nosso problema...
>>> print(primeiro_nome)
sao
paulo
O que o comado split() fez foi justamente dividir o texto em dois termos para
um vetor. Temos de indicar a posição de cada elemento para a respectiva
variável. Note que a primeira posição é zero, conforme pode ser observado no
exemplo.
>>> nome.replace(‘sao’,são’)
são paulo
>>> print(nome.title())
são paulo
>>> print(nome.upper())
SÃO PAULO
>>> print(nome.lower())
são paulo
>>> print(nome.capitalize())
São paulo
Métodos Booleanos
O Python possui alguns métodos de string que serão avaliados em um valor
booleano. Esses métodos são úteis quando estamos criando formulários para
os usuários preencherem, por exemplo. Se estivermos solicitando um cep,
desejaremos aceitar apenas uma string numérica, mas, quando solicitarmos
um nome, desejaremos aceitar apenas uma string alfabética.
Exemplo
>>> print(numero.isnumeric())
True
>>> print(letras.isnumeric())
False
>>> round(5.67, 1)
5.7
>>> round(10.9568, 2)
10.96
Atenção
Imagine que você necessita realizar cálculos precisos com números decimais e
que pequenos erros não podem ser tolerados.
Um problema bem conhecido com os números de ponto flutuante é que eles
não podem representar com precisão todas as decimais da base 10. Além
disso, até mesmo cálculos matemáticos simples introduzem pequenos erros.
Por exemplo:
Exemplo
>>> x = 4.2
>>> y = 2.1
>>> x + y
6.300000000000001
>>> (x + y) == 6.3
False
>>> x = Decimal('4.2')
>>> y = Decimal('2.1')
>>> x + y
Decimal('6.3')
>>> print(x + y)
6.3
>>> (x + y) == Decimal('6.3')
True
Trabalhando com Frações
>>> a = Fraction(5, 4)
>>> print(a + b)
27/16
>>> print(a * b)
35/64
# Obtendo numerador/denominador
>>> c = a * b
>>> c.numerator
>>> c.denominator
>>> x = 3.75
>>> y = Fraction(*x.as_integer_ratio())
>>> y
Fraction(15, 4)
Por exemplo:
>>> a = complex(2, 4)
>>> b = 3 - 5j
>>> a
(2+4j)
>>> b
(3-5j)
>>> a.real
2.0
>>> a.imag
4.0
>>> a.conjugate()
(2-4j)
>>> b = timedelta(hours=4.5)
>>> c = a + b
>>> c.days
>>> c.seconds
37800
10.5
58.5
Exemplo
>>> a = datetime(2018, 1, 1)
2018-01-11 00:00:00
>>> b = datetime(2018, 2, 21)
>>> d = b - a
>>> d.days
51
2018-06-09
2018-06-09 12:08:00
2012-12-21
Dica
Bibliotecas
De forma simplificada, as bibliotecas são componentes que oferecem funções
e classes para nossos programas. Além das funções já incorporadas, o Python
conta com uma extensa lista de bibliotecas para as mais variadas finalidades.
Datetime
Math
Nesse caso, podemos usar a função pow disponível na biblioteca math. Sua
sintaxe é pow(double x, double y). Ela recebe dois argumentos do tipo
double: o primeiro é a base, e o segundo, o expoente, retornando o valor da
base elevada ao expoente.
>>> print(math.pow(2,10))
1024
# função
>>> print(pow(2,10))
1024
Existe outra forma de realizar a mesma operação, por meio do operador **.
Mas gostaríamos de uma maneira mais fácil para calcular outras raízes, não é?
Essa função é a sqrt(double x), que retorna o valor da raiz quadrada,
recebendo como argumento um double do qual ele deve extrair a raiz.
Exemplo
>>> print(math.sqrt(36))
6.0
Funções Trigonométricas
Muitos problemas geométricos envolvem o cálculo de senos, cossenos e
tangentes. Imagine que nos foi pedido um programa que calcule a distância
(em km) ao longo da Terra entre dois pares de latitude e longitude, além dos
cálculos envolvendo triângulos. Isso envolveria o cálculo do seno, cosseno,
tangente e hipotenusa.
>>> else:
>>> t = math.tan(rad)
Funções logarítmicas
>>> print(pagerank_a)
3.9999565683801923
>>> pagerank_a.floor()+1
4
Para logaritmos na base e utilizamos log(double x), em que o x é o
logaritmando. A função log() leva um segundo argumento opcional que
permite que você especifique a base. Por exemplo, para calcular o Log de 8 na
base 2, o comando é:
>>> math.log(8,2).
Funções de Arredondamento
Em certas situações, gostaríamos de arredondar valores ou simplesmente
considerar a parte inteira. Imagine que você pudesse sugerir uma função para
“arredondar” sua nota, que atualmente é 7.1, para 8. Essa função seria a
ceil(double x). Ela retorna o primeiro float sem casas decimais acima,
recebendo um float como argumento. Exemplo: math.ceil (45.98561)
resultaria em 46.
Suponha que seu algoritmo espere que o usuário informe um número inteiro.
No entanto, foi digitado por engano um número real, por exemplo 10.2.
Dica
a) I e II.
b) I e III.
c) II e III.
d) Todas estão corretas.
e) Todas estão erradas.
Referências
GRUS, J. Data science from scratch: first principles with Python. Beijing:
O’Reilly, 2015.
Próximos Passos
Explore mais