Enviar um café pro programador

Mostrando postagens com marcador Números aleatórios. Mostrar todas as postagens
Mostrando postagens com marcador Números aleatórios. Mostrar todas as postagens

Jogando Dados com Python - Estatística e Probabilidade

Neste tutorial de Python, vamos envolver programação e Matemática, especificamente estatística e probabilidade, e vamos comprovar na prática que elas existem e funcionam!

Leia também:

Jogando os Dados com o Python


Para gerar nossos números aleatórios de 1 até 6, vamos definir a função gera() que não tem nenhum parâmetro e vai, obviamente, retornar número inteiro de 1 até 6.

Para isso, vamos usar a função randint da biblioteca random.
Se não leu nosso tutorial, veja: Como gerar números aleatórios em Python

Essa função recebe os argumentos 1 e 6, parar gerar inteiros de 1 até 6. E para usar ela, temos que importar o módulo random.
Ela fica:

import random

def gera():
    return random.randint(1,6)

Agora, vamos criar a função repete(n), que vai repetir n lançamentos de dados, onde n o usuário vai escolher quantas vezes vai jogar os dados.

Vamos armazenar os resultados 1, na variável test1.
Vamos armazenar os resultados 2, na variável test2.
...
Vamos armazenar os resultados 6, na variável test6.

Então inicializamos essa variável com todas elas igual a 0.

Agora vamos fazer um laço for pra rodar n vezes o lançamento de dados.
Cada vez que lança o dado (simplesmente chamando a função gera() - uma maravilha função né?), armazenamos na variável test.

Em seguida, vamos fazer várias comparações com IF, ELIF e ELSE, para saber se o valor do dado é 1, 2, 3, 4, 5 ou 6. E quando achar o valor certo, incrementar em 1 o valor da variável test1, ou test2 ou ... test6.

Ou seja, ao final do laço for, as variáveis test1, test2, ..., test6 terão quando vezes foi sorteado o número 1, 2, 3, 4, 5 e 6 respectivamente.

Então simplesmente damos seis prints, para exibir quantas vezes cada número saiu, bem como mostramos a porcentagem de frequência de cada valor,





Veja o código:

import random

def gera():
    return random.randint(1,6)

def repete(n):
    test1=test2=test3=      \
    test4=test5=test6 = 0
    for val in range(n):
        test = gera()

        if(test==1):
            test1 += 1
        elif(test==2):
            test2 += 1
        elif(test==3):
            test3 += 1
        elif(test==4):
            test4 += 1
        elif(test==5):
            test5 += 1
        else:
            test6 += 1
            

    print("Numero 1 saiu ", test1," vezes = ",(test1/n)*100, " %")
    print("Numero 2 saiu ", test2," vezes = ",(test2/n)*100, " %")
    print("Numero 3 saiu ", test3," vezes = ",(test3/n)*100, " %")
    print("Numero 4 saiu ", test4," vezes = ",(test4/n)*100, " %")
    print("Numero 5 saiu ", test5," vezes = ",(test5/n)*100, " %")
    print("Numero 6 saiu ", test6," vezes = ",(test6/n)*100, " %")

        
def menu():
    n = int(input('Quantos lançamentos de dado? '))
    repete(n)
    
while True:
    menu()

PS 1: Quanto maior for o n, mais a porcentagem se aproxima de 16,67% pois vai tendendo à probabilidade, que é de 1/6 .

PS 2: Mais na frente, quantos estudarmos sequências, você aprenderá maneiras mais simples de se trabalhar com várias variáveis de uma vez só.


Como Gerar Números Aleatórios em Python - A Biblioteca random

Neste tutorial, vamos aprender como gerar números aleatórios usando o módulo random da biblioteca padrão do Python.

Tutorial anterior: Como criar, importar e usar Módulos
Veja também: Como entrar no mercado de trabalho Python



Números Aleatórios - Por que usar ?

A utilidade de se gerar números aleatórios, são enormes.

Um exemplo bem claro e muito utilizado, são em jogos.
Rolar os dados, escolher inimigos e personagens aleatoriamente, localização nos mapas, alguns games ficam 'sorteando' coisas (skins, gemas, poder, equipamentos etc), tudo isso através de números aleatórios.

Já perdeu a senha ou fez algum cadastro que necessitava receber um código numérico ou alfanumérico (tipo, 23&6342h) em seu e-mail ou via SMS? Pois é, aquele código é gerado aleatoriamente.

Muitas vezes, para fazer simulações, principalmente científicas e de outros cunhos acadêmicos, é necessário usar uma enormidade de números aleatórios.

Se já teve uma cadeira de Probabilidade e Estatística na faculdade, sabe que se usa bastante números aleatórios.

São um dos conceitos mais importantes no mundo da computação, e vamos aprender agora a usar a biblioteca random (random module) em Python.

Gerar Número Inteiro Aleatório: A Função randint

Primeiro, vamos aprender como gerar um número, aleatoriamente, que seja um inteiro.




Para isso, vamos usar a função randint, da biblioteca padrão do Python, a random. Ou sej, bem no início, devemos importar esse módulo:
import random

Agora, vamos usar a randint para gerar um número.
Essa função tem dois parâmetros, vamos chamar de inicio e fim:
random.randint(inicio, fim)

Essa função retorna um número inteiro de 'inicio' até 'fim' (inclusive eles).
Por exemplo:
  • randint(1,10): pode gerar qualquer número do 1 até o 10
  • randint(1,1000): pode resultar qualquer número 1,2, 3, ..., 100

Exemplo de uso da função randint()

Crie um programa em Python que simula o resultado de um dado, ou seja, gera números aleatórios de 1 até 6, quantas vezes o usuário desejar.

Como explicado, a primeira coisa é importar a biblioteca random, padrão do Python. Depois, simplesmente usar a função randint com 1 e 6 como argumentos, veja como fica:

import random

continuar=1
while continuar:
    print("Número aleatório gerado:", random.randint(1,6))
    continuar=int(input("Gerar novamente?\n1.Sim\n0.Não\n")


Definindo Melhor o Intervalo: randrange()

A função randrange é bem similar a função range (leia novamente esse tutorial para relembrar), exatamente a mesma maneira de se usar os parâmetros, a diferença que ela vai retornar apenas um valor.



  • Um argumento:
random.randrange(x) - vai gerar um número aleatório de 0 até x-1
Por exemplo:
random.randrange(5) - Pode retornar:0, 1, 2, 3 ou 4

  • Dois argumentos:
random.randrange(x,y) - vai gerar um número de x até y-1
Por exemplo:
random.randrange(1,5) - Pode sair:1, 2, 3 ou 4

  • Três argumentos:
 random.randrange(x,y,z) - Pode gerar de x até y-1, mas ao invés de 1 em 1, ela 'pula' de z em z, ou seja, z é o salto.

Por exemplo:
random.randrange(0,10,2) - Vai gerar uma dos seguintes números: 0, 2, 4, 6 ou 8 (ou seja, todos os pares de 0 até 8).

Para gerar todos os números múltiplos de 3 menores que 100, fazemos:
random.randrange(0, 101, 3) : 3, 6, 9, ..., 99

Gerar Número Aleatório Decimal: random()

Nos exemplos anteriores, as funções geram e recebem apenas números inteiros, ou seja, não servem para se trabalhar com números decimais.

Mas, e se a gente quiser um número quebrado aleatório?
Aí usamos a função random(), ela não recebe nenhum argumento.

Usou  ela, então te retorna decimal de 0.0 até 1.0
Basta fazer: random.random() e terá seu número quebrado aleatório.

Definir Aleatório Flutuante: função uniform()

Existe ainda mais uma função parar gerar valores flutuantes de maneira aleatória, que é através da função uniform().

Esta função recebe dois argumentos, um valor de início e outro final, podem ser valores float e te retorna um float aleatório.

Por exemplo, vamos supor que você é professor, tem que entregar a nota de 200 alunos e está totalmente sem saco.

Então você decide que vai dar notas aleatórias, de 5.0 até 10.0
Basta usar a função uniform:
random.uniform(5.0 , 10.0)

Pronto, ela vai te retornar uma nota rapidinho :D
Agora é curtir suas férias.

Caso tenha medo que algum aluno reclame, é só dizer 'olha, posso até recorrigir sua prova, mas se eu encontrar mais erros, eu abaixo sua nota).

Exercício Proposto

Crie um script em Python que gere 6 números aleatórios para a Mega-Sena (neste jogo, você pode escolher dezenas de 1 até 60). Não pode repetir dezena.

Deixe no comentário sua solução.