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

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

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()))))

    
***

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

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

admin
11 декабря 2018

ООП на Python: концепции, принципы и примеры реализации

Программирование на Python допускает различные методологии, но в его основе...
admin
28 июня 2018

3 самых важных сферы применения Python: возможности языка

Существует множество областей применения Python, но в некоторых он особенно...
admin
13 февраля 2017

Программирование на Python: от новичка до профессионала

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