Найти в Дзене
Варечка Окаянная

Python МГУ МФК часть 3 осень 2023

Оглавление

python 2023 a 3 Итерируемые объекты

Введение.

Всем привет! Я тут подумала хорошо будет поделиться своими решениями по питону!
Пожалуйста подпишитесь на мой канал про мою жизнь в МГУ "
Варечка Окаянная")))

1. Задом наперед

Писатель Яша купил себе новую пишущую машинку и сразу бросился писать свой новый роман. Закончив пятнадцатую главу и решив оценить свое творение, Яша заметил, что в пишущей машинке был очень необычный заводской брак: все слова она писала задом-наперёд, хотя и в нужном порядке. У Яши больше нет сил, чтобы переписывать роман с самого начала.
Помогите опечаленному Яше справиться с его бедой: напишите программу, которая развернет все слова в строке, не меняя их порядка.
Формат ввода
Дана строка
s.
Формат вывода
Выведите строку, в которой каждое слово строки
s будет написано задом-наперёд, но порядок слов в строке не поменяется. Обратите внимание на примеры.
Разрешается ввод только через
input.txt (см. рекомендации к вводу-выводу).
Вывод осуществляется на экран (см. рекомендации к вводу-выводу).
В файле
input.txt содержится ровно одна строка, которую и должна считать Ваша программа. Её можно считать с помощью readline(), например (см. рекомендации к вводу-выводу).
Обратите внимание, что в исходной строке нужно переворачивать каждое слово, а не строку целиком.
Не забывайте, что метод
split() применяется к отдельной строке, а не к списку строк.

Ответ:
with open("input.txt", "r") as file:
input_string = file.readline()

def reverse_words_in_string(input_str):
words = input_str.split()
reversed_words = [word[::-1] for word in words]
result_str = ' '.join(reversed_words)
return result_str
result = reverse_words_in_string(input_string)
print(result)



2. Буква ``ё''

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

Формат ввода:
Набор строк, часть из которых содержит букву ё.

Формат вывода:
Вывести строки, содержащие букву ё.
Гарантируется, что существует хотя бы одна такая строка.

Примечания:
Разрешается ввод только через
input.txt (см. рекомендации к вводу-выводу).
Подсказка: используйте
.filter() и lambda-функции.
Не забывайте, что метод
readlines() получает строки вместе с символом перехода на новую строку. Поэтому при выводе строк проверяйте, чтобы в результате не появлялось лишних пустых строк.
Если буквы ``ё'' нет в строке - на экран ничего выводить не нужно.
Строку необходимо выводить ровно в том виде, в котором она находится во входном файле (заглавная буква остаётся заглавной, строчная - строчной).

Ответ:
[language=Python]
with open("input.txt", "r") as file:
lines = file.readlines()

contains_yo = lambda line: "ё" in line or "Ё" in line

filtered_lines = list(filter(contains_yo, lines))
for line in filtered_lines:
print(line, end="")



3. Убрать половину
Нотариус Зоя помогает юридически неграмотным гражданам оформлять их жалобы и запросы в государственные службы и коммерческие компании. У Зои трудная работа: многие граждане совсем не умеют не только составлять юридически верные тексты, но ещё и оформлять свои мысли в сколько-нибудь связной форме.
Однажды клиентом Зои стал подросток Вадим. Вадим очень любил копаться в компьютерах и прочей технике и очень не любил уроки литературы, которые активно прогуливал. Вадим принес Зое папку жалоб на разные компании, в которых он заказывал компоненты компьютеров — они часто доставлялись в неудовлетворительном состоянии.
Прочитав первую жалобу, Зоя обомлела: слова-паразиты встречались в тексте Вадима буквально через слово.
Зоя поняла, что исправить все записки Вадима вручную — задача непосильная. Помогите Зое, исключив каждое второе слово из текстов Вадима.
Формат ввода:
Дан набор строк (записки Вадима).
Формат вывода:
Вывести строки, исключив каждое второе слово из каждой строчки текста Вадима.
Знак препинания, следующий за словом, которое будет удалено, удаляется вместе со словом.
Примечания:
Разрешается ввод только через
input.txt (см. рекомендации к вводу-выводу).
Обратите внимание, что во входном файле может быть несколько строк.
Перед отправкой решения не забывайте проверять ситуации, когда в строке может быть как чётное число слов, так и нечётное.


Ответ:
with open('input.txt', 'r') as file:
lines = file.readlines()
def remove_every_second_word(line):
words = line.split()
return ' '.join([words[i] for i in range(len(words)) if i % 2 == 0])
for line in lines:
result = remove_every_second_word(line)
print(result)


4. Дни рождения
Дан текстовый файл
input.txt, содержащий следующую информацию:
в первой строке записано число
N,
в следующих
N строках содержатся имена студентов,
а в следующих
N строках (см. примеры) — их даты рождения.
Выведите построчно информацию из этого файла и запишите в файл
output.txt, при этом разделяйте имена и даты рождения при помощи специального символа табуляции '\t'.
Формат ввода
Данные вида:

-2

Формат вывода:
Данные в следующем виде:
Name1Name1\cdot \t Birthday1Birthday1\cdot
Name2Name2\cdot \t Birthday2Birthday2\cdot
...
NameNNameN\cdot \t BirthdayNBirthdayN
Примечания:
Обратите внимание, что разрешается ввод и вывод только через
input.txt и output.txt соответственно! (см. рекомендации к вводу-выводу).
Подсказка: используя функцию zip(), соедините построчно информацию из файла
input.txt (имена и даты рождения).
Обратите внимание, что что имена во входном файле печатаются на отдельной строке, а в результирующем файле нужно разделять имя и дату рождения символом табуляции \t.
Чтобы в выводе использовать символ табуляции в качестве разделителя, можно использовать параметр sepфункции print(): print('string1', 'string2', sep='\t').
Не забывайте, что если в print() не задавать параметр sep, то параметры в выводе будут разделяться пробелами. Т.е. в результате выполнения кода: print(x, '\t', y)
после х будет выведен пробел, потом \t, потом снова пробел, и потом у. Это неверно!
При работе с датами не требуется никакая дополнительная обработка.
Тестовая система сравнивает результат работы программы с эталонным посимвольно. Поэтому, при отправке решения проверяйте, что ваш код не печатает никаких лишних символов (в частности, пробелов).
Не забывайте, что функция write(), в отличие от print(), принимает только один аргумент - строку, которая должна быть выведена! Если хотите выводить параметры в файл с указанием их через запятую - используйте print(): print(x, y, sep='\t', file=f) (f - это открытый файл).


Ответ:
with open("input.txt", "r") as input_file:
lines = input_file.readlines()
num_students = int(lines[0])

with open("output.txt", "w") as output_file:

for i in range(1, num_students + 1):
student_name = lines[i].strip()
student_dob = lines[i + num_students].strip()
output_line = f"{student_name}\t{student_dob}\n"
output_file.write(output_line)


5. Комбинации дежурных
Классу 8 "Б" было поручено организовать школьные дежурства в новом учебном году. Ученики должны дежурить по трое, и перед классным руководителем была поставлена задача организовать тройки дежурных, составив план дежурств.
8 "Б" — очень дружный класс. Когда пришло время назначать план школьных дежурств, каждый из учеников 8 "Б" напрочь отказался принимать в этом участие, пока ему не пообещают, что в течение года он подежурит с каждым из своих друзей.
Классный руководитель 8 "Б" и учитель истории Мария Ивановна — замечательный человек и прекрасный педагог. Она решила пойти навстречу своим ученикам. Мария Ивановна сразу поняла, что ей предстоит решить сложную комбинаторную задачу и, не мешкая, приступила к опросу своих учеников.
К окончанию опроса выяснилось, что все ребята дружат со всеми. Мария Ивановна сразу сообразила, что ей предстоит организовать C3NC3N$\cdot$ троек, где N — количество ребят в классе. Помогите Марии Ивановне написать программу, составляющую всевозможные тройки дежурных.
Дан текстовый файл studygroup.txt, содержащий имена школьников 8 "Б". При помощи itertools.combinations вывести все способы назначения трёх дежурных.
Гарантируется, что в 8 "Б" классе не менее 3 человек.
Формат ввода:
Имена школьников перечислены в одной строке через пробелы в файле studygroup.txt.
Формат вывода:
Выведите несколько строк вида
$ 1: student_A 2: student_B 3: student_C $
Имена школьников и сами строки должны быть выведены в том порядке, в котором их предполагает вывод функции itertools.combinations().
Используйте стандартный вывод на экран, то есть через print.
Между двоеточием и именем ученика - один пробел, между именем ученика и цифрой - один пробел.
Примечания:
Обратите внимание, что разрешается ввод только через studygroup.txt, а вывод только на экран (обычной вывод через print)! (см. рекомендации к вводу-выводу).
В этой задаче не нужно применять сортировку. Имена школьников в каждой строке и сами строки должны выводиться ровно в том порядке, в котором предлагает вывод функции из библиотеки itertools.
Не забывайте в начале кода делать импорт библиотеки itertools:
import itertools as it
В данной задаче не нужен модуль fractions!
Не забывайте, что readlines() всегда возвращает список. Если в исходном файле всего одна строка, readlines() вернёт список из одного элемента.
Не забывайте, что split() применяется к строкам (не к спискам)


Ответ:
import itertools as it


with open('studygroup.txt', 'r') as file:
student_names = file.readline().split()

combinations = list(it.combinations(student_names, 3))

for i, combo in enumerate(combinations, 1):
print(f"1: {combo[0]} 2: {combo[1]} 3: {combo[2]}")

Спасибо!

Телеграмм Свалка астронома Ai 🦄 MSU

Телеграмм Варечкин Блокнот 🌸 MSU

ВК Школа https://vk.com/mgu_gdz Физиув UwU

-3

Наука
7 млн интересуются