Unidade 7 - Atividades


In [1]:
import random as rd

Questão 1

Um vigarista usa uma moeda viesada para ganhar dinheiro com passantes na rua. Ele aposta R$ 2,00 que consegue fazer sua moeda mostrar cara 3 vezes seguidas em no máximo 5 lançamentos. Os passantes não sabem, mas sua moeda tem probabilidade 90% de mostrar cara e 10% de mostrar coroa. Em média ele consegue convencer 200 passantes a apostarem contra ele durante um dia de 'trabalho'. Faça um programa em Python que simule a aposta do vigarista com 200 passantes e que mostra na tela o quanto de dinheiro ele fez no dia.


In [129]:
cara = 0
vig = 0

for j in range(200):
    for i in range(5):
        rdnum = rd.random()
        if (rdnum < 0.90):
            cara += 1
    if cara > 3:
        #print('Vigarista ganhou')
        vig = vig + 2
        cara = 0
    else:
        #print('Ambulante ganhou')
        vig = vig - 2
        cara = 0
        
print('Lucro do vigarista é de: {}'.format(vig))


Lucro do vigarista é de: 348

In [183]:
vig = 0
seq = 0
v = 0
for j in range(200):
    for i in range(5):
        rdnum = rd.random()
        if (rdnum < 0.90):
            seq += 1
            if seq == 3:
                v = v+1
        else: 
            seq = 0
vig = 4 * v        
print('Lucro do vigarista é de: {}'.format(vig))


Lucro do vigarista é de: 324

Questão 2

Um motorista descuidado não prestou atenção nas placas que sinalizavam o fim de uma rodovia. A rodovia era perfeitamente plana, e o veículo estava a uma velocidade de 50m/s quando foi projetado de um penhasco de 1000m de altura.

A posição x do motorista no instante $t = 0$ é $0$ e varia com o tempo segundo a fórmula

$$x = 50t$$

A posição y do motorista no instante $t = 0$ é 1000 e varia com o tempo segundo a fórmula

$$y = 1000 - 4.9t^2$$

O intante em que ocorre o impacto é o instante $t$ que faz com que $y$ na equação acima seja igual a $0$.

Um observador distante filmava a cena com uma câmera amadora que registrava tudo a 1fps (1 foto por segundo). Faça um programa que mostre (num plot) a sobreposição das imagens capturadas pela câmera do observador. Utilize a opção 'o' na hora de fazer o plot. Utilize a mesma escala para os dois eixos do gráfico (como uma câmera fotográfica faria).


In [2]:
import matplotlib.pyplot as pp
%matplotlib inline
import random as rd
import math

In [191]:
x = 0
y = 1000
t = 0

pp.axis('equal')

while y > -0.0001:
    pp.plot(x, y, 'o')
    t = t + 1
    x = 50*t
    y = 1000 - 4.9*t**2


Bêbado

Um bêbado segue por um trilho de trem abandonado muito comprido. Com probabilidade 0.5 ele dá um passo para o leste e com probabilidade 0.5 ele dá um passo para o oeste. Por conveniência, chame o ponto de partida do bêbado de ponto 0, e suponha que o trilho se prolongue por 40 passos para o leste e por 80 passos para o oeste desse ponto.

Questão 3

Faça um programa que simule o passeio do bêbado nesse trilho e que diga, no momento em que ele sai do trilho, se foi pela extremidade leste ou oeste.


In [47]:
x = 0
y = 0

pp.axis('equal')
pp.plot(x, y, 'o')

while (x >= -80 and x <= 40):
    passo = rd.random()
    if (passo < 0.5):
        x += 1
    else:
        x -= 1
        y += 1
    pp.plot(x, y, 'o')
    
if x > 40:
    print('O bebado saiu pela extremidade a leste')
else:
    print('O bebado saiu pela extremidade a oeste')


O bebado saiu pela extremidade a leste

Questão 4

Agora suponha que, toda noite, o bêbado parte do ponto 0 com o mesmo comportamento errante do exercício anterior. Modifique seu programa para estimar a probabilidade de ele sair pelo lado oeste. Dica: repita a simulação do bêbado muitas vezes e veja com que frequência ele sai por cada extremidade.


In [46]:
x = 0
y = 0
leste = 0
oeste = 0

for i in range(100):
    while (x >= -80 and x <= 40):
        passo = rd.random()
        if (passo < 0.5):
            x += 1
        else:
            x -= 1
    
    if x > 40:
        leste += 1
        x = 0
    else:
        oeste += 1
        x = 0
        
print('A probalidade do bebado sair a leste é {:.2f}% e {:.2f}% a oeste.'.format(leste, oeste))


A probalidade do bebado sair a leste é 58.00% e 42.00% a oeste.

Porta da esperança

O Programa Sílvio Santos tinha uma quadro muito popular chamado Porta da Esperança que era baseado no show americano Let's Make a Deal apresentado por Monty Hall na década de 70. O quadro Porta da Esperança funcionava mais ou menos assim.

Uma pessoa era selecionada para participar do show e ela tinha um sonho que gostaria de realizar (ganhar um carro, fazer uma viagem, encontrar com um ídolo, etc.). No palco havia três portas fechadas e atrás de uma delas estava o objeto do seu desejo (ou algém que iria realizar o seu desejo). Atrás das outras duas portas não havia nada.

O participante escolhia uma das três portas. O apresentador, então, abria uma das outras duas portas (que o participante não escolheu) e que não tinha o prêmio. Neste momento do show há apenas duas portas fechadas: a que o participante escolheu e uma outra, e sabe-se que o prêmio está atrás de uma delas.

Em seguida, Sílvio Santos perguntava ao participante se ele gostaria de manter a sua escolha ou se ele gostaria de trocar de porta. Após longo período de exploração sentimental do participante, uma vez que ele tomou sua decição (trocar ou ficar), o apresentador abria a porta combinada e o participante ganhava ou não o prêmio.


Há uma certa discórdia com relação a qual seria a melhor estratégia para o participante. Algumas pessoas argumentam que é sempre mais vantagioso trocar de porta depois que o apresentador abriu uma delas, pois a chance do participante ter acertado a porta na primeira escolha era de apenas 1/3. Outras dizem que tanto faz trocar ou ficar pois, como restaram duas portas, a chance do prêmio estar atrás de qualquer uma delas é 50%. Chamemos o primeiro grupo de Grupo A e o segundo de Grupo B.

Primeiro, reflita um pouco sobre o problema e veja com qual desses grupos você acha que concorda.

Questão 5

Faça um programa que simule o comportamento do Sílvio Santos. Seu programa deve:

  1. escolher aleatóriamente uma das três portas e colocar o prêmio atrás dela (não informe o usuário onde está o prêmio);
  2. pedir ao usuário que ele escolha uma das três portas;
  3. abrir uma porta que não tenha o prêmio e que o usuário não tenha escolhido (se houver mais de uma escolha para a porta a ser aberta, seu programa deve abrir qualquer uma delas com igual probabilidade);
  4. mostrar ao usuário qual porta foi aberta;
  5. perguntar ao usuário se ele deseja manter sua escolha inicial ou se ele deseja trocar de porta;

  6. mostrar ao usuário se ele ganhou ou não o prêmio.


In [59]:
a = 0
b = 0
door = rd.randint(1,3)
usr = int(input('Escolha um número dos números \n[1,2,3]\nSua opçao: '))
if door == usr:
    if usr == 1:
        a = rd.randint(2,3)
    elif usr == 2:
        a = rd.randrange(1,4,2)
    elif usr == 3:
        a = rd.randint(1,2)
elif (usr + door) == 3:
    a = 3
elif (usr + door) == 4:
    a = 2
elif (usr + door) == 4:
    a = 1
print('A porta {} foi aberta'.format(a))
usr = int(input('Escolha uma nova porta ou continue com a mesma\nSua opçao: '))
if usr == door:
    print('Você ganhou!!!')
else:
    print('Infelizmente a porta estava vazia...')


Escolha um número dos números 
[1,2,3]
Sua opçao: 3
A porta 2 foi aberta
Escolha uma nova porta ou continue com a mesma
Sua opçao: 3
Infelizmente a porta estava vazia...

Questão 6

Faça um programa que simule o quadro porta da esperança 1000 vezes.

Em cada uma das 1000 iterações, seu programa deve:

  1. escolher aleatóriamente uma das três portas e colocar o prêmio atrás dela;
  2. simular uma escolha aleatória de uma dessas três portas pelo participante;
  3. abrir uma porta que não tem o prêmio e que o participante não tenha escolhido (se houver mais de uma escolha para a porta a ser aberta, seu programa deve abrir qualquer uma delas com igual probabilidade);
  4. decidir quem ganha: aquele que quis manter a porta ou aquele que decidiu trocar.

No final das 1000 simulações mostre quantas vezes o participante teria ganhado o prêmio se ele:

  1. sempre trocasse de porta;
  2. sempre mantivesse a escolha inicial.

In [78]:
countdif = 0
counteq = 0
for i in range(1,1001):
    a = 0
    b = 0
    door = rd.randint(1,3)
    usr = rd.randint(1,3)
    if door == usr:
        if usr == 1:
            a = rd.randint(2,3)
        elif usr == 2:
            a = rd.randrange(1,4,2)
        elif usr == 3:
            a = rd.randint(1,2)
    elif (usr + door) == 3:
        a = 3
    elif (usr + door) == 4:
        a = 2
    elif (usr + door) == 4:
        a = 1
    if a == 1:
        usr1 = rd.randint(2,3)
    elif a == 2:
        usr1 = rd.randrange(1,4,2)
    elif a == 3:
        usr1 = rd.randint(1,2)
    if usr1 == door and usr1 != usr:
        countdif += 1
    elif usr1 == door and usr1 == usr:
        counteq += 1 
print('Acertos sem mudar de porta: {}\nAcertos mudando de porta: {}'.format(counteq,countdif))


Acertos sem mudar de porta: 156
Acertos mudando de porta: 290

Balística

Um morteiro é lançado da origem (do plano cartesiano), no tempo $t = 0$, com um ângulo de lançamento $\alpha$, para algum $\alpha$ entre 30 e 90 graus. Sua velocidade inicial é $50 m/s$. Uma câmera de vídeo filma o evento capturando $5 fps$ (5 frames per second). Ou seja, a câmera tira 5 fotos por segundo para depois compor o vídeo.

Questão 7

Faça um programa que pergunte ao usuário o ângulo $\alpha$ e crie o gráfico que consiste da sobreposição de todas as fótos tiradas pela câmera, desde o lançamento do morteiro até o momento em que ele toca o chão novamente. Use a opção 'o' da função plot.


In [12]:
alpha = float(input('Digite um angulos entre 30º a 90º: '))
fps = 5

v_0 = 50
v_x = v_0 * math.cos(alpha)
v_y = v_0 * math.sin(alpha)
x = 0.0
y = 0.0
t = 0

pp.axis('equal')

while y > -0.0001:
    pp.plot(x, y, 'or')
    t = t + 1 / fps
    x = v_x * t
    y = v_y * t - 4.9 * t**2


Digite um angulos entre 30º a 90º: 32