Я пытаюсь заставить свою функцию печатать номер индекса вместо фактического значения в списке:
def checkValue(list,n):
for i in list:
if i == n:
print('The value is in position %s of the list.' % i)
else:
print('The value is not in position %i of the list.' %i)
print(checkValue([4,6,5,4,44],44))
Что печатает:
The value is not in position 4 of the list.
The value is not in position 6 of the list.
The value is not in position 5 of the list.
The value is not in position 4 of the list.
The value is in position 44 of the list.
None
Я надеялся, что он скажет что-то вроде:
The value is not in position 0 of the list.
The value is not in position 1 of the list.
The value is not in position 2 of the list.
The value is not in position 4 of the list.
The value is in position 5 of the list.
Я пробовал % list(i) и i() и тому подобное, но это не сработало.
какой язык? можешь отметить это?
Результат не соответствует вашим ожиданиям. Начнем с вывода None
в конце. Вы не хотите этого. Причина существует в этом операторе печати:
print(checkValue([4,6,5,4,44],44))
Поскольку checkValue
ничего не возвращает, то и печатать тоже нечего. Итак, давайте удалим этот отпечаток и упростим просто
checkValue([4,6,5,4,44],44)
Вся печать будет выполняться внутри этого метода.
Первая идея и, вероятно, хорошая, если вы начинаете: если у вас нет индекса, создайте его самостоятельно, начните с 0 и увеличьте его:
def checkValue(list, n):
index = 0
for i in list:
if i == n:
print('The value is in position %s of the list.' % index)
else:
print('The value is not in position %i of the list.' % index)
index += 1
Однако это еще не все:
list
для чего-либо, созданного вами. list
— это разновидность Python. Если вы используете его самостоятельно, вы можете затенить список Python. Вы этого не хотите. Найдите другое имя. Обычно я использую то, что находится внутри списка, и добавляю к нему букву S во множественном числе. Если в вашем списке есть номер, то его имя будет numbers
.i
— неподходящее имя для того, что вы вычеркиваете из списка. Если в списке есть числа (множественное число), то на каждом ходу вы получаете число (единственное число).n
— неподходящее название для того, что вы ищете. Используйте needle
, search
, find
или number_to_find
.checkValue
плохо описывает, что делает метод. Я придумал findNumberAndPrintIndex
Тогда код будет выглядеть так
def findNumberAndPrintIndex(numbers, number_to_find):
index = 0
for number in numbers:
if number == number_to_find:
print('The value is in position %s of the list.' % index)
else:
print('The value is not in position %i of the list.' % index)
index += 1
findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)
Это намного лучше, но не очень питонично. Ваша проблема настолько распространена, что уже решена. Мы бы использовали метод enumerate()
, который выполняет индексацию за вас и возвращает индекс и число при каждом запуске цикла.
Мы, вероятно, также предпочли бы f-строки старому форматированию строк в стиле C. В каждой хорошей IDE есть подсветка синтаксиса f-строк.
def findNumberAndPrintIndex(numbers, number_to_find):
for index, number in enumerate(numbers):
if number == number_to_find:
print(f'The value is in position {index} of the list.')
else:
print(f'The value is not in position {index} of the list.')
findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)
А если вы хотите найти индекс определенного числа в списке, вы должны использовать метод .index()
списка:
def findNumberAndPrintIndex(numbers, number_to_find):
print(f"The value is in position {numbers.index(number_to_find)} of the list.")
findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)
Вам нужен enumerate() для перебора списка и получения индексного номера.