Поиск индекса заданного символа в строке в Python с некоторым параметром по умолчанию

#python #string #function #search #nameerror

#питон #строка #функция #Поиск #ошибка имени

Вопрос:

Это может быть глупый вопрос и, возможно, один из самых простых вопросов в SO. Рассмотрим следующий код, который пытается найти индекс заданного символа в строке:

 def find(s ,ch, start=0): 
    index = start 
    while index <= end: 
        if s[index] == ch:
            return index 
        index = index   1 
    return -1
print(find("apple","p"))
 

Это прекрасно работает. Теперь, в этом коде я хочу добавить параметр по умолчанию end , который будет указывать функции, до какой длины строки мы должны искать в данной строке. Вот так:

 def find(s, ch, start=0,end=len(s)): 
    index = start 
    while index <= end: 
        if s[index] == ch:
             return index 
        index = index   1 
    return -1
    
print(find("apple","p"))
 

Однако, когда я запускаю этот код, я получаю сообщение об ошибке в строке 1 приведенного выше кода:

NameError: Name s is not defined

Я пытался прочитать что-нибудь об этом в каком-нибудь учебнике. Я обнаружил, что когда функция определена, s она все еще не определена (для чего я понятия не имею, почему это так). Следовательно, len(s) не поддается определению.

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

Кто-нибудь может помочь или дать подсказку?

Комментарии:

1. Аргументы по умолчанию вычисляются один раз во время определения, поэтому невозможно получить динамическое значение для end на основе s . Вы могли бы иметь значение по умолчанию end = None , а затем иметь if end is None: end = len(s) внутри функции.

Ответ №1:

Более питоническим выбором для итерации списка будет for цикл, поскольку он проще и удобен для чтения:

 def find(s, ch):
    index = None
    for i in range(0, len(s)):
        if s[i] == ch:
            index = i   1 
            return (index)
            
print(find("auhkle","a"))
print(find("auhkle","h"))
print(find("auhkle","e"))
 

Вывод:

 1
3
6