Функция для подсчета позиции первого вхождения элемента ‘y’ в последовательности ‘z’

#python #python-3.x

#python #python-3.x

Вопрос:

введите здесь описание изображенияНам нужно создать функцию, которая принимает список z и возвращает индекс, по которому y встречается первым. Например, если это второй элемент в списке, он вернет 1 и т.д. Мы используем только for циклы, if else инструкции и логические значения.

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

 def positionfirst(z,y):
    val=0
    for item in y:
        if z!=item:
            val =1
            if val==len(y):
                return None
        else:
            return val
  

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

1. Приведите пример ввода и вывода, который вы не понимаете.

2. Например, когда я ввожу эти значения: ‘print(positionfirst(2,[2,3,5,7]))’, я получаю 0, что является правильным значением. Однако, если я ввожу ‘print(positionfirst(«d», «abcdefg»))’, это возвращает мне либо none, либо 0

3. У меня сработало (получил 3). Вы чего-то не показываете.

4. @kabanus Я просто взял скриншот и загрузил его туда. У меня все еще не работает!

5. Я не хочу начинать здесь обсуждение, но опубликованное вами изображение дает мне 3, когда я его запускаю. Если вы используете что-то вроде eclipse для запуска, убедитесь, что запущена правильная конфигурация и что вы сохранили файл.

Ответ №1:

На вашем рисунке показана ваша ошибка:

 print((positionfirst('d', ['abcdefg'])))
  

Вернет 0, как 'd' != 'abcdefg' , который является единственным элементом в ['abcdefg'] . Вы, вероятно, хотите

 print((positionfirst('d', 'abcdefg'))).
  

Таким образом, цикл for выполняет итерацию по символам в строке. Вы можете добавить

 print(item)
  

в вашем цикле, чтобы увидеть, что происходит. Первая версия даст

 'abcdefg'
  

второй

 'a'
'b'
'c'
'd'
'e'
'f'
'g'.
  

Это те элементы, с которыми вы будете сравнивать. Наконец, немного сокращенная версия вашей функции:

 def positionfirst(z, y):
    val = 0
    for item in y:
        if z == item:
            return val
        val  = 1
    return None
  

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

1. Ах, да, вы правы! Я просто запустил его там, и это сработало! Большое спасибо вам, ребята, это отличное сообщество здесь!