Python 字符串索引超出范围
试着编写一个代码,基本上测试位于r的字母(这里(2,3))是否等于一个特定的字母或字符串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
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'