Индекс строки вне диапазона Python - PullRequest
2 голосов
/ 29 марта 2012

Попытка написать код в данный момент, который в основном проверяет, равна ли буква, лежащая в точке 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

Я понятия не имею, что я делаю не так, учитывая, что сегодня у меня все работало.Кроме того, прежде чем вы спросите, я должен кодировать это таким образом по определенной причине.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Обратите внимание, что

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

должно быть записано как

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

, и аналогично другое использование должно быть изменено

3 голосов
/ 29 марта 2012

Что вы пытаетесь сделать? Каким будет ваше возвращение?

Причина, по которой это не работает, заключается в следующем:

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.

Однако, если вы всегда делаете фрагмент, который захватывает один символ, то есть ваш кортеж всегда имеет форму (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

например ...

1 голос
/ 29 марта 2012

Вам не нужно делать срез, чтобы проверить, присутствует ли персонаж в определенном месте.Например:

txt = 'test.txt'
if txt[2] == 's':
    print 'runs'

Итак, если ваша координата равна (2, 3), вам нужно использовать только первое значение:

txt = 'test.txt'
coord = (2, 3)
if txt[coord[0]] == 's':
    print 'runs'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...