Piedra, papel o tijera: juego en python

Hace unos días me tope con un video en YouTube que mostraba el juego Piedra, papel o tijera hecho en Python.

Piedra, papel o tijera
Piedra, papel o tijera en Python

Por si no saben de que trata el juego, acá les dejo el enlace: http://es.wikipedia.org/wiki/Piedra,_papel_o_tijera

Me parece un muy buen ejercicio para los que recién están empezando. Dejo el video y el código que a mi se me ocurrió. A parte de lo que muestra el video, implemento en el código el resultado final y la posibilidad de volver a jugar.

Aconsejo mirar el video he ir implementando el código. Por cualquier duda o sugerencia dejar sus comentarios al final del post...

Mi código del juego:

# -*- coding: utf-8 -*-
#!/usr/bin/env python


# https://www.pythondiario.com

import random
from time import sleep

print "Bienvenido, vamos a jugar a Piedra, papel o tijera."
print ""
sleep(2)
print "Jugamos al mejor de tres, o prefieres cambiar?"
sleep(1)
print ""

#Funcion que realiza la lógica del juego
def juego(intentos):
x = 0
tu = 0
pc = 0
while str(x) != intentos:
print "Piedra, papel o tijera?"
opcion = raw_input()
opcion = opcion.lower()
azar = random.choice(["piedra", "papel", "tijera"])
if opcion == azar:
print "El pc tambien elijio", azar
print ""
elif azar == "tijera" and opcion == "papel":
x += 1
pc += 1
print "El PC saco", azar
print "Tu", tu, "PC", pc
print ""
elif azar == "tijera" and opcion == "piedra":
x += 1
tu += 1
print "El PC saco", azar
print "Tu", tu, "PC", pc
print ""
elif azar == "piedra" and opcion == "tijera":
x += 1
pc += 1
print "El PC saco", azar
print "Tu", tu, "PC", pc
print ""
elif azar == "piedra" and opcion == "papel":
x += 1
tu += 1
print "El PC saco", azar
print "Tu", tu, "PC", pc
print ""
elif azar == "papel" and opcion == "tijera":
x += 1
tu += 1
print "El PC saco", azar
print "Tu", tu, "PC", pc
print ""
elif azar == "papel" and opcion == "piedra":
x += 1
pc += 1
print "El pc saco", azar
print "Tu", tu, "PC", pc
print ""
else:
print "Opcion incorrecta, vuleva a intentarlo"

print ""

if pc > tu:
print "Gano el PC", pc, "a", tu
elif pc == tu:
print "Empataron", tu, "a", pc
else:
print "Ganaste", tu, "a", pc

print ""
print "PARTIDA TERMINADA"


def main():
print "Escribe 1 para jugar al mejor de tres."
print "Escribe 2 para cambiar el tipo de juego."

opcion = input()

if opcion == 1:
juego("3")
print ""
restart = raw_input ("Quieres jugar de nuevo?(s/n): ")
restart = restart.lower()
if restart == "s":
print ""
main()
else:
intentos = raw_input ("Tu diras, jugamos al mejor de: ")
juego(intentos)
print ""
restart = raw_input ("Quieres jugar de nuevo?(s/n): ")
restart = restart.lower()
if restart == "s":
print ""
main()
else:
print "FIN"

main()

  1. Unknown dice:

    Que version de IDE Python usas

    1. PythonDiario dice:

      Utilizo python 2.7 y como IDE utilizo Geany... Saludos

  2. Unknown dice:

    Yo use tu codigo y me di cuenta que no llega al mejor de n intentos sino que suma los puntos del usuario y del computador y si da como resultado n intentos el juego se termina.

    A mi se me ocurrio este codigo:
    import random
    from time import sleep

    compuP = 0
    usuarP = 0
    inten = 3

    def jugarDeNuevo():
    s = raw_input('nSi quieres jugar de nuevo presiona s sino presiona otra tecla: ')
    s = s.lower()

    if s == 's':
    main()
    else:
    print 'Fin del juego'

    def ganador(usuario,computador):
    if usuario > computador:
    print 'nTu le has ganado a la PC'
    elif usuario < computador:
    print 'nTu has perdido'
    jugarDeNuevo()

    def terminar(usuari,comp):
    global inten
    if usuari < inten and comp < inten:
    juegos()
    if usuari == inten or comp == inten:
    print 'nEl juego se ha terminado'
    ganador(usuari,comp)

    def logica(finalPC,eleccionUsuario):
    global compuP
    global usuarP

    if finalPC == 'piedra' and eleccionUsuario == 'papel':
    print 'nEl PC saco', finalPC
    usuarP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif finalPC == 'papel' and eleccionUsuario == 'papel':
    print 'nEl PC saco', finalPC
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif finalPC == 'tijera' and eleccionUsuario == 'papel':
    print 'nEl PC saco', finalPC
    compuP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'piedra' and finalPC == 'piedra':
    print 'nEl PC saco', finalPC
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'tijera' and finalPC == 'piedra':
    print 'nEl PC saco', finalPC
    compuP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'piedra' and finalPC == 'papel':
    print 'nEl PC saco', finalPC
    compuP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'tijera' and finalPC == 'papel':
    print 'nEl PC saco', finalPC
    usuarP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'piedra' and finalPC == 'tijera':
    print 'nEl PC saco', finalPC
    usuarP += 1
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'
    elif eleccionUsuario == 'tijera' and finalPC == 'tijera':
    print 'nEl PC saco', finalPC
    print 'Tu ',str(usuarP),' ',str(compuP),'PC'

    terminar(usuarP,compuP)

    def juegos():

    finalP = random.choice(["piedra", "papel", "tijera"])
    print 'nPiedra, papel o tijera'
    eleccionUsuari = raw_input()
    eleccionUsuari = eleccionUsuari.lower()

    logica(finalP,eleccionUsuari)

    def decidirJuego(nJuego):
    global inten

    if nJuego == 2:
    inten = input('nTu diras, jugamos al mejor de: ')
    juegos()
    elif nJuego == 1:
    juegos()

    def main():
    print 'Bienvenido, vamos a jugar Piedra, papel o tijeran'
    sleep(2)
    print 'Jugamos al mejor de tres, o prefieres cambiar?n'
    print 'nEscribe 1 para jugar al mejor de tres.'
    print 'nEscribe 2 para cambiar el tipo de juego.'

    nJuego = input()

    decidirJuego(nJuego)
    main()

    1. PythonDiario dice:

      Hola Jesus, ya hace tiempo que lo hice. Un día de estos le doy una ojeada para ver lo que me comentas. Gracias por pasarte por el blog y participar. Saludos

    2. Elfrid Alexis dice:

      Buen dia, estoy transcribiendo el codigo del compañero anterior, pero me esta mostrando el siguiente error al principo
      Traceback (most recent call last):
      File "C:/Python34/JuegoPapel", line 12, in
      if s == "s":
      NameError: name 's' is not defined

      estoy ulizando python 2.7.8 lo estoy haciendo desde el GUI pyhton alguien me podria ayudar por favor.

    3. PythonDiario dice:

      Hola Elfrid, fijate lo siguiente:

      Todo lo de abajo es una función(jugarDeNuevo), tienes bien identada la funcion? Dejo la identacion con 4 guiones, espero te sea de ayuda:

      def jugarDeNuevo():
      ----s = raw_input('nSi quieres jugar de nuevo presiona s sino presiona otra tecla: ')
      ----s = s.lower()

      ----if s == 's':
      --------main()
      ----else:
      --------print 'Fin del juego'

    4. Elfrid Alexis dice:

      Gracias por la ayuda!!! Muy buena pagina!!Felicitaciones

    5. PythonDiario dice:

      Gracias a ti: por pasar por el blog y participar. Saludos

  3. andres_hola dice:

    modifique un poco tu código para que el juego termine si ya no quedan suficientes jugadas para empatar.

    import random
    from time import sleep

    print "Bienvenido, vamos a jugar a Piedra, papel o tijera."
    print ""
    sleep(1)
    print "Jugamos al mejor de tres, o prefieres cambiar?"
    sleep(1)
    print ""

    #Funcion que realiza la logica del juego
    def juego(intentos):
    x = 0
    tu = 0
    pc = 0
    def mostrar_result():
    print "El PC saco", azar
    print "Tu", tu, "PC", pc
    print ""
    jugadas_restantes=intentos-x
    if pc>jugadas_restantes or tu>jugadas_restantes:
    return intentos
    else:
    return x

    while x != intentos:
    print "Piedra, papel o tijera?"
    opcion = raw_input()
    opcion = opcion.lower()
    azar = random.choice(["piedra", "papel", "tijera"])
    if opcion == azar:
    print "El pc tambien elijio", azar
    print ""
    elif azar == "tijera" and opcion == "papel":
    x += 1
    pc += 1
    x=mostrar_result()
    elif azar == "tijera" and opcion == "piedra":
    x += 1
    tu += 1
    x=mostrar_result()
    elif azar == "piedra" and opcion == "tijera":
    x += 1
    pc += 1
    x=mostrar_result()
    elif azar == "piedra" and opcion == "papel":
    x += 1
    tu += 1
    x=mostrar_result()
    elif azar == "papel" and opcion == "tijera":
    x += 1
    tu += 1
    x=mostrar_result()
    elif azar == "papel" and opcion == "piedra":
    x += 1
    pc += 1
    x=mostrar_result()
    else:
    print "Opcion incorrecta, vuleva a intentarlo"

    print ""

    if pc > tu:
    print "Gano el PC", pc, "a", tu
    elif pc == tu:
    print "Empataron", tu, "a", pc
    else:
    print "Ganaste", tu, "a", pc

    print ""
    print "PARTIDA TERMINADA"

    def main():

    def ask_restart():
    print ""
    restart = raw_input ("Quieres jugar de nuevo?(s/n): ")
    restart = restart.lower()
    if restart == "s":
    print ""
    main()
    else:
    print "FIN"

    print "Escribe 1 para jugar al mejor de tres."
    print "Escribe 2 para cambiar el tipo de juego."

    opcion = input()

    if opcion == 1:
    juego(3)
    ask_restart()

    else:
    intentos = raw_input ("Tu diras, jugamos al mejor de: ")
    juego(int(intentos))
    ask_restart()

    main()

    1. PythonDiario dice:

      Gracias Andre por visitar el blog. Luego me fijo que tal tu código 😉
      Saludos

  4. mEnCeY dice:

    Se podría implementar una webcam junto con opencv reconocer gestos y así jugar como si jugásemos con otra persona.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey