簡體   English   中英

為什么在我的 Python 代碼 Cows and Bulls 中出現“IndexError: list index out of range”?

[英]Why do I get "IndexError: list index out of range" in my Python code Cows and Bulls?

我正在嘗試自己編寫Cows and Bulls游戲。 從昨天開始,我收到一個IndexError: list index out of range錯誤,我不知道出了什么問題。 我知道有更好的解決方案,但是有人可以查看我的代碼嗎?

import random

#randomly generate 4 digitnumber
#asked the user to guess the number
#every digit gussed in the correct place they gave a "cow"
#every digit guessed correctly you get the "bull"
#one the user guessed the correct number game is over
#7 trials

def play_bull_and_cow(random_number, guess_number):
  users_number = [int(x) for x in str(guess_number)]
  trials = 7
  while trials > 0:
    if random_number == users_number:
      trials -=1
      return "you won, congratulations"
      break
    else:
      bull = 0
      cow = 0
      for i in range(len(random_number)):
        if users_number[i] == random_number[i]:       
          bull += 1
          random_number.pop(i)
          users_number.pop(i)
          random_number = random_number
          users_number = users_number
          trials -= 1
          continue
        elif users_number[i] in random_number:
          cow +=1
          trials -=1
          continue
        else:
          return "you have not guessed anything try again"
          
random_number = random.sample(range(1, 10), 4)
print(random_number)
guess_number = int(input("enter the 4 digit number: "))
print(play_bull_and_cow(random_number, guess_number))      

輸出:

[5, 2, 3, 8]
enter the 4 digit number: 5237
Traceback (most recent call last):
  File "C:\Users\Luiza\Desktop\try_to_understand.py", line 41, in <module>
    print(play_bull_and_cow(random_number, guess_number))
  File "C:\Users\Luiza\Desktop\try_to_understand.py", line 23, in play_bull_and_cow
    if users_number[i] == random_number[i]:
IndexError: list index out of range

這是因為 users_number 和 random_number 沒有相同的尾巴。 所以我從 0 到一個大於 len(users_number) 的數字,這給出了這個錯誤

因為這里for i in range(len(random_number))你的range值已經計算出來並且是常數。 但是在這里random_number.pop(i)你減少了列表的大小。 所以你最終會得到比當前列表長度更多的迭代。 當您的i傳遞random_number長度時,嘗試使用random_number[i]訪問值時會出現IndexError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM