In [1]:
import random as rd
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))
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))
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
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.
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')
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))
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.
Faça um programa que simule o comportamento do Sílvio Santos. Seu programa deve:
perguntar ao usuário se ele deseja manter sua escolha inicial ou se ele deseja trocar de porta;
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...')
Faça um programa que simule o quadro porta da esperança 1000 vezes.
Em cada uma das 1000 iterações, seu programa deve:
No final das 1000 simulações mostre quantas vezes o participante teria ganhado o prêmio se ele:
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))
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.
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