Форум сайта python.su
Есть такой код:
def textcutter(winyorwinxortextar, text, winxdefault): textsplit = text.split() winytext = 1 curtextsplit = [] if(len(textsplit) == 1): winxtext = len(text) else: for n in range(len(textsplit)): curtextsplit[winytext] = textsplit[n] if(len(currenttextsplit[winytext]) >= winxdefault): curtextsplit[winytext] = oldcurtextsplit winytext += 1 elif(n < len(textsplit)): oldcurtextsplit = curtextsplit[winytext] curtextsplit[winytext] += ' ' print(winytext) text = "Какой-то криповый сегодня вечерок, не правда ли, друзья?" textcutter(1, text, 20)
Traceback (most recent call last): File "C:\Users\danil\Desktop\Python\test.py", line 18, in <module> textcutter(1, text, 20) File "C:\Users\danil\Desktop\Python\test.py", line 9, in textcutter curtextsplit[winytext] = textsplit[n] IndexError: list assignment index out of range
Отредактировано IfDANCodeR (Янв. 14, 2019 16:32:05)
Офлайн
IfDANCodeR для начала
вставляете свой код в окно сообщений затем выделяете его от начала и до конца удерживая л.к.м. и после выделения когда ваш код уже выделен синим идете вверх окна рядом с смайликом слева наводите на стрелку а затем жмете PYTHON и ваш код будет полным и читаемым. а так не читаемый код
Офлайн
marvellikИсправил
IfDANCodeR для начала вставляете свой код в окно сообщений затем выделяете его от начала и до конца удерживая л.к.м. и после выделения когда ваш код уже выделен синим идете вверх окна рядом с смайликом слева наводите на стрелку а затем жмете PYTHON и ваш код будет полным и читаемым. а так не читаемый код
Офлайн
все правильно оно говорит:
winytext = 1 curtextsplit = [] ... curtextsplit[winytext] = textsplit[n]
IfDANCodeRна практике он делает что угодно но только не это.
В теории, он должен разделять текст на строки, чтобы они по длине не превышали winxdefault
[code python][/code]
Отредактировано PEHDOM (Янв. 14, 2019 14:06:15)
Офлайн
Для добавления в конец списка имеется хорошая функция append
curtextsplit.append(textsplit[n])
Офлайн
RafikОкей
Для добавления в конец списка имеется хорошая функция append
Отредактировано IfDANCodeR (Янв. 14, 2019 15:21:30)
Офлайн
Rafik
Для добавления в конец списка имеется хорошая функция append
PEHDOMОкей, я попробовал исправить ситуацию со списком
все правильно оно говорит:
def textcutter(winyorwinxortextar, text, winxdefault): textsplit = text.split() winytext = 1 curtextsplit = [''] if(len(textsplit) == 1): winxtext = len(text) else: for n in range(len(textsplit)): curtextsplit[winytext] = textsplit[n] if(len(currenttextsplit[winytext]) >= winxdefault): curtextsplit.append('') curtextsplit[winytext] = oldcurtextsplit winytext += 1 elif(n < len(textsplit)): oldcurtextsplit = curtextsplit[winytext] curtextsplit[winytext] += ' ' print(winytext) text = "Какой-то криповый сегодня вечерок, не правда ли, друзья?" textcutter(1, text, 20)
Traceback (most recent call last): File "C:\Users\danil\Desktop\Python\test.py", line 19, in <module> textcutter(1, text, 20) File "C:\Users\danil\Desktop\Python\test.py", line 9, in textcutter curtextsplit[winytext] = textsplit[n] IndexError: list assignment index out of range
Офлайн
IfDANCodeRРебят, всё, догнал, всё работает. Спасибо за помощь!
def textcutter(winyorwinxortextar, text, winxdefault): textsplit = text.split() winytext = 1 curtextsplit = [''] if(len(textsplit) == 1): winxtext = len(text) else: for n in range(len(textsplit)): curtextsplit[winytext-1] = textsplit[n] if(len(curtextsplit[winytext-1]) >= winxdefault): curtextsplit.append('') curtextsplit[winytext-1] = oldcurtextsplit winytext += 1 elif(n < len(textsplit)): oldcurtextsplit = curtextsplit[winytext-1] curtextsplit[winytext-1] += ' ' print(winytext) text = "Какой-то криповый сегодня вечерок, не правда ли, друзья?" textcutter(1, text, 20)
Офлайн
IfDANCodeR
что более читаемо curtextsplit или cur_text_split ? textcutter или text_cutter ? oldcurtextsplit или old_cur_text_split ? winytext или win_y_text? Подумайте над этим.
В самом конце, в качестве доп задачки, можете вернуться к этой функции и переписать ее в 2-3 раза лучше/ короче/ эффективнее/ понятнее
Офлайн
Значит, надо разрезать строку по пробелам (“разделить на слова”), а затем собрать из этих “слов” строки не длинее заданного значения. Так?
Что именно надо вернуть, так и не сказано.
Последний вариант кода просто выводит 1. Ни в curtextsplit, ни в oldcurtextsplit не остаётся ничего осмысленного.
def add_word(word, line, n): if len(word) > n: print('Error: "{}" не влезет в {} ({})'.format(word, n, len(word))) exit() if line[0] + len(word) + 1 <= n: line.append(word) line[0] += len(word) + 1 return True return False def cut(text, n): out = [] line = [-1] # хранит первым элементом длину, потом "слова" for word in text.split(): if not add_word(word, line, n): # строка переполнена, добавить не удалось # сохраняем текущую строку, начинаем набирать новую out.append(' '.join(line[1:])) line = [-1] add_word(word, line, n) if len(line) >1: out.append(' '.join(line[1:])) return out n = 20 print('-'*n+'|') for l in cut("Какой-то криповый сегодня вечерок, не правда ли, друзья?", n): print(l)
--------------------|
Какой-то криповый
сегодня вечерок, не
правда ли, друзья?
Отредактировано uf4JaiD5 (Янв. 14, 2019 20:23:50)
Офлайн