Python multiple number guessing game

◇◆丶佛笑我妖孽 提交于 2019-12-13 08:21:18

问题


I am trying to create a number guessing game with multiple numbers. The computer generates 4 random numbers between 1 and 9 and then the user has 10 chances to guess the correct numbers. I need the feedback to display as YYYY for 4 correct numbers guessed, YNNY for first and last number guessed etc. (you get the point). the code below keeps coming back saying 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")

回答1:


You need four guesses to match for random numbers, you can also shorted your code using a list 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)]))

You can also use enumerate to check elements at matching indexes:

print("".join(["Y" if randomNumber[ind]==ele else "N"  for ind, ele in enumerate(Guess)]))

To give the user guesses in a loop:

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)



回答2:


Right now you're only asking the user for one guess, and appending the guess to the Guess list. So the Guess list has one element, but you're using Guess[1], Guess[2], etc., which of course results in the IndexError




回答3:


I'll rearrange your code a bit, so it doesn't stray too far from what you've done.

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)

You can combine these in a loop to avoid the repetitive code:

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")

Perhaps, to print your desired result e.g. YNNY, like this:

result = []
for index in range(4):
    if randomNumbers[index] == Guess[index]:
        result.append("Y")
    else:
        result.append("N")
print(''.join(result))

If you want terser code use Python's ternary operation:

result = []
for index in range(4):
    result.append("Y" if randomNumbers[index] == Guess[index] else "N")
print(''.join(result))

Or use the fact that True == 1 and False == 0 as indexes:

result = []
for index in range(4):
    result.append("NY"[randomNumbers[index] == Guess[index]])
print(''.join(result))


来源:https://stackoverflow.com/questions/26557773/python-multiple-number-guessing-game

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!