Python多号猜谜游戏

时间:2014-10-24 23:36:30

标签: python numbers

我正在尝试用多个数字创建一个猜数游戏。计算机在1到9之间生成4个随机数,然后用户有10次猜测正确数字的机会。我需要反馈显示为YYYY 4个正确的数字猜测,YNNY表示第一个和最后一个数字猜测等等(你明白了)。下面的代码不断回来说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")

3 个答案:

答案 0 :(得分:1)

现在你只是要求用户进行一次猜测,并将猜测附加到Guess列表中。因此,Guess列表包含一个元素,但您使用的是Guess[1]Guess[2]等,这当然会产生IndexError

答案 1 :(得分:1)

您需要四个猜测来匹配随机数,您还可以使用列表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)]))

您还可以使用枚举来检查匹配索引处的元素:

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

让用户在循环中猜测:

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 :(得分:0)

我会重新安排你的代码,所以它不会偏离你所做的太多。

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)

您可以在循环中组合这些以避免重复代码:

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

也许,打印您想要的结果,例如YNNY,像这样:

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

如果你想要更简洁的代码使用Python的三元操作:

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

或者使用True == 1False == 0作为索引的事实:

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