profile
Размещено 4 года назад по предмету Информатика от arkadiychernikov002

Программирование Python
Нужно подробно объяснить принцип работы кода

Условие задачи
Рассмотрим слова из больших латинских букв и шаблоны, состоящие из больших латинских букв и символов «?» и «*».
Будем считать, что слово подходит под шаблон, если в шаблоне можно заменить каждый символ «?» на большую латинскую букву, а каждый символ «*» – на последовательность (возможно, пустую) больших латинских букв, так, чтобы получилось требуемое слово. Написать программу, определяющую, подходит ли слово под шаблон.
Входные данные - две строки: в одной строке записан шаблон – последовательность больших латинских букв, «?» и «*», в другой – слово, состоящее только из больших латинских букв. Обе строки не превышают 255 символов.
Выходные данные - необходимо вывести слово «YES», если слово подходит под шаблон и «NO» в противном случае.

Пример
Ввод:
ABBCDA
A*CDA
Вывод:
YES

Код

# Ввод данных
s = input("Слово: ")
p = input("Шаблон: ")

# match возвращает True, если подстрока s, начинающаяся с позиции spos,
# соответствует шаблону (подстрока p, которая начинается
# с позиции ppos)

def match(spos, ppos):
if (spos == len(s)) or (ppos == len(p)):
return (spos == len(s) and ppos == len(p))
elif p[ppos] == '?':
return match(spos + 1, ppos + 1)
elif p[ppos] == '*':
for i in range(spos, len(s)):
if match(i, ppos + 1):
return True
else:
return (s[spos] == p[ppos]) and (match(spos + 1, ppos + 1))
return False

if match(0, 0):
print('YES')
else:
print('NO')

  1. Ответ на вопрос
    Ответ на вопрос дан perevernusb

    Ответ:

    Принцип работы рекурсивный

    Объяснение:

    # В комментариях я использовал слово итерация в значении запуска новой функции с данными spos/ppos большими на 1 (аналогично с циклом for

    # Ввод данных

    s = input("Слово: ")

    p = input("Шаблон: ")

    # match возвращает True, если подстрока s, начинающаяся с позиции spos,

    # соответствует шаблону (подстрока p, которая начинается

    # с позиции ppos)

    def match(spos, ppos):

       if (spos == len(s)) or (ppos == len(p)):

           return (spos == len(s) and ppos == len(p)) #когда все символы слова либо шаблона пройдены возвращается True, если и шаблон и слово пройдены полностью, в другом случае возвращается False

       elif p[ppos] == '?':

           return match(spos + 1, ppos + 1) #когда встречается ? начинается новая итерация

       elif p[ppos] == '*': #проверка если подстрока - *

           for i in range(spos, len(s)): #обход всех оставшихся символов слова

               if match(i, ppos + 1):

                   return True #если дочерняя функция (вызванная выше) выдала True, цикл for заканчивается досрочно, выдавая True

       else: #выполняется когда не встретилось */?

           return (s[spos] == p[ppos]) and (match(spos + 1, ppos + 1))# проверка на равентсво соответствующих (по индексу) символов слова и шаблона и запуск новой функции (итерации)

    if match(0, 0):

       print('YES') #если результат функции True в консоль выводится 'YES', иначе 'NO'

    else:

       print('NO')

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.