Python

Задача на Python 4

Напиши программу, которая принимает строку c URL-адресом — строки через точку. Выведи список его частей.
Используй метод split().
Каких частей? Когда вы начнёте задачи формулировать внятно? Полный формат URL включает 8 частей, все выводить? https://ru.wikipedia.org/wiki/URL
Или только те 3, которые знает твой препод?

Извлечь все 8 компонент можно вот так, хотя и немного коряво (можно было часть логики вынести в функции):
 def subnone(s): return "" if s is None else s

url = input()

scheme, *fullpathrest = url.split(':')
hostauth, *pathparamsrest = ':'.join(fullpathrest)[2:].split('/')
pathparams = '/'.join(pathparamsrest)
auth, hostport = hostauth.split('@') if '@' in hostauth else (None, hostauth)
login, password = (None, None) if auth is None else auth.split(':') if ':' in auth else (auth, None)
host, port = hostport.split(':') if ':' in hostport else (hostport, None)
if '?' in pathparams:
path, paramsanchor = pathparams.split('?')
params, anchor = paramsanchor.split('#') if '#' in paramsanchor else (paramsanchor, None)
else:
params = None
path, anchor = pathparams.split('#') if '#' in pathparams else (pathparams, None)
print(*map(
': '.join,
zip(
('Схема/протокол', 'Логин', 'Пароль', 'Хост', 'Порт', 'Путь', 'Параметры', 'Якорь'),
map(subnone, (scheme, login, password, host, port, path, params, anchor))
)
), sep = '\n')
МК
Максим Кузнецов
87 571
Лучший ответ
Максим Кузнецов Вот так получше будет:
 def subnone(s): return "" if s is None else s
def slicefirst(s, sep): first, *rest = s.split(sep); return (first, sep.join(rest))
def splitprefix(s, sep): return s.split(sep) if sep in s else (s, None)
def splitsuffix(s, sep): return s.split(sep) if sep in s else (None, s)

scheme, fullpath = slicefirst(url, ':')
hostauth, pathparams = slicefirst(fullpath[2:], '/')
auth, hostport = splitsuffix(hostauth, '@')
login, password = (None, None) if auth is None else splitprefix(auth, ':')
host, port = hostport.split(':') if ':' in hostport else (hostport, None)
if '?' in pathparams:
path, paramsanchor = pathparams.split('?')
params, anchor = splitprefix(paramsanchor, '#')
else:
params = None
path, anchor = splitprefix(pathparams, '#')
Максим Кузнецов (ввод-вывод берём из предыдущей программы, он не поменялся)
Вопрос: Ты надеешься на то, что тебе напишут тут целиком программу, или выдадут на подносе материалы, по которым ты должен сделать эту задачу? Решай сам. Ищи ответы на свои вопросы. Да хоть на англоязычном сегменте, там то тебе и пригодятся знания английского. Ладно, была бы задача "вывести сообщение привет мир", но это...