Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2023, 14:58   #1
Ezio50
 
Регистрация: 21.04.2023
Сообщений: 6
По умолчанию EuroEnglish(Python)

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

1.Избавление от буквы «c», которая в сочетаниях «сi» и «сe» будет изменяться на «s», в сочетании «ck» — опускаться, а в остальных случаях заменяться на «k». При этом все замены будут производиться в строгом порядке слева направо.

2.Замена всех удвоенных букв: «ee» на «i», «oo» — на «u», a в остальных комбинациях - одна буква, вместо двух одинаковых. Замены строго слева направо. Т
3.Опускание буквы «е» в конце слова, если эта буква не является единственной буквой в слове.

4.Отмена артиклей. При этом удаляться будут только тогда, когда они в исходном тексте - «a», «an», «the».
Примеры
Входные данные
cacao and coffee
Результат работы
kakao and kofi
Входные данные
Cinderella! Where Is The Dress???
Результат работы
Sinderela! Wher Is Dres???
Входные данные
'A' is a letter
Результат работы
'' is leter
Входные данные
!!!Hello!!!A-the-"word"
Результат работы
!!!Helo!!!--"word"

Написал код, но есть проблема с некоторыми моментами. Как возможно исправить?
Код:
import re

# функция для замены символов по правилам первого года реформы
def replace_c(word):
    word = re.sub(r'\bc(?=[ie])', 's', word, flags=re.IGNORECASE) # заменяем c на s перед i или e
    word = re.sub(r'ck', '', word, flags=re.IGNORECASE) # удаляем ck
    word = re.sub(r'c', 'k', word, flags=re.IGNORECASE) # заменяем оставшуюся c на k
    return word

# функция для замены символов по правилам второго года реформы
def replace_double(word):
    word = re.sub(r'ee', 'i', word, flags=re.IGNORECASE) # заменяем ee на i
    word = re.sub(r'oo', 'u', word, flags=re.IGNORECASE) # заменяем oo на u
    word = re.sub(r'([a-zA-Z])\1', r'\1', word) # заменяем двойные буквы на одну
    return word

# функция для замены символов по правилам третьего года реформы
def drop_e(word):
    if len(word) > 1 and word[-1] == 'e': # если слово не состоит только из 'e'
        word = word[:-1] # удаляем последнюю букву 'e'
    return word

# функция для замены символов по правилам четвертого года реформы
def drop_articles(word):
    if word.lower() in ['a', 'an', 'the']: # если слово является артиклем
        return '' # удаляем его
    else:
        return word

text = input()

# разбиваем текст на слова
words = re.findall(r"[\w']+|[^\w\s]", text)

# применяем правила реформы к каждому слову
euroenglish_words = []
for word in words:
    word = drop_articles(word)
    word = replace_c(word)
    word = replace_double(word)
    word = drop_e(word)
    if word:
        euroenglish_words.append(word)

# объединяем слова в новый текст
euroenglish_text = ' '.join(euroenglish_words)

# заменяем множественные пробелы на один
euroenglish_text = re.sub(r'\s+', ' ', euroenglish_text)

print(euroenglish_text)

Последний раз редактировалось Ezio50; 22.04.2023 в 08:52.
Ezio50 вне форума Ответить с цитированием
Старый 21.04.2023, 17:05   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,296
По умолчанию

Код:
import re

# функция для замены символов по правилам первого года реформы
def replace_c(word):
    word = re.sub(r'c(?=[ie])', 's', word, flags=re.IGNORECASE) # заменяем c на s перед i или e
    word = re.sub(r'ck', 'k', word, flags=re.IGNORECASE) # удаляем c
    word = re.sub(r'c', 'k', word, flags=re.IGNORECASE) # заменяем оставшуюся c на k
    return word

# функция для замены символов по правилам второго года реформы
def replace_double(word):
    while True:
        old_word = word
        word = re.sub(r'ee', 'i', word, flags=re.IGNORECASE) # заменяем ee на i
        word = re.sub(r'oo', 'u', word, flags=re.IGNORECASE) # заменяем oo на u
        word = re.sub(r'([a-zA-Z])\1', r'\1', word) # заменяем двойные буквы на одну
        if old_word == word:
            return word

# функция для замены символов по правилам третьего года реформы
def drop_e(word):
    if len(word) > 1 and word[-1] == 'e': # если слово не состоит только из 'e'
        word = word[:-1] # удаляем последнюю букву 'e'
    return word

# функция для замены символов по правилам четвертого года реформы
def drop_articles(word):
    if word.lower() in ['a', 'an', 'the']: # если слово является артиклем
        return '' # удаляем его
    else:
        return word

def translate(text):
    subphrases = text.split(' ')
    euroenglish_subphrases = []

    for subphrase in subphrases:
        words = re.split(r'([.,?!:\-;()\'"])', subphrase)
        euroenglish_words = []

        for word in words:
            need_title = word.istitle()
            word = drop_articles(word)
            word = replace_c(word)
            word = replace_double(word)
            word = drop_e(word)
            if word:
                if need_title:
                    word = word.title()
                euroenglish_words.append(word)
        
        if euroenglish_words:
            euroenglish_subphrases.append(''.join(euroenglish_words))

    euroenglish_text = ' '.join(euroenglish_subphrases)

    return euroenglish_text

texts = [
    (r'cck', r'k'),
    (r'success', r'sukses'),
    (r'ooo', r'uo'),
    (r'oou', r'u'),
    (r'iee', r'i'),
    (r'aaaaa', r'a'),
    (r'cacao and coffee', r'kakao and kofi'),
    (r'Cinderella! Where Is The Dress???', r'Sinderela! Wher Is Dres???'),
    (r"'A' is a letter", r"'' is leter"),
    (r'!!!Hello!!!A-the-"word"', r'!!!Helo!!!--"word"'),
]

for text_input, text_output in texts:
    text_result = translate(text_input)
    if text_result != text_output:
        print('INPUT:', text_input)
        print('OUTPUT:', text_output)
        print('RESULT:', text_result)
Вот с такими правками результаты совпадают с имеющимися примерами.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 21.04.2023, 18:30   #3
Ezio50
 
Регистрация: 21.04.2023
Сообщений: 6
По умолчанию

BDA, совпадают только примеры, но вот сразу после пример - ошибка, вот прям моментально, вот вообще не понимаю из-за чего. Мб подскажете?
Ezio50 вне форума Ответить с цитированием
Старый 21.04.2023, 20:09   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,296
По умолчанию

Нашел еще примеры, нужно:
Код:
word = re.sub(r'([a-z])\1', r'\1', word, flags=re.IGNORECASE) # заменяем двойные буквы на одну
UPD. На acmp с такой правкой решение прошло все тесты.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 21.04.2023 в 20:21.
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python Александра27 Помощь студентам 1 02.11.2022 17:46
Python - как установить Easy-Machine-Learning-Object-Detection при уже установленном Python 3.9 Krasi Общие вопросы по программированию, компьютерный форум 4 23.12.2021 15:49
[Python] Нужно решить в среду вечером 5 -6 заданий для начинающих на языку Python. Пример заданий смогу выслать. Задания на английском языке. foxylen Фриланс 2 17.03.2019 12:30
Начальный уровень Python. Функции - Python YYYUUU Python 5 09.06.2017 12:09