Evaluating bids

Trabajo Phyton modificacion codigo

Published on the June 21, 2017 in IT & Programming

About this project

Open

{
&Quot;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.&Quot;
  ]
  },
  {
  "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.&Quot;
  ]
  },
  {
  "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
}

Category IT & Programming
Subcategory Other
Project size Small
Is this a project or a position? Project
I currently have I have specifications
Required availability As needed
Experience in this type of projects No (I haven’t managed this kind of project before)

Delivery term: Not specified

Skills needed

Other projects posted by W. A.