Python 字符串索引超出范围

Python 字符串索引超出范围,python,types,int,Python,Types,Int,试着编写一个代码,基本上测试位于r的字母(这里(2,3))是否等于一个特定的字母或字符串 def test(): txt = "test.txt" r = (2,3) if txt[r[0]][r[1]] == 'l': return (True) elif txt[r[0]][c[1]] == "m": return (False) elif txt[r[0]][c[1]] == "b": return (True) 但我一直在犯错误。错误对话框如下所示: if t

试着编写一个代码,基本上测试位于r的字母(这里(2,3))是否等于一个特定的字母或字符串

def test():

txt = "test.txt"
r = (2,3)
if txt[r[0]][r[1]] == 'l':
    return (True)
elif txt[r[0]][c[1]] == "m":
    return (False)
elif txt[r[0]][c[1]] == "b":
    return (True)
但我一直在犯错误。错误对话框如下所示:

if txt[r[0]][r[1]] == 'l':
IndexError: string index out of range
我不知道我做错了什么,因为我今天早些时候让它工作了。 另外,在您提问之前,我必须以这种方式对其进行编码,因为有一个特殊的原因


谢谢。

你想做什么?你的回报是什么

它不起作用的原因是:

r = (2,3)
txt[r[0]][r[1]] -> txt[2][3]

txt[2] == 's'
s[3] -> IndexError
正如@Abhijit所提到的,如果您试图通过切片来抓取角色,那么

txt[r[0]:r[1]] is correct.
但是,如果您总是执行一个获取一个字符的切片,这意味着您的r元组总是采用(N,N+1)的形式,如(2,3),那么您可能需要更改策略

请注意,对于给定的示例,您可以执行以下操作:

if any([letter in txt for letter in ['l', 'b']]):
    return True
如果您需要检查文本中的实际片段,而不仅仅是单个字符,那么上述操作仍然有效

if any([letter_group in txt for letter_group in ['te', 'st']]):
    return True
甚至:

if any([letter in txt for letter in 'lb']]):
    return True
例如…

请注意

if txt[r[0]][r[1]] == 'l':
应写为

if txt[r[0]:r[1]] == 'l':

类似地,其他用法也应该改变

您不需要进行切片来检查字符是否存在于某个位置。例如:

txt = 'test.txt' if txt[2] == 's': print 'runs'
我在试着测试这个字母是否在那个坐标中。在第一个例子中,它等于“l”,我希望它返回true,如果特定元素是“l”Ok,那么“test.txt”是一个文件而不是字符串?对,所以如果您只查找单个字符,那么您不需要使用切片,您只需使用索引偏移量,如
txt[r]
其中
r=2
为什么要使用
(2,3)
而不是
2
作为索引?-什么是
c
?非常感谢你们的帮助。虽然我同意你们的观点,如果范围始终是形式(N,N+1),则不需要切片,如果不是,或者OP需要检查多字符匹配,则仍然需要切片。@sberry:的确,在这种情况下仍然需要切片方法。 txt = 'test.txt' coord = (2, 3) if txt[coord[0]] == 's': print 'runs'