Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачей пайтон

Dora Hazart Ученик (133), открыт 2 недели назад
Сперва он даже не понял, чем отличается этот день от другого, а суть была в том, что нигде не видно было Клариссы. Лужайка была пуста, деревья пусты, улицы пусты. И, прежде чем он сообразил, чего ему не хватает, прежде чем он начал искать пропавшую, ему уже стало не по себе, подходя к метро, он был уже во власти смутной тревоги. Что-то случилось, нарушился какой-то порядок, к которому он привык. Правда, порядок этот был так прост и несложен и установился всего несколько дней тому назад, а все-таки… Напишите функцию, которая будет восстанавливать нарушенный порядок. Функция lost() принимает произвольное число кортежей из двух строк и возвращает список строк (в исходном порядке), выбранных из каждого кортежа по правилам: всегда выбирается строка меньшей длины; в этой строке не должно быть посторонних символов (не букв); эта строка должна состоять все же не из одной буквы. Если среди элементов кортежей встречаются НЕ строки, то нужно возбудить стандартное исключение TypeError с сообщением “The argument is not a string”; если встретился хотя бы один кортеж с двумя строками одинаковой длины, то нужно возбудить собственное исключение SameLengthError с сообщением “The strings have the same length”; если кортежей, из которых не выбрано ни одной строки, более половины, то нужно возбудить собственное исключение TooFewLinesError с сообщением “Too few lines selected”. Приоритет проверки исключений должен соответствовать порядку описания в задаче. Исключения нужно только порождать, перехватывать их будет тестирующая система! Ввод data = [('understand', 'different'), ('lookslike', ['1984'])] print(*lost(*data), sep='\n') Вывод TypeError: The argument is not a string
2 ответа
[ ] [ ] Мастер (1178) 2 недели назад
Кто-то плотно покурил пока задачу составлял
Рустам Абдрашитов Мыслитель (9465) 2 недели назад
На
 class SameLengthError(Exception): 
pass

class TooFewLinesError(Exception):
pass

def lost(*tuples):
выбранные_строки = []
количество_невыбранных = 0

for строка1, строка2 in tuples:
if len(строка1) == len(строка2):
raise SameLengthError("Строки имеют одинаковую длину")

выбранная_строка = min((строка1, строка2), key=len)

if len(выбранная_строка) > 1 and выбранная_строка.isalpha():
выбранные_строки.append(выбранная_строка)
else:
количество_невыбранных += 1

if количество_невыбранных > len(tuples) / 2:
raise TooFewLinesError("Выбрано слишком мало строк")

return выбранные_строки

def получить_ввод_от_пользователя():
количество_пар = int(input("Введите количество пар строк: "))
return [(input("Введите первую строку: "), input("Введите вторую строку: ")) for _ in range(количество_пар)]

try:
данные = получить_ввод_от_пользователя()
print(*lost(*данные), sep='\n')
except (SameLengthError, TooFewLinesError, TypeError, ValueError) as e:
print(f"Ошибка: {e}")
Похожие вопросы