Share This
Связаться со мной
Крути в низ
Categories
//🐍🧩 5 задач по Python для новичков с решениями

🐍🧩 5 задач по Python для новичков с решениями

Задачи о примерных студентах, сортировке IP-адресов, гематрии слов, группировке дубликатов и разделении списка на отрезки.

5 zadach po python dlja novichkov s reshenijami 31d8794 - 🐍🧩 5 задач по Python для новичков с решениями

1. Список примерных студентов

Декану факультета захотелось узнать, какие студенты посетили все лекции с начала учебного года. Для каждой лекции есть список присутствовавших студентов. Напишите программу, определяющую фамилии студентов, которые не пропустили ни одной лекции.

Входные данные:

В первой строке подается число m – количество лекций, проведенных с начала учебного года. Далее идут m блоков строк со списками студентов. На первой строке каждого блока указано количество фамилий n, а затем идут n строк с фамилиями тех, кто был на лекции.

         #Пример ввода 3 3 Иванов Петрова Сидорова 4 Иванов Петрова Михайлова Колесников 3 Петрова Иванов Колесников       

Выходные данные:

Программа должна вывести список студентов, посетивших все лекции, в алфавитном порядке.

         #Пример вывода Иванов Петрова       

Способ 1:

         n = int(input()) res = {input() for _ in range(int(input()))} for _ in range(n - 1):     res &= {input() for _ in range(int(input()))}    print(*sorted(res), sep='n')           

Способ 2:

         res = [set(input() for _ in range(int(input()))) for _ in range(int(input()))] print(*sorted(set.intersection(*res)), sep='n')           

Способ 3:

         n = int(input()) my_set = {frozenset(input() for _ in range(int(input()))) for _ in range(n)} res = frozenset.intersection(*my_set) print(*sorted(res), sep='n')           

2. Сортировка IP-адресов

Напишите программу, которая считывает IP-адреса и выводит их в порядке возрастания в соответствии с десятичным представлением. Чтобы перевести адрес, к примеру 192.168.1.2 в десятичное число, применяют формулу:

192 х 2563 + 168 x 2562 + 1 x 2561 + 2 x 2560 = 3232235778

Входные данные:

В первой строке подается число n, затем n строк с IP-адресами.

         #Пример ввода 12 123.199.44.25 123.199.201.245 145.198.168.93 170.67.181.62 170.67.222.111 170.67.11.90 45.8.106.59 203.13.32.156 179.67.171.194 179.67.181.62 179.67.212.111 177.67.10.90       

Выходные данные:

Список IP-адресов, отсортированных по десятичному представлению.

         #Пример вывода 45.8.106.59 123.199.44.25 123.199.201.245 145.198.168.93 170.67.11.90 170.67.181.62 170.67.222.111 177.67.10.90 179.67.171.194 179.67.181.62 179.67.212.111 203.13.32.156         

Решение

Способ 1 – с использованием ipaddress:

         import ipaddress n = int(input()) spisok = [] for i in range(n):     temp = input()     spisok.append(temp) sortedkey = sorted(spisok, key = ipaddress.IPv4Address) print(*sortedkey, sep='n')          

Способ 2:

         print(*sorted([input() for _ in range(int(input()))], key=lambda x: [*map(int, x.split('.'))]), sep='n')          

Способ 3:

         def decFormat(ip):     return sum(map(lambda x, y: int(x) * 256 ** y, ip.split('.'), (3, 2, 1, 0))) ips = [input() for _ in range(int(input()))] print(*sorted(ips, key = decFormat), sep = 'n')           

3. Сортировка по гематрии

Гематрия – это сумма числовых значений букв, входящих в состав слова. В данном случае числовое значение букв определяется по таблице ASCII, причем учитываются только заглавные буквы (то есть при подсчете гематрии все буквы переводятся в верхний регистр). Программа должна вывести список слов в исходном регистре, отсортированный в соответствии с гематрией.

Входные данные:

Число n, затем n строк с английскими словами, состоящими из букв в разных регистрах.

         #Пример ввода 5 cAndy WAffle chocolaTE Cake tirAMIsu       

Выходные данные:

Список, отсортированный в соответствии с гематрией слов.

         #Пример вывода Cake cAndy WAffle chocolaTE tirAMIsu         

Решение

Способ 1:

         def gemValue(word):     return sum(map(lambda l: ord(l.upper()) - ord('A'), word)), word words = [input() for _ in range(int(input()))] print(*sorted(words, key=gemValue), sep='n')          

Способ 2:

         words = [input() for _ in range(int(input()))] print(*sorted(sorted(words), key=lambda word: sum([ord(sym.upper()) - ord('A') for l in word])), sep='n')          

Способ 3:

         print(*sorted([input() for _ in range(int(input()))],              key=lambda x: (sum([ord(_) - ord('A') for _ in x.upper()]), x)),      sep='n')           

4. Группировка дубликатов

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

Входные данные:

         #Пример ввода h h h e e l l l o w w o o o o r r r l l d d       

Выходные данные:

         #Пример вывода [['h', 'h', 'h'], ['e', 'e'], ['l', 'l', 'l'], ['o'], ['w', 'w'], ['o', 'o', 'o', 'o'], ['r', 'r', 'r'], ['l', 'l'], ['d', 'd']]     

Решение

Вариант 1 – с itertools:

         from itertools import groupby print([list(group) for key, group in groupby(input().split())])           

Вариант 2:

         res = [] for i in input().split():     res.append([i]) if not res or i not in res[-1] else res[-1].append(i) print(res)           

Вариант 3:

         res = [] for i in input().split():     if (not res) or (i != res[-1][-1]):         res.append([i])     else:         res[-1].append(i) print(res)           

5. Разделение списка на отрезки

На вход подается строка символов, из которых формируется список и число n. Напишите функцию, которая разбивает список на n частей, формируя вложенный список.

Входные данные:

         #Пример ввода w t z k p e h t b 3     

Выходные данные:

         #Пример вывода [['w', 't', 'z'], ['k', 'p', 'e'], ['h', 't', 'b']]     

Решение

Способ 1:

         def cutList(n):     cuts = [lst[x:x+n] for x in range(0, len(lst), n)]     return cuts lst = input().split() n = int(input()) print(cutList(n))          

Способ 2:

         def cutList(lst: list, n: int) -> list:     return [lst[i:n + i] for i in range(0, len(lst), n)] print(cutList(input().split(), int(input())))          

Способ 3:

         def cutList(lst, n):     for i in range(0, len(lst), n):         yield lst[i:i + n] print(list(cutList(input().split(), int(input()))))           

***

Материалы по теме

  • 🐍🧩 Словари в Python: 12 задач для начинающих с решениями
  • 🐍🧩 5 классических задач по Python для начинающих с решениями
  • 🐍🧩 Задача о поврежденной XML-строке

  • 46 views
  • 0 Comment

Leave a Reply

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

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

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