Найти - Пользователи
Полная версия: КОД
Начало » Python для новичков » КОД
1 2 3
o7412369815963
python4ik
По моему n увеличивается только при совпадении символов
поэтому не правильно и работает
python4ik
s='hello frends'
frend='frends'
n=0
for x in s:
if frend[n] is x:
n+=1
print x,
n здесь равно len(frend),а не len(s). Может всё-таки немного семантики(такое красивое слово! :) ). Просветите плиз,в чём я заблуждаюсь(я ведь по этому и обратился!)
o7412369815963
с целью определись: нужно найти подстроку в тексте или найти символы в тексте.
если найти символы то попробуй свой код с таким текстом:
s='hello frends'
frend='sdnerf'
python4ik
Согласен,что где-то заблуждаюсь в цикле.Недавно заметил за собой одну ошибку:
def help(object, spacing=10, collapse=1):
...
methodList = [method for method in dir(object) if callable(getattr(object, method))]
Func = collapse and (lambda s: " ".join(s.split())) or (lambda s: s) - тоесть здесь перепутал collapse на callable
по запарке,сидел ночью,один глаз уже закрывался :) ,в этой книге указывалось,что если collapse является истиной,
то сработает первая lambda.А думаю callable(перепутал с collapse) ведь истина,как может другая lambda s: s сработать!
Думал,какой-то том ещё не прочитал по Питону(кроме уважаемого мной очень Лутца). Потом другой глаз открылся,
а оказывается,что там всё проще простого! :) .Если в def help-collapse=0,то и сработает другая lambda.
Тоесть я имею ввиду,что покажите мне,где я заблуждаюсь,в цикле КОДа.Дайте намёк,пояснение к циклу!
Ed
python4ik
А ведь n стоит не в цикле for w in z,а увеличивается при условии,что символ из моего списка совпадает с одним из символов в файле!
Оч хорошо. Ну вот нашли вы этот символ в файле, увеличили n, потом нашли еще и еще и так дошли до конца l. А файлы с совпадениями продолжают поступать. Вот так вы и выходите за границы l.

Я, честно говоря не совсем понимаю что вы там считаете. Вот смотрите:
Допустим для простоты, что мы ищем символы ‘a’ и ‘b’ (l=) по вашему алгоритму и в каталоге у нас 5 файлов с именами ab1, ab2, ab3, ab4 и ab5.
Для файла с именем ab1 мы имеем n=0 и находим что ‘a’ (он же l ) у нас в имени файла присутствует. Мы выводим ‘a’ и переходим к следующему файлу. n становится 1. И так далее.

Вопрос1 - почему мы переходим к след. файлу не проверив есть ли в первом ‘b’?
Вопрос2 - понятно ли, что при n=3, то есть при обработке нашего третьего файла мы будем пытаться искать в нем l и получим Index Error, потому что в l только 2 элемента?
Вопрос3 - пытались ли вы просто вот так пройти по программе строка за строкой?
Вопрос4 - пытались ли вы воспользоваться отладочной печатью с помощью print, чтобы понять что происходит, когда программа выполняется?
python4ik
Вот я немного переписал КОД:
simb='надо найти все эти символы. Они находятся,но по завершению выдаёт ошибку! IndexError!'
l=[]
n=0
nomsimb=-1
for x,y,z in os.walk('d:\\'):
for w in z:
for q in w:
nomsimb+=1 - здесь читает индекс найденного симв.
if q is simb[n]:
l.append(x)
l.append(w)
l.append(q)
print '\\'.join(l),nomsimb - здесь выводит полный путь сам симв.,и индекс симв.
n+=1 - если n записывает все найденные симв.даже после того как все нашёл
if n==len(simb):break - почему эта сторока не срабатывает,выход из цикла!
l=[]
nomsimb=-1
После появлении ошибки n=len(simb).Тоесть n не вышло за пределы simb
Как сделать,чтобы не выдавало ошибку?

Error:
if q is simb:
IndexError: string index out of range
o7412369815963
> - почему эта сторока не срабатывает,выход из цикла!
срабатывает
она выходит из 3-го цикла, но при этом ещё есть 1-ый и 2-й цикл, тут тебе надо return или exit(), для ретурна надо все в ф-ию завернуть
но алгоритм все равно не верный (он подобен примеру в посте 12)
и вообще зачем так извращаться, это не С++, питон - язык высокого уровня, эту задачу можно сделать в 2 строки.
UsCr
python4ik
if n==len(simb):break - почему эта сторока не срабатывает,выход из цикла!
Я думаю потому, что она в теле предыдущего if, а не цикла for. У вас криво табуляция расставлена.

python4ik
После появлении ошибки n=len(simb).Тоесть n не вышло за пределы simb
Как сделать,чтобы не выдавало ошибку?
А можно полный текст ошибки?
o7412369815963
UsCr
Я думаю потому, что она в теле предыдущего if, а не цикла for. У вас криво табуляция расставлена.
break не смотрит на if, он прерывает циклы
UsCr
o7412369815963
break не смотрит на if, он прерывает циклы
Проверил. Действительно. Тогда прошу прощения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB