juego la generala
Publicado por Lissette (14 intervenciones) el 01/09/2020 21:55:39
Hola! buenas tardes. Tengo este código, pero no anda bien porque en primer lugar me da una probabilidad muy baja en relación a otros compañeros, pero además no se bien qué hacer con los dados que son distintos a los repetidos. Agradezco ayuda!
El ejercicio es el siguiente:
Si uno juega con las reglas originales (se puede volver a tirar algunos de los cinco dados hasta dos veces, llegando hasta a tres tiradas en total) siguiendo una estrategia que intente obtener generala (siempre guardar los dados que más se repiten y tirar nuevamente los demás) es más probable obtener una generala que si sólo consideramos la generala servida. Escribí un programa que estime la probabilidad de obtener una generala en las tres tiradas de una mano.
El ejercicio es el siguiente:
Si uno juega con las reglas originales (se puede volver a tirar algunos de los cinco dados hasta dos veces, llegando hasta a tres tiradas en total) siguiendo una estrategia que intente obtener generala (siempre guardar los dados que más se repiten y tirar nuevamente los demás) es más probable obtener una generala que si sólo consideramos la generala servida. Escribí un programa que estime la probabilidad de obtener una generala en las tres tiradas de una mano.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 31 13:12:16 2020
@author: Lissette
"""
#ejercicio 4.7
#GENERALA NO SERVIDA
from collections import Counter
import random
#función 1: guardo la lista de 5 dados aleatorios en la lista DADOS
def tirar():
dados=[]
for i in range(5):
dados.append(random.randint(1,6))
return dados
dados=tirar()
print(dados)
#función 2
def es_generala(dados):
dados=tirar()
if min(dados)== max(dados): #si son todos iguales, return True
return True
else:
numero, cantidad = Counter(dados).most_common()[0] #guardo en variable numero y cantidad data del mas repetido
lista_repetidos=[numero for i in range(cantidad)] #hago una lista con los más repetidos
#para iterar 2 veces
para_tirar = (5 - len(lista_repetidos)) #identifico cuántos dados debería tirar en la tirada 2 y 3
dados_no_rep=[] #lista vacía par guardar las tiradas 2 y 3
# for r in dados: #itero sobre ellos
# if r!=numero: #si algún elemento de la tirada inicial es distinto a mi dado + repetido, lo agrego
# dados_no_rep.append(r)
tiros=[0,1]
for t in tiros:
for i in range(para_tirar):
dados_no_rep.append(random.randint(1,6)) #agrego los dados a una lista nueva
#print(dados)
for a in dados_no_rep:
#for b in lista_repetidos:#itero sobre cada elemento de dados_no_rep
if a==numero and len(lista_repetidos)<=5:
lista_repetidos.append(a)
elif a!=numero and len(dados_no_rep)<=5:
para_tirar2= (5 - len(lista_repetidos))
dados_no_rep.append(random.randint(1,6))
# if dado== numero: #si dado es igual al repetido, lo agrego a la lista
# lista_repetidos.append(dado)
# if dado != numero: #si dado es distinto a repetido, tiro de nuevo
# dados_no_rep[a]=random.randint(1,6)
#lista_repetidos.append(dados_no_rep)
if max (dados) == min (dados):
return True
else:
return False
N = 100000
g = sum ([es_generala(tirar()) for i in range(N)])
prob = (g/N)
print (f'Tire {N} veces, de las cuales {g} saque generala')
print (f'podemos estimar la probabilidad de sacar generala servida mediante {prob:.6f}')
Valora esta pregunta


0