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

Помогите решить задачу по Python

ярослав пирогов Пирогов Ученик (61), открыт 1 неделю назад
Контрольная по ударениям
Учительница задала Пете домашнее задание — в заданном тексте расставить ударения в словах, после чего поручила Васе проверить это домашнее задание. Вася очень плохо знаком с данной темой, поэтому он нашёл словарь, в котором указано, как ставятся ударения в словах. К сожалению, в этом словаре присутствуют не все слова. Вася решил, что в словах, которых нет в словаре, он будет считать, что Петя поставил ударения правильно, если в этом слове Петей поставлено ровно одно ударение.

Оказалось, что в некоторых словах ударение может быть поставлено больше чем одним способом. Вася решил, что в этом случае если то, как Петя поставил ударение, соответствует одному из приведённых в словаре вариантов, он будет засчитывать это как правильную расстановку ударения, а если не соответствует, то как ошибку.

Вам дан словарь, которым пользовался Вася, и домашнее задание, сданное Петей. Ваша задача — определить количество ошибок, которое в этом задании насчитает Вася.

Входные данные

Вводится сначала число N
— количество слов в словаре (0≤N≤20000
).

Далее идёт N
строк со словами из словаря. Каждое слово состоит не более чем из 30
символов. Все слова состоят из маленьких и заглавных латинских букв. В каждом слове заглавная ровно одна буква — та, на которую падает ударение. Слова в словаре расположены в алфавитном порядке. Если есть несколько возможностей расстановки ударения в одном и том же слове, то эти варианты в словаре идут в произвольном порядке.

Далее идёт упражнение, выполненное Петей. Упражнение представляет собой строку текста, суммарным объёмом не более 300000
символов. Строка состоит из слов, которые разделяются между собой ровно одним пробелом. Длина каждого слова не превышает 30 символов. Все слова состоят из маленьких и заглавных латинских букв (заглавными обозначены те буквы, над которыми Петя поставил ударение). Петя мог по ошибке в каком-то слове поставить более одного ударения или не поставить ударения вовсе.
1 ответ
Евгений Кегулихес Профи (900) 1 неделю назад
 def count_errors(dictionary, exercise): 
errors = 0
for word in exercise:
if word in dictionary:
if exercise[word] not in dictionary[word]:
errors += 1
else:
if sum(1 for letter in word if letter.isupper()) != 1:
errors += 1
return errors

# Ввод количества слов в словаре
n = int(input())

# Создание словаря с ударениями
dictionary = {}
for _ in range(n):
word = input()
stressed_variants = set()
for i in range(len(word)):
if word[i].isupper():
stressed_variants.add(i)
dictionary[word.lower()] = stressed_variants

# Ввод упражнения Пети
exercise = input().split()

# Подсчет ошибок
errors = count_errors(dictionary, {word.lower(): index for index, word in enumerate(exercise)})

# Вывод результата
print(errors)

Этот код сначала считывает словарь, затем упражнение Пети, а затем вызывает функцию count_errors, которая подсчитывает количество ошибок в упражнении.
Похожие вопросы