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.
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.