Share This
Связаться со мной
Крути в низ
Categories
//5 задач по Python для начинающих c решениями: генераторы и методы словарей

5 задач по Python для начинающих c решениями: генераторы и методы словарей

Решение этих задач поможет изучить и запомнить, как правильно использовать генераторы, а также основные методы словарей — fromkeys, setdefault и get.

5 zadach po python dlja nachinajushhih c reshenijami generatory i metody slovarej 976b294 - 5 задач по Python для начинающих c решениями: генераторы и методы словарей

Повторы слов

Напишите программу, которая принимает на вход строку текста и подсчитывает количество повторов всех слов с учетом регистра и позиции в строке.

Формат ввода

Текстовая строка. Слова разделены пробелами, знаков препинания нет.

Формат вывода

Для каждого слова из введенной строки программа выводит одно целое число — количество повторов этого слова в тексте с учетом позиции и регистра. Числа выводятся на одной строке, через пробел.

Пример ввода:

         прием Хьюстон Хьюстон как слышно прием меня слышно прием хьюстон Хьюстон у нас проблема     

Вывод:

         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 для начинающих с решениями

  • 3 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close