🏆 151 курс за 1 подписку: хватит выбирать — бери все и сразу!

Один клик — 151 возможность. Подпишись на OTUS сейчас!
Техномир мчится вперед, а вместе с ними растут и требования к специалистам. OTUS придумал крутую штуку — подписку на 151 курс по всем ключевым направлениям IT!
-
Почему подписка OTUS меняет правила игры:
- Доступ к 151 курсу от практикующих экспертов
- В 3 раза выгоднее, чем покупать каждый курс отдельно
- До 3 курсов одновременно без дополнительных затрат
- Свобода выбора направления — меняй треки когда угодно
Изучай новое, развивайся в своем темпе, меняй направления — подпишись на OTUS и прокачивай скилы по полной!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576. Erid 2VtzqupFnNL
Повторы слов
Напишите программу, которая принимает на вход строку текста и подсчитывает количество повторов всех слов с учетом регистра и позиции в строке.
Формат ввода
Текстовая строка. Слова разделены пробелами, знаков препинания нет.
Формат вывода
Для каждого слова из введенной строки программа выводит одно целое число — количество повторов этого слова в тексте с учетом позиции и регистра. Числа выводятся на одной строке, через пробел.
Пример ввода:
прием Хьюстон Хьюстон как слышно прием меня слышно прием хьюстон Хьюстон у нас проблема
Вывод:
1 1 2 1 1 2 1 2 3 1 3 1 1 1
Решение
Способ 1:
d = {}
for i in input().split():
d[i] = d.get(i, 0) + 1
print(d[i], end=' ')
Способ 2:
my_dict = {}
for i in input().split(' '):
my_dict[i] = my_dict.setdefault(i, 0) + 1
print(my_dict[i], end=' ')
Способ 3:
s = input().split()
d = dict.fromkeys(s, 1)
for i in s:
print(d[i], end=' ')
d[i] += 1
Словарь начинающего разработчика
Программисты в общении между собой часто используют профессиональный сленг. Напишите программу, которая помогает «войтивайтишникам» разобраться в значении сленговых выражений.
Формат ввода
В первой строке подается целое число n — количество слов в словаре. В следующих n строках записаны слова и их определения, разделенные двоеточием и символом пробела. В последующей строке подается целое число m — количество поисковых слов. Затем в m строках даются слова, для которых нужно вывести определение из созданного словаря.
Формат вывода
Для каждого слова, если оно присутствует в словаре, необходимо вывести определение. Регистр не учитывается. Если слова в словаре нет, программа должна вывести Не найдено
.
Пример ввода:
7
Бэкенд: программно-аппаратная или серверная часть приложения
Бэкап: резервная копия или процесс создания резервной копии приложения
Галера: компания, в которой платят низкие зарплаты и не ценят разработчиков
Гит: система контроля версий Git или сервис GitHub
Г***окод: плохой, некачественный код
Жаба: язык программирования Java
Жабаскрипт: язык программирования JavaScript
6
Жаба
Змея
Костыль
Бета
БЭКЕНД
Г***окод
Вывод:
язык программирования Java
Не найдено
Не найдено
Не найдено
программно-аппаратная или серверная часть приложения
плохой, некачественный код
Решение
Способ 1:
d = {k.lower(): v for _ in range(int(input())) for k, v in [input().split(': ', 1)]}
print(*(d.get(input().lower(), 'Не найдено') for _ in range(int(input()))), sep='\n')
Способ 2:
prog = {}
for _ in range(int(input())):
descr = input().split(': ')
prog[descr[0].lower()] = descr[1]
for _ in range(int(input())):
print(prog.get(input().lower(), 'Не найдено'))
Способ 3:
n = int(input())
lib = {j[0].lower(): j[1] for j in [input().split(': ') for i in range(n)]}
for request in range(int(input())):
print(lib.get(str(input()).lower(), 'Не найдено'))
Справочник
На вход программе подается список стран и городов каждой страны. Затем даны названия городов. Напишите программу, которая определяет, в какой стране расположен город.
Формат ввода
Программа получает на вход количество стран n, а затем – n строк. Каждая строка начинается с названия страны, затем идут названия городов этой страны. В следующей строке записано число m, далее идут m запросов — названия некоторых из m городов, заданных выше.
Формат вывода
Программа должна вывести название страны, в которой находится город, указанный в запросе.
Пример ввода:
2
Германия Берлин Мюнхен Гамбург Дортмунд
Нидерланды Амстердам Гаага Роттердам Алкмар
4
Амстердам
Алкмар
Гамбург
Гаага
Вывод:
Нидерланды
Нидерланды
Германия
Нидерланды
Решение
Способ 1:
d = {}
for _ in range(int(input())):
country, *cities = input().split()
d.update(dict.fromkeys(cities, country))
for _ in range(int(input())):
print(d[input()])
Способ 2:
d = {}
for _ in range(int(input())):
country, *cities = input().split()
for c in cities:
d[c] = country
for _ in range(int(input())):
print(d[input()])
Способ 3:
d = {i : j for _ in range(int(input())) for i, *j in [input().split()]}
[print(k) for _ in range(int(input())) for i in [input()] for k, v in d.items() if i in v]
Телефонная книга
Вася хочет автоматизировать поиск телефонных номеров своих друзей. Но Вася столкнулся с проблемой: у некоторых друзей есть два и более номера. Напишите программу, которая поможет Васе находить все номера определенного друга.
Формат ввода
В первой строке подается одно целое число n — количество номеров телефонов, информацию о которых Вася сохранил в телефонной книге. В следующих n строках заданы телефоны и имена их владельцев через пробел. Затем подается целое число m — количество поисковых запросов от Васи. В последующих m строках записаны сами запросы, по одному на строке. Каждый запрос — это имя друга, чьи номера Вася хочет найти.
Формат вывода
Для каждого запроса нужно вывести на отдельных строках все телефонные номера, принадлежащие человеку с этим именем, независимо от регистра имени. Если в телефонной книге нет телефонов человека с таким именем, выведите в соответствующей строке абонент не найден
. При этом номера, принадлежащие одному человеку, нужно вывести в одну строку через пробел в том порядке, в каком они были заданы во входных данных.
Пример ввода:
3
79184219577 Саша
79194249271 Кирилл
79281234567 Саша
3
Кирилл
Саша
Егор
Вывод:
79194249271
79184219577 79281234567
абонент не найден
Решение
Способ 1:
d = {}
for _ in range(int(input())):
phone, name = input().split()
d.setdefault(name, []).append(phone)
for _ in range(int(input())):
print(*d.get(input(), ['абонент не найден']))
Способ 2:
book = {}
for _ in range(int(input())):
line = input().split()
if line[1] not in book:
book[line[1]] = [line[0]]
else:
book[line[1]].append(line[0])
for _ in range(int(input())):
print(*book.get(input(), (['абонент не найден'])))
Способ 3:
dct = {}
[dct.setdefault(owner, []).append(num) for _ in range(int(input())) for num, owner in [input().split()]]
[print(*dct.get(input(), ['абонент не найден'])) for _ in range(int(input()))]
Футбол
Напишите программу, которая получает на вход список игр футбольных команд с результатом матча и выводит сводную таблицу результатов всех матчей. За победу команде начисляется 3 очка, за поражение — 0, за ничью — 1.
Формат ввода
В первой строке указано целое число n — количество завершенных игр.
После этого идут n строк, в которых записаны результаты игры в следующем формате:
Первая_команда;Забито_первой_командой;Вторая_команда;Забито_второй_командой
Формат вывода
Программа должна выводить результаты матчей по каждой команде:
Команда:Всего_игр Побед Ничьих Поражений Всего_очков
Пример ввода:
3
Спартак;9;Зенит;10
Локомотив;12;Зенит;3
Спартак;8;Локомотив;15
Вывод:
Спартак:2 0 0 2 0
Зенит:2 1 0 1 3
Локомотив:2 2 0 0 6
Решение
Способ 1:
a = [input().split(';') for i in range(int(input()))]
b = {i:[] for i in set([i[0] for i in a])|set([i[2] for i in a])}
for i in a:
b[i[0]].append(1 if i[1]==i[3] else 3 if i[1]>i[3] else 0)
b[i[2]].append(1 if i[1]==i[3] else 3 if i[1]<i[3] else 0)
for i in b: print(f'{i}:{len(b[i])} {b[i].count(3)} {b[i].count(1)} {b[i].count(0)} {sum(b[i])}')
Способ 2:
d = {}
for a, p, b, v in (input().split(';') for n in range(int(input()))):
d[a] = [i + j for i, j in zip(d.setdefault(a, [0, 0, 0, 0, 0]), [1, (p > v), (p == v), (p < v), 3 if p > v else (p == v)])]
d[b] = [i + j for i, j in zip(d.setdefault(b, [0, 0, 0, 0, 0]), [1, (p < v), (p == v), (p > v), 3 if p < v else (p == v)])]
print(*(i+":" + ' '.join(map(str, d.get(i))) for i in d), sep='\n')
Способ 3:
d = {}
for game in range(int(input())):
c1, r1, c2, r2 = input().split(';')
r1, r2 = int(r1), int(r2)
r1, r2 = 3 * (r1 > r2) + (r1 == r2), 3 * (r2 > r1) + (r1 == r2)
r1, r2 = [[1, int(_ == 3), int(_ == 1), int(_ == 0), _] for _ in (r1, r2)]
d[c1] = [sum(_) for _ in zip(d.get(c1, [0, 0, 0, 0, 0]), r1)]
d[c2] = [sum(_) for _ in zip(d.get(c2, [0, 0, 0, 0, 0]), r2)]
[print(k, ' '.join(map(str, v)), sep=':') for k, v in d.items()]
Материалы по теме
- 🐍 Словари в Python: 12 задач для начинающих с решениями
- 🐍 5 задач с решениями на Python для начинающих разработчиков
- 🐍 5 классических задач по Python для начинающих с решениями
Комментарии