pseint - Juego de adivinar múltiples números de Python
programa para adivinar un numero en c++ (3)
En este momento, solo le está pidiendo al usuario una conjetura y añada la conjetura a la lista de Guess
. Entonces la lista Guess
tiene un elemento, pero estás usando Guess[1]
, Guess[2]
, etc., que por supuesto da como resultado el IndexError
Intento crear un juego de adivinar números con varios números. La computadora genera 4 números aleatorios entre 1 y 9 y luego el usuario tiene 10 posibilidades de adivinar los números correctos. Necesito los comentarios para mostrar como YYYY
para 4 números correctos adivinados, YNNY
para el primer y último número adivinado, etc. (se obtiene el punto). el código siguiente sigue volviendo diciendo IndexError: list index out of range
.
from random import randint
guessesTaken = 0
randomNumber = []
for x in range(4):
tempNumber = randint(1, 9)
randomNumber.append(tempNumber)
Guess = []
Guess.append(list(input("Guess Number: ")))
print(randomNumber)
print(Guess)
if randomNumber[0] == Guess[0]:
print("Y")
elif randomNumber[1] == Guess[1]:
print("Y")
elif randomNumber[2] == Guess[2]:
print("Y")
elif randomNumber[3] == Guess[3]:
print("Y")
elif randomNumber[0] != Guess[0]:
print("N")
elif randomNumber[1] != Guess[1]:
print("N")
elif randomNumber[2] != Guess[2]:
print("N")
elif randomNumber[3] != Guess[3]:
print("N")
Necesitas cuatro conjeturas para hacer coincidir números aleatorios, también puedes abreviar tu código usando una lista de comp:
from random import randint
guessesTaken = 0
randomNumber = []
Guess = []
for x in range(4):
tempNumber = str(randint(1, 9)) # compare string to string
randomNumber.append(tempNumber)
Guess.append(input("Guess Number: "))
print("".join(["Y" if a==b else "N" for a,b in zip(Guess,randomNumber)]))
También puede usar enumerar para verificar elementos en índices coincidentes:
print("".join(["Y" if randomNumber[ind]==ele else "N" for ind, ele in enumerate(Guess)]))
Para dar al usuario conjeturas en un bucle:
from random import randint
guessesTaken = 0
randomNumber = [str(randint(1, 9)) for _ in range(4)] # create list of random nums
while guessesTaken < 10:
guesses = list(raw_input("Guess Number: ")) # create list of four digits
check = "".join(["Y" if a==b else "N" for a,b in zip(guesses,randomNumber)])
if check == "YYYY": # if check has four Y''s we have a correct guess
print("Congratulations, you are correct")
break
else:
guessesTaken += 1 # else increment guess count and ask again
print(check)
Reordenare tu código un poco, para que no se aleje demasiado de lo que has hecho.
from random import randint
guessesTaken = 0
randomNumbers = []
Guess = [] # Combine your guesses with your loop
for x in range(4):
tempNumber = randint(1, 9)
randomNumbers.append(tempNumber)
# This should be done four times too
# In Python 2, instead of this:
# Guess.append(input("Guess Number: "))
# do this:
Guess.append(int(raw_input("Guess Number: "))) # raw_input and pass to int
# in python 3, raw_input becomes input, so do this instead:
# Guess.append(int(input("Guess Number: ")))
print(randomNumbers)
print(Guess)
Puede combinar estos en un bucle para evitar el código repetitivo:
if randomNumbers[0] == Guess[0]:
print("Y")
else:
print("N")
if randomNumbers[1] == Guess[1]:
print("Y")
else:
print("N")
if randomNumbers[2] == Guess[2]:
print("Y")
else:
print("N")
if randomNumbers[3] == Guess[3]:
print("Y")
else:
print("N")
Tal vez, para imprimir el resultado deseado, por ejemplo, YNNY, así:
result = []
for index in range(4):
if randomNumbers[index] == Guess[index]:
result.append("Y")
else:
result.append("N")
print(''''.join(result))
Si quiere un código terser, use la operación ternaria de Python:
result = []
for index in range(4):
result.append("Y" if randomNumbers[index] == Guess[index] else "N")
print(''''.join(result))
O use el hecho de que True == 1
y False == 0
como índices:
result = []
for index in range(4):
result.append("NY"[randomNumbers[index] == Guess[index]])
print(''''.join(result))