Что может вызвать ошибку при работе программы?

Рейтинг: 0Ответов: 1Опубликовано: 29.07.2023

#Вводится неизвестное кол-во строк, в них нужно перевернуть слова вокруг себя ( asd! -> dsa! ), а знаки препинания оставить на месте. 5 тестов. 4 - правильно, 1 - ошибка во время исполнения ( буквы только латинские )

   import sys
   
   
   def revwrd(w): # Ф-я переворота слова
       rw = ''
       nn = len(w)
       for i in range(nn):
           rw += w[nn - 1 - i]
       return rw
   

   def rev(sr): # Функция для выполнения задачи в 1 строке
       wrd = '' # переменная, чтобы хранить буквы от знака до следующего знака
       nsr = '' # переменная для преобразованной строки
       for el in sr: # пройдёмся по каждому элементы строки
           if 'a' <= el <= 'z' or 'A' <= el <= 'Z': # если элемент строки - добавляем в *слово*
               wrd += el
           else:
               if wrd != '': # если элемент не буква, то если *слово* не пустое, перевернув, добавим его, иначе добавим элемент с которым работает ( Если не написано специально отдельный if, почему-то первый знак после слова не добавляется )
                   nsr += revwrd(wrd) 
                   wrd = ''
               if wrd == '':
                   nsr += str(el)
       return nsr # возвращаем новую строку


   s = [] # переменная для ввода текста
   ns = [] # переменная для изменённого текста
   n = 0 # переменная для счёта кол-ва строк
   for line in sys.stdin.readlines(): # построчный ввод текста ( пока не встретим ctrl + D )
       s.append(line) # прибавляем к переменной текста строку
       n += 1 
   for i in range(n):  # изменяем текст по строкам и сохраняем его в новой переменной
       ns.append(rev(s[i]))
   for i in range(n): # выводим изменённый текст
       print(ns[i], end='')

Ответы

▲ 0Принят
s = '''А роза, упала на лапу АЗОРА! Bird! on tree. '''  # Строка текста
zn = '.,!@#$%^&*()?>< '  # Знаки препинания

#Убираем знаки препинания вместо их ставим например *, делим по словам, переворачиваем каждое слово и соединяем в строку 
rev = ''.join([el[::-1] for el in ''.join([el if el not in zn else '*' for el in s]).split('*') if el != ''])
res = ''
count = 0
for el in s:
    if not (el in zn):
        res += rev[count]
        count += 1
    else:
        res += el

print(res)

А азор, алапу ан упал АРОЗА! driB! no eert.