我正在 Python 上进行“猜单词”,但我无法弄清楚这个错误。
AttributeError: 'int' object has no attribute 'index' (python)
它在线上给了我一个错误
letterIndex=word.index(guess)
def checkLetter(word):
blanks = '_' * len(str(word))
print('Word: ', blanks)
if str(guess) == str(letters):
letterIndex = word.index(guess)
newBlank = blanks[:letterIndex * 2] + guess + blanks[letterIndex * 2 + 1]
print('Guess Corrrect')
收到错误是因为尝试对
word
变量(它是一个整数)使用
index()
方法,而
index()
方法仅适用于字符串列表。
以下是对代码的逐步解释:
-
def checkLetter(word):
: 这行定义了一个名为checkLetter
的函数,该函数将word
作为输入。但是,没有在此处指定word
的数据类型,并且根据的错误,它似乎是一个整数。 -
blanks = '_' * len(str(word))
: 这行将word
转换为字符串 (str(word)
),获取其长度 (len(...)
),然后创建一个与word
中的字母数相等的_
字符的字符串。 -
if str(guess) == str(letters):
: 这行似乎要比较猜测和字母。但是,letters
变量在此代码片段中未定义,因此尚不清楚它的来源。 -
letterIndex = word.index(guess)
: 这里出现错误 。尝试在word
(它仍然是一个整数)上使用index()
方法。整数没有index()
方法,因此会导致AttributeError
。index()
方法用于在序列(如字符串或列表)中查找项目的索引。 -
后面的行
newBlank = ...
和print('Guess Correct')
不会执行,因为代码会因上一行的错误而停止。
要修复该错误,需要确保
word
是一个字符串,而不是一个整数。
以下是如何修复
checkLetter
函数的方法:
def checkLetter(word):
word = str(word) # 将 word 转换为字符串
blanks = '_' * len(word)
print('Word: ', blanks)
if str(guess) == str(letters):
letterIndex = word.index(guess)
newBlank = blanks[:letterIndex * 2] + guess + blanks[letterIndex * 2 + 1]
print('Guess Correct')
此代码首先通过将
word
显式转换为字符串 (
word = str(word)
) 来确保
word
是一个字符串。现在,
word.index(guess)
将按预期工作。
此外,需要在代码中的某个地方定义
letters
变量,以便能够进行比较。