Latest posts on Как создать список с изначально неизвестным количеством элементов topichttp://python.su/forum/topic/36584/2019-01-16T15:33:23+02:00Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-16T15:33:23+02:00IfDANCodeR198552<blockquote><em>JOHN_16</em><br/>IfDANCodeRчто более читаемо curtextsplit или cur_text_split ? textcutter или text_cutter ? oldcurtextsplit или old_cur_text_split ? winytext или win_y_text? Подумайте над этим.В самом конце, в качестве доп задачки, можете вернуться к этой функции и переписать ее в 2-3 раза лучше/ короче/ эффективнее/ понятнее</blockquote>Угу<br/>Как заставлю её полностью работать (пока некогда было), буду форматировать и оптимизировать
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T20:20:28+02:00uf4JaiD5198501Значит, надо разрезать строку по пробелам (“разделить на слова”), а затем собрать из этих “слов” строки не длинее заданного значения. Так?<br/>Что именно надо вернуть, так и не сказано.<br/><br/>Последний вариант кода просто выводит 1. Ни в curtextsplit, ни в oldcurtextsplit не остаётся ничего осмысленного.<br/><br/><div class="code"><pre> <span class="k">def</span> <span class="nf">add_word</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">></span> <span class="n">n</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'Error: "{}" не влезет в {} ({})'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)))</span>
<span class="nb">exit</span><span class="p">()</span>
<span class="k">if</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="o"><=</span> <span class="n">n</span><span class="p">:</span>
<span class="n">line</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
<span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="k">return</span> <span class="bp">False</span>
<span class="k">def</span> <span class="nf">cut</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="c1"># хранит первым элементом длину, потом "слова"</span>
<span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">add_word</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="c1"># строка переполнена, добавить не удалось</span>
<span class="c1"># сохраняем текущую строку, начинаем набирать новую</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">add_word</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">></span><span class="mi">1</span><span class="p">:</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span>
<span class="k">return</span> <span class="n">out</span>
<span class="n">n</span> <span class="o">=</span> <span class="mi">20</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'-'</span><span class="o">*</span><span class="n">n</span><span class="o">+</span><span class="s1">'|'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">cut</span><span class="p">(</span><span class="s2">"Какой-то криповый сегодня вечерок, не правда ли, друзья?"</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="k">print</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
</pre></div><br/><div class="code"><pre> --------------------<span class="p">|</span>
Какой-то криповый
сегодня вечерок, не
правда ли, друзья?
</pre></div>
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T17:39:38+02:00JOHN_16198498<strong>IfDANCodeR</strong><br/>что более читаемо curtextsplit или cur_text_split ? textcutter или text_cutter ? oldcurtextsplit или old_cur_text_split ? winytext или win_y_text? Подумайте над этим.<br/>В самом конце, в качестве доп задачки, можете вернуться к этой функции и переписать ее в 2-3 раза лучше/ короче/ эффективнее/ понятнее<br/>
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T16:34:53+02:00IfDANCodeR198496<blockquote><em>IfDANCodeR</em><br/></blockquote>Ребят, всё, догнал, всё работает. Спасибо за помощь!<br/><br/><div class="code"><pre> <span class="k">def</span> <span class="nf">textcutter</span><span class="p">(</span><span class="n">winyorwinxortextar</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">textsplit</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">winytext</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">curtextsplit</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">winxtext</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">>=</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">curtextsplit</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">oldcurtextsplit</span>
<span class="n">winytext</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span><span class="p">(</span><span class="n">n</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">oldcurtextsplit</span> <span class="o">=</span> <span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">print</span><span class="p">(</span><span class="n">winytext</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"Какой-то криповый сегодня вечерок, не правда ли, друзья?"</span>
<span class="n">textcutter</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
</pre></div><br/>С остальным разберусь
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T16:31:28+02:00IfDANCodeR198495<blockquote><em>Rafik</em><br/>Для добавления в конец списка имеется хорошая функция append</blockquote><blockquote><em>PEHDOM</em><br/>все правильно оно говорит:</blockquote>Окей, я попробовал исправить ситуацию со списком<br/><br/><div class="code"><pre> <span class="k">def</span> <span class="nf">textcutter</span><span class="p">(</span><span class="n">winyorwinxortextar</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">textsplit</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">winytext</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">curtextsplit</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">winxtext</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">currenttextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">])</span> <span class="o">>=</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">curtextsplit</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">oldcurtextsplit</span>
<span class="n">winytext</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span><span class="p">(</span><span class="n">n</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">oldcurtextsplit</span> <span class="o">=</span> <span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">print</span><span class="p">(</span><span class="n">winytext</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"Какой-то криповый сегодня вечерок, не правда ли, друзья?"</span>
<span class="n">textcutter</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
</pre></div><br/>Но<br/><br/><div class="code"><pre> <span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
<span class="n">File</span> <span class="s2">"C:\Users\danil\Desktop\Python</span><span class="se">\t</span><span class="s2">est.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">19</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="n">textcutter</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
<span class="n">File</span> <span class="s2">"C:\Users\danil\Desktop\Python</span><span class="se">\t</span><span class="s2">est.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">9</span><span class="p">,</span> <span class="ow">in</span> <span class="n">textcutter</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="ne">IndexError</span><span class="p">:</span> <span class="nb">list</span> <span class="n">assignment</span> <span class="n">index</span> <span class="n">out</span> <span class="n">of</span> <span class="nb">range</span>
</pre></div><br/>Проходя через if, индекс добавляется и меняется<br/>Ничего не изменилось<br/>Хз, что делать<br/>
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T14:55:10+02:00IfDANCodeR198494<blockquote><em>Rafik</em><br/>Для добавления в конец списка имеется хорошая функция append</blockquote>Окей<br/>Но дело-то в том, что таким образом из curtextsplit получится тот же список из слов, что и textsplit<br/>А мне нужно, чтобы цикл проходил через if, менялось winytext, выставлялись пробелы, и только когда winytext меняется на следующее значение (когда набирается количество знаков, меньше, чем winxdefault, но при этом следующее слово добавляет количество символов, не влазящее в winxdefault (это последнее слово и не вписывается)), следовательно, уже тогда менялся индекс curtextsplit<br/>Так вот, как добавлять в конец строки элементы (в строку с нужным индексом)?<br/>
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T14:13:44+02:00Rafik198493Для добавления в конец списка имеется хорошая функция append<div class="code"><pre> <span class="n">curtextsplit</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
</pre></div>Насколько я понимаю, в список curtextsplit будет идти добавление последовательно: первая строка идёт первым элементом, вторая - следующий и т.д.
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T13:33:59+02:00PEHDOM198491все правильно оно говорит:<br/><div class="code"><pre> <span class="n">winytext</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">curtextsplit</span> <span class="o">=</span> <span class="p">[]</span>
<span class="o">...</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
</pre></div>У вас curtextsplit пустой список, там нету ни одного элемента, а вы пытаетесь изменить его первый!!!(тоесть по факту второй) элемент.<br/><br/><blockquote><em>IfDANCodeR</em><br/>В теории, он должен разделять текст на строки, чтобы они по длине не превышали winxdefault</blockquote>на практике он делает что угодно но только не это.
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-14T13:14:16+02:00IfDANCodeR198490<blockquote><em>marvellik</em><br/>IfDANCodeR для начала вставляете свой код в окно сообщений затем выделяете его от начала и до конца удерживая л.к.м. и после выделения когда ваш код уже выделен синим идете вверх окна рядом с смайликом слева наводите на стрелку а затем жмете PYTHON и ваш код будет полным и читаемым. а так не читаемый код</blockquote>Исправил
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-13T17:42:53+02:00marvellik198477<strong>IfDANCodeR</strong> для начала <br/>вставляете свой код в окно сообщений затем выделяете его от начала и до конца удерживая л.к.м. и после выделения когда ваш код уже выделен синим идете вверх окна рядом с смайликом слева наводите на стрелку а затем жмете PYTHON и ваш код будет полным и читаемым. а так не читаемый код<br/>
Общий :: Python для новичков :: Как создать список с изначально неизвестным количеством элементов
2019-01-13T17:16:41+02:00IfDANCodeR198475Есть такой код: <br/><br/><div class="code"><pre> <span class="k">def</span> <span class="nf">textcutter</span><span class="p">(</span><span class="n">winyorwinxortextar</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">textsplit</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">winytext</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">curtextsplit</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">winxtext</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">currenttextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">])</span> <span class="o">>=</span> <span class="n">winxdefault</span><span class="p">):</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">oldcurtextsplit</span>
<span class="n">winytext</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span><span class="p">(</span><span class="n">n</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">textsplit</span><span class="p">)):</span>
<span class="n">oldcurtextsplit</span> <span class="o">=</span> <span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">print</span><span class="p">(</span><span class="n">winytext</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"Какой-то криповый сегодня вечерок, не правда ли, друзья?"</span>
<span class="n">textcutter</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
</pre></div> <br/>В теории, он должен разделять текст на строки, чтобы они по длине не превышали winxdefault (в крайнем случае, winxdefault будет увеличиваться (но с этим я разберусь)) и возвращать несколько значений, в зависимости от заданных параметров (с этим я разберусь)<br/>Проблема в том, что python выдает мне ошибки по диапазону индексов (он больше возможного):<br/> <br/><div class="code"><pre> <span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
<span class="n">File</span> <span class="s2">"C:\Users\danil\Desktop\Python</span><span class="se">\t</span><span class="s2">est.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">18</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="n">textcutter</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
<span class="n">File</span> <span class="s2">"C:\Users\danil\Desktop\Python</span><span class="se">\t</span><span class="s2">est.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">9</span><span class="p">,</span> <span class="ow">in</span> <span class="n">textcutter</span>
<span class="n">curtextsplit</span><span class="p">[</span><span class="n">winytext</span><span class="p">]</span> <span class="o">=</span> <span class="n">textsplit</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="ne">IndexError</span><span class="p">:</span> <span class="nb">list</span> <span class="n">assignment</span> <span class="n">index</span> <span class="n">out</span> <span class="n">of</span> <span class="nb">range</span>
</pre></div><br/>Как избавиться от этой ошибки?