#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. Ах, да, вы правы! Я просто запустил его там, и это сработало! Большое спасибо вам, ребята, это отличное сообщество здесь!