Rock Paper Scissors Program no funciona (Python)

Problemas: el progtwig no parece aceptar los enteros ingresados. No se agregará al conteo de victorias / derrotas / robos y no muestra la opción de computadora en modo de depuración

Conceptos básicos Diseño del progtwig: escriba un progtwig que permita al usuario jugar el juego de Rock, Paper, Scissors contra la computadora. El progtwig debe funcionar de la siguiente manera. Aparece un menú:

Puntuación: 0 victorias, 0 empates, 0 derrotas (D) ebug para mostrar la elección de la computadora (N) ew game (Q) uit

Si el usuario ingresa “Q” o “q”, el progtwig terminará. “N” o “n” para un juego nuevo, “D” o “d” para el modo de depuración, cualquier otra cosa causará que se muestre un mensaje de error.

  1. Cuando comienza un juego, se genera un número aleatorio en el rango de 1 a 3. Si el número es 1, entonces la computadora ha elegido rock. Si el número es 2, entonces la computadora ha elegido el papel. Si el número es 3, entonces la computadora ha elegido tijeras. (No muestre la opción de la computadora todavía a menos que estemos en modo ebug “D”).
  2. El usuario ingresa su opción de “1-rock”, “2-paper” o “3-tijeras” en el teclado.
  3. Se muestra la elección de la computadora.
  4. Se selecciona un ganador de acuerdo con las siguientes reglas: • Si un jugador elige la piedra y el otro elige las tijeras, la roca gana. (La piedra rompe las tijeras). • Si un jugador elige las tijeras y el otro el papel, las tijeras ganan. (Las tijeras cortan el papel.) • Si un jugador elige el papel y el otro elije la piedra, el papel gana. (El papel envuelve la roca). • Si ambos jugadores toman la misma decisión, el juego es un empate.
  5. Su progtwig mantendría un total acumulado de la cantidad de victorias, pérdidas y empates.
  6. Vuelva a mostrar el menú y repita el bucle del juego.

Mi progtwig:

import random def main(): continuing = "y" win = 0 lose = 0 draw = 0 while continuing == "y": print("Score:", win,"wins,", draw, "draws,", lose,"losses") print("(D)ebug to show computer's choice") print("(N)ew game") print("(Q)uit") choice = input(" ") if choice == "n" or choice == "N": win, draw, lose = playgame(win, draw, lose) elif choice == "d" or choice == "D": win, draw, lose = playgame2(win, draw, lose) elif choice == "q" or choice == "Q": break def playgame(win, draw, lose): computer = random.randint(1,3) player = input("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ") if computer == 1 and player == 2: Score = "You won" win += 1 elif computer == 1 and player == 3: Score = "You lost" lose += 1 elif computer == 2 and player == 1: Score = "You lost" lose += 1 elif computer == 2 and player == 3: Score = "You won" win += 1 elif computer == 3 and player == 1: Score = "You won" win += 1 elif computer == 3 and player == 2: Score = "You lost" lose += 1 elif computer == player: Score = "Draw" draw += 1 return (win, draw, lose) def playgame2(win, draw, lose): computer = random.randint(1, 3) player = input("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ") if computer == 1 and player == 2: Score = "You won" print("Computer chose rock") win += 1 elif computer == 1 and player == 3: Score = "You lost" print("Computer chose rock") lose += 1 elif computer == 2 and player == 1: Score = "You lost" print("Computer chose paper") lose += 1 elif computer == 2 and player == 3: Score = "You won" print("Computer chose paper") win += 1 elif computer == 3 and player == 1: Score = "You won" print("Computer chose scissors") win += 1 elif computer == 3 and player == 2: Score = "You lost" print("Computer chose scissors") lose += 1 elif computer == player: Score = "Draw" print("Computer chose the same as you") draw += 1 return (win, draw, lose) main() 

No soy Pythonista, pero en una conjetura, la entrada devuelve cadenas , y tendrás que convertir a entero antes de compararlo con el int de la computadora.

También creo que te está faltando un truco para SECAR tu código: deberías poder tener un solo método de playgame , que requiere un modo de debugmode booleano debugmode , que en lugar de llamar a imprimir directamente, llama a un debugmode indirecto, por ejemplo:

 def debugPrint(debugString, debugMode) if debugMode print(debugString) 

Espero que esto tenga sentido?

Esto funcionaría en Python 2.x, pero no en Python 3.x En Python 3.x, input () devuelve cadenas. Por lo tanto, la entrada del jugador sería de la forma “1” o “2” o “3”. Como 1 y “1” son diferentes, el progtwig no ejecutará ninguna de las líneas en los bloques if y elif en playgame () y playgame2 (). Aquí hay un ejemplo de Python 3.x:

 >>> a = input("Input = ") Input = 1 >>> print a SyntaxError: Missing parentheses in call to 'print' >>> print(a) 1 >>> a '1' >>> type(a)  

Por lo tanto, debe usar i = int (entrada (“Entrada =”)) donde quiera que desee una entrada de entero.

Sin embargo, en Python 2.x, input () tomará 1 como 1 en sí mismo y no como “1”. Pero, cuando quieras escribir una cadena como inpu, también tendrás que dar las comillas. Aquí hay un ejemplo:

 >>> a1 = input("Input = ") Input = 1 >>> a1 1 >>> type(a1)  >>> #I want to input a string now: >>> a2 = input("Input = ") Input = string Traceback (most recent call last): File "", line 1, in  a2 = input("Input = ") File "", line 1, in  NameError: name 'string' is not defined >>> a2 = input("Input = ") Input = "string" >>> a2 'string' >>> type(a2)  >>> a3 = raw_input("Input = ") Input = hello >>> a3 'hello' >>> type(a3)  >>> 

En Python 2.x, la función raw_input () toma la entrada como una cadena.