Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 13.12.2022
Сообщений: 39

Сжатие с добавлением скобок

25.05.2023, 14:37. Показов 843. Ответов 8

Студворк — интернет-сервис помощи студентам
Смысл задания: написать программу, которая будет "сжимать" одинаковые символы на местах, симметричных центру, а те, что не сжимает, взять в скобки -до середины открывающие, после - закрывающие, причем в четной строке в формате (ва), а не (в()а). Также в нечетной не сжимать центральный символ. Была написана программа, которая не работает, часть со скобками верная (есть отдельная программа, где этот способ работает), а вот со срезом беда. Помогите исправить так, чтобы все работало.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
s='abcdfffcba'
a=''
for i in range (0, len(s)):
    if s[i]==s[len(s)-1]:
        a=s[i+1:len(s)-i-1]
    else:
        if len(s)%2==0:
            for i in range(len(s)):
                if i<(len(s)//2-1):
                    a+='('+s[i]
                if i==(len(s)//2-1) :
                    a+=s[i]
                if i>=(len(s)//2):
                    a+=s[i]+')'
        else:
            for i in range(len(s)):
                if i<(len(s)//2):
                    a+='('+s[i]
                else:
                    a+=s[i]+')'
print(a)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2023, 14:37
Ответы с готовыми решениями:

Проверить правильность расстановки в строке скобок (баланс открывающих и закрывающих скобок)
помогите с решением задачи. Запросить у пользователя ввод значений согласно варианту. Выполнить задание согласно варианту. После...

Дана цепочка символов состоящая из скобок. Определить правильность расстановки скобок
Дана цепочка символов состоящая из скобок вида (',')','. Определить правильная ли она (правильная:, неправильная: ((])),(())],). Ответ...

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок
Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок, которые закрываются и открываются. Количество...

8
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
25.05.2023, 15:28
Перечитав с пяток десятков, невольно вспомнился один армянский мультик: "Какой тулуп! Какой заяц!". Постарайтесь переформулировать вопрос вне потока сознания: чётко, ясно, с чувством и расстановкой.
1
0 / 0 / 0
Регистрация: 13.12.2022
Сообщений: 39
25.05.2023, 15:53  [ТС]
greg zakharov, Повтоpить? Hy, значит, та самая блоха с того беpега лyжи...
А так есть строка abcdefhba, нужно написать такую программу, чтобы на выходе получилось (c(d(e)f)h), а если строка четная, например, abcdesfhba, то (c(d(es)f)h). Кусочки, отвечающие за добавление скобок, верные, т.е. вот это вот
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if len(s)%2==0:
            for i in range(len(s)):
                if i<(len(s)//2-1):
                    a+='('+s[i]
                if i==(len(s)//2-1) :
                    a+=s[i]
                if i>=(len(s)//2):
                    a+=s[i]+')'
        else:
            for i in range(len(s)):
                if i<(len(s)//2):
                    a+='('+s[i]
                else:
                    a+=s[i]+')'
А вот со срезанием букв какой-то косяк.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
25.05.2023, 17:04

Python
1
2
3
4
5
6
7
8
9
10
s = 'abcdesfhba'
le = len(s) // 2
res = []
for i in reversed(list(zip(s[:le], reversed(s[le:])))):
    if i[0] != i[1]:
        res.append(f'{i[1]})')
        res.insert(0, f'({i[0]}')
if len(s) % 2 != 0:
    res.insert(le // 2, f'({s[le]})')
print(''.join(res))
1
0 / 0 / 0
Регистрация: 13.12.2022
Сообщений: 39
25.05.2023, 19:02  [ТС]
iSmokeJC, красиво, рабоче, но не совсем под ТЗ, нужно через циклы делать, но спасибо
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
25.05.2023, 19:29
Лучший ответ Сообщение было отмечено Nixelentha как решение

Решение

Ну, ежели попроще, то так можно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def print_res(s):
    arr = list(s)
    L_ind = 0
    R_ind = len(arr) - 1
    while L_ind <= R_ind:
        if arr[L_ind] == arr[R_ind] and L_ind != R_ind:
            arr[L_ind] = arr[R_ind] = ''
        else:
            arr[L_ind] = '(' + arr[L_ind]
            arr[R_ind] = arr[R_ind] + ')'
        L_ind += 1
        R_ind -= 1
    print(''.join(arr))
a = 'abcdefhba'
print_res(a)
a = 'abcdesfhba'
print_res(a)
1
0 / 0 / 0
Регистрация: 13.12.2022
Сообщений: 39
25.05.2023, 20:31  [ТС]
idealist, спасибо большое, и работает, и понятно, что происходит
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
26.05.2023, 00:10
Python
1
2
3
4
5
from re import sub
 
def print_res(s):
   p = [sub(r'(.)', r'(\1' if not x else r'\1)', s) for x in range(2)]
   return p[0][:len(p[0]) // 2 + len(s) % 2] + p[1][len(p[1]) // 2:]
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
26.05.2023, 12:17
greg zakharov, ТЗ - конечно огонь, ни зайца, ни тулупа, ни орла... я с шестого десятка чтения, таки понял, что требуется...
Как говорится, делай добро и бросай его в воду...
В общем, дело в следующем:
Если в строке первый и последний символ одинаковые, то их удаляем, а если неодинаковые, то вокруг них - скобки, потом сравниваем следующую пару - второй и предпоследний символы и т.д. до середины...
Из этого:
'abcdedhba'
должно получиться это:
'(ceh)'

а из этого:
'abcderdhba'
это:
'(c(er)h)'

что-то типа:
Python
1
2
3
4
5
6
7
8
9
10
11
12
s = 'abkfdfghjjleffcba'
z = len(s) // 2
res1, res2 = '', ''
for i in range(z):
    if s[i] != s[-(i+1)]:
        res1 += '('+s[i]
        res2 += ')' + s[-(i+1)]
if len(s) % 2 != 0:
    res1 += s[z]
 
res = res1 + res2[::-1] 
print(res)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2023, 12:17
Помогаю со студенческими работами здесь

Определить максимальную глубину вложения круглых скобок в некоторой формуле с правильной расстановкой скобок
Определить максимальную глубину вложения круглых скобок в некоторой формуле с правильной расстановкой скобок. Исходные данные: ...

Найти комбинацию скобок, при которой функция проверки валидации скобок сработает ошибочно
Всем привет! Написал функцию validBrackets, которая проверяет правильность расположения скобок в строке. Но мне сказали, что есть...

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок
Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок, которые закрываются и открываются. Количество...

Внести произвольный текст. Проверить в заданном тексте количество открытых скобок равно числу закрытых скобок
Внести произвольный текст. Проверить в заданном тексте количество открытых скобок равно числу закрытых скобок.

Дана строка символов. Исключить из строки символы, расположенные между ( ). Внутри скобок нет других скобок
Дана строка символов. Исключить из строки символы, расположенные между ( ). Внутри скобок нет других скобок. Тема: строки Добавлено...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru