#python #python-3.x #encoding #user-defined-types
#python #python-3.x #кодирование #определяемые пользователем типы
Вопрос:
def is_image(fname):
for files in files_in_dir('./W06'):
if files[-3] =='jpg':
return True
return False
x = is_image('.jpg')
print(x)
Интересно, что я сделал не так в этой части, когда я запускаю код, он всегда говорит false, предполагается, что true, если последняя буква 3 — jpg. пожалуйста, помогите мне, я новичок в Python
Комментарии:
1. Попробуйте
files[-3:]
2. Или более читабельно,
if files.endswith('.jpg')
3. Вы не используете
fname
в своей функции.
Ответ №1:
Наиболее очевидная ошибка заключается в том, что вы проверили индекс, -3
а не фрагмент -3:
. Обратите внимание на разницу:
>>> "abc.def"[-3]
'd'
>>> "abc.def"[-3:]
'def'
>>>
Помимо этого, общий метод кажется немного неуклюжим. У вас есть fname
в качестве параметра, но на самом деле вы его не используете. Вы также проверяете наличие любого файла в каталоге с этим расширением. Далее, если вы хотите проверить наличие предиката в списке, вы можете использовать any
метод.
Я бы порекомендовал что-то вроде этого:
def dir_contains_ext(dir, ext):
return any(
files.endswith(ext)
for file in files_in_dir(dir)
)
dir_contains_ext('./W06', '.jpg')