Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2021 15:07:22

Alexey_mne31
Зарегистрирован: 2021-08-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Логика.

Привет всем. Осваиваю программирование недавно.
Вопрос по питону (вообще наверное по логике)
Есть код, элементарный:

 def get_extension(filename):
    filename_parts = filename.split('.')
    if len(filename_parts) < 2:  # filename has no dots
        raise ValueError('the file has no extension')
    first, *middle, last = filename_parts
  :)  if not last or not first and not middle: :)
        # example filenames: .filename, filename., file.name.
        raise ValueError('the file has no extension')
    return filename_parts[-1]
print(get_extension('abc.py'))
print(get_extension('abc'))  # raises ValueError
print(get_extension('.abc'))   # raises ValueError
print(get_extension('.abc.def.'))   # raises ValueError

Строчка, выделенная смайликами, непонятна. Как я понял, python выполняет по иерархии not - and - or.
Назначение строки ясно интуитивно, отсекаем всякие лишние моменты.
А вот код в голове осознать не могу.
Как пытаюсь понимать сам:
Если не последний или (не первый и не средний) то….
С не последний все понятно, значит в строке нет точки, либо точка в конце, все разделилось в первый элемент - значит расширения нет.
А вот дальше: (не первый и не средний) как вообще может быть? Я ее понимаю как не существует первого элемента и не существует среднего элемента одновременно. Но так же не будет…
Строкой выше
first, *middle, last = filename_parts
мы в первую очередь растасовываем элементы списка в первый элемент, он же всегда будет….
Может кто разъяснит порядок интерпретации этой строки именно.
P.S. Файл возвращает расширение по названию, если кто не понял.

Отредактировано Alexey_mne31 (Авг. 23, 2021 16:20:25)

Офлайн

#2 Авг. 23, 2021 15:52:26

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Логика.

Л.



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#3 Авг. 23, 2021 20:00:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Логика.

Alexey_mne31
Может кто разъяснит порядок интерпретации этой строки именно.
Все вы правильно понимаете.
   
(not last) or ((not first) and (not middle))

пишите проще и будет вам счастье. Не бойтесь экспериментировать.
  
for fp in [["",""],["a",""],["","a"],["a","a"]]:
    first, *middle, last = fp
    if not last:
        print("last",fp)
    if not first and not middle:
        print("strange",fp)
last ['', '']
strange ['', '']
last ['a', '']
strange ['', 'a']

Вроде все ясно.



Офлайн

#4 Авг. 23, 2021 21:52:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9878
Репутация: +  853  -
Профиль   Отправить e-mail  

Логика.

Alexey_mne31
А вот дальше: (не первый и не средний) как вообще может быть? Я ее понимаю как не существует первого элемента и не существует среднего элемента одновременно. Но так же не будет…
  
>>> filename_parts = '.abc'.split('.')
>>> 
>>> first, *middle, last = filename_parts
>>> 
>>> first, middle, last
('', [], 'abc')
>>> 
>>> not last or not first and not middle
True
>>> (not last) or ((not first) and (not middle))
True
>>>

Alexey_mne31
мы в первую очередь растасовываем элементы списка в первый элемент, он же всегда будет….
Это в Windows он всегда будет. Она тебе не даст создать файл без имени и будет давать советы, как тебе файл называть. А ты поставь себе Linux и учись программировать там. В Linux, во-первых, нет расширений (расширения - это просто части имени), а во-вторых, в Linux очень часто бывает точка в начале имени, так как это сообщает файловому менеджеру или командной оболочке, что файл скрытый и не нужно его показывать. Поэтому, чтобы скрыть файл/директорию в Linux, достаточно добавить точку в начало его/её имени. Отвыкай от Windows.



Отредактировано py.user.next (Авг. 23, 2021 21:54:03)

Офлайн

#5 Авг. 24, 2021 04:36:04

Alexey_mne31
Зарегистрирован: 2021-08-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Логика.

doza_and
Блин, старик, и точно все элементарно…спасибо тебе!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version