Números Python, conversão de tipo e matemática

Neste artigo, você aprenderá sobre os diferentes números usados ​​em Python, como converter de um tipo de dados para outro e as operações matemáticas com suporte em Python.

Tipo de dados numéricos em Python

Python suporta números inteiros, números de ponto flutuante e números complexos. Eles são definidos como int, floate complexclasses em Python.

Os inteiros e os pontos flutuantes são separados pela presença ou ausência de um ponto decimal. Por exemplo, 5 é um número inteiro enquanto 5.0 é um número de ponto flutuante.

Os números complexos são escritos na forma x + yj,, onde x é a parte real ey é a parte imaginária.

Podemos usar a type()função para saber a qual classe uma variável ou valor pertence e a isinstance()função para verificar se ele pertence a uma classe particular.

Vejamos um exemplo:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Quando executamos o programa acima, obtemos a seguinte saída:

 (8 + 3j) Verdadeiro

Embora os inteiros possam ter qualquer comprimento, um número de ponto flutuante é preciso apenas até 15 casas decimais (a 16ª casa é imprecisa).

Os números com que lidamos todos os dias são do sistema numérico decimal (base 10). Mas os programadores de computador (geralmente programadores embutidos) precisam trabalhar com sistemas de números binários (base 2), hexadecimais (base 16) e octais (base 8).

Em Python, podemos representar esses números colocando apropriadamente um prefixo antes desse número. A tabela a seguir lista esses prefixos.

Sistema Numérico Prefixo
Binário '0b' ou '0B'
Octal '0o' ou '0O'
Hexadecimal '0x' ou '0X'

Aqui estão alguns exemplos

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Quando você executa o programa, a saída será:

 107 253 13

Conversão de Tipo

Podemos converter um tipo de número em outro. Isso também é conhecido como coerção.

Operações como adição e subtração obrigam o inteiro a flutuar implicitamente (automaticamente), se um dos operandos for flutuante.

 >>> 1 + 2.0 3.0

Podemos ver acima que 1 (inteiro) é coagido em 1,0 (flutuante) para adição e o resultado também é um número de ponto flutuante.

Podemos também usar funções internas, como int(), float()e complex()para converter entre os tipos explicitamente. Essas funções podem até mesmo converter strings.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Ao converter de float para inteiro, o número fica truncado (as partes decimais são removidas).

Decimal Python

A classe float interna do Python executa alguns cálculos que podem nos surpreender. Todos nós sabemos que a soma de 1.1 e 2.2 é 3.3, mas Python parece discordar.

 >>> (1.1 + 2.2) == 3.3 False

O que está acontecendo?

Acontece que os números de ponto flutuante são implementados no hardware do computador como frações binárias, já que o computador só entende binário (0 e 1). Por este motivo, a maioria das frações decimais que conhecemos não podem ser armazenadas com precisão em nosso computador.

Vamos dar um exemplo. Não podemos representar a fração 1/3 como um número decimal. Isso nos dará 0,33333333 … que é infinitamente longo, e podemos apenas aproximar isso.

Acontece que a fração decimal 0,1 resultará em uma fração binária infinitamente longa de 0,000110011001100110011 … e nosso computador armazena apenas um número finito dela.

Isso será aproximadamente 0,1, mas nunca será igual. Portanto, é a limitação do hardware do nosso computador e não um erro no Python.

 >>> 1.1 + 2.2 3.3000000000000003

Para superar esse problema, podemos usar o módulo decimal que vem com o Python. Enquanto os números de ponto flutuante têm precisão de até 15 casas decimais, o módulo decimal tem precisão configurável pelo usuário.

Vamos ver a diferença:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Resultado

 0,1 0,100000000000000055511151231257827021181583404541015625

Este módulo é usado quando queremos realizar cálculos decimais conforme aprendemos na escola.

Ele também preserva o significado. Sabemos que 25,50 kg é mais preciso do que 25,5 kg, pois tem duas casas decimais significativas em comparação com uma.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Resultado

 3,3 3.000

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))

Output

 2476979795053773/2251799813685248 11/10

This data type supports all basic operations. Here are a few examples.

 from fractions import Fraction as F print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10)> 0) print(F(-3, 10) < 0)

Output

 2/3 6/5 False True

Python Mathematics

Python offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6))

Output

 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720

Here is the full list of functions and attributes available in the Python math module.

 import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())

Quando executamos o programa acima, obtemos a saída da seguinte forma. (Os valores podem ser diferentes devido ao comportamento aleatório)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Aqui está a lista completa de funções e atributos disponíveis no módulo aleatório Python.

Artigos interessantes...