Tutorial de Cálculos Matemáticos

Intermediate

This tutorial is from open-source community. Access the source code

Introdução

Esta seção discute cálculos matemáticos.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 66%. Recebeu uma taxa de avaliações positivas de 91% dos estudantes.

Tipos de Números

Python possui 4 tipos de números:

  • Booleanos (Booleans)
  • Inteiros (Integers)
  • Ponto flutuante (Floating point)
  • Complexos (números imaginários)

Booleanos (bool)

Booleanos possuem dois valores: True, False.

a = True
b = False

Numericamente, eles são avaliados como inteiros com valor 1, 0.

c = 4 + True ## 5
d = False
if d == 0:
    print('d is False')

Mas, não escreva código assim. Seria estranho.

Inteiros (int)

Valores com sinal de tamanho e base arbitrários:

a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8      ## Hexadecimal
d = 0o253       ## Octal
e = 0b10001111  ## Binary

Operações comuns:

x + y      Adição (Add)
x - y      Subtração (Subtract)
x * y      Multiplicação (Multiply)
x / y      Divisão (Divide) (produz um float)
x // y     Divisão inteira (Floor Divide) (produz um inteiro)
x % y      Módulo (resto) (Modulo)
x ** y     Potência (Power)
x << n     Deslocamento de bits para a esquerda (Bit shift left)
x >> n     Deslocamento de bits para a direita (Bit shift right)
x & y      E bit a bit (Bit-wise AND)
x | y      OU bit a bit (Bit-wise OR)
x ^ y      XOR bit a bit (Bit-wise XOR)
~x         NOT bit a bit (Bit-wise NOT)
abs(x)     Valor absoluto (Absolute value)

Ponto flutuante (float)

Use notação decimal ou exponencial para especificar um valor de ponto flutuante:

a = 37.45
b = 4e5 ## 4 x 10**5 or 400,000
c = -1.345e-10

Floats são representados como precisão dupla usando a representação nativa da CPU IEEE 754. Esta é a mesma que o tipo double na linguagem de programação C.

17 dígitos de precisão
Expoente de -308 a 308

Esteja ciente de que números de ponto flutuante são inexatos ao representar decimais.

>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>

Este não é um problema do Python, mas sim do hardware de ponto flutuante subjacente na CPU.

Operações comuns:

x + y      Adição (Add)
x - y      Subtração (Subtract)
x * y      Multiplicação (Multiply)
x / y      Divisão (Divide)
x // y     Divisão inteira (Floor Divide)
x % y      Módulo (Modulo)
x ** y     Potência (Power)
abs(x)     Valor absoluto (Absolute Value)

Estes são os mesmos operadores que os Inteiros, exceto pelos operadores bit a bit. Funções matemáticas adicionais são encontradas no módulo math.

import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)

Comparações (Comparisons)

Os seguintes operadores de comparação/relacionais funcionam com números:

x < y      Menor que (Less than)
x <= y     Menor ou igual a (Less than or equal)
x > y      Maior que (Greater than)
x >= y     Maior ou igual a (Greater than or equal)
x == y     Igual a (Equal to)
x != y     Diferente de (Not equal to)

Você pode formar expressões booleanas mais complexas usando

and, or, not

Aqui estão alguns exemplos:

if b >= a and b <= c:
    print('b is between a and c')

if not (b < a or b > c):
    print('b is still between a and c')

Convertendo Números (Converting Numbers)

O nome do tipo pode ser usado para converter valores:

a = int(x)    ## Converte x para inteiro
b = float(x)  ## Converte x para float

Experimente.

>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' ## Também funciona com strings contendo números
>>> float(b)
3.14159
>>>

Lembrete: Estes exercícios assumem que você está trabalhando no diretório ~/project. Procure o arquivo mortgage.py.

Exercício 1.7: Hipoteca do Dave (Dave's mortgage)

Dave decidiu contratar uma hipoteca de taxa fixa de 30 anos de $500.000 com a Guido's Mortgage, Stock Investment, and Bitcoin trading corporation. A taxa de juros é de 5% e o pagamento mensal é de $2684.11.

Aqui está um programa que calcula o valor total que Dave terá que pagar durante a vida da hipoteca:

## mortgage.py

principal = 500000.0
rate = 0.05
payment = 2684.11
total_paid = 0.0

while principal > 0:
    principal = principal * (1+rate/12) - payment
    total_paid = total_paid + payment

print('Total paid', total_paid)

Insira este programa e execute-o. Você deve obter a resposta 966279.5999999957.

Exercício 1.8: Pagamentos extras (Extra payments)

Suponha que Dave pague um extra de $1000/mês durante os primeiros 12 meses da hipoteca?

Modifique o programa para incorporar este pagamento extra e faça com que ele imprima o valor total pago juntamente com o número de meses necessários.

Quando você executar o novo programa, ele deverá relatar um pagamento total de 929965.6199999959 em 342 meses.

Exercício 1.9: Criando uma Calculadora de Pagamento Extra (Making an Extra Payment Calculator)

Modifique o programa para que as informações de pagamento extra possam ser tratadas de forma mais geral. Faça com que o usuário possa definir estas variáveis:

extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000

Faça com que o programa observe essas variáveis e calcule o total pago de forma apropriada.

Quanto Dave pagará se ele pagar um extra de $1000/mês por 4 anos, começando após os primeiros cinco anos já terem sido pagos?

Exercício 1.10: Criando uma tabela (Making a table)

Modifique o programa para imprimir uma tabela mostrando o mês, o total pago até agora e o principal restante. A saída deve ser semelhante a esta:

1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3478.83
309 877389.99 809.21
310 880074.10 -1871.53
Total pago 880074.10
Meses 310

Exercício 1.11: Bônus (Bonus)

Já que está nisso, corrija o programa para corrigir o pagamento a mais que ocorre no último mês.

Exercício 1.12: Um Mistério (A Mystery)

int() e float() podem ser usados para converter números. Por exemplo:

>>> int("123")
123
>>> float("1.23")
1.23
>>>

Com isso em mente, você consegue explicar este comportamento?

>>> bool("False")
True
>>>

Resumo (Summary)

Parabéns! Você completou o laboratório de Números. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.