Tôi nghĩ rằng tôi đã hoàn tất chương trình của mình, nhưng ... nó không hoạt động. Tôi đang cố gắng viết một chương trình mô phỏng một trò chơi xổ số, nhưng khi tôi cố gắng kiểm tra các dự đoán của người dùng dựa trên số lượng dự đoán trên vé, tôi nhận được một lỗi cho tôi biết "danh sách danh sách nằm ngoài phạm vi". Tôi nghĩ rằng nó có một cái gì đó để làm với một phần của mã, nơi tôi chỉ định các chữ số ngẫu nhiên để "a," "b", "c", vv Nhưng tôi không chắc chắn.Python: IndexError: chỉ mục danh sách nằm ngoài phạm vi
Đây là mã trong đó là toàn bộ:
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()
Và đây là lỗi tôi nhận được:
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
đọc traceback, trong hầu hết trường hợp, nó có thể hữu ích. – monkut
win_numbers dài bao nhiêu? Tôi nghĩ bạn sẽ thấy rằng nó là <= 5. Trình tạo số thắng của bạn không hoàn thiện. Bạn cần đặt 'a = randint (1,30)' _inside_ vòng lặp while. Nếu không, nó chỉ chạy nó một lần. –
cũng có, hoàn toàn không có lý do gì để sử dụng dòng 'del myList [:]' Trong hàm 'getguess',' guess' được định nghĩa trong phạm vi hàm. khởi tạo phỏng đoán với 'guess = []'. –