Найти - Пользователи
Полная версия: Почему поиск после второго вызыва функции возращает None?
Начало » Python для новичков » Почему поиск после второго вызыва функции возращает None?
1
Snowmaze
import re
string = "AV kjm AV"
pattern = r"AV"
def finds():
global string,pattern
if not pattern in string:
return
print(pattern,string)
result = re.match(pattern, string)
print(result.start())
print(result.end())
string = string.replace(pattern, '' , 1)
finds()
finds()
Rodegast
Потому что не хорошо пользоваться глобальными переменными. Передавай строку в функцию как параметр.
Snowmaze
Rodegast
Потому что не хорошо пользоваться глобальными переменными. Передавай строку в функцию как параметр.
А как это сделать лучше?Я кривой xD
Rodegast
 import re
 
def finds(string, pattern):
    ....
    return result
print(finds("AV kjm AV", r"AV"))
Snowmaze
Rodegast
Всё равно выскакивает ошибка
Rodegast
> Всё равно выскакивает ошибка

Код + ошибку в студию!
Snowmaze
Rodegast
> Всё равно выскакивает ошибкаКод + ошибку в студию!
AV AV kjm AV
0
2
AV kjm AV
Traceback (most recent call last):
File “./prog.py”, line 12, in <module>
File “./prog.py”, line 10, in finds
File “./prog.py”, line 7, in finds
AttributeError: ‘NoneType’ object has no attribute ‘start’
 import re
def finds(string,pattern):
 if not pattern in string:
  return
 print(pattern,string)
 result = re.match(pattern, string) 
 print(result.start())
 print(result.end())
 string = string.replace(pattern, "" , 1)
 finds(string,pattern)
 return result
print(finds("AV kjm AV", r"AV"))
Rodegast
Так работает:
 import re
def finds(string,pattern):
	if pattern in string:
		print(pattern,string)
		result = re.match(pattern, string)
		print(result.start())
		print(result.end())
		return string.replace(pattern, "" , 1)
print(finds("AV kjm AV", r"AV"))
Snowmaze
Rodegast
Так работает:
Прикол в том, что он ищет только первые 2 индекса слова. А мне надо все индексы. Поэтому я и вызывал повторно функцию. Но когда вызывается 2 раз поиск выдает None
Rodegast
Это без регилярок делается.
 >>> def find(string, arg=None, start=0):
...     arg = arg or []
...     dat = string.find(obr, start)
...     if dat > -1:
...         arg.append((dat, dat+len(obr)))
...         return find(string, arg, dat+len(obr))
...     return arg
... 
>>> find("AV kjm AV")
[(0, 2), (7, 9)]
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