2012-01-20 4 views
2

Код:Python строка нарезка

count = 0 
oldcount = 0 
for char in inwords: 
    if char == " ": 
     anagramlist.append(inwords[oldcount, count]) 
     oldcount = count 
     count = 0 
    else: 
     count += 1 

ошибка:

Traceback (most recent call last): 
    File "C:/Users/Knowhaw/Desktop/Python Programs/Anagram solver/HTS anagram.py", line 14,   
in <module> 
    anagramlist.append(inwords[oldcount, count]) 
TypeError: string indices must be integers 

что, черт возьми, происходит? граф и oldcount, очевидно, Интс, но ошибка говорит, что они не являются

Я могу даже написать

anagramlist.append(inwords[int(oldcount), int(count)]) 

и получить ту же ошибку

+0

странное название вытащил меня сюда ... – 0xc0de

+0

я могу видеть, как сообщение об ошибке может быть истолковано подразумевает, что индексация с кратному целые числа. «индекс строки должен быть целым» будет более четким. Просто наблюдение ... – chepner

+0

@chepner: Это наверняка выглядит путаное сообщение для новичка, но документация [http://docs.python.org/tutorial/introduction.html] имеет достаточную ясность. 'Как в значке, подстроки может быть задано с помощью нотации среза: два индекса, разделенных двоеточием. >>> >>> слово [4] 'A' >>> слово [0: 2] 'Он >>> слово [2: 4] ' lp'' – 0xc0de

ответ

13

Вы пытаетесь использовать (oldcount, count) в качестве индекса к списку. Это кортеж, а не int.

ли вы, возможно, имели в виду:

anagramlist.append(inwords[oldcount:count]) 

?

4

У вас есть синтаксис разреза. Код:

inwords[oldcount, count] 

обрабатывается так же, как:

inwords[(oldcount, count)] 

Вы не нарезка от oldcount к count, вы создаете кортеж oldcount и count и использовать это в качестве индекса строки ,

Правильный синтаксис нарезки Python будет:

inwords[oldcount:count] 
0

Если я понимаю ваш код, вы, вероятно, пытаешься использовать ломтик нотацию, которая требует использования :, не ,. Эта запятая заставляет интерпретатор понимать ваш код как использование кортежа в качестве индекса строки, что, очевидно, не допускается.

0

Я думаю, что что-то не так с (inwords[oldcount, count]). Вы не можете использовать (oldcount, count) в качестве индекса.

2

Вы только что пытались сделать anagramlist = inwords.split()?
Если вы действительно хотите, чтобы нарезать его вручную, вы должны будете использовать:

anagramlist.append(inwords[oldcount:count+oldcount])