Enviar um café pro programador

Mostrando postagens com marcador Matemática. Mostrar todas as postagens
Mostrando postagens com marcador Matemática. 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ó.


O Módulo math - Matemática no Python

Neste tutorial de nossa Apostila de Python, vamos aprender a usar funções matemáticas prontas, do módulo math do Python.

Tutorial anterior: Como gerar números aleatórios - Biblioteca random
Ler também: Certificado do Curso Online de Python


Módulo math - Funções Matemáticas Prontas

Lembra quando explicamos a utilidade dos módulos?
De organizar nosso código e prover a reutilização de código sem precisar programar tudo de novo?

Pois é, o módulo math é o melhor exemplo disso. É possível fazer muuuuita coisa da Matemática simplesmente usando as funções prontas dessa biblioteca.

Para usar em seus programas, basta importar:
import math

Para conhecer mais as funções e possibilidades desse módulo, acesse a documentação oficial do Python:
https://docs.python.org/3/library/math.html

Vamos agora fazer um resumo e falar das principais funções do módulo math.

Trigonometria na math

Há várias funções que fazem cálculos de trigonometria, na math:
  • cos(x) - dá o valor cosseno de x radianos
  • sin(x) - valor do seno de x radianos
  • tan(x) - valor da tangente de x radianos
  • acos(x) - retorna o arco cosseno de x, em radianos
  • asin(x) - retorna o arco seno de x, em radianos
  • atan(x) - retorna o arco tangente de x, em radianos



Conversão entre graus e radianos: degrees(x) e radians(x)

Nos exemplos acima, trabalhamos com valores em radianos.
Porém, geralmente precisamos trabalhar com graus ao invés de rad.

Para transformar x radianos em graus, use a função:
degrees(x) - que ela vai te dar o valor em graus de x radianos

Para fazer o contrário, pegar um valor x em graus e transformar em radiano, fazemos:
radians(x)

Raiz quadrada: sqrt(x)

Para achar a raiz quadrada (square root) de um valor x, use a função sqrt():
sqrt(x)



Constante pi: math.pi

Além de funções, uma biblioteca/módulo pode armazenar constantes.
Por exemplo, em geometria usamos muito o valor de pi (3.14...), por exemplo, para achar o perímetro ou área de uma circunferência, ou volume de uma esfera.

Para não ter que decorar o valor de pi ou buscar na internet, basta usar:
math.pi

É a constante pi, com várias casas decimais de precisão.

Logaritmo e Exponencial

A constante e, base dos logaritmos naturais (número de Euler ou Néper), pode ser usada com a constante:
math.e

Já se desejar calcular uma exponenciação do tipo e^x (e elevado a x), use a função:
math.exp(x)

Já o logaritmo natural de x pode ser calculado da seguinte forma:
math.log(x)

Se preferir o logaritmo na base 10:
math.log10(x)


Arredondar pra baixo: floor(x)

Outra coisa muito utilizada, matematicamente, é o arredondamento.
Se quiser arredondar um número x para baixo, faça:
math.floor(x)

Por exemplo:
math.floor(1.1) = 1
math.floor(3.3) = 3
math.floor(-1.1) = -2

E caso o número não seja decimal, ele retorna o próprio valor:
math.floor(10) = 10
math.floor(-2) = -2

Ou seja, a função floor() retorna o maior inteiro que é menor ou igual a x.
Floor, em inglês, é chão, solo.




Arredondar para cima: ceil(x)

Já para arredondar para cima, usamos a função:
math.ceil(x)

Por exemplo:
math.ceil(1.1) = 2
math.ceil(3.3) = 4
math.ceil(-1.1) = -1

E caso o número não seja decimal, ele retorna o próprio valor:
math.ceil(10) = 10
math.ceil(-2) = -2

Ceiling é teto, em inglês.
A função ceil(x) é o menor inteiro que é maior ou igual a x.

Programa que acha raízes de uma equação do segundo grau em Python

"
Faça um programa que calcule as raízes de uma equação do segundo grau, na forma ax² + bx + c. O programa deverá pedir os valores de a, b e c e fazer as consistências, informando ao usuário nas seguintes situações:
  1. Se o usuário informar o valor de A igual a zero, a equação não é do segundo grau e o programa não deve fazer pedir os demais valores, sendo encerrado;
  2. Se o delta calculado for negativo, a equação não possui raizes reais. Informe ao usuário e encerre o programa;
  3. Se o delta calculado for igual a zero a equação possui apenas uma raiz real; informe-a ao usuário;
  4. Se o delta for positivo, a equação possui duas raiz reais; informe-as ao usuário;
PS: digite 'import math' no início de seu script. Para achar a raiz quadrada da variável x, faça: math.sqrt(x)
"



Equação do segundo grau em Python

Antes de mais nada, vamos relembrar a fórmula de Bháskara para achar as raízes de uma equação do segundo grau, do tipo: ax² + bx + c = 0 :
Fórmula de Bháskara em Python
O primeiro teste que fazemos é em relação ao coeficiente a. Se for 0, não é uma equação do segundo grau e acaba o programa.

Se for diferente de 0, cai no else, que é onde todo nosso programa vai funcionar. Primeiro, dentro do else, pedimos o valor dos coeficientes b e c.

Agora, vamos calcular o delta.
Em Python, fica assim: delta = b*b - (4*a*c)

Agora vamos testar o delta, dentro de um if aninhado no else anterior.
Se for menor que 0, encerramos o programa dizendo que as raízes são imaginárias.

Em seguida, usamos um elif para testar se delta for 0, se sim valor da raiz será:raiz = -b / (2*a)

Por fim, se não é menor que 0 e o delta não é 0, é porque vai ser sempre maior que 0. Essa condição cai no else aninhado, onde calculamos as raízes assim:
raiz1 = (-b + math.sqrt(delta) ) / (2*a)
raiz2 = (-b  - math.sqrt(delta) ) / (2*a)

Nosso código ficou:

    import math
    
    print('Equaçao do 2o grau da forma: ax² + bx + c')
    
    a = int( input('Coeficiente a: ') )

    if(a==0):
        print('Se a=0, não é equação do segundo grau. Tchau')
    else:
        b = int( input('Coeficiente b: ') )
        c = int( input('Coeficiente c: ') )
        delta = b*b - (4*a*c)

        if delta<0:
            print('Delta menor que 0. Raízes imaginárias. Tchau')
        elif delta==0:
            raiz = -b / (2*a)
            print('Delta=0 , raiz = ',raiz)
        else:
            raiz1 = (-b + math.sqrt(delta) ) / (2*a)
            raiz2 = (-b - math.sqrt(delta) ) / (2*a)
            print('Raizes: ',raiz1,' e ',raiz2)