我正试图在游戏中创建一个蠕虫克隆。我用于确定字母颜色(determine_colour)的功能目前造成以下错误:
Traceback (most recent call last):
File "/tmp/sessions/e9773df3e08e9b22/main.py", line 77, in <module>
colour = determine_colour(GUESSES[i], j)
File "/tmp/sessions/e9773df3e08e9b22/main.py", line 34, in determine_colour
if letter == ANSWER[j]:
IndexError: string index out of range我的代码如下:
import random
import pygame
word_options = ("NANCY")
ANSWER = random.choice(word_options).upper()
WIDTH = 600
HEIGHT = 700
MARGIN = 10
T_MARGIN = 100
B_MARGIN = 100
LR_MARGIN = 100
GREY = (225, 227, 229)
GREY_FILLED = (120, 124, 126)
GREEN = (6,214,160)
YELLOW = (255, 209, 102)
INPUT = ""
GUESSES = []
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
UNGUESSED = ALPHABET
GAME_OVER = False
pygame.init()
pygame.font.init()
pygame.display.set_caption("Nancdle")
def determine_colour(guess, j):
letter = guess[j]
if letter == ANSWER[j]:
return GREEN
#yellow
if letter in ANSWER:
return YELLOW
#grey
return GREY_FILLED
SQ_SIZE = (WIDTH-4*MARGIN-2*LR_MARGIN) // 5
FONT = pygame.font.SysFont("free sans bold", SQ_SIZE)
FONT_SMALL = pygame.font.SysFont("free sans bold", SQ_SIZE//2)
def determine_unguessed_letters(guesses):
guessed_letters = "".join(guesses)
unguessed_letters = ""
for letter in ALPHABET:
if letter not in guessed_letters:
unguessed_letters = unguessed_letters+letter
return unguessed_letters
#screen
screen = pygame.display.set_mode((WIDTH, HEIGHT))
white = (255, 255, 255)
#animation loop
animating = True
while animating:
screen.fill(white)
determine_unguessed_letters(GUESSES)
letters = FONT_SMALL.render(UNGUESSED, False, GREY_FILLED)
surface = letters.get_rect(center = (WIDTH//2, T_MARGIN//2))
screen.blit(letters, surface)
y = T_MARGIN
for i in range(6):
x = LR_MARGIN
for j in range(0,5):
square = pygame.Rect(x, y, SQ_SIZE, SQ_SIZE)
pygame.draw.rect(screen, GREY, square, 2)
#to add past letters/words
if i < len(GUESSES):
colour = determine_colour(GUESSES[i], j)
pygame.draw.rect(screen, colour, square)
letter = FONT.render(GUESSES[i][j], False, (255,255,255))
surface = letter.get_rect(center = (x+SQ_SIZE//2, y+SQ_SIZE//2))
screen.blit(letter, surface)
# user text input (next guess)
if i == len(GUESSES) and j < len(INPUT):
letter = FONT.render(INPUT[j], False, (0, 0, 0))
surface = letter.get_rect(center=(x+SQ_SIZE//2, y+SQ_SIZE//2))
screen.blit(letter, surface)
x += SQ_SIZE + MARGIN
y += SQ_SIZE + MARGIN
#to update screen
pygame.display.flip()
for event in pygame.event.get():
#so you can close window
if event.type == pygame.QUIT:
animating = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
if len(INPUT) > 0:
INPUT = INPUT[:len(INPUT) - 1]
if event.key == pygame.K_RETURN:
if len(INPUT) == 5:
GUESSES.append(INPUT)
UNGUESSED = determine_unguessed_letters(GUESSES)
GAME_OVER = True if INPUT == ANSWER else False
INPUT = ""
elif event.key in range(pygame.K_a, pygame.K_z + 1):
# any other letter keys pressed
if len(INPUT) < 5 and not GAME_OVER:
INPUT = INPUT + event.unicode.upper()
elif event.key in [pygame.K_BACKSPACE, pygame.K_DELETE]:
INPUT = INPUT[:-1] # don't need to check length我尝试了几次for循环类型的迭代,更改了“确定颜色”函数的代码,检查了我的输入代码,并查看了用于选择单词的代码,但都没有结果。我希望"AZNCY“这个词被输入为黄色、灰色、绿色。
发布于 2022-05-08 00:07:15
你的可变答案是由一个字母组成的。random.choice('xyz')->returning是一个字母,所以当您尝试访问ANSWERnumber>0时,您将自动得到索引测距的错误。接下来,时间试着去阅读错误,我希望它能有所帮助。
编辑:对不起,OP,我以为我的答案足以解决这个问题。试着把你的单词南希分开来回答,就像那个答案= 'N','A','N','C','Y‘。希望这是你的解决方案。
发布于 2022-05-10 10:05:38
导致索引问题的原因是因为在开始时有以下两条语句:
word_options = ("NANCY")
ANSWER = random.choice(word_options).upper()这第一行将word_options设置为单个字符串("NANCY"),第二行将ANSWER设置为该字符串的单个字母。
可以通过添加一个后缀逗号来使字符串的tuple成为字符串的word_options来解决这个问题--这可能是您的意图,也是通过在括号中插入字符串来实现的:
word_options = ("NANCY",) # Note added comma.
ANSWER = random.choice(word_options).upper()然后random.choice()将ANSWER设置为整个字符串 "NANCY",而不仅仅是其中的一个字母。
还为测试目的设置GUESSES = ["AZNCY"]之后,IndexError不再发生,以下内容显示在屏幕上:

发布于 2022-05-08 13:05:25
我目前是一个初学者,但希望这个洞察力可以提供一个解决方案:
由于j在猜测时超出了范围,所以如果要从0中索引,请检查所有重要的实例,因为当您有来自0的list索引时。
示例:
或者这就是问题所在,如果是==呢?
if i < len(GUESSES) <----------- THIS
colour = determine_colour(GUESSES[i], j)https://stackoverflow.com/questions/72157143
复制相似问题