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-строке

  • 2 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

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

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

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