• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Разделение строки на части Python

shinenvice034

Active member
11.08.2020
42
0
BIT
0
Имеется строка длиной 312 символов. Требуется строку нужно разделить на подстроки, чтобы в каждой было ровно 32 символа, и заключить их в список. Однако 312 делиться на 32 только с остатком, и этот остаток длиной 24 символа должен быть также учтен, но в отдельной переменной (не в списке с подстроками). Затем этот остаток нужно сложить с каждой подстрокой в списке
 
Python:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from random import choice
from string import ascii_letters, digits
from os import system, name, sys


def length_str():
    """ Функция определяет длину строки. """
    while True:
        global len_str
        len_str = input( "{0:40}: ".format("Введите длину строки", end = ''))
        if not len_str.isdigit():
            print("Необходимо ввести число, а не строку. ")
            continue
        if len_str < '0':   #здесь что-то не то, но думать не хочется - всё и без этого работает.
            print(u"Длина строки не может быть отрицательной.")
            continue
        if len_str == '0':
            print(u"Строка не может быть пустой.")
            continue
        else:
            len_str = int(len_str)
            break
    return  len_str


def length_podstr():
    """ Функция определяет длину подстроки. """
    while True:
        len_podstr = input( "{0:40}: ".format("Введите длину подстроки", end = ''))
        if not len_podstr.isdigit():
            print("Необходимо ввести число, а не строку. ")
            continue
        if int(len_podstr) < 0:
            print(u"Длина подстроки не может быть отрицательной.")
            continue
        if len_podstr < '1':
            print(u"Подстрока не может быть пустой.")
            continue
        if int(len_podstr) > len_str:
            print(u"А ты - гениальный малый )")
            continue
        else:
            len_podstr = int(len_podstr)
            break
    return  len_podstr



def main():
    len_str = length_str()
    stroka = ''.join(choice(ascii_letters + digits) for i in range(len_str))    # генерируем строку
    report_2 = {"Сгенерирована строка длиной %s элементов" %len_str: stroka}
    for key, value in report_2.items():
        print("{0:40}:{1:32}".format(key, value))
    len_podstr =  length_podstr()
    k = len_str // len_podstr  # рассчитываем количество элементов в списке из подстрок из 32 символов
     # ... и заключить их в список
    list_podstr = []
    # ... строку нужно разделить на подстроки, чтобы в каждой было ровно 32 символа
    for n in range(1, k + 1):
        podstroka = stroka[len_podstr * (n - 1) :len_podstr * n]
        report = {"Подстрока_" + str(n) : podstroka}
        for key, value in report.items():
            print("{0:40}:{1:32}".format(key, value))
        list_podstr.append(podstroka)
    # остаток длиной "остаток от деления" символа
    ost = stroka[len_str - (len_str % len_podstr): len_str]
    print("{0:40}:{1:32}".format("Oстаток длиной %s символа" %(len_str % len_podstr), ost))
    print("\nСписок из подстрок: \n", list_podstr)                              # распечатка списка из 32 элементов из строки - всего 9 элементов
    # Затем этот остаток нужно сложить с каждой подстрокой в списке
    for n in range(0, k):
        report_3 = {"Сумма %s элемента списка с подстрокой" %(n + 1) : list_podstr[n] + ost}
        for key, value in report_3.items():
            print("{0:40}:{1:50}".format(key, value))


if __name__ == "__main__":
    system(['clear', 'cls'][name == sys.platform])                              # чистка консоли
    main()

screen.png
 
Python:
def divide(string):
    list_a = []  # Main list
    list_b = []  # List with the rest
    while True:
        if len(string) >= 32:
            list.append(list_a, string[:32])  # Add first 32 chars to the list
            string = string[32:]  # Remove first 32 chars from the string
        else:
            list.append(list_b, string)
            break
    return list_a, list_b


a = 'A'*312
print(divide(a))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!