#python-3.x #loops
#python-3.x #петли
Вопрос:
Учитывая список значений Python xs и значение v, выполните поиск по xs для v. Если вы найдете второе вхождение v, верните этот неотрицательный индекс. Если v не найден по крайней мере два раза, верните значение None. О 2-м совпадении сообщается при наличии нескольких совпадений значения
def find_second_occurrence(xs,v):
count = 0
for i in range(len(xs)):
if v in i:
count = 1
if v in i:
count = 1
if count == 2:
return v
elif v != [xs]:
count == 'None'
return count
Сообщение об ошибке:
Traceback (most recent call last):
File "tester3p.py", line 120, in test_find_second_occurrence_07
def test_find_second_occurrence_07 (self): self.assertEqual (find_second_occurrence(['h','a','p','p','y'], 'a'), None)
line 4, in find_second_occurrence
if v in i:
TypeError: argument of type 'int' is not iterable
Комментарии:
1. в чем ваш вопрос?
2. @JohnCarter корректен ли алгоритм, если был задан список положительных целых чисел? Я также не уверен, что означает ошибка и как ее исправить
3.
if v in i
—i
это индекс . Ваш код, по сути, спрашивает, находится ли (скажемxs = [10,12,13]
, иv
равно 12, тогда мы начинаем сi = 0
первого индекса), если12
находится в0
. Имеет ли это какой-либо смысл для вас? Вы можете использовать толькоin
для списков или объектов, похожих на списки. Я полагаю, вы имеете в видуif v in xs
.
Ответ №1:
Ошибка здесь:
for i in range(len(xs)):
if v in i:
if v in i
спрашивает: «найдено ли значение v в последовательности i?» Но i
является целым числом из последовательности range(len(xs))
, а целое число не является последовательностью, поэтому in i
не имеет смысла.
Комментарии:
1. Теперь это имеет больше смысла, спасибо. Но у меня есть и другая проблема. Когда я помещаю его в тестовый файл, он никогда не попадает в инструкцию elif. Когда предполагалось, что результат будет «Нет», вместо него просто выводилось «0».
2. Конечно , он никогда не попадает в
elif
, потому что он падает вif
. Верно? Или вы устранили эту проблему, и теперь мы перешли к другой другой проблеме? Если это последнее, пожалуйста, попробуйте отладить его самостоятельно, а затем при необходимости отправьте здесь отдельный вопрос.