English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá sobre os diferentes números usados no Python, como converter um tipo de dados para outro e as operações matemáticas suportadas pelo Python.
O Python suporta inteiros, números de ponto flutuante e números complexos. Eles são definidos como int, float e complex no tipo de dados Python.
os inteiros e os números de ponto flutuante são separados por um ponto decimal.5é um inteiro, enquanto5.0 é um número de ponto flutuante.
os números complexos são escritos na forma x + yj, ondexé a parte real,yé a parte imaginária.
Podemos usar a função type() para determinar o tipo de dado de uma variável ou valor e usar a função isinstance() para verificar se pertence a um tipo específico.
a = 5 # Saída: <class 'int'> print(type(a)) # Saída: <class 'float'> print(type(5.0)) # Saída: (8+3j) c = 5 + 3j print(c + 3) # Saída: True print(isinstance(c, complex))
Embora os inteiros possam ter comprimento arbitrário, os números de ponto flutuante podem ser precisos apenas até15máximos pontos decimais (o16dígitos decimais (base
os dígitos não são precisos).10) sistemas de numeração. Nós lidamos com números decimais (base2) sistemas de numeração. Mas os programadores de computadores (normalmente programadores embarcados) precisam usar binário (base16) e hexadecimal (base8) e octal (base
) do sistema de numeração.
sistema de numeração | pré-fixo |
---|---|
Binário | '0b' ou '0B' |
Octal | '0o' ou '0O' |
Hexadecimal | '0x' ou '0X' |
Aqui estão alguns exemplos
# Saída: 107 print(0b1101011) # Saída: 253 (251 + 2) print(0xFB + 0b10) # Saída: 13 print(0o15)
Quando executamos o programa, a saída é:
107 253 13
Podemos converter um número em outro número. Isso também é chamado de conversão forçada.
se um dos operandos for um número de ponto flutuante, operações como adição, subtração etc. forçarão a conversão implícita (automática) de inteiros para números de ponto flutuante.
>>> 1 + 2.0 3.0
Podemos ver acima1inteiros) são forçados a converter-se10 (float) para operações de adição, o resultado também é um número de ponto flutuante.
Também podemos usar funções integradas como int(), float() e complex() para converter explicitamente entre tipos. Essas funções podem até realizar operações de adição, resultando em um número de ponto flutuante.0 (float).stringconversão.
>>> 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 será truncado (o inteiro mais próximo de zero).
A classe interna float do Python executa alguns cálculos que podem nos surpreender. Todos sabemos1.1e2.2a soma é3.3Mas o Python parece não concordar.
>>> (1.1 + 2.2) == 3.3 False
O que está acontecendo?
A verdade é que os números flutuantes são implementados como frações binárias na hardware do computador, pois os computadores compreendem apenas binário (0 e1)。Por essa razão, a maioria dos números decimais que conhecemos não pode ser armazenados exatamente em nossos computadores.
Vamos dar um exemplo. Não podemos representar a fração1/3representado como número decimal. Isso dará 0.33333333 ...infinito, e podemos apenas fazer uma aproximação.
O número decimal original 0.1Isso levaria a uma fração binária 0.000 de comprimento infinito.110011001100110011 ...e nossos computadores armazenam apenas um número limitado de números binários.
Isso só se aproxima de 0.1mas nunca serão iguais. Portanto, isso é uma limitação da hardware do computador, não um erro no Python.
>>> 1.1 + 2.2 3.3000000000000003
Para superar esse problema, podemos usar o módulo decimal que acompanha o Python. A precisão dos números flutuantes pode alcançar15casas decimais, enquanto o módulo decimal tem precisão configurável pelo usuário.
import decimal # Saída: 0.1 print(0.1) # Saída: Decimal('0.1000000000000000055511151231257827021181583404541015625') print(decimal.Decimal(0.1))
Quando queremos realizar cálculos decimais como na escola, usaremos este módulo.
Eles também mantêm significado. Sabemos que25.50 quilogramas são25.5Os quilogramas são mais precisos, pois têm duas casas decimais em vez de uma.
from decimal import Decimal as D # Saída: Decimal('3.3') print(D('1.1') + D('2.2)) # Saída: Decimal('3.000') print(D('1.2') * D('2.50'))
Atenção aos zeros ao final do exemplo.
Podemos perguntar, por que não usar Decimal em vez de float a cada vez? A principal razão é a eficiência. A operação de ponto flutuante deve ser mais rápida que a operação decimal.
Nas seguintes situações, geralmente usamos decimal.
Quando realizamos aplicações financeiras que requerem representação decimal exata.
Quando precisamos especificar o nível de precisão desejado.
Quando queremos implementar o conceito de precisão de casas decimais.
Quando queremos operar como na escola
O Python oferece operações envolvendo números decimais através do módulo fractions.
Os números decimais têm numerador e denominador, ambos inteiros. O módulo suporta algoritmos de números racionais.
Podemos criar objetos Fraction de várias maneiras.
import fractions # Saída: 3/2 print(fractions.Fraction(1.5)) # Saída: 5 print(fractions.Fraction(5)) # Saída: 1/3 print(fractions.Fraction(1,3))
Ao criar frações a partir de float, podemos obter alguns resultados excepcionais. Isso é devido à representação imperfeita do número flutuante binário discutida na seção anterior.
Felizmente, os números decimais nos permitem usar exemplos de strings. Esta é a opção preferida ao usar números decimais.
import fractions # Usado como float # Saída: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # Usado como string # Saída: 11/10 print(fractions.Fraction('1.1))
Este tipo de dados suporta todas as operações básicas. Aqui estão alguns exemplos.
from fractions import Fraction as F # Saída: 2/3 print(F(1,3) + F(1,3)) # Saída: 6/5 print(1 / F(5,6)) # Saída: False print(F(-3,10) > 0) # Saída: True print(F(-3,10) < 0)
O Python fornece módulos semelhantes, math e random, que podem executar diferentes operações matemáticas, como funções trigonométricas, logarítmos, probabilidade e estatísticas, etc.
import math # Saída: 3.141592653589793 print(math.pi) # Saída: -1.0 print(math.cos(math.pi)) # Saída: 22026.465794806718 print(math.exp(10)) # Saída: 3.0 print(math.log10(1000)) # Saída: 1.1752011936438014 print(math.sinh(1)) # Saída: 720 print(math.factorial(6))
Este éNo módulo math do PythonLista completa de funções e propriedades disponíveis.
import random # Saída: 16 print(random.randrange(10,20)) x = ['a', 'b', 'c', 'd', 'e'] # Obter opção aleatória print(random.choice(x)) # Desordena a ordem da lista x random.shuffle(x) # Imprimir saída com a ordem x desordenada print(x) # Imprimir elemento aleatório print(random.random())
Resultados de saída (resultados aleatórios):
19 c ['e', 'a', 'd', 'c', 'b'] 0.707947055817621
Este éNo módulo random do PythonLista completa de funções e propriedades disponíveis.