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

Преобразование строки к строке указанного размера путём добавления пробелов между словами

09.12.2022, 13:36. Показов 748. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Преобразование строки к строке указанного размера, путём добавления пробелов между словами.

Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def new_replace(s, old, new):
    #new_words = "".join(new if i == old else i for i in s)
    new_words = ""
    for i in s:
        if i == old:
            new_words = new_words.join(new)
        else:
            new_words = new_words.join(i)
    return new_words
 
 
def new_count(elem, words):
    count = 0
    for i in range(len(words)):
        if elem == words[i]:
            count += 1
    return count
 
 
words = input('Введите слова \n')
n = int(input('Введите желаемый размер \n'))
 
if n > len(words):  # если больше текущего размера
    if new_count(' ', words) == 0:  # если нет пробелов - разница размеров добавляется в конец
        words += (n - len(words)) * ' '
    else:
        words = new_replace(words, ' ', (n - len(words)) // new_count(' ', words) * ' ' + ' ')
        words = new_replace(words, ' ', (n - len(words)) % new_count(' ', words) * ' ' + ' ')
print(words)
Ошибка "ZeroDivisionError: integer division or modulo by zero" появляется только после развёртывания генератора, как развернуть его без этой ошибки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2022, 13:36
Ответы с готовыми решениями:

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

Привести строку к длине, задаваемой введенным числом, путем добавления дополнительных пробелов между словами
Дана строка, содержащая последовательность слов, разделенных пробелами, и натуральное число, не меньшее длины этой строки и не большее 255...

Функция Space(s,l) : доведение строки s до длины l путем вставки пробелов между словами
Назначение: доведение строки s до длины l путем вставки пробелов между словами.

5
0 / 0 / 0
Регистрация: 20.09.2022
Сообщений: 92
09.12.2022, 14:04
Не по теме:
Боюсь спросить...
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
09.12.2022, 14:16
Лучший ответ Сообщение было отмечено Scetowod как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def func(s, length):
    left = len(s) - len(s.lstrip(' ')) # это можно убрать и все, что с этим связано, если пробелы в начале и в конце строки не интересуют
    right = len(s) - len(s.rstrip(' '))
 
    lst = [x for x in s.split() if x]
    len_words = sum(map(len, lst)) + len(lst) - 1 + left + right
 
    if len(lst) < 2 or len_words >= length or not ' ' in s:
        return s
 
    for i in range(length - len_words):
        lst[i % (len(lst) - 1)] += ' '
 
    return ' ' * left + ' '.join(lst) + ' ' * right
 
 
words = input('Введите слова \n')
n = int(input('Введите желаемый размер \n'))
print(func(words, n))
1
0 / 0 / 0
Регистрация: 10.11.2022
Сообщений: 26
09.12.2022, 14:23  [ТС]
Если не переписывать весь код, просто развернуть не получится?
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
09.12.2022, 14:41
Лучший ответ Сообщение было отмечено Scetowod как решение

Решение

Scetowod,
у тебя ошибка в new_replace(s, old, new), возвращает совершенно не то, что надо. Последний символ строки только возвращает. В этой строке уже нет пробелов, поэтому ошибка деления на 0, пробелов в строке стало 0 перед второй заменой (точнее там всего 1 символ - последний из строки, как ранее писал).

Добавлено через 2 минуты
Вот наглядно, смотри что выводит print после первой замены.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def new_replace(s, old, new):
    #new_words = "".join(new if i == old else i for i in s)
    new_words = ""
    for i in s:
        if i == old:
            new_words = new_words.join(new)
        else:
            new_words = new_words.join(i)
    return new_words
 
 
def new_count(elem, words):
    count = 0
    for i in range(len(words)):
        if elem == words[i]:
            count += 1
    return count
 
 
words = 'qwe wer'
n = 25
 
if n > len(words):
    if new_count(' ', words) == 0:
        words += (n - len(words)) * ' '
    else:
        words = new_replace(words, ' ', (n - len(words)) // new_count(' ', words) * ' ' + ' ')
        print(words) # смотри, что получили в результате
        words = new_replace(words, ' ', (n - len(words)) % new_count(' ', words) * ' ' + ' ')
print(words)
Добавлено через 5 минут
Вот так, наверно, у тебя должно быть
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def new_replace(s, old, new):
    # new_words = "".join(new if i == old else i for i in s)
    new_words = ""
    for i in s:
        if i == old:
            new_words += new
        else:
            new_words += i
 
    return new_words
 
 
def new_count(elem, words):
    count = 0
    for i in range(len(words)):
        if elem == words[i]:
            count += 1
    return count
 
 
words = 'qwe wer'
n = 25
 
if n > len(words):
    if new_count(' ', words) == 0:
        words += (n - len(words)) * ' '
    else:
        words = new_replace(words, ' ', (n - len(words)) // new_count(' ', words) * ' ' + ' ')
        words = new_replace(words, ' ', (n - len(words)) % new_count(' ', words) * ' ' + ' ')
print(words)
1
09.12.2022, 16:32  [ТС]

Не по теме:

Понятно

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2022, 16:32
Помогаю со студенческими работами здесь

Код функции доведения строки до длины s1 путём вставки пробелов между словами
Пишу код функции доведения строки до длины s1 путём вставки пробелов между словами. Код рабочий, функция Space() корректная, но в main()...

Функция – Space(s,l). Назначение – доведение строки s до длины l путем вставки пробелов между словами
Функция – Space(s,l). Назначение – доведение строки s до длины l путем вставки пробелов между словами.

Преобразовать заданную строку до заданной длины путем равномерного добавления заданного символа между словами.
Преобразовать заданную строку до заданной длины путем равномерного добавления заданного символа между словами.

Вывести количество пробелов между словами в строке
:help:Помогите с программой:пользователь вводит строчку,а программа выводит кол-во пробелов между словами в строке. #include...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru