Python:IndexError:列表索引超出范围

Rya*_*n W 9 python indexing list range

我想我的程序已经完成,但是......它不起作用.我正在尝试编写一个模拟彩票游戏的程序,但是当我尝试检查用户对机票上猜测数量的猜测时,我得到一个错误,告诉我"列表索引超出范围".我认为它与代码的一部分有关,我将随机数分配给"a","b","c"等.但我不确定.

以下是完整的代码:

import random

def main():
random.seed()

#Prompts the user to enter the number of tickets they wish to play.
tickets = int(input("How many lottery tickets do you want?\n"))

#Creates the dictionaries "winning_numbers" and "guess." Also creates the variable "winnings" for total amount of money won.
winning_numbers = []
guess = []
winnings = 0

#Generates the winning lotto numbers.
for i in range(tickets):
    del winning_numbers[:]

    a = random.randint(1,30)
    while not (a in winning_numbers):
        winning_numbers.append(a)

    b = random.randint(1,30)
    while not (b in winning_numbers):
        winning_numbers.append(b)

    c = random.randint(1,30)
    while not (c in winning_numbers):
        winning_numbers.append(c)

    d = random.randint(1,30)
    while not (d in winning_numbers):
        winning_numbers.append(d)

    e = random.randint(1,30)
    while not (e in winning_numbers):
        winning_numbers.append(e)

    print(winning_numbers)
    getguess(guess, tickets)
    nummatches = checkmatch(winning_numbers, guess)

    print("Ticket #"+str(i+1)+": The winning combination was",winning_numbers,".You matched",nummatches,"number(s).\n")

    if nummatches == 0 or nummatches == 1:
        winnings = winnings + 0
    elif nummatches == 2:
        winnings = winnings + 10
    elif nummatches == 3:
        winnings = winnings + 500
    elif nummatches == 4:
        winnings = winnings + 20000
    elif nummatches == 5:
        winnings = winnings + 1000000

print("You won a total of",winnings,"with",tickets,"tickets.\n")

#Gets the guess from the user.
def getguess(guess, tickets):
del guess[:]

for i in range(tickets):
    bubble = input("What numbers do you want to choose for ticket #"+str(i+1)+"?\n").split(" ")
    guess.append(bubble)
print(bubble)

#Checks the user's guesses with the winning numbers.
def checkmatch(winning_numbers, guess):
match = 0
for i in range(5):

    if guess[i] == winning_numbers[i]:
        match = match+1

return match

main()
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Traceback (most recent call last):
  File "C:\Users\Ryan\Downloads\Program # 2\Program # 2\lottery.py", line 85, in <module>
    main()
  File "C:\Users\Ryan\Downloads\Program # 2\Program # 2\lottery.py", line 45, in main
   nummatches = checkmatch(winning_numbers, guess)
File "C:\Users\Ryan\Downloads\Program # 2\Program # 2\lottery.py", line 79, in checkmatch
    if guess[i] == winning_numbers[i]:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

sim*_*ona 10

正如错误所述,问题在于:

if guess[i] == winning_numbers[i]
Run Code Online (Sandbox Code Playgroud)

错误是您的列表索引超出范围 - 也就是说,您试图引用一些甚至不存在的索引.如果没有完全调试你的代码,我会检查你根据输入添加猜测的行:

for i in range(tickets):
    bubble = input("What numbers do you want to choose for ticket #"+str(i+1)+"?\n").split(" ")
    guess.append(bubble)
print(bubble)
Run Code Online (Sandbox Code Playgroud)

您为用户提供的猜测量的大小基于

# Prompts the user to enter the number of tickets they wish to play.
tickets = int(input("How many lottery tickets do you want?\n"))
Run Code Online (Sandbox Code Playgroud)

因此,如果他们想要的门票数量少于5,那么您的代码就在这里

for i in range(5):

if guess[i] == winning_numbers[i]:
    match = match+1

return match
Run Code Online (Sandbox Code Playgroud)

将抛出错误,因为guess列表中没有那么多元素.

  • 实际上,他的错误是在更早的时候引起的.根据他的输入语句,`bubble`是一个字符串列表.然后将该列表附加到`guess`.所以`guess`看起来像是:`[['12','30','12','23'.'3'],['4','5','7','8','16']]`.正确的列表方法是`guess.extend()`.此外,值是字符串,因此即使它们进行比较,比较也将_never_返回true. (3认同)