3.1 Tipos numéricos: int
, float
,
complex
Python tem vários tipos numéricos, cada um adequado para diferentes tarefas e manipulação de dados. Já mencionamos os tipos de dados
int
, float
, complex
, assim como os booleanos
bool
, que são uma subclasse dos inteiros. Agora vamos examinar cada um desses tipos em mais detalhes.
int
(Números inteiros):
Este é possivelmente o tipo numérico mais usado em Python. Números inteiros podem ser positivos ou negativos e não têm casas decimais. Python suporta precisão arbitrária, o que significa que praticamente não há limite para o tamanho dos números que você pode manipular, exceto limitações de memória da sua máquina.
float
(Números de ponto flutuante):
Esses números são usados para representar números reais e podem conter pontos decimais. Python implementa números de ponto flutuante de acordo com o padrão IEEE 754 double-precision, o que dá uma precisão de cerca de 15 dígitos decimais após o ponto.
complex
(Números complexos):
Números complexos têm uma parte real e uma imaginária. Ambas são representadas por números de ponto flutuante. Em Python, a parte imaginária é indicada pelo sufixo j
ou J
. Por exemplo, um número complexo pode ser criado assim:
complex_number = 3 + 5j
bool
(Valores booleanos):
Em Python, True
e False
são versões especializadas de números inteiros e funcionam como 1 e
0 respectivamente. Isso permite usá-los em operações aritméticas e outras expressões matemáticas.
Operações aritméticas:
Python suporta todas as operações aritméticas básicas, incluindo adição, subtração, multiplicação, divisão, divisão inteira, resto da divisão e exponenciação. Por exemplo:
- Adição: 3 + 2
- Subtração: 5 - 2
- Multiplicação: 2 * 3
- Divisão: 7 / 2
- Divisão inteira: 7 // 2
- Resto da divisão: 7 % 2
- Exponenciação: 2 ** 3
Conversão de tipos:
Já falamos sobre a conversão (ou coerção) de tipos.
Números podem ser convertidos uns nos outros usando funções de coerção,
como int()
, float()
e
complex()
.
Algumas questões de conversão de tipos numéricos já discutimos anteriormente, outras discutiremos mais detalhadamente em aulas futuras.
3.2 Números pseudoaleatórios
Às vezes, um programador se depara com tarefas aparentemente simples: "escolher um filme aleatório para assistir à noite de uma lista específica", "selecionar um vencedor da loteria", "embaralhar uma lista de músicas ao agitar o smartphone", "escolher um número aleatório para criptografar uma mensagem". E toda vez surge uma dúvida muito razoável: como obter esse número aleatório?
Conseguir um número "verdadeiramente" aleatório é bastante difícil. A ponto de que incluem coprocessadores matemáticos especiais em computadores para gerar tais números, atendendo a todos os requisitos de "aleatoriedade verdadeira".
Portanto, os programadores inventaram sua solução - números pseudoaleatórios. Números pseudoaleatórios são uma sequência que, à primeira vista, parece ser aleatória, mas um especialista, após uma análise detalhada, poderá encontrar alguns padrões. Esses números não são adequados para criptografar documentos secretos, mas servem bem para simular o lançamento de dados em um jogo.
Existem muitos algoritmos para gerar uma sequência de números pseudoaleatórios e quase todos geram o próximo número aleatório com base no anterior e em alguns números auxiliares.
Por exemplo, este programa exibirá na tela 1000 números não repetidos:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
Aliás, não falamos de números pseudoaleatórios, mas sim de uma sequência desses números. Porque olhando para um único número não há como saber se ele é aleatório ou não.
O número aleatório pode ser obtido de diferentes maneiras:
def get_random_number():
return 4 # este é definitivamente um número aleatório (z lançou-o com dados), veja "Piada sobre dados"
3.3 Biblioteca random
Em Python, há a biblioteca random embutida, com a qual você vai achar interessante trabalhar. Como você já deve ter adivinhado pelo nome, com esta biblioteca é possível gerar números [pseudo]aleatórios.
A biblioteca random
, embora embutida, ainda é uma biblioteca à parte, então antes de usá-la, é necessário importá-la para o nosso código.
Isso é feito com a palavra-chave
import
. Exemplo:
import random
A biblioteca random tem muitos métodos interessantes, mas hoje vamos
conhecer apenas dois deles: método random()
e
método randint()
. Eles realizam tarefas parecidas, mas diferentes:
Método random.random()
:
Este método retorna um número aleatório de ponto flutuante entre 0.0 e 1.0. Os números são gerados uniformemente dentro desse intervalo. Isso significa que cada número dentro do intervalo tem a mesma probabilidade de ser escolhido.
import random
probability = random.random()
print("Probabilidade aleatória:", probability)
Método random.randint(a, b):
Esta função retorna um número inteiro aleatório no intervalo de
a
a b
inclusive. Ao contrário de
random.random()
, que devolve um número de ponto flutuante no intervalo de 0 a 1, randint()
é usado quando é necessário escolher um número inteiro. Por exemplo,
random.randint(1, 10)
pode retornar qualquer número inteiro de
1
a 10
, incluindo ambos os valores extremos.
import random
dice_roll = random.randint(1, 6) # Simulação do lançamento de um dado
print("Número sorteado:", dice_roll)
Estes são métodos muito úteis e interessantes, então usem à vontade.
3.4 Biblioteca math
Já que estamos nesse ritmo, vamos conhecer outra biblioteca interessante.
Esta é a biblioteca math
. Ela contém funções matemáticas básicas e constantes, como os números π e e.
E assim como a biblioteca random
, é preciso importá-la
antes de usar:
import math
Aqui está uma tabela com as funções principais e constantes da biblioteca
math
em Python:
Função/Constante | Descrição |
---|---|
math.pi | Constante π, aproximadamente igual a 3.14159 |
math.e | Base do logaritmo natural, aproximadamente igual a 2.71828 |
math.sqrt(x) | Retorna a raiz quadrada de x |
math.exp(x) | Retorna e elevado à potência x |
math.log(x[, base]) | Retorna o logaritmo de x na base especificada; se a base não for especificada, retorna o logaritmo natural. |
math.cos(x) | Retorna o cosseno de x, onde x é dado em radianos |
math.sin(x) | Retorna o seno de x, onde x é dado em radianos |
math.tan(x) | Retorna a tangente de x, onde x é dado em radianos |
math.ceil(x) | Arredonda o número para cima até o inteiro mais próximo |
math.floor(x) | Arredonda o número para baixo até o inteiro mais próximo |
math.factorial(x) | Retorna o fatorial de x |
Mesmo que você não seja muito fã de matemática e não pretenda usar essas funções nos próximos 10 anos, aqui tem pelo menos três muito úteis:
sqrt()
— raiz quadrada de um númeroceil()
— arredondar para cima até o inteiro mais próximofloor()
— arredondar para baixo até o inteiro mais próximo
Exemplos:
import math
number = 9.7
rounded_up = math.ceil(number) # Arredonda para cima, resultado 10
rounded_down = math.floor(number) # Arredonda para baixo, resultado 9
print("Número arredondado para cima:", rounded_up)
print("Número arredondado para baixo:", rounded_down)
GO TO FULL VERSION