Python - juego la generala

 
Vista:
Imágen de perfil de Lissette
Val: 43
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

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.


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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder