[Duda] Código Python


Estado
Cerrado para nuevas respuestas.

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
Buenas, el ejercicio consiste en que hay que hacer un piedra, papel o tijeras, hasta ahí todo bien. El problema es que he creado la funcion "answer" para preguntar al usuario si quiere seguir jugando y éste debe responder "s" o "n", pero no se me sobreescribe la variable respuesta, que es donde se debería almacenar la respuesta del usuario. Si alguien sabe que me ayude por favor.

Os dejo aquí el código:

Python:
#PIEDRA PAPEL Y TIJERAS

import time

respuesta = "s"

def answer():
    respuesta = input("Do you want to play again? (s/n)... ")
    return respuesta

while respuesta == "s":

    u1 = input("Jugador1 --- ¿Piedra, papel o tijeras?...> ")
    u2 = input("Jugador2 --- ¿Piedra, papel o tijeras?...> ")


    if u1 == u2:
        print("It's a tie!")
        time.sleep(3)
        answer()

    elif u1 == "tijeras" and u2 == "piedra":
        print("Jugador2 WINS!")
        time.sleep(3)
        answer()

    elif u1 == "tijeras" and u2 == "papel":
        print("Jugador1 WINS!")
        time.sleep(3)
        answer()

    elif u1 == "papel" and u2 == "piedra":
        print("Jugador1 WINS!")
        time.sleep(3)
        answer()

    elif u1 == "papel" and u2 == "tijeras":
        print("Jugador2 WINS!")
        time.sleep(3)
        answer()

    elif u1 == "piedra" and u2 == "tijeras":
        print("Jugador1 WINS!")
        time.sleep(3)
        answer()

    elif u1 == "piedra" and u2 == "papel":
        print("Jugador2 WINS!")
        time.sleep(3)
        answer()

    else:
        print("Error! Please introduce: Piedra, papel o tijeras.")


Gracias de antemano.
 
  • Like
Reacciones : destapeman

Valeo08

Capullo perro no mucho
Noderador
Nodero
Noder
Eso es porque la variable respuesta que creas en la función answer es una variable local, que solo tiene efecto en dicha función.

Si mal no recuerdo había una palabra clave, "global" que te permitía modificar una variable definida en ámbito global. Por otro lado, te recomendaría que no usases variables globales, pues casi todo se puede realizar con encapsulación y sin tener que definir variables globales. En cualquier caso, la función aswer si cambia la variable respuesta no tiene porqué devolverla, puesto que estas modificándola (usando lo de "global" recuerda), a ese tipo de funciones que devuelven nada se les llama procedimientos y en el caso del "menú" de elección que quieres hacer es muy común usarlo.

PD: Sigo pensando que es mejor si haces todo mediantes funciones y sin definir variables globales.

Espero que te ayude, un saludo crack
 
  • Like
Reacciones : destapeman y mtz0

Al Capone

666
Noder
Python:
respuesta = "s"

def answer():
    global respuesta
    respuesta = input("Do you want to play again? (s/n)... ")

    return respuesta

answer()
print(respuesta)
answer()
print(respuesta)

Se plasmaría en esto:


Código:
Do you want to play again? (s/n)... s
s
Do you want to play again? (s/n)... n
n

Simplemente le tienes que añadir el global respuesta dentro del la funcion answer()
 
  • Like
Reacciones : mtz0
La variable es local por tanto tienes que declararla global:

Python:
def answer():
    global respuesta
    respuesta = input("Do you want to play again? (s/n)... ")

Una version mas simple del codigo podria ser esta:


Python:
import time

respuesta = "s"
respuestas = {'piedra':{'papel': 'J2', 'tijeras':'J1','piedra':'tie'}, 'papel':{'tijeras':'J2', 'piedra':'J1', 'papel':'tie'}, 'tijeras':{'papel':'J1', 'piedra':'J2', 'tijeras':'tie'}}

def answer():
    global respuesta
    respuesta = input("Do you want to play again? (s/n)... ")

while respuesta == "s":

    u1 = input("Jugador1 --- ¿Piedra, papel o tijeras?...> ")
    u2 = input("Jugador2 --- ¿Piedra, papel o tijeras?...> ")
    resultado = respuestas[u1][u2]

    if u1 in ['piedra', 'papel', 'tijeras'] and u2 in ['piedra', 'papel', 'tijeras']:
        if resultado == 'J1':
            print("Jugador1 WINS!")

        elif resultado == 'J2':
            print('Jugador2 WINS!')

        else:
            print("It's a tie!")

        time.sleep(3)
        answer()

    else:
        print("Error! Please introduce: Piedra, papel o tijeras.")

A mi parecer es mas sencillo
 
Última edición:
  • Like
Reacciones : mtz0

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
Muchas gracias a todos chavales <3
 

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
La variable es local por tanto tienes que declararla global:

Python:
def answer():
    global respuesta
    respuesta = input("Do you want to play again? (s/n)... ")

Una version mas simple del codigo podria ser esta:


Python:
import time

respuesta = "s"
respuestas = {'piedra':{'papel': 'J2', 'tijeras':'J1','piedra':'tie'}, 'papel':{'tijeras':'J2', 'piedra':'J1', 'papel':'tie'}, 'tijeras':{'papel':'J1', 'piedra':'J2', 'tijeras':'tie'}}

def answer():
    global respuesta
    respuesta = input("Do you want to play again? (s/n)... ")

while respuesta == "s":

    u1 = input("Jugador1 --- ¿Piedra, papel o tijeras?...> ")
    u2 = input("Jugador2 --- ¿Piedra, papel o tijeras?...> ")
    resultado = respuestas[u1][u2]

    if u1 in ['piedra', 'papel', 'tijeras'] and u2 in ['piedra', 'papel', 'tijeras']:
        if resultado == 'J1':
            print("Jugador1 WINS!")

        elif resultado == 'J2':
            print('Jugador2 WINS!')

        else:
            print("It's a tie!")

        time.sleep(3)
        answer()

    else:
        print("Error! Please introduce: Piedra, papel o tijeras.")

A mi parecer es mas sencillo
Todavía estoy aprendiendo python cabrón jajaaj poco a poco pero gracias bro
 
Estado
Cerrado para nuevas respuestas.