Trabajo Phyton modificacion codigo

Evaluando propuestas

Publicado: Hace 2 meses Plazo: No definido Propuestas: 3 Freelancers interesados: 4

Abierto

Descripción:

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Desafio 2:\n",
"## Modifique el codigo entregado, de modo de calcular la probabilidad de ganar una mano de texas holdem poker, si usted tiene en mano un par de cartas contra sólo un rival. Puede corroborar sus calculos en la pagina www.pokercalculatoronline.com\n",
"\n",
"Se entrega la clase baraja que contiene los siguientes metodos:\n",
" Escoger: Saca una carta fija de la baraja.\n",
" Sacar: Saca una carta aleatoria de la baraja.\n",
" Reset: Elimina las cartas sacadas, cada vez que termina un juego se debe resetear la baraja."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class Baraja:\n",
" # La idea es que genera numeros aleatorios entre 0 y 51 que no se repiten\n",
" \n",
" def __init__(self):\n",
" self.sacadas = []\n",
" \n",
" def reset(self):\n",
" self.sacadas = []\n",
"\n",
" def escoger(self, num):\n",
" if num not in self.sacadas:\n",
" self.sacadas.append(num)\n",
" \n",
" def sacar(self):\n",
" while True:\n",
" aleat = random.randint(0,51)\n",
" if aleat not in self.sacadas:\n",
" self.sacadas.append(aleat)\n",
" return aleat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La clase ManoPoker puede elegir o sacar aleatoriamente las cartas de una baraja.\n",
" Tiene un operador < y otro ==, ojala esten buenos, si tiene algun problema reparelo y tiene puntos extra.\n",
" Fijese en los ejemplos de abajo, para ver como se valoran las manos.\n",
" La idea es modificar esta clase de modo que pueda contener 7 cartas y cree las 21 combinaciones posibles y descarte las cartas peores, de modo de quedarse con la mejor mano posible.\n",
" Revise la clase 10 del Profesor Ferres, puede usar itertools para las combinaciones y el operador < para saber cual es la mejor mano."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class ManoPoker:\n",
" # Coleccion de 5 cartas que se sacan de una baraja\n",
" \n",
" def __init__(self, b, c1=-1, c2=-1, c3=-1, c4=-1, c5=-1):\n",
" self.veces = [0,0,0,0,0,0,0,0,0,0,0,0,0]\n",
" if c1 == -1:\n",
" c1 = b.sacar()\n",
" if c2 == -1:\n",
" c2 = b.sacar()\n",
" if c3 == -1:\n",
" c3 = b.sacar()\n",
" if c4 == -1:\n",
" c4 = b.sacar()\n",
" if c5 == -1:\n",
" c5 = b.sacar()\n",
" self.cartas = [c1,c2,c3,c4,c5]\n",
" for i in self.cartas:\n",
" self.veces[i//4] += 1 \n",
"\n",
" def __eq__(self, otro):\n",
" if otro.num_escalacolor() > 0 and self.num_escalacolor() == otro.num_escalacolor():\n",
" return True\n",
" if otro.num_poker() > 0 and self.num_poker() == otro.num_poker():\n",
" return True\n",
" if otro.num_full() > 0 and self.num_full() == otro.num_full():\n",
" return True\n",
" if otro.num_color() > 0 and self.num_color() == otro.num_color():\n",
" return True\n",
" if otro.num_escala() > 0 and self.num_escala() == otro.num_escala():\n",
" return True\n",
" if otro.num_trio() > 0 and self.num_trio() == otro.num_trio():\n",
" return True\n",
" if otro.num_dospares() > 0 and self.num_dospares() == otro.num_dospares():\n",
" return True\n",
" if otro.num_par() > 0 and self.num_par() == otro.num_par():\n",
" return True\n",
" if self.carta_alta() == otro.carta_alta():\n",
" return True\n",
" return False\n",
" \n",
" def __lt__(self, otro):\n",
" if otro.num_escalacolor()>0 and self.num_escalacolor()<otro.num_escalacolor():\n",
" return True\n",
" if self.num_escalacolor()>0:\n",
" return False\n",
" if otro.num_poker() > 0 and self.num_poker() < otro.num_poker():\n",
" return True\n",
" if self.num_poker()>0:\n",
" return False\n",
" if otro.num_full() > 0 and self.num_full() < otro.num_full():\n",
" return True\n",
" if self.num_full()>0:\n",
" return False\n",
" if otro.num_color() > 0 and self.num_color() < otro.num_color():\n",
" return True\n",
" if self.num_color()>0:\n",
" return False\n",
" if otro.num_escala() > 0 and self.num_escala() < otro.num_escala():\n",
" return True\n",
" if self.num_escala()>0:\n",
" return False\n",
" if otro.num_trio() > 0 and self.num_trio() < otro.num_trio():\n",
" return True\n",
" if self.num_trio()>0:\n",
" return False\n",
" if otro.num_dospares() > 0 and self.num_dospares() < otro.num_dospares():\n",
" return True\n",
" if self.num_dospares()>0:\n",
" return False\n",
" if otro.num_par() > 0 and self.num_par() < otro.num_par():\n",
" return True\n",
" if self.num_par()>0:\n",
" return False\n",
" if self.carta_alta() < otro.carta_alta():\n",
" return True\n",
" return False\n",
" \n",
" \n",
" def __str__(self):\n",
" texto = \"[ \"\n",
" for i in self.cartas:\n",
" num = (i//4)+1\n",
" pin = i%4\n",
" if num == 1:\n",
" texto += \"A\"\n",
" elif num == 11:\n",
" texto += \"J\"\n",
" elif num == 12:\n",
" texto += \"Q\"\n",
" elif num == 13:\n",
" texto += \"K\"\n",
" else:\n",
" texto += str(num)\n",
" if pin == 0:\n",
" texto += \"-Corazon \"\n",
" elif pin == 1:\n",
" texto += \"-Diamante \"\n",
" elif pin == 2:\n",
" texto += \"-Pica \"\n",
" else:\n",
" texto += \"-Trebol \"\n",
" texto += \"]\"\n",
" return texto\n",
" \n",
" def num_color(self):\n",
" if self.cartas[0]%4 == self.cartas[1]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[2]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[3]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[4]%4:\n",
" return self.carta_alta()\n",
" else:\n",
" return 0\n",
" \n",
" def num_escala(self):\n",
" for i in range(13, 3, -1):\n",
" if veces[i%13] == 1 and \\\n",
" veces[i-1] == 1 and \\\n",
" veces[i-2] == 1 and \\\n",
" veces[i-3] == 1 and \\\n",
" veces[i-4] == 1:\n",
" return (i+1)\n",
" return 0\n",
" \n",
" def num_poker(self):\n",
" for i in range(13, 0, -1):\n",
" if self.veces[i%13] == 4:\n",
" return (i+1)*100+self.carta(1)\n",
" return 0\n",
" \n",
" def num_escalacolor(self):\n",
" if self.num_color() > 0 and self.num_escala() > 0:\n",
" return num_color()\n",
" return 0\n",
" \n",
" def num_trio(self):\n",
" if self.trio() > 0:\n",
" return self.trio()*10000 + self.carta(1)*100 + self.carta(2)\n",
" return 0\n",
" \n",
" def cant_pares(self):\n",
" cant = 0\n",
" for j in self.veces:\n",
" if j == 2:\n",
" cant += 1\n",
" return cant\n",
" \n",
" def num_full(self):\n",
" if self.num_trio() > 0 and self.num_par(1) > 0:\n",
" return self.trio()*100+self.par(1)\n",
" return 0\n",
" \n",
" def num_dospares(self):\n",
" if self.cant_pares() == 2:\n",
" return self.par(1)*10000+self.par(2)*100+self.carta(1)\n",
" return 0\n",
" \n",
" def num_par(self):\n",
" if self.cant_pares() == 1:\n",
" return self.par(1)*1000000+self.carta(1)*10000+self.carta(2)*100+self.carta(3)\n",
" return 0\n",
" \n",
" def carta_alta(self):\n",
" return self.carta(1)*100000000+self.carta(2)*1000000+self.carta(3)*10000+self.carta(4)*100+self.carta(5)\n",
" \n",
" def trio(self):\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 3:\n",
" return i+1\n",
" return 0\n",
"\n",
" def carta(self, num):\n",
" n = 0\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 1:\n",
" n += 1\n",
" if n == num:\n",
" return i+1\n",
" return 0\n",
" \n",
" def par(self, num):\n",
" n = 0\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 2:\n",
" n += 1\n",
" if n == num:\n",
" return i+1\n",
" return 0"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = Baraja()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"m1 = ManoPoker(b,0,1,2,3,4)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ A-Corazon A-Diamante A-Pica A-Trebol 2-Corazon ]\n"
]
}
],
"source": [
"print(m1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1402"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m1.num_poker()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"m2 = ManoPoker(b, 5,6,7)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 2-Diamante 2-Pica 2-Trebol 3-Pica Q-Trebol ]\n"
]
}
],
"source": [
"print(m2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"21203"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m2.num_trio()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m1 < m2"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"m3 = ManoPoker(b)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 7-Corazon 2-Trebol 7-Pica 10-Trebol K-Trebol ]\n"
]
}
],
"source": [
"print(m3)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"7131002"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m3.num_par()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}


Categoría: IT & Programación
Subcategoría: Otros
Tamaño del proyecto: Pequeño
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: Tengo las especificaciones
Experiencia en este tipo de proyectos: No (No he administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite

Freelancers que ya aplicaron para este trabajo

William Y. Profesional en el área de Informática con amplia experiencia en el diseño, desarrollo, implantación y gestión de proyectos de Tecnologías de Información, orientado al área de ingeniería de software, administración de ... + detalles

Pedro G. R. G. Soy un desarrollador de software apasionado por la calidad, la creatividad y el gusto por mi trabajo, amante de la tecnología y la innovación que trabaja en tiempos libres y fines de semana. Tengo experiencia desarro... + detalles

Omar M. S. soy ingeniero mecatronico especializado en desarrollo de software, habilidades en proyectos web, móviles y manejo de nuevas tecnologías, soy cumplido y apasionado por los proyectos a mi cargo. + detalles

Crea tu propio proyecto

¿Buscas un freelancer para realizar un proyecto similar? Crea tu propio proyecto y recibirás ofertas de los mejores freelancers.

Otros proyectos de este cliente

Para ver más detalles del cliente

Ingresa a Workana