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