Проблема в том, что вы используете результат find
непосредственно в операторе if
. Просто посмотрите на то, что find
возвращает:
Возвращает самый низкий индекс в s, где найдена подстрока
эта подпрограмма целиком содержится в s [start: end]. Вернуть -1 при неудаче.
Значения по умолчанию для начала и конца и интерпретация отрицательных значений
так же, как для ломтиков.
Итак, вы получите integer
, соответствующий индексу первого совпадения или -1
. Когда вы делаете if an_integer:
, это на самом деле делает if bool(an_integer):
. bool(an_integer)
- это False
для an_integer==0
и True
для всего остального. Это означает, что вы будете выполнять else
часть, если ваш номер строки будет найден в начале ввода и if
часть для всего остального. Вам нужно будет сделать что-то вроде:
if self.num.find(str(self.count) + ',') >= 0:
для обозначения совпадения.
Что касается части re.match
, re.match
пытается сопоставить подстроку от начала строки . Вы должны использовать re.search
вместо.
Как говорится, даже с этими исправлениями и даже с разделителем у вас все равно будет проблема несоответствия, как вы определили. 11,
будет соответствовать 1,
и 11,
. Чтобы решить эту проблему, вы можете разделить ввод с разделителем и получить список значений. Затем вы можете проверить, есть ли значение в этом списке:
self.num = input('Line(s) to number?').split(",")
# ...
if str(self.count) in self.num:
#...
Как небольшое примечание, вы уже используете enumerate
для получения номеров строк. Это должно исключить использование счетчика (т.е. self.count
). Если вы хотите, чтобы они начинались с 1
, вы можете указать enumerate
, указав необязательный второй аргумент:
for i, element in enumerate(self.list, 1):
Затем используйте i
вместо self.count
.