Решение этих задач поможет изучить и запомнить, как правильно использовать генераторы, а также основные методы словарей — fromkeys, setdefault и get. Повторы слов Напишите программу, которая принимает на вход строку текста и подсчитывает количество повторов всех слов с учетом регистра и позиции в строке. Формат ввода Текстовая строка. Слова разделены пробелами, знаков препинания нет. Формат вывода Для каждого слова из введенной строки программа выводит одно целое число — количество повторов этого слова в тексте с учетом позиции и регистра. Числа выводятся на одной строке, через пробел. Пример ввода: прием Хьюстон Хьюстон как слышно прием меня слышно прием хьюстон Хьюстон у нас проблема Вывод: 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 для начинающих с решениями
Напишите программу, которая принимает на вход строку текста и подсчитывает количество повторов всех слов с учетом регистра и позиции в строке.
Формат ввода
Текстовая строка. Слова разделены пробелами, знаков препинания нет.
Формат вывода
Для каждого слова из введенной строки программа выводит одно целое число — количество повторов этого слова в тексте с учетом позиции и регистра. Числа выводятся на одной строке, через пробел.
Пример ввода:
прием Хьюстон Хьюстон как слышно прием меня слышно прием хьюстон Хьюстон у нас проблема
Вывод:
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 Не найдено Не найдено Не найдено программно-аппаратная или серверная часть приложения плохой, некачественный код
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')
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(), 'Не найдено'))
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 Амстердам Алкмар Гамбург Гаага
Нидерланды Нидерланды Германия Нидерланды
d = {} for _ in range(int(input())): country, *cities = input().split() d.update(dict.fromkeys(cities, country)) for _ in range(int(input())): print(d[input()])
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()])
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 абонент не найден
d = {} for _ in range(int(input())): phone, name = input().split() d.setdefault(name, []).append(phone) for _ in range(int(input())): print(*d.get(input(), ['абонент не найден']))
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(), (['абонент не найден'])))
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
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])}')
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')
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()]
***
Ваш адрес email не будет опубликован. Обязательные поля помечены *
Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев.
Δ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.