<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[PMPD]]></title><description><![CDATA[Mestrado Profissional em Direito da UnB]]></description><link>https://code.arcos.org.br/</link><image><url>https://code.arcos.org.br/favicon.png</url><title>PMPD</title><link>https://code.arcos.org.br/</link></image><generator>Ghost 5.82</generator><lastBuildDate>Tue, 07 Apr 2026 10:28:39 GMT</lastBuildDate><atom:link href="https://code.arcos.org.br/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Alexandre Araújo Costa]]></title><description><![CDATA[<p>Lattes</p><p>Orcid</p>]]></description><link>https://code.arcos.org.br/alexandre-araujo-costa-2/</link><guid isPermaLink="false">660b2775e43ed2085cf7191d</guid><category><![CDATA[Docente]]></category><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Mon, 01 Apr 2024 21:30:59 GMT</pubDate><media:content url="https://code.arcos.org.br/content/images/2024/04/foto-perfil--1--1.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://code.arcos.org.br/content/images/2024/04/foto-perfil--1--1.JPG" alt="Alexandre Ara&#xFA;jo Costa"><p>Lattes</p><p>Orcid</p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>This is code, a brand new site by Henrique Costa that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></description><link>https://code.arcos.org.br/coming-soon/</link><guid isPermaLink="false">64480c033693df2d675afacc</guid><category><![CDATA[News]]></category><dc:creator><![CDATA[Henrique Costa]]></dc:creator><pubDate>Tue, 25 Apr 2023 17:21:07 GMT</pubDate><media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://static.ghost.org/v4.0.0/images/feature-image.jpg" alt="Coming soon"><p>This is code, a brand new site by Henrique Costa that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></content:encoded></item><item><title><![CDATA[Exercícios do Módulo 5]]></title><description><![CDATA[<h2 id="problema-1-extraindo-para-uma-lista-informa-es-de-uma-string-usando-a-fun-o-dsd-extrair">Problema 1 - Extraindo para uma lista informa&#xE7;&#xF5;es de uma string usando a fun&#xE7;&#xE3;o dsd.extrair</h2><p>Copie o trecho seguinte e cole no seu console, que &#xE9; o mesmo utilizado nas atividades do M&#xF3;dulo 3. Ele define para a vari&#xE1;vel</p>]]></description><link>https://code.arcos.org.br/exercicios-modulo-5/</link><guid isPermaLink="false">644a852ad9432f055b15cc8b</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Fri, 19 Mar 2021 17:04:22 GMT</pubDate><content:encoded><![CDATA[<h2 id="problema-1-extraindo-para-uma-lista-informa-es-de-uma-string-usando-a-fun-o-dsd-extrair">Problema 1 - Extraindo para uma lista informa&#xE7;&#xF5;es de uma string usando a fun&#xE7;&#xE3;o dsd.extrair</h2><p>Copie o trecho seguinte e cole no seu console, que &#xE9; o mesmo utilizado nas atividades do M&#xF3;dulo 3. Ele define para a vari&#xE1;vel html o conte&#xFA;do de um trecho da string que o seu computador recebe quando clica no link da <a href="http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000&amp;ref=code.arcos.org.br">ADI 6000</a> (e que aparece quando voc&#xEA; entra nesse link e clica Ctrl-U). </p><p>No m&#xF3;dulo 2, voc&#xEA; usou a l&#xF3;gica do marcador de inicio e marcador de fim para extrair dessa string, com comandos do console, &#xA0;o nome do relator. No m&#xF3;dulo 3, voc&#xEA; faz um programa capaz de gerar uma lista com 3 informa&#xE7;&#xF5;es:</p><ul><li>N&#xFA;mero do Processo</li><li>Relator</li><li>Requerente</li></ul><p>O desafio agora &#xE9; adaptar o programa para que ele realize essa extra&#xE7;&#xE3;o usando a fun&#xE7;&#xE3;o dsd.extrair(), o que implica a necessidade de importar o m&#xF3;dulo dsd.py para o seu programa, o que torna poss&#xED;vel o uso direto da fun&#xE7;&#xE3;o.</p><p>No m&#xF3;dulo dsd, a fun&#xE7;&#xE3;o extrair corresponde ao c&#xF3;digo abaixo, que desenvolve a l&#xF3;gica que trabalhamos antes e a complementa de duas formas:</p><ol><li>Se n&#xE3;o houver no texto o marcador de in&#xED;cio, a fun&#xE7;&#xE3;o retorna &apos;NA&apos; (<em>Not Available </em>ou <em>No Answer</em>, que o modo padr&#xE3;o para indicar que um campo n&#xE3;o tem valores v&#xE1;lidos atribu&#xED;dos);</li><li>Se n&#xE3;o houver no texto o marcador de fim, a fun&#xE7;&#xE3;o retorna a string desde o ponto do marcador de in&#xED;cio, at&#xE9; o final.</li></ol><pre><code>def extrair(fonte, MarcadorInicio, MarcadorFim):

    if MarcadorInicio not in fonte:
        return &apos;NA&apos;
        
    else:
        inicio = fonte.find(MarcadorInicio) + len(MarcadorInicio)
        fim = fonte.find(MarcadorFim, inicio)
        
        if  MarcadorFim == &apos;&apos; or fim == -1:
            return fonte[inicio:]
            
        elif MarcadorInicio == &apos;&apos;:
            return fonte[:fim]
            
        else:
            return fonte[inicio:fim]</code></pre><pre><code class="language-Python">html = &apos;&apos;&apos;&lt;/div&gt;
	&lt;div id=&quot;divImpressao&quot;&gt;&lt;div&gt;&lt;h3&gt;&lt;strong&gt;A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE (Med. Liminar) - 6000&lt;/strong&gt;&lt;/h3&gt;&lt;table width=&quot;99%&quot; cellspacing=&quot;5&quot;&gt;&lt;tr&gt;&lt;td&gt;Origem:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;RIO DE JANEIRO&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Entrada no STF:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Relator:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;MINISTRO ALEXANDRE DE MORAES&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Distribu&#xED;do:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Partes:&lt;/td&gt;&lt;td colspan=&quot;3&quot;&gt;Requerente: &lt;strong&gt;GOVERNADOR DO ESTADO DO RIO DE JANEIRO
(CF 103, 00V)&lt;/strong&gt;&lt;br /&gt;Requerido :&lt;strong&gt;ASSEMBLEIA LEGISLATIVA DO ESTADO DO RIO DE JANEIRO 
&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Dispositivo Legal Questionado&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Leis n&#xB0; 8071, de 27 de agosto de 2018 e n&#xB0; 8072, de 27 de agosto  de  2018, 
ambos do Estado do Rio de Janeiro. 

     Lei n&#xB0; 8071, de 27 de agosto de 2018

                                       Disp&#xF5;e  sobre  a  composi&#xE7;&#xE3;o  das  perdas 
                                       salariais dos servidores do Quadro  &#xDA;nico 
                                       de Pessoal do Poder Judici&#xE1;rio do  Estado 
                                       do Rio de Janeiro.

     Art. 001&#xBA; - Ficam reajustadas em 5% (cinco por cento), a contar  de  01  de 
setembro de  2018,  as  remunera&#xE7;&#xF5;es  dos  servidores  ocupantes  de  cargo   de 
provimento efetivo, de cargo de provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es  gratificadas  e 
fun&#xE7;&#xF5;es comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio do  Estado 
do Rio de Janeiro. 

     Art. 002&#xBA; - As  despesas  decorrentes  desta  Lei  ser&#xE3;o  atendidas   pelas 
dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder Executivo  autorizado  a  abrir 
cr&#xE9;ditos suplementares. 

     Art. 003&#xBA; - Esta Lei entrar&#xE1; em vigor na data de sua publica&#xE7;&#xE3;o.

     Lei n&#xB0; 8072, de 27 de agosto de 2018

                                        Disp&#xF5;e sobre  a recomposi&#xE7;&#xE3;o  de  perdas 
                                        remunerat&#xF3;rias dos seridores  do  Quadro 
                                        Permanente  de  Servi&#xE7;os  Auxiliares  do 
                                        Minist&#xE9;rio P&#xFA;blico e Defensoria  P&#xFA;blica 
                                        do Estado do Rio de Janeiro.

     Art. 001&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores  do  Quadro  Permanente  dos  Servi&#xE7;os 
Auxiliares do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.

     Art. 002&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores do Quadro  Permanente  de  Pessoal  de 
Apoio Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.

     Art. 003&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 001&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas ao Minist&#xE9;rio P&#xFA;blico do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 004&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 002&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas a Defensoria P&#xFA;blica  do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 005&#xBA; - Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Fundamenta&#xE7;&#xE3;o Constitucional&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
- Art. 002&#xB0;
- Art. 003&#xB0;, 0IV
- Art. 005&#xB0;, &quot;caput&quot;
- Art. 037, &quot;caput&quot;
- Art. 084, 0II
- Art. 165
- Art. 169&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Resultado da Liminar&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Decis&#xE3;o Monocr&#xE1;tica - Liminar Deferida&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Resultado Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Procedente&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     O Tribunal, por unanimidade, confirmou a medida cautelar e julgou procedente o pedido formulado na a&#xE7;&#xE3;o direta para declarar a inconstitucionalidade das Leis n&#xBA; 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro, nos termos do voto do Relator. 
     - Plen&#xE1;rio, Sess&#xE3;o Virtual de 20.9.2019 a 26.9.2019.
     - Ac&#xF3;rd&#xE3;o, DJ 15.10.2019.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Data de Julgamento Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Plen&#xE1;rio&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Data de Publica&#xE7;&#xE3;o da Decis&#xE3;o Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ac&#xF3;rd&#xE3;o, DJ 15.10.2019&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Monocr&#xE1;tica da Liminar&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de A&#xE7;&#xE3;o Direta de Inconstitucionalidade, com pedido de
medida cautelar, ajuizada pelo Governador do Estado do Rio de Janeiro,
em face das Leis 8.071/2018 e 8.072/2018 daquele Estado, que conferem,
respectivamente e a contar de 1&#xBA; de setembro de 2018, reajuste de 5%
(cinco por cento) na remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a
do Estado do Rio de Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do
Estado do Rio de Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro. Eis o teor das leis impugnadas:
LEI 8.071, de 27 de agosto de 2018.
Art. 1&#xBA; Ficam reajustadas em 5% (cinco por cento), a contar
de 1&#xBA; de setembro de 2018, as remunera&#xE7;&#xF5;es dos servidores
ocupantes de cargo de provimento efetivo, de cargo de
provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es gratificadas e fun&#xE7;&#xF5;es
comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro.
Art. 2&#xBA; As despesas decorrentes desta Lei ser&#xE3;o atendidas
pelas dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder
Executivo autorizado a abrir cr&#xE9;ditos suplementares.
Art. 3&#xBA; Esta Lei entrar&#xE1; em vigor na data de sua
publica&#xE7;&#xE3;o.
LEI 8.072, de 27 de agosto de 2018.
Art. 1&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente dos Servi&#xE7;os Auxiliares do
Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.
Art. 2&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente de Pessoal de Apoio
Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro.
Art. 3&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 1&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas ao Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 4&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 2&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas a Defensoria P&#xFA;blica do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 5&#xBA; Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
Inicialmente, o Autor reporta-se &#xE0; situa&#xE7;&#xE3;o de pen&#xFA;ria das finan&#xE7;as
do Estado do Rio de Janeiro, notadamente a partir do ano de 2016, a qual
teria culminado, com respaldo no art. 65 da Lei de Responsabilidade
Fiscal, no reconhecimento do estado de calamidade p&#xFA;blica no &#xE2;mbito da
administra&#xE7;&#xE3;o financeira do Estado, e em posterior ades&#xE3;o do Estado ao
Regime de Recupera&#xE7;&#xE3;o Fiscal &#x2013; RRF, institu&#xED;do pela Lei Complementar
159/2017.
Observa o Autor que, nos termos do art. 8&#xBA; da Lei Complementar
citada, &#xE9; vedada, durante a vig&#xEA;ncia do RRF, a concess&#xE3;o de reajuste a
membros dos Poderes ou de &#xF3;rg&#xE3;os, e a servidores e empregados
p&#xFA;blicos, entre outros.
Informa que, a despeito desse grave contexto f&#xE1;tico e normativo, a
Assembleia Legislativa derrubou o veto aposto pelo Chefe do Poder
Executivo aos projetos de lei dos quais resultaram as normas
impugnadas, concedendo reajuste a servidores do Tribunal de Justi&#xE7;a, do
Minist&#xE9;rio P&#xFA;blico e da Defensoria P&#xFA;blica do Estado do Rio de Janeiro.
Salienta que, durante o processo legislativo das normas em foco, o
Conselho de Supervis&#xE3;o Fiscal do Minist&#xE9;rio da Fazenda alertou que os
referidos projetos de lei, caso aprovados e concretizados, seriam causas
para exclus&#xE3;o do Estado do RRF, o que, segundo a Secretaria de Estado
de Fazenda do Estado do Rio de Janeiro, implicaria a imediata obriga&#xE7;&#xE3;o
de pagamento, pelo Estado &#xE0; Uni&#xE3;o Federal, de mais de R$ 27 bilh&#xF5;es de
reais, al&#xE9;m dos encargos de inadimpl&#xEA;ncia.
Posto esse cen&#xE1;rio, argumenta o Autor que as normas atacadas
implicam viola&#xE7;&#xE3;o ao princ&#xED;pio da independ&#xEA;ncia e harmonia dos
Poderes, pois &#x201C;(i) colocam o Poder Judici&#xE1;rio, o Minist&#xE9;rio P&#xFA;blico e a
Defensoria P&#xFA;blica como inst&#xE2;ncias hegem&#xF4;nicas, acima do modelo de
neutralidade e igualdade institucional tra&#xE7;ado pela Constitui&#xE7;&#xE3;o Federal; e (ii)
aniquilam o Poder Executivo e a prerrogativa de seu Chefe de dire&#xE7;&#xE3;o geral da
Administra&#xE7;&#xE3;o P&#xFA;blica, consistente, no caso dos autos, na ades&#xE3;o do Estado ao
RRF e na sua vital manuten&#xE7;&#xE3;o&#x201D;.
Afirma, ademais, que as leis em quest&#xE3;o violam os princ&#xED;pios da
moralidade, da proporcionalidade e da razoabilidade, porque
&#x201C;concretizam interesses pecuni&#xE1;rios e pr&#xF3;prios de um grupo de servidores do
Tribunal de Justi&#xE7;a, do Minist&#xE9;rio P&#xFA;blico e da Defensoria &#xE0;s custas do retorno
do Estado do Rio de Janeiro ao caos financeiro e social&#x201D;, havendo, com a
potencial exclus&#xE3;o do Estado do RRF, risco de &#x201C;imediata interrup&#xE7;&#xE3;o da
presta&#xE7;&#xE3;o dos mais b&#xE1;sicos servi&#xE7;os p&#xFA;blicos&#x201D;.
Alega, tamb&#xE9;m, haver viola&#xE7;&#xE3;o ao princ&#xED;pio da isonomia, em raz&#xE3;o
de as leis hostilizadas conferirem tratamento privilegiado a determinado
grupo de servidores, em detrimento dos demais, e da pr&#xF3;pria popula&#xE7;&#xE3;o
do Estado do Rio de Janeiro, que seria extremamente prejudicada com a
exclus&#xE3;o do Estado do RRF.
Aduz existir afronta aos princ&#xED;pios do sistema financeiro e
or&#xE7;ament&#xE1;rio, na medida em que as leis hostilizadas conduzem &#x201C;&#xE0;
exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal&#x201D;, bem como &#x201C;representam
grave retrocesso e colocam-se na extrema contram&#xE3;o do dever constitucional de
gest&#xE3;o respons&#xE1;vel&#x201D;.
Argui, por fim, que a Lei Fluminense 8.072/2018 padeceria de v&#xED;cio
de inconstitucionalidade formal, no que tange &#xE0; Defensoria P&#xFA;blica, por
inobserv&#xE2;ncia dos arts. 134, &#xA7; 2&#xBA; e 99, &#xA7; 2&#xBA;, da Constitui&#xE7;&#xE3;o Federal, de
aplica&#xE7;&#xE3;o obrigat&#xF3;ria aos Estados por for&#xE7;a do princ&#xED;pio da simetria, dos
quais se extrai que compete privativamente ao Defensor P&#xFA;blico-Geral a
iniciativa de lei que trate da remunera&#xE7;&#xE3;o de seus servidores.
Com esses fundamentos, e vislumbrando haver periculum in mora na
potencial exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal, j&#xE1;
sinalizada pelo Conselho de Supervis&#xE3;o do Minist&#xE9;rio da Fazenda, o
Autor formula pedido cautelar para que seja determinada a imediata
suspens&#xE3;o dos efeitos das leis impugnadas.
No m&#xE9;rito, requer a confirma&#xE7;&#xE3;o da medida cautelar, com a
declara&#xE7;&#xE3;o de inconstitucionalidade das normas hostilizadas.
A Associa&#xE7;&#xE3;o dos Servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio
de Janeiro, ASSEMPERJ, e o Sindicato dos Servidores do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro, SINDIJUSTI&#xC7;A-RJ, manifestaram-se nos
autos requerendo a admiss&#xE3;o de seu ingresso como amici curiae (pe&#xE7;as 11
e 15, respectivamente, dos autos eletr&#xF4;nicos). Em suas raz&#xF5;es, sustentam a
validade das normas questionadas e a impossibilidade de concess&#xE3;o de
medida cautelar.
&#xC9; o relat&#xF3;rio.
A concess&#xE3;o de medida cautelar nas a&#xE7;&#xF5;es de jurisdi&#xE7;&#xE3;o
constitucional concentrada exige a comprova&#xE7;&#xE3;o de perigo de les&#xE3;o
irrepar&#xE1;vel (IVES GANDRA MARTINS, Repert&#xF3;rio IOB de
jurisprud&#xEA;ncia, n 8/95, p. 150/154, abr. 1995), uma vez que se trata de
exce&#xE7;&#xE3;o ao princ&#xED;pio segundo o qual os atos normativos s&#xE3;o
presumidamente constitucionais (ADI 1.155-3/DF, Pleno, Rel. Min.
MARCO AUR&#xC9;LIO, DJ de 18/5/2001). Conforme ensinamento de PAULO
BROSSARD, segundo axioma incontroverso, a lei se presume
constitucional, porque elaborada pelo Poder Legislativo e sancionada
pelo Poder Executivo, isto &#xE9;, por dois dos tr&#xEA;s poderes, situados no
mesmo plano que o Judici&#xE1;rio (A constitui&#xE7;&#xE3;o e as leis a ela anteriores.
Arquivo Minist&#xE9;rio Justi&#xE7;a. Bras&#xED;lia, 45 (180), jul./dez. 1992. p. 139).
A an&#xE1;lise dos requisitos do fumus boni iuris e periculum in mora para
sua concess&#xE3;o admite maior discricionariedade por parte do SUPREMO
TRIBUNAL FEDERAL, com a realiza&#xE7;&#xE3;o de verdadeiro ju&#xED;zo de
conveni&#xEA;ncia pol&#xED;tica da suspens&#xE3;o da efic&#xE1;cia (ADI 3.401 MC, Rel. Min.
GILMAR MENDES, Pleno, decis&#xE3;o: 3/2/2005), pelo qual dever&#xE1; ser
analisada a conveni&#xEA;ncia da suspens&#xE3;o cautelar da lei impugnada (ADI
425 MC, Rel. Min. PAULO BROSSARD, Pleno, decis&#xE3;o: 4/4/1991; ADI 467
MC, Rel. Min. OCT&#xC1;VIO GALLOTTI, Pleno, decis&#xE3;o: 3/4/1991),
permitindo, dessa forma, uma maior subjetividade na an&#xE1;lise da
relev&#xE2;ncia do tema, bem assim em ju&#xED;zo de conveni&#xEA;ncia, ditado pela
gravidade que envolve a discuss&#xE3;o (ADI 490 MC, Rel. Min. CELSO DE
MELLO, Pleno, decis&#xE3;o: 6/12/1990; ADI 508 MC, Rel. Min. OCT&#xC1;VIO
GALLOTTI, Pleno, decis&#xE3;o: 16/4/1991), bem como da plausibilidade
inequ&#xED;voca e dos evidentes riscos sociais ou individuais, de v&#xE1;rias ordens,
que a execu&#xE7;&#xE3;o provis&#xF3;ria da lei questionada gera imediatamente (ADI
474 MC, Rel. Min. SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 4/4/1991), ou,
ainda, das prov&#xE1;veis repercuss&#xF5;es pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado (ADI 718 MC, Rel. Min. CELSO DE MELLO, Pleno, decis&#xE3;o:
3/8/1992), da relev&#xE2;ncia da quest&#xE3;o constitucional (ADI 804 MC, Rel. Min.
SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 27/11/1992) e da relev&#xE2;ncia da
fundamenta&#xE7;&#xE3;o da argui&#xE7;&#xE3;o de inconstitucionalidade, al&#xE9;m da ocorr&#xEA;ncia
de periculum in mora, tais os entraves &#xE0; atividade econ&#xF4;mica (ADI 173 MC,
Rel. Min. MOREIRA ALVES, Pleno, decis&#xE3;o: 9/3/1990), social ou pol&#xED;tico.
Na presente hip&#xF3;tese, est&#xE3;o presentes os necess&#xE1;rios fumus boni juris
e periculum in mora para a concess&#xE3;o da medida liminar.
Sem preju&#xED;zo da posterior aprecia&#xE7;&#xE3;o das teses contidas na peti&#xE7;&#xE3;o
inicial, a respeito da alegada afronta aos arts. 2&#xBA;, 3&#xBA;, IV, 5&#xBA;, caput, 37, caput,
84, II, 134, &#xA7; 2&#xBA;, c/c art. 99, e 165 a 169, todos da CF, entendo manifesto, por
fundamento diverso, o fumus boni iuris.
Os grandes desafios da Democracia representativa s&#xE3;o o
fortalecimento e a plena efetiva&#xE7;&#xE3;o dos mecanismos de controle
impeditivos da ocorr&#xEA;ncia de abuso de poder pol&#xED;tico ou econ&#xF4;mico nas
elei&#xE7;&#xF5;es, de maneira a evitar o surgimento de condi&#xE7;&#xF5;es que possam
desequilibrar seu resultado, maculando a legitima vontade popular.
A norma impugnada concedeu aos servidores do Poder Judici&#xE1;rio,
Minist&#xE9;rio P&#xFA;blico e Defensoria P&#xFA;blica do Estado do Rio de Janeiro
vantagem remunerat&#xF3;ria consistente no reajuste de 5% (cinco por cento)
sobre seus vencimentos, com efic&#xE1;cia imediata j&#xE1; para o pr&#xF3;ximo m&#xEA;s de
setembro de 2018; ou seja, pouco mais de 30 dias das elei&#xE7;&#xF5;es gerais.
A concess&#xE3;o e implanta&#xE7;&#xE3;o de aumento salarial a categorias
espec&#xED;ficas &#xE0;s v&#xE9;speras do pleito eleitoral, portanto, poder&#xE1; configurar
desvio de finalidade no exerc&#xED;cio de poder pol&#xED;tico legiferante, com reais
possibilidades de influ&#xEA;ncia no pleito eleitoral e perigoso ferimento a
liberdade do voto (CF, art. 60, IV, b); ao pluralismo pol&#xED;tico (CF, art. 1&#xBA;, V e
par&#xE1;grafo &#xFA;nico), ao princ&#xED;pio da igualdade (CF, art. 5&#xBA;, caput) e a
moralidade p&#xFA;blica (CF, art. 37, caput).
Observe-se, que em respeito aos princ&#xED;pios constitucionais que
regem o exerc&#xED;cio dos direitos pol&#xED;ticos, a norma editada no curso do
per&#xED;odo de elei&#xE7;&#xF5;es, entre as conven&#xE7;&#xF5;es partid&#xE1;rias e a posse dos eleitos
no pleito de outubro pr&#xF3;ximo, &#xE9; expressamente vedada pela legisla&#xE7;&#xE3;o
eleitoral, que veda a concess&#xE3;o de reajustes dessa natureza, conforme o
art. 73, VIII, da Lei 9.504/1997:
Art. 73. S&#xE3;o proibidas aos agentes p&#xFA;blicos, servidores ou n&#xE3;o, as
seguintes condutas tendentes a afetar a igualdade de oportunidades entre
candidatos nos pleitos eleitorais:
(...)
VIII - fazer, na circunscri&#xE7;&#xE3;o do pleito, revis&#xE3;o geral da remunera&#xE7;&#xE3;o
dos servidores p&#xFA;blicos que exceda a recomposi&#xE7;&#xE3;o da perda de seu
poder aquisitivo ao longo do ano da elei&#xE7;&#xE3;o, a partir do in&#xED;cio do prazo
estabelecido no art. 7&#xBA; desta Lei e at&#xE9; a posse dos eleitos.
O percentual concedido se amolda a hip&#xF3;tese do inciso VIII, do
referido art. 73, uma vez que &#xE9; superior a infla&#xE7;&#xE3;o apurada no mesmo
per&#xED;odo pelos &#xED;ndices oficiais de pesquisa (IPCA/IBGE), que, neste ano de
2018, registra o patamar de 2,94%; pois a legisla&#xE7;&#xE3;o aprovada prev&#xEA; um
benef&#xED;cio setorial, n&#xE3;o se qualificando como revis&#xE3;o geral da remunera&#xE7;&#xE3;o
(art. 37, X, da CF), pois n&#xE3;o destinada a todos os servidores da
Administra&#xE7;&#xE3;o P&#xFA;blica estadual.
&#xC9; fato not&#xF3;rio o quadro narrado na peti&#xE7;&#xE3;o inicial a respeito do
estado atual das finan&#xE7;as p&#xFA;blicas do Estado do Rio de Janeiro, inclusive
no tocante &#xE0; potencial frustra&#xE7;&#xE3;o de pagamentos a servidores p&#xFA;blicos em
passado recente; que bem demonstra que aprova&#xE7;&#xF5;es legislativas
concessivas de aumentos salariais t&#xEA;m, no momento presente, forte apelo
junto ao eleitorado fluminense e, naturalmente, mobilizam todo tipo de
interesse pol&#xED;tico, social e corporativo, com perigosos reflexos na
normalidade e legitimidade das elei&#xE7;&#xF5;es em curso naquela unidade
federativa.
Ressalte-se, ainda, que o texto constitucional prev&#xEA; o abuso do poder
pol&#xED;tico nas elei&#xE7;&#xF5;es como conduta merecedora das mais graves san&#xE7;&#xF5;es
pol&#xED;ticas, c&#xED;veis e administrativas, como revelado pela art. 14, &#xA7; 9&#xBA;, da CF,
que determina ao legislador complementar a institui&#xE7;&#xE3;o de hip&#xF3;teses de
inelegibilidades voltadas a proteger a &#x201C;normalidade e legitimidade das
elei&#xE7;&#xF5;es contra a influ&#xEA;ncia do poder econ&#xF4;mico ou o abuso do exerc&#xED;cio de fun&#xE7;&#xE3;o,
cargo ou emprego na administra&#xE7;&#xE3;o direta ou indireta&#x201D;; bem como, o
implemento do referido reajuste salarial, em franca viola&#xE7;&#xE3;o &#xE0; legisla&#xE7;&#xE3;o
eleitoral, nos termos do &#xA7;4&#xBA; do art. 37 do texto constitucional, sujeita os
agentes p&#xFA;blicos respons&#xE1;veis por sua implementa&#xE7;&#xE3;o (Governador e
demais chefes de Poderes e &#xF3;rg&#xE3;os aut&#xF4;nomos), por expressa indica&#xE7;&#xE3;o
do art. 73, &#xA7; 7&#xBA;, da Lei 9.504/1997, &#xE0;s san&#xE7;&#xF5;es da Lei de Improbidade
Administrativa, na forma do art. 10, incisos IX e XI, e do art. 11, caput e
inciso I, da Lei 8.429/1992.
O perigo da demora est&#xE1; caracterizado pela proximidade do
processo eleitoral, que recomenda a atua&#xE7;&#xE3;o imediata do SUPREMO
TRIBUNAL FEDERAL, a fim de prevenir a consuma&#xE7;&#xE3;o de condutas que
t&#xEA;m o potencial de desestabilizar o curso regular das elei&#xE7;&#xF5;es; uma vez
que, as leis em quest&#xE3;o foram publicadas no Di&#xE1;rio Oficial do Estado do
Rio de Janeiro em 28/8/2018, ter&#xE7;a-feira, impugnadas perante o
SUPREMO TRIBUNAL FEDERAL em 30/8/2018, quinta-feira; com
previs&#xE3;o de efeitos imediatos, a contar de 1&#xBA;/9/2018, s&#xE1;bado pr&#xF3;ximo.
Consequentemente, as v&#xE9;speras das elei&#xE7;&#xF5;es, caso mantida a efic&#xE1;cia das
leis impugnadas, a folha de pagamento dos &#xF3;rg&#xE3;os p&#xFA;blicos afetados ser&#xE1;
impactada pelo benef&#xED;cio concedido a poucos dias do pleito eleitoral.
Diante de todo o exposto, em face da gravidade das quest&#xF5;es e as
poss&#xED;veis repercuss&#xF5;es eleitorais pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado, com fundamento no art. 10, &#xA7; 3&#xBA;, da Lei 9.868/1999 e no art.
21, V, do Regimento Interno do Supremo Tribunal Federal, CONCEDO A
MEDIDA CAUTELAR pleiteada, ad referendum do Plen&#xE1;rio desta
SUPREMA CORTE, para suspender os efeitos das Leis 8.071/2018 e
8.072/2018 do Estado do Rio de Janeiro, que conferem, respectivamente e
a contar de 1&#xBA; de setembro de 2018, reajuste de 5% (cinco por cento) na
remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a do Estado do Rio de
Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de
Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.
Comunique-se ao Presidente da Assembleia Legislativa, ao
Governador, ao Presidente do Tribunal de Justi&#xE7;a, ao Procurador-Geral de
Justi&#xE7;a e ao Defensor P&#xFA;blico-Geral, todos do Estado do Rio de Janeiro,
para ci&#xEA;ncia e cumprimento desta decis&#xE3;o, solicitando-lhes informa&#xE7;&#xF5;es,
no prazo m&#xE1;ximo de 10 (dez) dias. Ap&#xF3;s esse prazo, d&#xEA;-se vista ao
Advogado-Geral da Uni&#xE3;o e ao Procurador-Geral da Rep&#xFA;blica,
sucessivamente, no prazo de 5 (cinco) dias, para que cada qual se
manifeste na forma do art. 12 da Lei 9.868/1999.
Por fim, considerando que a ASSEMPERJ e o SINDJUSTI&#xC7;A-RJ
preenchem os requisitos legais, nos termos do art. 7&#xBA;, &#xA7; 2&#xBA;, da Lei
9.868/1999, DEFIRO OS PEDIDOS DE INGRESSO COMO AMICI
CURIAE na presente A&#xE7;&#xE3;o Direta de Inconstitucionalidade.
Nos termos do art. 21, X, do Regimento Interno do Supremo
Tribunal Federal, pe&#xE7;o dia para julgamento, pelo Plen&#xE1;rio, do referendo
da medida ora concedida.
Publique-se. Intimem-se.
Bras&#xED;lia, 31 de agosto de 2018.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Incidentes&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de Embargos de Declara&#xE7;&#xE3;o opostos pela Associa&#xE7;&#xE3;o dos
Servidores do Minist&#xE9;rio P&#xFA;blico do Rio de Janeiro, ASSEMPERJ (Peti&#xE7;&#xE3;o
STF 74.969/2019, pe&#xE7;a 85 dos autos), e pelo Sindicato dos Servidores do
Poder Judici&#xE1;rio do Rio de Janeiro, SINDJUSTI&#xC7;A/RJ (Peti&#xE7;&#xE3;o STF
75.230/2019, pe&#xE7;a 87), ambas na qualidade de amicus curiae, em face de
decis&#xE3;o deste Relator (decis&#xE3;o de 29/10/2019, pe&#xE7;a 83) que negou
seguimento aos Embargos de Declara&#xE7;&#xE3;o opostos contra o julgamento do
m&#xE9;rito da presente A&#xE7;&#xE3;o Direta pelo Plen&#xE1;rio da CORTE.
Aludem ao artigo 138, &#xA7; 1&#xBA;, do novo C&#xF3;digo de Processo Civil para
defender o cabimento dos primeiros aclarat&#xF3;rios, cujos v&#xED;cios ali alegados
s&#xE3;o de um modo geral reiterados nesse novo recurso.
Pleiteiam o provimento dos Segundos Embargos para que os
Primeiros &#x201C;sejam submetidos a julgamento do Plen&#xE1;rio do Supremo Tribunal
Federal&#x201D;, possibilitando a reforma do ac&#xF3;rd&#xE3;o embargado, &#x201C;no sentido de
conhecer a constitucionalidade das Leis 8.071/18 e 8.072/18 do Estado do Rio de
Janeiro&#x201D;.
&#xC9; o relat&#xF3;rio.
Pela decis&#xE3;o de 29/10/2019 foi negado seguimento aos primeiros
Embargos Declarat&#xF3;rios com fundamento na aus&#xEA;ncia de legitimidade
recursal dos peticionantes.
Os Segundos Embargos de Declara&#xE7;&#xE3;o, opostos em 28 e 29 de
novembro do corrente ano, encontram-se prejudicados, pois n&#xE3;o h&#xE1; mais
qualquer possibilidade de revers&#xE3;o do ac&#xF3;rd&#xE3;o Embargado.
Em 29/10/2019, neguei seguimento aos Primeiros Embargos de
Declara&#xE7;&#xE3;o interpostos pelos embargantes, os quais veiculavam
basicamente as mesmas argumenta&#xE7;&#xF5;es apresentadas nessa
oportunidade. Na ocasi&#xE3;o, considerando a n&#xE3;o interposi&#xE7;&#xE3;o de recurso
por parte dos sujeitos com legitimidade para tanto e o decurso do prazo
recursal, determinei &#xE0; Secretaria que certificasse imediatamente o tr&#xE2;nsito
em julgado, o que foi feito (pe&#xE7;a 84 dos autos eletr&#xF4;nicos).
Como se sabe, os Segundos Embargos de declara&#xE7;&#xE3;o devem ater-se a
v&#xED;cios unicamente do julgado anterior, que examinou os Primeiros. No
caso, a inadmiss&#xE3;o dos Primeiros Embargos de Declara&#xE7;&#xE3;o formalizados
pelos amici curiae est&#xE1; amparada em recente e firme jurisprud&#xEA;ncia do
SUPREMO TRIBUNAL FEDERAL, moldada j&#xE1; ap&#xF3;s o advento do Novo
C&#xF3;digo de Processo Civil.
Portanto, a decis&#xE3;o embargada n&#xE3;o apresenta nenhum dos v&#xED;cios
pass&#xED;veis de corre&#xE7;&#xE3;o por meio de embargos de declara&#xE7;&#xE3;o, a saber,
omiss&#xE3;o, contradi&#xE7;&#xE3;o, obscuridade ou erro material. Evidencia-se o
prop&#xF3;sito infringente, para o qual n&#xE3;o est&#xE1; vocacionado o presente
recurso.
Por todo o exposto, ausentes os v&#xED;cios dos incisos do art. 1.022 do
C&#xF3;digo de Processo Civil, REJEITO OS EMBARGOS DE DECLARA&#xC7;&#xC3;O.
(peti&#xE7;&#xE3;o STF 74.969/2019 e peti&#xE7;&#xE3;o STF 75.230/2019).
Ficam os peticion&#xE1;rios advertidos de que a reitera&#xE7;&#xE3;o de
expedientes descabidos importar&#xE1; a aplica&#xE7;&#xE3;o das san&#xE7;&#xF5;es cab&#xED;veis.
Arquivem-se os autos imediatamente.
Ap&#xF3;s, publique-se.
Bras&#xED;lia, 18 de fevereiro de 2020.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Ementa&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE.
CONSTITUCIONAL. LEIS 8.071/2018 E 8.072/2018 DO ESTADO DO RIO
DE JANEIRO. CONCESS&#xC3;O DE BENEF&#xCD;CIO REMUNERAT&#xD3;RIO PARA
RECOMPOSI&#xC7;&#xC3;O DO PODER AQUISITIVO DAS REMUNERA&#xC7;&#xD5;ES
DOS SERVIDORES DO TRIBUNAL DE JUSTI&#xC7;A, DO MINIST&#xC9;RIO
P&#xDA;BLICO E DA DEFENSORIA P&#xDA;BLICA. ART. 37, X, DA
CONSTITUI&#xC7;&#xC3;O FEDERAL. MAT&#xC9;RIA RESERVADA &#xC0; INICIATIVA
PRIVATIVA DO CHEFE DO PODER EXECUTIVO. PRECEDENTES.
MEDIDA CAUTELAR CONFIRMADA. A&#xC7;&#xC3;O JULGADA
PROCEDENTE.
1. A concess&#xE3;o de benef&#xED;cio remunerat&#xF3;rio fundada no art. 37, X, da
CF, para recomposi&#xE7;&#xE3;o do poder aquisitivo das remunera&#xE7;&#xF5;es de
servidores p&#xFA;blicos, &#xE9; mat&#xE9;ria reservada &#xE0; iniciativa privativa do chefe do
Poder Executivo, que a exerce em benef&#xED;cio dos servidores de todos os
Poderes e &#xF3;rg&#xE3;os da Administra&#xE7;&#xE3;o P&#xFA;blica respectiva.
2. As Leis 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro t&#xEA;m
n&#xED;tidos contornos de revis&#xE3;o geral dos vencimentos devidos aos servidores do Poder Judici&#xE1;rio, do Minist&#xE9;rio P&#xFA;blico e da Defensoria
P&#xFA;blica, uma vez que o incremento salarial &#xE9; conferido linearmente a
todos, independentemente da carreira, e de forma global, incidente n&#xE3;o
apenas sobre parcelas salariais espec&#xED;ficas, mas sobre o montante
remunerat&#xF3;rio total, inclusive cargos em comiss&#xE3;o e fun&#xE7;&#xF5;es gratificadas.
Inconstitucionalidade por v&#xED;cio de iniciativa do Chefe do Executivo para
deflagrar o processo legislativo.
3. Medida cautelar confirmada. A&#xE7;&#xE3;o Direta de Inconstitucionalidade
julgada procedente.&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Indexa&#xE7;&#xE3;o&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
    LEI ESTADUAL&lt;/pre&gt;&lt;/div&gt;&lt;strong&gt;Fim do Documento&lt;/strong&gt;&apos;&apos;&apos;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Respostas - Exercício Módulo 4]]></title><description><![CDATA[<h2 id="1-dicas">1. Dicas</h2><h3 id="problema-1">Problema 1</h3><p>Este &#xE9; um desafio que une duas quest&#xF5;es diferentes: iteradores e express&#xF5;es condicionais. Essa &#xE9; uma combina&#xE7;&#xE3;o que ser&#xE1; usada exaustivamente nos seus programas.</p><p>Primeiro, voc&#xEA; precisa gerar um iterador que possibilite uma avalia&#xE7;&#xE3;o</p>]]></description><link>https://code.arcos.org.br/respostas-exercicio-modulo-4/</link><guid isPermaLink="false">644a852ad9432f055b15cc8a</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Thu, 11 Mar 2021 14:06:55 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-dicas">1. Dicas</h2><h3 id="problema-1">Problema 1</h3><p>Este &#xE9; um desafio que une duas quest&#xF5;es diferentes: iteradores e express&#xF5;es condicionais. Essa &#xE9; uma combina&#xE7;&#xE3;o que ser&#xE1; usada exaustivamente nos seus programas.</p><p>Primeiro, voc&#xEA; precisa gerar um iterador que possibilite uma avalia&#xE7;&#xE3;o de cada um dos itens da sua lista. Um &apos;for item in lista:&apos; resolve o seu problema.</p><p>Depois, &#xE9; preciso criar uma express&#xE3;o condicional que selecione os itens que voc&#xEA; quiser, como um &quot;if &apos;ADI&apos; in item:&quot;. Por&#xE9;m, como h&#xE1; outras classes que tamb&#xE9;m fazem parte do controle concentrado, voc&#xEA; precisa criar uma condi&#xE7;&#xE3;o complexa, usando o conector &quot;or&quot;, pois ser&#xE3;o selecionados os processos que sejam ADI, ou que sejam ADC ou que sejam ADO.</p><p>Uma vez que voc&#xEA; selecione os itens que deseja, basta inseri-los em uma nova lista, com a fun&#xE7;&#xE3;o append. </p><p>Por&#xE9;m, como o append s&#xF3; insere elementos em listas anteriormente criadas, voc&#xEA; precisa tomar o cuidado de criar as listas antes de gerar o append. Por exemplo, voc&#xEA; pode criar uma lista em branco com o comando &quot;lista_CC = []&quot;.</p><p>Uma forma de criar programas mais eficientes &#xE9; usar o elif, em vez de usar um if para cada condicional. Assim, o elif ser&#xE1; calculado apenas para os itens que n&#xE3;o se enquadrarem na primeira condi&#xE7;&#xE3;o. Isso n&#xE3;o vai fazer diferen&#xE7;a agora na sua velocidade de processamento, mas pode fazer uma diferen&#xE7;a grande quando voc&#xEA; rodar para um grande n&#xFA;mero de processos uma fun&#xE7;&#xE3;o que exija um processamento mais intenso.</p><p>Al&#xE9;m disso, se voc&#xEA; usar o if + elif, voc&#xEA; poder&#xE1; criar a &#xFA;ltima lista (dos outros processos) usando apenas o &quot;else&quot;, o que &#xE9; mais f&#xE1;cil do que criar uma condi&#xE7;&#xE3;o espec&#xED;fica para excluir todos os processos anteriores.</p><h3 id="problema-2">Problema 2</h3><p>Voc&#xEA; j&#xE1; desenvolveu as habilidades para fazer essa extra&#xE7;&#xE3;o no m&#xF3;dulo anterior. Agora, basta inserir a sequ&#xEA;ncia de comandos em um programa, usando o editor.</p><h2 id="2-resolu-o-em-video">2. <a href="https://youtu.be/mr1W8vxSnZk?ref=code.arcos.org.br">Resolu&#xE7;&#xE3;o em video</a></h2><p>A primeira resposta &#xE9; a da semana passada. Depois v&#xEA;m as respostas do m&#xF3;dulo 4. Isso ocorre porque todo o conte&#xFA;do estava em uma semana e depois eu o dividi em dois m&#xF3;dulos.</p>]]></content:encoded></item><item><title><![CDATA[Respostas - Exercício Módulo 3]]></title><description><![CDATA[<h2 id="1-dicas">1. Dicas</h2><p>As dicas mostram os caminhos de resolu&#xE7;&#xE3;o dos problemas, mas uma solu&#xE7;&#xE3;o completa &#xE9; disponibilizada no video abaixo.</p><h3 id="problema-1">Problema 1</h3><p>Os instrumentos para resolver este problema j&#xE1; foram dominados no exerc&#xED;cio do m&#xF3;dulo 2. Agora, basta escrever</p>]]></description><link>https://code.arcos.org.br/respostas-exercicio-modulo-2-2/</link><guid isPermaLink="false">644a852ad9432f055b15cc89</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Thu, 11 Mar 2021 14:03:45 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-dicas">1. Dicas</h2><p>As dicas mostram os caminhos de resolu&#xE7;&#xE3;o dos problemas, mas uma solu&#xE7;&#xE3;o completa &#xE9; disponibilizada no video abaixo.</p><h3 id="problema-1">Problema 1</h3><p>Os instrumentos para resolver este problema j&#xE1; foram dominados no exerc&#xED;cio do m&#xF3;dulo 2. Agora, basta escrever os comandos em sequ&#xEA;ncia, criando assim um programa. </p><p>Com isso, em vez de comandos isolados no console, voc&#xEA; cria no editor um programa a ser executado.</p><p></p><h2 id="2-resolu-o-em-video">2. <a href="https://youtu.be/mr1W8vxSnZk?ref=code.arcos.org.br">Resolu&#xE7;&#xE3;o em video</a></h2>]]></content:encoded></item><item><title><![CDATA[Exercícios do Módulo 4]]></title><description><![CDATA[<h2 id="problema-1-gerando-listas">Problema 1 - Gerando listas</h2><p>Copie a lista abaixo para o Editor e elabore um algoritmo capaz de gerar tr&#xEA;s listas a partir dela: uma lista de processos de controle concentrado, uma lista de mandados de seguran&#xE7;a e uma lista com os demais processos.</p><pre><code class="language-Python">lista = [&apos;</code></pre>]]></description><link>https://code.arcos.org.br/exercicios-do-modulo-4/</link><guid isPermaLink="false">644a852ad9432f055b15cc88</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Tue, 09 Mar 2021 18:27:06 GMT</pubDate><content:encoded><![CDATA[<h2 id="problema-1-gerando-listas">Problema 1 - Gerando listas</h2><p>Copie a lista abaixo para o Editor e elabore um algoritmo capaz de gerar tr&#xEA;s listas a partir dela: uma lista de processos de controle concentrado, uma lista de mandados de seguran&#xE7;a e uma lista com os demais processos.</p><pre><code class="language-Python">lista = [&apos;ADI5000&apos;, &apos;ADPF333&apos;, &apos;MS4333&apos;, &apos;ADO33&apos;, &apos;ADC004&apos;, &apos;MS4300&apos;, &apos;RE98600&apos;, &apos;MS2222&apos;]
</code></pre><h2 id="problema-2-extraindo-para-uma-lista-informa-es-de-uma-string">Problema 2 - Extraindo para uma lista informa&#xE7;&#xF5;es de uma string</h2><p>Copie o trecho seguinte e cole no seu console, que &#xE9; o mesmo utilizado nas atividades do M&#xF3;dulo 2. Ele define para a vari&#xE1;vel html o conte&#xFA;do de um trecho da string que o seu computador recebe quando clica no link da <a href="http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000&amp;ref=code.arcos.org.br">ADI 6000</a> (e que aparece quando voc&#xEA; entra nesse link e clica Ctrl-U). </p><p>No m&#xF3;dulo 2, voc&#xEA; usou a l&#xF3;gica do marcador de inicio e marcador de fim para extrair dessa string, com comandos do console, &#xA0;o nome do relator. Para facilitar o trabalho aqui, voc&#xEA; poode partir da seguinte estrutura:</p><pre><code>marcador_de_inicio = &apos;insira o marcador de in&#xED;cio&apos;
marcador_de_fim = &apos;insira o marcador de fim&apos;

inicio = string.find(marcador_de_inicio) + len(marcador_de_inicio)
fim = string.find(marcador_de_fim, inicio)

trecho = string[inicio:fim]</code></pre><p>O desafio agora &#xE9; escrever no Editor um programa que seja capaz de, uma vez executado, criar uma lista com as seguintes informa&#xE7;&#xF5;es: </p><ul><li>N&#xFA;mero do Processo</li><li>Relator</li><li>Requerente</li></ul><p>Salve o seu programa porque ele ser&#xE1; usado como base para o exerc&#xED;cio do M&#xF3;dulo 5.</p><pre><code class="language-Python">html = &apos;&apos;&apos;&lt;/div&gt;
	&lt;div id=&quot;divImpressao&quot;&gt;&lt;div&gt;&lt;h3&gt;&lt;strong&gt;A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE (Med. Liminar) - 6000&lt;/strong&gt;&lt;/h3&gt;&lt;table width=&quot;99%&quot; cellspacing=&quot;5&quot;&gt;&lt;tr&gt;&lt;td&gt;Origem:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;RIO DE JANEIRO&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Entrada no STF:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Relator:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;MINISTRO ALEXANDRE DE MORAES&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Distribu&#xED;do:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Partes:&lt;/td&gt;&lt;td colspan=&quot;3&quot;&gt;Requerente: &lt;strong&gt;GOVERNADOR DO ESTADO DO RIO DE JANEIRO
(CF 103, 00V)&lt;/strong&gt;&lt;br /&gt;Requerido :&lt;strong&gt;ASSEMBLEIA LEGISLATIVA DO ESTADO DO RIO DE JANEIRO 
&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Dispositivo Legal Questionado&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Leis n&#xB0; 8071, de 27 de agosto de 2018 e n&#xB0; 8072, de 27 de agosto  de  2018, 
ambos do Estado do Rio de Janeiro. 

     Lei n&#xB0; 8071, de 27 de agosto de 2018

                                       Disp&#xF5;e  sobre  a  composi&#xE7;&#xE3;o  das  perdas 
                                       salariais dos servidores do Quadro  &#xDA;nico 
                                       de Pessoal do Poder Judici&#xE1;rio do  Estado 
                                       do Rio de Janeiro.

     Art. 001&#xBA; - Ficam reajustadas em 5% (cinco por cento), a contar  de  01  de 
setembro de  2018,  as  remunera&#xE7;&#xF5;es  dos  servidores  ocupantes  de  cargo   de 
provimento efetivo, de cargo de provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es  gratificadas  e 
fun&#xE7;&#xF5;es comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio do  Estado 
do Rio de Janeiro. 

     Art. 002&#xBA; - As  despesas  decorrentes  desta  Lei  ser&#xE3;o  atendidas   pelas 
dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder Executivo  autorizado  a  abrir 
cr&#xE9;ditos suplementares. 

     Art. 003&#xBA; - Esta Lei entrar&#xE1; em vigor na data de sua publica&#xE7;&#xE3;o.

     Lei n&#xB0; 8072, de 27 de agosto de 2018

                                        Disp&#xF5;e sobre  a recomposi&#xE7;&#xE3;o  de  perdas 
                                        remunerat&#xF3;rias dos seridores  do  Quadro 
                                        Permanente  de  Servi&#xE7;os  Auxiliares  do 
                                        Minist&#xE9;rio P&#xFA;blico e Defensoria  P&#xFA;blica 
                                        do Estado do Rio de Janeiro.

     Art. 001&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores  do  Quadro  Permanente  dos  Servi&#xE7;os 
Auxiliares do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.

     Art. 002&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores do Quadro  Permanente  de  Pessoal  de 
Apoio Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.

     Art. 003&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 001&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas ao Minist&#xE9;rio P&#xFA;blico do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 004&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 002&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas a Defensoria P&#xFA;blica  do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 005&#xBA; - Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Fundamenta&#xE7;&#xE3;o Constitucional&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
- Art. 002&#xB0;
- Art. 003&#xB0;, 0IV
- Art. 005&#xB0;, &quot;caput&quot;
- Art. 037, &quot;caput&quot;
- Art. 084, 0II
- Art. 165
- Art. 169&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Resultado da Liminar&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Decis&#xE3;o Monocr&#xE1;tica - Liminar Deferida&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Resultado Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Procedente&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     O Tribunal, por unanimidade, confirmou a medida cautelar e julgou procedente o pedido formulado na a&#xE7;&#xE3;o direta para declarar a inconstitucionalidade das Leis n&#xBA; 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro, nos termos do voto do Relator. 
     - Plen&#xE1;rio, Sess&#xE3;o Virtual de 20.9.2019 a 26.9.2019.
     - Ac&#xF3;rd&#xE3;o, DJ 15.10.2019.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Data de Julgamento Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Plen&#xE1;rio&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Data de Publica&#xE7;&#xE3;o da Decis&#xE3;o Final&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ac&#xF3;rd&#xE3;o, DJ 15.10.2019&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Monocr&#xE1;tica da Liminar&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de A&#xE7;&#xE3;o Direta de Inconstitucionalidade, com pedido de
medida cautelar, ajuizada pelo Governador do Estado do Rio de Janeiro,
em face das Leis 8.071/2018 e 8.072/2018 daquele Estado, que conferem,
respectivamente e a contar de 1&#xBA; de setembro de 2018, reajuste de 5%
(cinco por cento) na remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a
do Estado do Rio de Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do
Estado do Rio de Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro. Eis o teor das leis impugnadas:
LEI 8.071, de 27 de agosto de 2018.
Art. 1&#xBA; Ficam reajustadas em 5% (cinco por cento), a contar
de 1&#xBA; de setembro de 2018, as remunera&#xE7;&#xF5;es dos servidores
ocupantes de cargo de provimento efetivo, de cargo de
provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es gratificadas e fun&#xE7;&#xF5;es
comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro.
Art. 2&#xBA; As despesas decorrentes desta Lei ser&#xE3;o atendidas
pelas dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder
Executivo autorizado a abrir cr&#xE9;ditos suplementares.
Art. 3&#xBA; Esta Lei entrar&#xE1; em vigor na data de sua
publica&#xE7;&#xE3;o.
LEI 8.072, de 27 de agosto de 2018.
Art. 1&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente dos Servi&#xE7;os Auxiliares do
Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.
Art. 2&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente de Pessoal de Apoio
Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro.
Art. 3&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 1&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas ao Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 4&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 2&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas a Defensoria P&#xFA;blica do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 5&#xBA; Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
Inicialmente, o Autor reporta-se &#xE0; situa&#xE7;&#xE3;o de pen&#xFA;ria das finan&#xE7;as
do Estado do Rio de Janeiro, notadamente a partir do ano de 2016, a qual
teria culminado, com respaldo no art. 65 da Lei de Responsabilidade
Fiscal, no reconhecimento do estado de calamidade p&#xFA;blica no &#xE2;mbito da
administra&#xE7;&#xE3;o financeira do Estado, e em posterior ades&#xE3;o do Estado ao
Regime de Recupera&#xE7;&#xE3;o Fiscal &#x2013; RRF, institu&#xED;do pela Lei Complementar
159/2017.
Observa o Autor que, nos termos do art. 8&#xBA; da Lei Complementar
citada, &#xE9; vedada, durante a vig&#xEA;ncia do RRF, a concess&#xE3;o de reajuste a
membros dos Poderes ou de &#xF3;rg&#xE3;os, e a servidores e empregados
p&#xFA;blicos, entre outros.
Informa que, a despeito desse grave contexto f&#xE1;tico e normativo, a
Assembleia Legislativa derrubou o veto aposto pelo Chefe do Poder
Executivo aos projetos de lei dos quais resultaram as normas
impugnadas, concedendo reajuste a servidores do Tribunal de Justi&#xE7;a, do
Minist&#xE9;rio P&#xFA;blico e da Defensoria P&#xFA;blica do Estado do Rio de Janeiro.
Salienta que, durante o processo legislativo das normas em foco, o
Conselho de Supervis&#xE3;o Fiscal do Minist&#xE9;rio da Fazenda alertou que os
referidos projetos de lei, caso aprovados e concretizados, seriam causas
para exclus&#xE3;o do Estado do RRF, o que, segundo a Secretaria de Estado
de Fazenda do Estado do Rio de Janeiro, implicaria a imediata obriga&#xE7;&#xE3;o
de pagamento, pelo Estado &#xE0; Uni&#xE3;o Federal, de mais de R$ 27 bilh&#xF5;es de
reais, al&#xE9;m dos encargos de inadimpl&#xEA;ncia.
Posto esse cen&#xE1;rio, argumenta o Autor que as normas atacadas
implicam viola&#xE7;&#xE3;o ao princ&#xED;pio da independ&#xEA;ncia e harmonia dos
Poderes, pois &#x201C;(i) colocam o Poder Judici&#xE1;rio, o Minist&#xE9;rio P&#xFA;blico e a
Defensoria P&#xFA;blica como inst&#xE2;ncias hegem&#xF4;nicas, acima do modelo de
neutralidade e igualdade institucional tra&#xE7;ado pela Constitui&#xE7;&#xE3;o Federal; e (ii)
aniquilam o Poder Executivo e a prerrogativa de seu Chefe de dire&#xE7;&#xE3;o geral da
Administra&#xE7;&#xE3;o P&#xFA;blica, consistente, no caso dos autos, na ades&#xE3;o do Estado ao
RRF e na sua vital manuten&#xE7;&#xE3;o&#x201D;.
Afirma, ademais, que as leis em quest&#xE3;o violam os princ&#xED;pios da
moralidade, da proporcionalidade e da razoabilidade, porque
&#x201C;concretizam interesses pecuni&#xE1;rios e pr&#xF3;prios de um grupo de servidores do
Tribunal de Justi&#xE7;a, do Minist&#xE9;rio P&#xFA;blico e da Defensoria &#xE0;s custas do retorno
do Estado do Rio de Janeiro ao caos financeiro e social&#x201D;, havendo, com a
potencial exclus&#xE3;o do Estado do RRF, risco de &#x201C;imediata interrup&#xE7;&#xE3;o da
presta&#xE7;&#xE3;o dos mais b&#xE1;sicos servi&#xE7;os p&#xFA;blicos&#x201D;.
Alega, tamb&#xE9;m, haver viola&#xE7;&#xE3;o ao princ&#xED;pio da isonomia, em raz&#xE3;o
de as leis hostilizadas conferirem tratamento privilegiado a determinado
grupo de servidores, em detrimento dos demais, e da pr&#xF3;pria popula&#xE7;&#xE3;o
do Estado do Rio de Janeiro, que seria extremamente prejudicada com a
exclus&#xE3;o do Estado do RRF.
Aduz existir afronta aos princ&#xED;pios do sistema financeiro e
or&#xE7;ament&#xE1;rio, na medida em que as leis hostilizadas conduzem &#x201C;&#xE0;
exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal&#x201D;, bem como &#x201C;representam
grave retrocesso e colocam-se na extrema contram&#xE3;o do dever constitucional de
gest&#xE3;o respons&#xE1;vel&#x201D;.
Argui, por fim, que a Lei Fluminense 8.072/2018 padeceria de v&#xED;cio
de inconstitucionalidade formal, no que tange &#xE0; Defensoria P&#xFA;blica, por
inobserv&#xE2;ncia dos arts. 134, &#xA7; 2&#xBA; e 99, &#xA7; 2&#xBA;, da Constitui&#xE7;&#xE3;o Federal, de
aplica&#xE7;&#xE3;o obrigat&#xF3;ria aos Estados por for&#xE7;a do princ&#xED;pio da simetria, dos
quais se extrai que compete privativamente ao Defensor P&#xFA;blico-Geral a
iniciativa de lei que trate da remunera&#xE7;&#xE3;o de seus servidores.
Com esses fundamentos, e vislumbrando haver periculum in mora na
potencial exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal, j&#xE1;
sinalizada pelo Conselho de Supervis&#xE3;o do Minist&#xE9;rio da Fazenda, o
Autor formula pedido cautelar para que seja determinada a imediata
suspens&#xE3;o dos efeitos das leis impugnadas.
No m&#xE9;rito, requer a confirma&#xE7;&#xE3;o da medida cautelar, com a
declara&#xE7;&#xE3;o de inconstitucionalidade das normas hostilizadas.
A Associa&#xE7;&#xE3;o dos Servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio
de Janeiro, ASSEMPERJ, e o Sindicato dos Servidores do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro, SINDIJUSTI&#xC7;A-RJ, manifestaram-se nos
autos requerendo a admiss&#xE3;o de seu ingresso como amici curiae (pe&#xE7;as 11
e 15, respectivamente, dos autos eletr&#xF4;nicos). Em suas raz&#xF5;es, sustentam a
validade das normas questionadas e a impossibilidade de concess&#xE3;o de
medida cautelar.
&#xC9; o relat&#xF3;rio.
A concess&#xE3;o de medida cautelar nas a&#xE7;&#xF5;es de jurisdi&#xE7;&#xE3;o
constitucional concentrada exige a comprova&#xE7;&#xE3;o de perigo de les&#xE3;o
irrepar&#xE1;vel (IVES GANDRA MARTINS, Repert&#xF3;rio IOB de
jurisprud&#xEA;ncia, n 8/95, p. 150/154, abr. 1995), uma vez que se trata de
exce&#xE7;&#xE3;o ao princ&#xED;pio segundo o qual os atos normativos s&#xE3;o
presumidamente constitucionais (ADI 1.155-3/DF, Pleno, Rel. Min.
MARCO AUR&#xC9;LIO, DJ de 18/5/2001). Conforme ensinamento de PAULO
BROSSARD, segundo axioma incontroverso, a lei se presume
constitucional, porque elaborada pelo Poder Legislativo e sancionada
pelo Poder Executivo, isto &#xE9;, por dois dos tr&#xEA;s poderes, situados no
mesmo plano que o Judici&#xE1;rio (A constitui&#xE7;&#xE3;o e as leis a ela anteriores.
Arquivo Minist&#xE9;rio Justi&#xE7;a. Bras&#xED;lia, 45 (180), jul./dez. 1992. p. 139).
A an&#xE1;lise dos requisitos do fumus boni iuris e periculum in mora para
sua concess&#xE3;o admite maior discricionariedade por parte do SUPREMO
TRIBUNAL FEDERAL, com a realiza&#xE7;&#xE3;o de verdadeiro ju&#xED;zo de
conveni&#xEA;ncia pol&#xED;tica da suspens&#xE3;o da efic&#xE1;cia (ADI 3.401 MC, Rel. Min.
GILMAR MENDES, Pleno, decis&#xE3;o: 3/2/2005), pelo qual dever&#xE1; ser
analisada a conveni&#xEA;ncia da suspens&#xE3;o cautelar da lei impugnada (ADI
425 MC, Rel. Min. PAULO BROSSARD, Pleno, decis&#xE3;o: 4/4/1991; ADI 467
MC, Rel. Min. OCT&#xC1;VIO GALLOTTI, Pleno, decis&#xE3;o: 3/4/1991),
permitindo, dessa forma, uma maior subjetividade na an&#xE1;lise da
relev&#xE2;ncia do tema, bem assim em ju&#xED;zo de conveni&#xEA;ncia, ditado pela
gravidade que envolve a discuss&#xE3;o (ADI 490 MC, Rel. Min. CELSO DE
MELLO, Pleno, decis&#xE3;o: 6/12/1990; ADI 508 MC, Rel. Min. OCT&#xC1;VIO
GALLOTTI, Pleno, decis&#xE3;o: 16/4/1991), bem como da plausibilidade
inequ&#xED;voca e dos evidentes riscos sociais ou individuais, de v&#xE1;rias ordens,
que a execu&#xE7;&#xE3;o provis&#xF3;ria da lei questionada gera imediatamente (ADI
474 MC, Rel. Min. SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 4/4/1991), ou,
ainda, das prov&#xE1;veis repercuss&#xF5;es pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado (ADI 718 MC, Rel. Min. CELSO DE MELLO, Pleno, decis&#xE3;o:
3/8/1992), da relev&#xE2;ncia da quest&#xE3;o constitucional (ADI 804 MC, Rel. Min.
SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 27/11/1992) e da relev&#xE2;ncia da
fundamenta&#xE7;&#xE3;o da argui&#xE7;&#xE3;o de inconstitucionalidade, al&#xE9;m da ocorr&#xEA;ncia
de periculum in mora, tais os entraves &#xE0; atividade econ&#xF4;mica (ADI 173 MC,
Rel. Min. MOREIRA ALVES, Pleno, decis&#xE3;o: 9/3/1990), social ou pol&#xED;tico.
Na presente hip&#xF3;tese, est&#xE3;o presentes os necess&#xE1;rios fumus boni juris
e periculum in mora para a concess&#xE3;o da medida liminar.
Sem preju&#xED;zo da posterior aprecia&#xE7;&#xE3;o das teses contidas na peti&#xE7;&#xE3;o
inicial, a respeito da alegada afronta aos arts. 2&#xBA;, 3&#xBA;, IV, 5&#xBA;, caput, 37, caput,
84, II, 134, &#xA7; 2&#xBA;, c/c art. 99, e 165 a 169, todos da CF, entendo manifesto, por
fundamento diverso, o fumus boni iuris.
Os grandes desafios da Democracia representativa s&#xE3;o o
fortalecimento e a plena efetiva&#xE7;&#xE3;o dos mecanismos de controle
impeditivos da ocorr&#xEA;ncia de abuso de poder pol&#xED;tico ou econ&#xF4;mico nas
elei&#xE7;&#xF5;es, de maneira a evitar o surgimento de condi&#xE7;&#xF5;es que possam
desequilibrar seu resultado, maculando a legitima vontade popular.
A norma impugnada concedeu aos servidores do Poder Judici&#xE1;rio,
Minist&#xE9;rio P&#xFA;blico e Defensoria P&#xFA;blica do Estado do Rio de Janeiro
vantagem remunerat&#xF3;ria consistente no reajuste de 5% (cinco por cento)
sobre seus vencimentos, com efic&#xE1;cia imediata j&#xE1; para o pr&#xF3;ximo m&#xEA;s de
setembro de 2018; ou seja, pouco mais de 30 dias das elei&#xE7;&#xF5;es gerais.
A concess&#xE3;o e implanta&#xE7;&#xE3;o de aumento salarial a categorias
espec&#xED;ficas &#xE0;s v&#xE9;speras do pleito eleitoral, portanto, poder&#xE1; configurar
desvio de finalidade no exerc&#xED;cio de poder pol&#xED;tico legiferante, com reais
possibilidades de influ&#xEA;ncia no pleito eleitoral e perigoso ferimento a
liberdade do voto (CF, art. 60, IV, b); ao pluralismo pol&#xED;tico (CF, art. 1&#xBA;, V e
par&#xE1;grafo &#xFA;nico), ao princ&#xED;pio da igualdade (CF, art. 5&#xBA;, caput) e a
moralidade p&#xFA;blica (CF, art. 37, caput).
Observe-se, que em respeito aos princ&#xED;pios constitucionais que
regem o exerc&#xED;cio dos direitos pol&#xED;ticos, a norma editada no curso do
per&#xED;odo de elei&#xE7;&#xF5;es, entre as conven&#xE7;&#xF5;es partid&#xE1;rias e a posse dos eleitos
no pleito de outubro pr&#xF3;ximo, &#xE9; expressamente vedada pela legisla&#xE7;&#xE3;o
eleitoral, que veda a concess&#xE3;o de reajustes dessa natureza, conforme o
art. 73, VIII, da Lei 9.504/1997:
Art. 73. S&#xE3;o proibidas aos agentes p&#xFA;blicos, servidores ou n&#xE3;o, as
seguintes condutas tendentes a afetar a igualdade de oportunidades entre
candidatos nos pleitos eleitorais:
(...)
VIII - fazer, na circunscri&#xE7;&#xE3;o do pleito, revis&#xE3;o geral da remunera&#xE7;&#xE3;o
dos servidores p&#xFA;blicos que exceda a recomposi&#xE7;&#xE3;o da perda de seu
poder aquisitivo ao longo do ano da elei&#xE7;&#xE3;o, a partir do in&#xED;cio do prazo
estabelecido no art. 7&#xBA; desta Lei e at&#xE9; a posse dos eleitos.
O percentual concedido se amolda a hip&#xF3;tese do inciso VIII, do
referido art. 73, uma vez que &#xE9; superior a infla&#xE7;&#xE3;o apurada no mesmo
per&#xED;odo pelos &#xED;ndices oficiais de pesquisa (IPCA/IBGE), que, neste ano de
2018, registra o patamar de 2,94%; pois a legisla&#xE7;&#xE3;o aprovada prev&#xEA; um
benef&#xED;cio setorial, n&#xE3;o se qualificando como revis&#xE3;o geral da remunera&#xE7;&#xE3;o
(art. 37, X, da CF), pois n&#xE3;o destinada a todos os servidores da
Administra&#xE7;&#xE3;o P&#xFA;blica estadual.
&#xC9; fato not&#xF3;rio o quadro narrado na peti&#xE7;&#xE3;o inicial a respeito do
estado atual das finan&#xE7;as p&#xFA;blicas do Estado do Rio de Janeiro, inclusive
no tocante &#xE0; potencial frustra&#xE7;&#xE3;o de pagamentos a servidores p&#xFA;blicos em
passado recente; que bem demonstra que aprova&#xE7;&#xF5;es legislativas
concessivas de aumentos salariais t&#xEA;m, no momento presente, forte apelo
junto ao eleitorado fluminense e, naturalmente, mobilizam todo tipo de
interesse pol&#xED;tico, social e corporativo, com perigosos reflexos na
normalidade e legitimidade das elei&#xE7;&#xF5;es em curso naquela unidade
federativa.
Ressalte-se, ainda, que o texto constitucional prev&#xEA; o abuso do poder
pol&#xED;tico nas elei&#xE7;&#xF5;es como conduta merecedora das mais graves san&#xE7;&#xF5;es
pol&#xED;ticas, c&#xED;veis e administrativas, como revelado pela art. 14, &#xA7; 9&#xBA;, da CF,
que determina ao legislador complementar a institui&#xE7;&#xE3;o de hip&#xF3;teses de
inelegibilidades voltadas a proteger a &#x201C;normalidade e legitimidade das
elei&#xE7;&#xF5;es contra a influ&#xEA;ncia do poder econ&#xF4;mico ou o abuso do exerc&#xED;cio de fun&#xE7;&#xE3;o,
cargo ou emprego na administra&#xE7;&#xE3;o direta ou indireta&#x201D;; bem como, o
implemento do referido reajuste salarial, em franca viola&#xE7;&#xE3;o &#xE0; legisla&#xE7;&#xE3;o
eleitoral, nos termos do &#xA7;4&#xBA; do art. 37 do texto constitucional, sujeita os
agentes p&#xFA;blicos respons&#xE1;veis por sua implementa&#xE7;&#xE3;o (Governador e
demais chefes de Poderes e &#xF3;rg&#xE3;os aut&#xF4;nomos), por expressa indica&#xE7;&#xE3;o
do art. 73, &#xA7; 7&#xBA;, da Lei 9.504/1997, &#xE0;s san&#xE7;&#xF5;es da Lei de Improbidade
Administrativa, na forma do art. 10, incisos IX e XI, e do art. 11, caput e
inciso I, da Lei 8.429/1992.
O perigo da demora est&#xE1; caracterizado pela proximidade do
processo eleitoral, que recomenda a atua&#xE7;&#xE3;o imediata do SUPREMO
TRIBUNAL FEDERAL, a fim de prevenir a consuma&#xE7;&#xE3;o de condutas que
t&#xEA;m o potencial de desestabilizar o curso regular das elei&#xE7;&#xF5;es; uma vez
que, as leis em quest&#xE3;o foram publicadas no Di&#xE1;rio Oficial do Estado do
Rio de Janeiro em 28/8/2018, ter&#xE7;a-feira, impugnadas perante o
SUPREMO TRIBUNAL FEDERAL em 30/8/2018, quinta-feira; com
previs&#xE3;o de efeitos imediatos, a contar de 1&#xBA;/9/2018, s&#xE1;bado pr&#xF3;ximo.
Consequentemente, as v&#xE9;speras das elei&#xE7;&#xF5;es, caso mantida a efic&#xE1;cia das
leis impugnadas, a folha de pagamento dos &#xF3;rg&#xE3;os p&#xFA;blicos afetados ser&#xE1;
impactada pelo benef&#xED;cio concedido a poucos dias do pleito eleitoral.
Diante de todo o exposto, em face da gravidade das quest&#xF5;es e as
poss&#xED;veis repercuss&#xF5;es eleitorais pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado, com fundamento no art. 10, &#xA7; 3&#xBA;, da Lei 9.868/1999 e no art.
21, V, do Regimento Interno do Supremo Tribunal Federal, CONCEDO A
MEDIDA CAUTELAR pleiteada, ad referendum do Plen&#xE1;rio desta
SUPREMA CORTE, para suspender os efeitos das Leis 8.071/2018 e
8.072/2018 do Estado do Rio de Janeiro, que conferem, respectivamente e
a contar de 1&#xBA; de setembro de 2018, reajuste de 5% (cinco por cento) na
remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a do Estado do Rio de
Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de
Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.
Comunique-se ao Presidente da Assembleia Legislativa, ao
Governador, ao Presidente do Tribunal de Justi&#xE7;a, ao Procurador-Geral de
Justi&#xE7;a e ao Defensor P&#xFA;blico-Geral, todos do Estado do Rio de Janeiro,
para ci&#xEA;ncia e cumprimento desta decis&#xE3;o, solicitando-lhes informa&#xE7;&#xF5;es,
no prazo m&#xE1;ximo de 10 (dez) dias. Ap&#xF3;s esse prazo, d&#xEA;-se vista ao
Advogado-Geral da Uni&#xE3;o e ao Procurador-Geral da Rep&#xFA;blica,
sucessivamente, no prazo de 5 (cinco) dias, para que cada qual se
manifeste na forma do art. 12 da Lei 9.868/1999.
Por fim, considerando que a ASSEMPERJ e o SINDJUSTI&#xC7;A-RJ
preenchem os requisitos legais, nos termos do art. 7&#xBA;, &#xA7; 2&#xBA;, da Lei
9.868/1999, DEFIRO OS PEDIDOS DE INGRESSO COMO AMICI
CURIAE na presente A&#xE7;&#xE3;o Direta de Inconstitucionalidade.
Nos termos do art. 21, X, do Regimento Interno do Supremo
Tribunal Federal, pe&#xE7;o dia para julgamento, pelo Plen&#xE1;rio, do referendo
da medida ora concedida.
Publique-se. Intimem-se.
Bras&#xED;lia, 31 de agosto de 2018.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Incidentes&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de Embargos de Declara&#xE7;&#xE3;o opostos pela Associa&#xE7;&#xE3;o dos
Servidores do Minist&#xE9;rio P&#xFA;blico do Rio de Janeiro, ASSEMPERJ (Peti&#xE7;&#xE3;o
STF 74.969/2019, pe&#xE7;a 85 dos autos), e pelo Sindicato dos Servidores do
Poder Judici&#xE1;rio do Rio de Janeiro, SINDJUSTI&#xC7;A/RJ (Peti&#xE7;&#xE3;o STF
75.230/2019, pe&#xE7;a 87), ambas na qualidade de amicus curiae, em face de
decis&#xE3;o deste Relator (decis&#xE3;o de 29/10/2019, pe&#xE7;a 83) que negou
seguimento aos Embargos de Declara&#xE7;&#xE3;o opostos contra o julgamento do
m&#xE9;rito da presente A&#xE7;&#xE3;o Direta pelo Plen&#xE1;rio da CORTE.
Aludem ao artigo 138, &#xA7; 1&#xBA;, do novo C&#xF3;digo de Processo Civil para
defender o cabimento dos primeiros aclarat&#xF3;rios, cujos v&#xED;cios ali alegados
s&#xE3;o de um modo geral reiterados nesse novo recurso.
Pleiteiam o provimento dos Segundos Embargos para que os
Primeiros &#x201C;sejam submetidos a julgamento do Plen&#xE1;rio do Supremo Tribunal
Federal&#x201D;, possibilitando a reforma do ac&#xF3;rd&#xE3;o embargado, &#x201C;no sentido de
conhecer a constitucionalidade das Leis 8.071/18 e 8.072/18 do Estado do Rio de
Janeiro&#x201D;.
&#xC9; o relat&#xF3;rio.
Pela decis&#xE3;o de 29/10/2019 foi negado seguimento aos primeiros
Embargos Declarat&#xF3;rios com fundamento na aus&#xEA;ncia de legitimidade
recursal dos peticionantes.
Os Segundos Embargos de Declara&#xE7;&#xE3;o, opostos em 28 e 29 de
novembro do corrente ano, encontram-se prejudicados, pois n&#xE3;o h&#xE1; mais
qualquer possibilidade de revers&#xE3;o do ac&#xF3;rd&#xE3;o Embargado.
Em 29/10/2019, neguei seguimento aos Primeiros Embargos de
Declara&#xE7;&#xE3;o interpostos pelos embargantes, os quais veiculavam
basicamente as mesmas argumenta&#xE7;&#xF5;es apresentadas nessa
oportunidade. Na ocasi&#xE3;o, considerando a n&#xE3;o interposi&#xE7;&#xE3;o de recurso
por parte dos sujeitos com legitimidade para tanto e o decurso do prazo
recursal, determinei &#xE0; Secretaria que certificasse imediatamente o tr&#xE2;nsito
em julgado, o que foi feito (pe&#xE7;a 84 dos autos eletr&#xF4;nicos).
Como se sabe, os Segundos Embargos de declara&#xE7;&#xE3;o devem ater-se a
v&#xED;cios unicamente do julgado anterior, que examinou os Primeiros. No
caso, a inadmiss&#xE3;o dos Primeiros Embargos de Declara&#xE7;&#xE3;o formalizados
pelos amici curiae est&#xE1; amparada em recente e firme jurisprud&#xEA;ncia do
SUPREMO TRIBUNAL FEDERAL, moldada j&#xE1; ap&#xF3;s o advento do Novo
C&#xF3;digo de Processo Civil.
Portanto, a decis&#xE3;o embargada n&#xE3;o apresenta nenhum dos v&#xED;cios
pass&#xED;veis de corre&#xE7;&#xE3;o por meio de embargos de declara&#xE7;&#xE3;o, a saber,
omiss&#xE3;o, contradi&#xE7;&#xE3;o, obscuridade ou erro material. Evidencia-se o
prop&#xF3;sito infringente, para o qual n&#xE3;o est&#xE1; vocacionado o presente
recurso.
Por todo o exposto, ausentes os v&#xED;cios dos incisos do art. 1.022 do
C&#xF3;digo de Processo Civil, REJEITO OS EMBARGOS DE DECLARA&#xC7;&#xC3;O.
(peti&#xE7;&#xE3;o STF 74.969/2019 e peti&#xE7;&#xE3;o STF 75.230/2019).
Ficam os peticion&#xE1;rios advertidos de que a reitera&#xE7;&#xE3;o de
expedientes descabidos importar&#xE1; a aplica&#xE7;&#xE3;o das san&#xE7;&#xF5;es cab&#xED;veis.
Arquivem-se os autos imediatamente.
Ap&#xF3;s, publique-se.
Bras&#xED;lia, 18 de fevereiro de 2020.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Ementa&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE.
CONSTITUCIONAL. LEIS 8.071/2018 E 8.072/2018 DO ESTADO DO RIO
DE JANEIRO. CONCESS&#xC3;O DE BENEF&#xCD;CIO REMUNERAT&#xD3;RIO PARA
RECOMPOSI&#xC7;&#xC3;O DO PODER AQUISITIVO DAS REMUNERA&#xC7;&#xD5;ES
DOS SERVIDORES DO TRIBUNAL DE JUSTI&#xC7;A, DO MINIST&#xC9;RIO
P&#xDA;BLICO E DA DEFENSORIA P&#xDA;BLICA. ART. 37, X, DA
CONSTITUI&#xC7;&#xC3;O FEDERAL. MAT&#xC9;RIA RESERVADA &#xC0; INICIATIVA
PRIVATIVA DO CHEFE DO PODER EXECUTIVO. PRECEDENTES.
MEDIDA CAUTELAR CONFIRMADA. A&#xC7;&#xC3;O JULGADA
PROCEDENTE.
1. A concess&#xE3;o de benef&#xED;cio remunerat&#xF3;rio fundada no art. 37, X, da
CF, para recomposi&#xE7;&#xE3;o do poder aquisitivo das remunera&#xE7;&#xF5;es de
servidores p&#xFA;blicos, &#xE9; mat&#xE9;ria reservada &#xE0; iniciativa privativa do chefe do
Poder Executivo, que a exerce em benef&#xED;cio dos servidores de todos os
Poderes e &#xF3;rg&#xE3;os da Administra&#xE7;&#xE3;o P&#xFA;blica respectiva.
2. As Leis 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro t&#xEA;m
n&#xED;tidos contornos de revis&#xE3;o geral dos vencimentos devidos aos servidores do Poder Judici&#xE1;rio, do Minist&#xE9;rio P&#xFA;blico e da Defensoria
P&#xFA;blica, uma vez que o incremento salarial &#xE9; conferido linearmente a
todos, independentemente da carreira, e de forma global, incidente n&#xE3;o
apenas sobre parcelas salariais espec&#xED;ficas, mas sobre o montante
remunerat&#xF3;rio total, inclusive cargos em comiss&#xE3;o e fun&#xE7;&#xF5;es gratificadas.
Inconstitucionalidade por v&#xED;cio de iniciativa do Chefe do Executivo para
deflagrar o processo legislativo.
3. Medida cautelar confirmada. A&#xE7;&#xE3;o Direta de Inconstitucionalidade
julgada procedente.&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong style=&quot;rgb(57,82,95)&quot;&gt;Indexa&#xE7;&#xE3;o&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
    LEI ESTADUAL&lt;/pre&gt;&lt;/div&gt;&lt;strong&gt;Fim do Documento&lt;/strong&gt;&apos;&apos;&apos;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Respostas - Exercício Módulo 2]]></title><description><![CDATA[<h2 id="1-dicas">1. Dicas</h2><p>As dicas mostram os caminhos de resolu&#xE7;&#xE3;o dos problemas, mas uma solu&#xE7;&#xE3;o completa &#xE9; disponibilizada no video abaixo.</p><h3 id="problema-1-modificando-strings">Problema 1. Modificando strings</h3><p>Com a fun&#xE7;&#xE3;o replace(), voc&#xEA; pode modificar a string &apos;ADIn&apos;, para transform&#xE1;-la</p>]]></description><link>https://code.arcos.org.br/respostas-exercicio-modulo-2/</link><guid isPermaLink="false">644a852ad9432f055b15cc86</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Tue, 09 Mar 2021 17:13:20 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-dicas">1. Dicas</h2><p>As dicas mostram os caminhos de resolu&#xE7;&#xE3;o dos problemas, mas uma solu&#xE7;&#xE3;o completa &#xE9; disponibilizada no video abaixo.</p><h3 id="problema-1-modificando-strings">Problema 1. Modificando strings</h3><p>Com a fun&#xE7;&#xE3;o replace(), voc&#xEA; pode modificar a string &apos;ADIn&apos;, para transform&#xE1;-la em &apos;ADI&apos;, o que permite construir mediante concatena&#xE7;&#xE3;o (&apos;+&apos;) a string &apos;ADI222&apos;.</p><h3 id="problema-2-de-strings-a-vari-veis-num-ricas-ida-e-volta">Problema 2. De strings a vari&#xE1;veis num&#xE9;ricas: ida e volta</h3><p>Como o nome diz, esse &#xE9; um problema que precisa de uma ida (de <em>str </em>para <em>int</em>, de forma a possibilitar a soma), mas precisa de um retorno (de <em>int</em> para <em>str</em>, para possibilitar a concatena&#xE7;&#xE3;o).</p><p>Para resolver o problema, &#xE9; preciso converter a string &apos;222&apos; no n&#xFA;mero (int) 222, o que possibilita somar um ao n&#xFA;mero (processo = processo + 1).</p><p>Uma vez que voc&#xEA; tem o n&#xFA;mero 223, voc&#xEA; pode convert&#xEA;-lo em string, para que possa ser concatenado &#xE0; classe (como no exerc&#xED;cio anterior).</p><h3 id="problema-3-extraindo-trechos-de-uma-string">Problema 3. Extraindo trechos de uma string</h3><p>Nesse caso, voc&#xEA; pode usar o nosso modelo de estrat&#xE9;gia de extrair strings, usando como marcador de in&#xED;cio o trecho antes do nome do relator:</p><pre><code>MarcadorInicio = &apos;Relator:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;&apos;
</code></pre><p>O marcador de fim pode ser o trecho que vem logo depois do nome do relator, ou seja:</p><pre><code>MarcadorFim = &apos;&lt;/strong&gt;&apos;</code></pre><p>Note que, em HTML, o nome do relator aparece marcado em negrito, e a marca&#xE7;&#xE3;o do trecho em negrito &#xE9; iniciada pelo &lt;strong&gt; e encerrado pelo &lt;/strong&gt;. </p><p>No trecho do c&#xF3;digo contido no problema, h&#xE1; v&#xE1;rias ocorr&#xEA;ncias dessas express&#xF5;es do tipo &apos;&lt;formata&#xE7;&#xE3;o&gt; algum texto &lt;/formata&#xE7;&#xE3;o&gt;&apos;, pois os primeiros marcadores indicam o in&#xED;cio da aplica&#xE7;&#xE3;o da formata&#xE7;&#xE3;o (&lt;pre&gt;, &lt;div&gt;, &lt;table&gt;), enquanto os segundos termos, com a barra, indicam o final da formata&#xE7;&#xE3;o (&lt;/pre&gt;, &lt;/div&gt;, &lt;/table&gt; do texto contido entre essas duas express&#xF5;es. </p><p>Note que, repetidas vezes, o trecho que buscamos se encontra dentro de um par desse tipo de marca&#xE7;&#xF5;es de formata&#xE7;&#xE3;o.</p><h2 id="2-resolu-o-em-video">2. <a href="https://www.youtube.com/watch?v=odwEVvMpmTo&amp;ref=code.arcos.org.br">Resolu&#xE7;&#xE3;o em video</a></h2>]]></content:encoded></item><item><title><![CDATA[Funções e Módulos]]></title><description><![CDATA[<p>Neste curso, voc&#xEA; aprendeu a fazer alguns programas simples: imprimir certos termos, separar valores em uma string, extrair substrings de uma string maior, gerar listas. N&#xE3;o s&#xE3;o programas suficientemente complexos para resolver problemas reais, mas s&#xE3;o um passo nesse sentido, pois voc&#xEA;</p>]]></description><link>https://code.arcos.org.br/programas-funcoes-e-modulos/</link><guid isPermaLink="false">644a852ad9432f055b15cc85</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Sat, 30 Jan 2021 23:05:47 GMT</pubDate><content:encoded><![CDATA[<p>Neste curso, voc&#xEA; aprendeu a fazer alguns programas simples: imprimir certos termos, separar valores em uma string, extrair substrings de uma string maior, gerar listas. N&#xE3;o s&#xE3;o programas suficientemente complexos para resolver problemas reais, mas s&#xE3;o um passo nesse sentido, pois voc&#xEA; est&#xE1; aprendendo sobre os elementos que efetivamente comp&#xF5;em os programas como:</p><ol><li>vari&#xE1;veis</li><li>express&#xF5;es condicionais</li><li>iteradores</li><li>listas</li></ol><p>No caminho de desenvolver programas realmente &#xFA;teis, o primeiro passo &#xE9; voc&#xEA; aprender a <em>definir fun&#xE7;&#xF5;es</em>. </p><p>No primeiro m&#xF3;dulo, voc&#xEA; aprendeu a usar fun&#xE7;&#xF5;es para estabelecer comandos execut&#xE1;veis. At&#xE9; agora, usamos apenas as <em>fun&#xE7;&#xF5;es nativas</em> do Python, que s&#xE3;o fun&#xE7;&#xF5;es contidas no pr&#xF3;prio c&#xF3;digo da linguagem. Neste m&#xF3;dulo, voc&#xEA; aprender&#xE1; a desenvolver novas fun&#xE7;&#xF5;es, a partir dos elementos que voc&#xEA; j&#xE1; conhece e aprender&#xE1; a agrupar fun&#xE7;&#xF5;es dentro de um m&#xF3;dulo.</p><h2 id="1-fun-es">1. Fun&#xE7;&#xF5;es</h2><h3 id="1-1-definindo-fun-es">1.1 Definindo fun&#xE7;&#xF5;es</h3><p>Voc&#xEA; j&#xE1; aprendeu que n&#xE3;o &#xE9; poss&#xED;vel explicar para o Python o significado abstrato de uma vari&#xE1;vel: o que voc&#xEA; pode fazer &#xE9; atribuir um valor a um nome, o que faz com que esse nome sirva como uma vari&#xE1;vel. </p><p>Com as fun&#xE7;&#xF5;es ocorre a mesma coisa: voc&#xEA; cria fun&#xE7;&#xF5;es por meio da defini&#xE7;&#xE3;o de que um certo <em>nome</em> corresponder&#xE1; a um conjunto de instru&#xE7;&#xF5;es, por meio da utiliza&#xE7;&#xE3;o da fun&#xE7;&#xE3;o <em>def</em>.</p><pre><code class="language-Python">def curso():
	print (&apos;Este &#xE9; o m&#xF3;dulo final do curso Python Para Juristas&apos;)</code></pre><p>Esse c&#xF3;digo define como a fun&#xE7;&#xE3;o <em>curso() </em>o comando de imprimir o texto acima. Note que, se voc&#xEA; copiar esse c&#xF3;digo para o seu Editor e execut&#xE1;-lo, a frase n&#xE3;o ser&#xE1; impressa porque ele faz uma <em>defini&#xE7;&#xE3;o de fun&#xE7;&#xE3;o</em>, mas n&#xE3;o faz um <em>function call</em>, ou seja, n&#xE3;o instrui o interpretador a executar a fun&#xE7;&#xE3;o definida.</p><p>J&#xE1; o c&#xF3;digo abaixo tem uma defini&#xE7;&#xE3;o de fun&#xE7;&#xE3;o e um comando para que ela seja executada, motivo pelo qual a frase definida aparecer&#xE1; no seu console.</p><pre><code class="language-python">def curso():
	print (&apos;Este &#xE9; o m&#xF3;dulo final do curso Python Para Juristas&apos;)

curso()</code></pre><p>Repare que o nome da fun&#xE7;&#xE3;o definida n&#xE3;o &#xE9; <em>curso</em>, mas <em>curso()</em>, porque toda fun&#xE7;&#xE3;o que voc&#xEA; definir precisa ter esses par&#xEA;nteses, sob pena de voc&#xEA; receber um SyntaxError, j&#xE1; que a sintaxe da defini&#xE7;&#xE3;o das fun&#xE7;&#xF5;es exige esses par&#xEA;nteses porque, dentro dele, voc&#xEA; precisa indicar as vari&#xE1;veis que precisam ser definidas para que que a fun&#xE7;&#xE3;o possa gerar um comando execut&#xE1;vel.</p><h3 id="1-2-fun-es-vari-veis-e-par-metros">1.2 Fun&#xE7;&#xF5;es, vari&#xE1;veis e par&#xE2;metros</h3><p>Neste caso espec&#xED;fico, n&#xE3;o h&#xE1; vari&#xE1;veis, pois voc&#xEA; instrui a impres&#xE3;o de uma string predefinida. Por&#xE9;m, esse n&#xE3;o &#xE9; o caso padr&#xE3;o, porque as fun&#xE7;&#xF5;es que voc&#xEA; define normalmente instruem comandos que utilizam certas vari&#xE1;veis.</p><pre><code class="language-Python">def curso(modulo):
	print (&apos;Este &#xE9; o m&#xF3;dulo &apos; + modulo + &apos; do curso Python Para Juristas&apos;)
    
curso(&apos;4&apos;)</code></pre><p>Nesse caso, a string a ser impressa utiliza o valor da variavem modulo, que funciona como <em>par&#xE2;metro</em> da fun&#xE7;&#xE3;o. Par&#xE2;metros s&#xE3;o os elementos que v&#xEA;m entre par&#xEA;nteses e que voc&#xEA; precisa fornecer toda vez que chama a fun&#xE7;&#xE3;o, para que a combina&#xE7;&#xE3;o fun&#xE7;&#xF5;es + par&#xE2;metros possa constituir um comando execut&#xE1;vel, tal como:</p><pre><code class="language-python"># defini&#xE7;&#xE3;o da fun&#xE7;&#xE3;o, com o par&#xE2;metro modulo
def curso(modulo):
	print (&apos;Este &#xE9; o m&#xF3;dulo &apos; + modulo + &apos; do curso Python Para Juristas&apos;)
  
#chamada da fun&#xE7;&#xE3;o com o argumento &apos;4&apos;
curso(&apos;4&apos;)</code></pre><p>Observe que o par&#xE2;metro da fun&#xE7;&#xE3;o curso() &#xE9; necessariamente uma string, pois usamos como par&#xE2;metro do print() uma concatena&#xE7;&#xE3;o de strings. Se voc&#xEA; quiser deixar essa fun&#xE7;&#xE3;o mais <em>robusta </em>(ou seja, menos sujeita a gerar erros), &#xE9; poss&#xED;vel inserir dentro do print o comando str(modulo), pois isso permitir&#xE1; que voc&#xEA; insira tamb&#xE9;m outros tipos de vari&#xE1;veis (como as num&#xE9;ricas) como argumento da fun&#xE7;&#xE3;o m&#xF3;dulo.</p><blockquote>Embora essa distin&#xE7;&#xE3;o n&#xE3;o seja sempre respeitada nos textos sobre Python, h&#xE1; uma diferen&#xE7;a entre <em>par&#xE2;metro</em> (que s&#xE3;o as vari&#xE1;veis que comp&#xF5;em as fun&#xE7;&#xF5;es definidas, e devem vir entre par&#xEA;nteses no momento do uso do <em>def</em>) e <em>argumento </em>(que s&#xE3;o os valores que voc&#xEA; define concretamente no momento em que faz o <em>function call</em>).</blockquote><h3 id="1-3-fun-o-input-">1.3 fun&#xE7;&#xE3;o input()</h3><p>Este &#xE9; um bom momento para voc&#xEA; aprender uma nova fun&#xE7;&#xE3;o, que permite a introdu&#xE7;&#xE3;o de novos valores pelos usu&#xE1;rios do programa: <em>input(). </em>Essa fun&#xE7;&#xE3;o opera conferindo valor a uma vari&#xE1;vel que voc&#xEA; definiu, como na linha 2 do c&#xF3;digo abaixo:</p><pre><code class="language-Python"># define que uma vari&#xE1;vel textoinformado ser&#xE1; preenchida pelo usu&#xE1;rio, como input
textoinformado = input(&apos;Insira o n&#xFA;mero do m&#xF3;dulo:  &apos;)

# defini&#xE7;&#xE3;o da fun&#xE7;&#xE3;o, com o par&#xE2;metro modulo
def curso(modulo):
    print(&apos;Este &#xE9; o m&#xF3;dulo &apos; + str(modulo) + &apos; do curso Python Para Juristas&apos;)
  
#chamada da fun&#xE7;&#xE3;o com o argumento o valor da vari&#xE1;vel modulo
curso(textoinformado)</code></pre><p>Observe que a sintaxe do input funciona assim: voc&#xEA; define o input() como valor de uma vari&#xE1;vel, e como argumento do pr&#xF3;prio input() voc&#xEA; coloca a frase que quer que apare&#xE7;a no console. &#xC9; no console que os programas s&#xE3;o efetivamente executados e e l&#xE1; que voc&#xEA; tem de dar o input (no editor, voc&#xEA; edita algoritmos, mas n&#xE3;o executa nada).</p><h3 id="1-4-fun-o-com-m-ltiplos-par-metros">1.4 Fun&#xE7;&#xE3;o com m&#xFA;ltiplos par&#xE2;metros</h3><p>Voc&#xEA; pode ter uma fun&#xE7;&#xE3;o com v&#xE1;rios par&#xE2;metros, dependendo da complexidade das instru&#xE7;&#xF5;es a serem executadas. Nos m&#xF3;dulos anteriores, trabalhamos a estrat&#xE9;gia de extrair um texto de uma string, a partir de um marcador de in&#xED;cio e um marcador de fim. Por se tratar de uma instru&#xE7;&#xE3;o que &#xE9; repetida exaustivamente em nossos programas, &#xE9; muito &#xFA;til criar uma fun&#xE7;&#xE3;o para que voc&#xEA; possa repetir essa l&#xF3;gica com um comando apenas.</p><p>Que par&#xE2;metros precisamos definir para essa fun&#xE7;&#xE3;o de extra&#xE7;&#xE3;o? Se voc&#xEA; refletir com cuidado, deve concluir que s&#xE3;o 3:</p><ol><li>string na qual se deve buscar o texto a a extrair</li><li>marcador de in&#xED;cio</li><li>marcador de fim.</li></ol><p>Com esses tr&#xEA;s par&#xE2;metros, voc&#xEA; pode definir uma fun&#xE7;&#xE3;o como:</p><pre><code class="language-Python"># define fun&#xE7;&#xE3;o extrair
def extrair(string, marcador_de_inicio, marcador_de_fim):
    inicio = string.find(marcador_de_inicio)
    fim = string.find(marcador_de_fim, inicio)
    texto = string[inicio + len(marcador_de_inicio):fim]
    print (texto)
    
# atribui valor &#xE0; vari&#xE1;vel informacoes
informacoes = &apos;ADI2343242, Relator: Rosa Weber, Requerente: Indefinido, Requerido: n&#xE3;o consta&apos;
        
# function call
extrair(informacoes, &apos;Relator:&apos;,&apos;,&apos;)</code></pre><p>A l&#xF3;gica dessas instru&#xE7;&#xF5;es j&#xE1; foi definida no m&#xF3;dulo anterior. Neste momento, trata-se apenas de gerar uma fun&#xE7;&#xE3;o com as cuja estrutura voc&#xEA; j&#xE1; conhecia. </p><p>Veja que todos os par&#xE2;metros que voc&#xEA; definir devem ser usados dentro das instru&#xE7;&#xF5;es que comp&#xF5;em a fun&#xE7;&#xE3;o. Se voc&#xEA; n&#xE3;o fizer isso, o Python vai te avisar que h&#xE1; um par&#xE2;metro definido, mas n&#xE3;o usado.</p><h3 id="1-5-isolamento-do-processamento-das-fun-es">1.5 Isolamento do processamento das fun&#xE7;&#xF5;es</h3><p>Se voc&#xEA; tiver a curiosidade de observar o seu Variable Explorer, notar&#xE1; uma coisa curiosa: n&#xE3;o aparecem neles os par&#xE2;metros da sua fun&#xE7;&#xE3;o. Isso ocorre porque todo o processamento das fun&#xE7;&#xF5;es ocorre de uma maneira independente, que n&#xE3;o interfere com o conte&#xFA;do das vari&#xE1;veis do seu programa. </p><p>Tal como ocorre em certas festa, o que acontece no processamento da fun&#xE7;&#xE3;o, permanece na fun&#xE7;&#xE3;o e n&#xE3;o passa para o seu programa. Esse isolamento &#xE9; &#xFA;til especialmente porque pode acontecer de a fun&#xE7;&#xE3;o usar certas vari&#xE1;veis que v&#xE3;o ter o mesmo nome de vari&#xE1;veis do seu programa, o que acarretaria uma rea&#xE7;&#xE3;o em cadeia indesejada. Imagine, por exemplo, que reescrev&#xEA;ssemos o c&#xF3;digo do item 1.3, acima, chamando de <em>modulo</em> a vari&#xE1;vel que nele constava como <em>textoinformado</em>:</p><pre><code class="language-Python"># define que uma vari&#xE1;vel textoinformado ser&#xE1; preenchida pelo usu&#xE1;rio, como input
modulo = input(&apos;Insira o n&#xFA;mero do m&#xF3;dulo:  &apos;)

# defini&#xE7;&#xE3;o da fun&#xE7;&#xE3;o, com o par&#xE2;metro modulo
def curso(modulo):
    print(&apos;Este &#xE9; o m&#xF3;dulo &apos; + str(modulo) + &apos; do curso Python Para Juristas&apos;)
    modulo = 25
  
#chamada da fun&#xE7;&#xE3;o com o argumento o valor da vari&#xE1;vel modulo
curso(modulo)</code></pre><p>Se voc&#xEA; executar esse c&#xF3;digo e inserir como input 4, o resultado da function call utilizar&#xE1; o argumento 4, e n&#xE3;o o valor 25, que foi definido para a vari&#xE1;vel m&#xF3;dulo <em>dentro da fun&#xE7;&#xE3;o</em>. </p><p>A vantagem desse isolamento &#xE9; justamente essa: quando voc&#xEA; usa fun&#xE7;&#xF5;es feitas por outras pessoas, voc&#xEA; n&#xE3;o sabe quais s&#xE3;os as vari&#xE1;veis utilizadas dentro delas, mas isso n&#xE3;o &#xE9; um problema porque, mesmo que usem vari&#xE1;veis com nomes bastante comuns (<em>a</em>, <em>x</em>, <em>nome</em>, <em>number</em>, <em>n</em>, etc.), voc&#xEA; n&#xE3;o precisa se preocupar com o modo como esses valores v&#xE3;o interagir com o seu c&#xF3;digo.</p><p>Por outro lado, voc&#xEA; deve sempre ter em mente que n&#xE3;o adianta criar vari&#xE1;veis dentro de um c&#xF3;digo e &#xA0;depois tentar utilizar esses valores no seu programa. Ocorre, por&#xE9;m, que muitas vezes &#xE9; exatamente isso o que voc&#xEA; quer: gerar fun&#xE7;&#xF5;es que gerem alguns valores espec&#xED;ficos. O nosso modo de romper esse isolamento &#xE9; introduzir dentro da sua fun&#xE7;&#xE3;o o elemento <em>return()</em>.</p><h3 id="1-5-return-">1.5 Return()</h3><p>O <em>return()</em> permite que valores gerados dentro de uma fun&#xE7;&#xE3;o sejam atribu&#xED;dos a vari&#xE1;veis do seu programa. Isso &#xE9; mais f&#xE1;cil de ser compreendido por um exemplo, modificando um pouco a nossa fun&#xE7;&#xE3;o de extra&#xE7;&#xE3;o, trocando o <em>print (texto) </em>por <em>return(texto).</em></p><p>Isso aprimora a nossa fun&#xE7;&#xE3;o porque, de fato, n&#xE3;o queremos imprimir um texto na tela, mas queremos extrair as informa&#xE7;&#xF5;es relevantes e atribu&#xED;-las a vari&#xE1;veis que possam ser trabalhadas: arquivadas em listas, processadas por outras fun&#xE7;&#xF5;es, gravadas em arquivos, etc.</p><p>No c&#xF3;digo abaixo, tomamos a fun&#xE7;&#xE3;o extrair e acrescentamos um return(), de forma que podemos atribuir o resultado da fun&#xE7;&#xE3;o a certas vari&#xE1;veis, que depois inserimos em uma lista. Esse c&#xF3;digo vai ficando maior e mais complexo, mas j&#xE1; temos um programa capaz de resolver um problema pr&#xE1;tico.</p><pre><code class="language-Python"># define fun&#xE7;&#xE3;o extrair
def extrair(string, marcador_de_inicio, marcador_de_fim):
    inicio = string.find(marcador_de_inicio)
    fim = string.find(marcador_de_fim, inicio)
    texto = string[inicio + len(marcador_de_inicio):fim]
    return (texto)
    
# atribui valor &#xE0; vari&#xE1;vel informacoes
informacoes = &apos;Processo: ADI5000, Relator: Rosa Weber, Requerente: Governador de SP, Resultado: Prejudicado&apos;
        
# cria uma lista para arquivar os dados extra&#xED;dos
lista_de_dados = []

# atribui valor &#xE0;s vari&#xE1;veis escolhidas
processo = extrair(informacoes, &apos;Processo:&apos;, &apos;,&apos;)
relator = extrair(informacoes, &apos;Relator:&apos;, &apos;,&apos;)
requerente = extrair(informacoes, &apos;Requerente: &apos;, &apos;,&apos;)

# insere os dados na lista
lista_de_dados.append(processo)
lista_de_dados.append(relator)
lista_de_dados.append(requerente)

print (lista_de_dados)</code></pre><p>Extrair esses dados da lista acima &#xE9; f&#xE1;cil, pois &#xE9; uma lista de dados previamente organizados, limpos e numa ordem clara. Por&#xE9;m, um programa com essa mesma estrutura (adaptando apenas os marcadores de in&#xED;cio e de fim) &#xE9; capaz de extrair os dados das informa&#xE7;&#xF5;es processuais reais, fornecidas pelo STF, na forma longas strings. A habilidade de fazer essa extra&#xE7;&#xE3;o real ser&#xE1; trabalhada no in&#xED;cio dos m&#xF3;dulos de <a href="https://dsd.arcos.org.br/tag/datamining/?ref=code.arcos.org.br">Data Mining Judicial</a>, para a qual este curso introdut&#xF3;rio ao Python prepara voc&#xEA;s.</p><h3 id="1-6-criando-m-dulos">1.6 Criando m&#xF3;dulos</h3><p>Uma vez que voc&#xEA; cria uma fun&#xE7;&#xE3;o interessante, &#xE9; bem prov&#xE1;vel que voc&#xEA; n&#xE3;o queira us&#xE1;-la somente no programa que voc&#xEA; est&#xE1; fazendo, mas tamb&#xE9;m em outros. </p><p>Uma boa fun&#xE7;&#xE3;o de extra&#xE7;&#xE3;o ser&#xE1; usada, por exemplo, ser&#xE1; provavelmente usada em v&#xE1;rios programas e, por esse motivo, voc&#xEA; pode grav&#xE1;-la em um m&#xF3;dulo de fun&#xE7;&#xF5;es, que poder&#xE3;o ser carregadas em outros programas. Como fazer isso?</p><p>Primeiro, &#xE9; preciso ter uma fun&#xE7;&#xE3;o a ser gravada. Tomemos, por exemplo, a fun&#xE7;&#xE3;o de extra&#xE7;&#xE3;o desenvolvida acima. Crie um novo arquivo no Spyder e cole nele a fun&#xE7;&#xE3;o abaixo.</p><pre><code class="language-Python"># define fun&#xE7;&#xE3;o extrair
def extrair(string, marcador_de_inicio, marcador_de_fim):
    inicio = string.find(marcador_de_inicio)
    fim = string.find(marcador_de_fim, inicio)
    texto = string[inicio + len(marcador_de_inicio):fim]
    return (texto)</code></pre><p>Salve o arquivo, nomenando-o como modulo.py. Est&#xE1; criado o seu primeiro m&#xF3;dulo, composto por uma fun&#xE7;&#xE3;o. </p><p>Observe que o Spyder deve ter gravado o modulo.py no seu diret&#xF3;rio de trabalho (working directory), que &#xE9; a pasta que voc&#xEA; define previamente como local de grava&#xE7;&#xE3;o padr&#xE3;o dos seus arquivos. Voc&#xEA; pode fazer isso no menu Tools: Preferences, que pode ser acessado pelo s&#xED;mbolo da chave de fenda nos bot&#xF5;es do seu menu. </p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-71.png" class="kg-image" alt loading="lazy" width="1052" height="678" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-71.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-71.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-71.png 1052w" sizes="(min-width: 720px) 720px"></figure><p>Eu uso o C:/Python como diret&#xF3;rio de trabalho, mas voc&#xEA; pode escolher qualquer pasta no seu computador. Facilita a sua vida, especialmente nesse in&#xED;cio, que todos os programas fiquem nesse diret&#xF3;rio porque voc&#xEA; poder&#xE1; importar as fun&#xE7;&#xF5;es dos m&#xF3;dulos gravados nele com uma fun&#xE7;&#xE3;o muito simples:</p><pre><code>from modulo import extrair</code></pre><p>Uma vez importada a fun&#xE7;&#xE3;o, voc&#xEA; pode us&#xE1;-la no seu programa, sem ter de repetir os seus termos. Por&#xE9;m, todas as fun&#xE7;&#xF5;es do m&#xF3;dulo extrair dever&#xE3;o ser referidas dentro do programa como modulo.nomedafun&#xE7;&#xE3;o (no caso modulo.extrair).</p><p> Usando esse m&#xF3;dulo, nosso programa anterior poderia ser reescrito como:</p><pre><code class="language-Python"># importa modulo
import modulo
    
# atribui valor &#xE0; vari&#xE1;vel informacoes
informacoes = &apos;Processo: ADI5000, Relator: Rosa Weber, Requerente: Governador de SP, Resultado: Prejudicado&apos;
        
# cria uma lista para arquivar os dados extra&#xED;dos
lista_de_dados = []

# function call: func&#xE3;o + argumentos
processo = modulo.extrair(informacoes, &apos;Processo:&apos;, &apos;,&apos;)
relator = modulo.extrair(informacoes, &apos;Relator:&apos;, &apos;,&apos;)
requerente = modulo.extrair(informacoes, &apos;Requerente: &apos;, &apos;,&apos;)

# insere os dados na lista
lista_de_dados.append(processo)
lista_de_dados.append(relator)
lista_de_dados.append(requerente)

print (lista_de_dados)</code></pre><p>Voc&#xEA; logo ter&#xE1; um m&#xF3;dulo que n&#xE3;o tem apenas uma fun&#xE7;&#xE3;o mas v&#xE1;rias, desenvolvidas especialmente para os nossos programas de data mining (extratores de dados e geradores de bancos de dados):</p><ul><li>fun&#xE7;&#xE3;o de extra&#xE7;&#xE3;o de dados</li><li>fun&#xE7;&#xE3;o de grava&#xE7;&#xE3;o</li><li>fun&#xE7;&#xE3;o de abrir arquivos</li><li>fun&#xE7;&#xE3;o de gerar tabelas</li></ul><p>De fato, disponibilizaremos para voc&#xEA; as fun&#xE7;&#xF5;es desenvolvidas no curso, em um m&#xF3;dulo que voc&#xEA;s poder&#xE3;o utilizar nos seus pr&#xF3;prios programas, importando as fun&#xE7;&#xF5;es que voc&#xEA;s desejarem.</p><p>Em vez de importar os m&#xF3;dulos, voc&#xEA; pode importar diretamente as fun&#xE7;&#xF5;es, de tal forma que elas possam ser referidas apenas pelo seu nome.Para isso, voc&#xEA; pode usar um comando do tipo:</p><pre><code class="language-Python">from modulo import extrair</code></pre><p> Com isso, voc&#xEA; n&#xE3;o importaria o m&#xF3;dulo (com todas as suas fun&#xE7;&#xF5;es), mas uma fun&#xE7;&#xE3;o espec&#xED;fica (que manteria o seu pr&#xF3;prio nome). Com isso, voc&#xEA; poderia continuar usando no programa apenas o nome <em>extrair</em>, em vez do <em>modulo.extrair.</em></p><h3 id="1-7-pacotes-e-bibliotecas">1.7 Pacotes e Bibliotecas</h3><p>Uma vez que um m&#xF3;dulo seja suficientemente desenvolvido, ele pode ser composto por v&#xE1;rias fun&#xE7;&#xF5;es complexas, capazes de resolver bem o problemas de um determinado campo (data mining, estat&#xED;stica, visualiza&#xE7;&#xE3;o de dados, etc.). </p><p>Uma vez que esse desenvolvimento esteja amadurecido, o desenvolvedor normalmente conta com alguns m&#xF3;dulos especializados, que podem ser consolidados na forma de um pacote (package), que &#xE9; uma cole&#xE7;&#xE3;o de m&#xF3;dulos organizados <a href="https://docs.python.org/3/tutorial/modules.html?ref=code.arcos.org.br#packages">de uma forma determinada</a>, para que eles possam ser importados conjuntamente. </p><blockquote>Just like the use of modules saves the authors of different modules from having to worry about each other&#x2019;s global variable names, the use of dotted module names saves the authors of multi-module packages like NumPy or Pillow from having to worry about each other&#x2019;s module names. (<a href="https://docs.python.org/3/tutorial/modules.html?ref=code.arcos.org.br#packages">Python Tutorial: Modules</a>)</blockquote><p>Uma vez que esses pacotes sejam publicados &#xA0;(normalmente no <a href="https://packaging.python.org/tutorials/installing-packages/?ref=code.arcos.org.br">Python Package Index (PyPI)</a>), eles passam a ser chamados pelo nome gen&#xE9;rico de <em>bibliotecas</em> (<em>libraries</em>). Biblioteca pode ser um m&#xF3;dulo, um pacote ou um conjunto de pacotes, a depender de seu tamanho e complexidade. Por&#xE9;m, ele deve estar organizado de tal forma que voc&#xEA; pode instal&#xE1;-lo no seu computador, o que permitir&#xE1; a sua importa&#xE7;&#xE3;o para os seus programas.</p><blockquote>Lembre-se: instalar um m&#xF3;dulo ou um pacote faz com que eles estejam dispon&#xED;veis para os seus programas, mas &#xE9; sempre necess&#xE1;rio importar o m&#xF3;dulo ou a biblioteca, para que as suas fun&#xE7;&#xF5;es sejam execut&#xE1;veis dentro de um programa espec&#xED;fico.</blockquote><p>Em breve, voc&#xEA; se acostumar&#xE1; com importar algumas das bibliotecas de Python mais usadas: pandas, os, time, beautifulsoup, etc. Essas bibliotecas s&#xE3;o fruto do trabalhos de programadores (como voc&#xEA;!), que disponibilizam seu trabalho para outras pessoas utilizarem, normalmente utilizando licen&#xE7;as que permitem o uso e modifica&#xE7;&#xE3;o dos programas, contribuindo para a constru&#xE7;&#xE3;o coletiva de novos desenvolvimentos.</p><h3 id="1-8-pip">1.8 PIP</h3><p>Para instalar pacotes (packages) no Python, voc&#xEA; conta com uma &#xF3;tima ferramenta: <a href="https://pypi.org/project/pip/?ref=code.arcos.org.br">pip</a>. O pip j&#xE1; vem instalado no Anaconda e, com isso, voc&#xEA; pode instalar novos pacotes a partir do console do Spyder ou prompt de comando. </p><p>Por exemplo, se voc&#xEA; quiser instalar a biblioteca <em>arrow</em>, que lida com datas, basta inserir o comando: </p><pre><code class="language-Python">pip install arrow</code></pre><p>Como saber isso? Quando voc&#xEA; encontra uma biblioteca em python, ela provavelmente far&#xE1; parte da <a href="https://packaging.python.org/tutorials/installing-packages/?ref=code.arcos.org.br">Python Package Index (PyPI)</a>, o que significa que ela pode ser instalada via pip. Quando voc&#xEA; abre a p&#xE1;gina de uma dessas bibliotecas, uma das primeiras coisas que aparece &#xE9; justamente o comando de instala&#xE7;&#xE3;o, inclusive com um bot&#xE3;o que j&#xE1; copia o comando para a sua &#xE1;rea de transfer&#xEA;ncia.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/02/image.png" class="kg-image" alt loading="lazy" width="863" height="657" srcset="https://code.arcos.org.br/content/images/size/w600/2021/02/image.png 600w, https://code.arcos.org.br/content/images/2021/02/image.png 863w" sizes="(min-width: 720px) 720px"></figure><p>Assim, quando voc&#xEA; encontrar na internet indica&#xE7;&#xF5;es de que uma determinada biblioteca cont&#xE9;m fun&#xE7;&#xF5;es adequadas para o seu programa, basta fazer a sua instala&#xE7;&#xE3;o.</p><blockquote>Lembre-se: instalar a biblioteca &#xE9; um passo necess&#xE1;rio para utiliz&#xE1;-la (embora v&#xE1;rias j&#xE1; estejam instaladas via Anaconda), mas para usar a fun&#xE7;&#xE3;o dentro de um programa espec&#xED;fico, &#xE9; preciso importar o m&#xF3;dulo ou pacote para o seu programa.</blockquote><h2 id="1-9-github">1.9 Github</h2><p>O come&#xE7;ar a desenvolver projetos, voc&#xEA; fatalmente entrar&#xE1; em contato com a plataforma github.com, que &#xE9; voltada a hospedar programas, que usam a ferramenta como sistema de controle de vers&#xE3;o.</p><p>O controle de vers&#xE3;o &#xE9; uma funcionalidade importante no desenvolvimento de software, pois ele permite a introdu&#xE7;&#xE3;o controlada de inova&#xE7;&#xF5;es no seu c&#xF3;digo, mantendo uma mem&#xF3;ria das mudan&#xE7;as e possibilitando um desenvolvimento colaborativo.</p><p>O github funciona como um reposit&#xF3;rio tanto de programas quanto de bases de dados. Veja, por exemplo, o excelente site da Johns Hopkins que consolida dados sobre a covid:</p><blockquote><a href="https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html?ref=code.arcos.org.br#/bda7594740fd40299423467b48e9ecf6">COVID-19 Dashboard by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University (JHU)</a></blockquote><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/02/image-1.png" class="kg-image" alt loading="lazy" width="1276" height="576" srcset="https://code.arcos.org.br/content/images/size/w600/2021/02/image-1.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/02/image-1.png 1000w, https://code.arcos.org.br/content/images/2021/02/image-1.png 1276w" sizes="(min-width: 720px) 720px"></figure><p>Se voc&#xEA; olhar no centro da tela, na parte de baixo, encontrar&#xE1; um link para as bases de dados consolidadas, que foram disponibilizadas no GitHub, onde voc&#xEA; pode fazer o download de um conjunto bastante amplo de dados sobre infec&#xE7;&#xF5;es e mortes causadas pela Covid-19 ao redor do mundo. <br></p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/02/image-2.png" class="kg-image" alt loading="lazy" width="790" height="802" srcset="https://code.arcos.org.br/content/images/size/w600/2021/02/image-2.png 600w, https://code.arcos.org.br/content/images/2021/02/image-2.png 790w" sizes="(min-width: 720px) 720px"></figure><p>Um programa que est&#xE1; no Github pode ser baixado e voc&#xEA; pode apresentar propostas de aprimoramento ou desenvolvimento. Assim, vale a pena voc&#xEA; criar sua conta no GitHub, para poder ter um acesso facilitado a essas funcionalidades e para participar do desenvolvimento colaborativo dos c&#xF3;digos da disciplina.</p><p>Inclusive, &#xE9; neste site que est&#xE1; o m&#xF3;dulo <a href="https://github.com/AlexandreAraujoCosta/DSD/blob/main/dsd.py?ref=code.arcos.org.br">dsd.py</a>, que utilizaremos nos programas desenvolvidos na disciplina. H&#xE1; duas formas simples de baixar arquivos do projeto dsd. </p><p>A primeira &#xE9; entrar no <a href="https://github.com/AlexandreAraujoCosta/DSD_modulo?ref=code.arcos.org.br">reposit&#xF3;rio </a>e clicar no bot&#xE3;o verde &apos;Code&apos;, que abre uma op&#xE7;&#xE3;o de fazer o &apos;Download ZIP&apos;, que baixar&#xE1; todos os arquivos.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/02/image-3.png" class="kg-image" alt loading="lazy" width="815" height="503" srcset="https://code.arcos.org.br/content/images/size/w600/2021/02/image-3.png 600w, https://code.arcos.org.br/content/images/2021/02/image-3.png 815w" sizes="(min-width: 720px) 720px"></figure><p>Tamb&#xE9;m h&#xE1; uma forma de baixar apenas um arquivo, mas ela &#xE9; menos evidente. Basta clicar no nome do arquivo que se quer baixar (no caso, o <a href="https://github.com/AlexandreAraujoCosta/DSD_modulo/blob/main/dsd.py?ref=code.arcos.org.br">dsd.py</a>) que somos levados para a <a href="https://github.com/AlexandreAraujoCosta/DSD_modulo/blob/main/dsd.py?ref=code.arcos.org.br">p&#xE1;gina do arquivo</a>. Nela, existe uma op&#xE7;&#xE3;o Raw, que abre uma p&#xE1;gina com o texto do c&#xF3;digo. </p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/02/image-4.png" class="kg-image" alt loading="lazy" width="803" height="489" srcset="https://code.arcos.org.br/content/images/size/w600/2021/02/image-4.png 600w, https://code.arcos.org.br/content/images/2021/02/image-4.png 803w" sizes="(min-width: 720px) 720px"></figure><p>A p&#xE1;gina <em>raw </em>cont&#xE9;m apenas o c&#xF3;digo bruto e n&#xE3;o h&#xE1; um bot&#xE3;o de salvar. Por&#xE9;m, se voc&#xEA; clicar no texto com o bot&#xE3;o direito do mouse, pode escolher &apos;Salvar Como&apos; (Ctrl-S), o que possibilita salvar o arquivo dsd.py em qualquer diret&#xF3;rio que voc&#xEA; desejar. Sugerimos que voc&#xEA; o salve no seu diret&#xF3;rio de trabalho, ou no diret&#xF3;rio em que voc&#xEA; pretende gravar os arquivos com os programas a serem desenvolvidos na disciplina.</p>]]></content:encoded></item><item><title><![CDATA[Lista de Exercícios 1]]></title><description><![CDATA[<p>Esta lista de exerc&#xED;cios foi desenvolvida em Jupyter Notebook, que &#xE9; um leitor de livros interativos. Por isso, para abrir o arquivo da Lista de Exerc&#xED;cios 1, voc&#xEA; precisa de utilizar este aplicativo, que faz parte do Anaconda Navigator (instalado no M&#xF3;dulo 1</p>]]></description><link>https://code.arcos.org.br/lista-de-exercicios-1/</link><guid isPermaLink="false">644a852ad9432f055b15cc84</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Sat, 30 Jan 2021 01:52:59 GMT</pubDate><content:encoded><![CDATA[<p>Esta lista de exerc&#xED;cios foi desenvolvida em Jupyter Notebook, que &#xE9; um leitor de livros interativos. Por isso, para abrir o arquivo da Lista de Exerc&#xED;cios 1, voc&#xEA; precisa de utilizar este aplicativo, que faz parte do Anaconda Navigator (instalado no M&#xF3;dulo 1 deste curso).</p><p>Para fazer isso, o primeiro passo &#xE9; fazer o download do arquivo, clicando seguinte link &#xA0;<a href="https://www.dropbox.com/s/067g3tarfh63cxc/Lista%201.ipynb?dl=0&amp;ref=code.arcos.org.br">Lista de Exerc&#xED;cios 1</a>, que deve te levar ao seguinte aviso de que n&#xE3;o h&#xE1; um preview para os arquivos do Jupyter Notebook (arquivos tipo .ipynb), mas que voc&#xEA; pode fazer o download do arquivo.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-69.png" class="kg-image" alt loading="lazy" width="603" height="355" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-69.png 600w, https://code.arcos.org.br/content/images/2021/01/image-69.png 603w"></figure><p>Uma vez feito o download (na pasta Downloads ou no lugar que voc&#xEA; escolher no seu computador), abra o Anaconda Navigator. Normalmente, basta escrever Anaconda no prompt no canto inferior esquerdo da sua tela e voc&#xEA; via ter a op&#xE7;&#xE3;o de escolher executar esse programa.</p><p>Uma vez executado, voc&#xEA; &#xA0;ter&#xE1; uma tela como a abaixo, com v&#xE1;rios aplicativos, sendo que voc&#xEA; deve dar um Launch no Jupyter Notebook, que &#xE9; um leitor de livros interativos.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-68.png" class="kg-image" alt loading="lazy" width="1305" height="593" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-68.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-68.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-68.png 1305w" sizes="(min-width: 720px) 720px"></figure><p>Esse lauch vai executar uma inst&#xE2;ncia do Jupyter Notebook no seu navegador padr&#xE3;o, abrindo uma tela com v&#xE1;rios nomes de diret&#xF3;rios (pastas). Basta voc&#xEA; selecionar a pasta em que voc&#xEA; gravou o arquivo Lista 1.ipynb, e o Jupyter Notebook vai abrir o texto interativo da Lista 1, que come&#xE7;a assim:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-70.png" class="kg-image" alt loading="lazy" width="1136" height="575" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-70.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-70.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-70.png 1136w" sizes="(min-width: 720px) 720px"></figure><p>D&#xE1; um pouco de trabalho aprender a fazer esses passos (se voc&#xEA; precisar de uma explica&#xE7;&#xE3;o mais detalhada ainda, entre neste <a href="https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/execute.html?ref=code.arcos.org.br">link</a>), mas depois que voc&#xEA; conseguir fazer isso, ter&#xE1; uma &#xF3;tima ferramenta de exerc&#xED;cios interativos.</p>]]></content:encoded></item><item><title><![CDATA[Exercícios do Módulo 3 - Problemas intermediários]]></title><description><![CDATA[<p>Esses problemas n&#xE3;o devem ser resolvidos no Console, mas no Editor do Spyder, por meio do desenvolvimento de c&#xF3;digos que, uma vez executados, resolvam os problemas propostos.</p><h2 id="problema-1-extraindo-informa-es">Problema 1 - Extraindo informa&#xE7;&#xF5;es</h2><p>Copie o trecho abaixo para o seu Editor, definindo esse conte&</p>]]></description><link>https://code.arcos.org.br/atividade-modulo-3-problemas-intermediarios/</link><guid isPermaLink="false">644a852ad9432f055b15cc83</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Sat, 30 Jan 2021 00:43:52 GMT</pubDate><content:encoded><![CDATA[<p>Esses problemas n&#xE3;o devem ser resolvidos no Console, mas no Editor do Spyder, por meio do desenvolvimento de c&#xF3;digos que, uma vez executados, resolvam os problemas propostos.</p><h2 id="problema-1-extraindo-informa-es">Problema 1 - Extraindo informa&#xE7;&#xF5;es</h2><p>Copie o trecho abaixo para o seu Editor, definindo esse conte&#xFA;do (que &#xE9; real, pois foi extra&#xED;do do site do STF) para a vari&#xE1;vel html.</p><pre><code class="language-Python">html = &apos;&apos;&apos;&lt;div id=&quot;divImpressao&quot;&gt;&lt;div&gt;&lt;h3&gt;&lt;strong&gt;A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE (Med. Liminar) - 6000&lt;/strong&gt;&lt;/h3&gt;&lt;table width=&quot;99%&quot; cellspacing=&quot;5&quot;&gt;&lt;tr&gt;&lt;td&gt;Origem:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;RIO DE JANEIRO&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Entrada no STF:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Relator:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;MINISTRO ALEXANDRE DE MORAES&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Distribu&#xED;do:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Partes:&lt;/td&gt;&lt;td colspan=&quot;3&quot;&gt;Requerente: &lt;strong&gt;GOVERNADOR DO ESTADO DO RIO DE JANEIRO (CF 103, 00V)&lt;/strong&gt;&lt;br /&gt;Requerido :&lt;strong&gt;ASSEMBLEIA LEGISLATIVA DO ESTADO DO RIO DE JANEIRO &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong &apos;&apos;&apos;</code></pre><p>Escreva um c&#xF3;digo capaz de extrair dessa string o nome do relator (apenas o nome).</p><h2 id="p-gina-com-as-respostas"><a href="https://code.arcos.org.br/respostas-exercicio-modulo-2-2/">P&#xE1;gina com as respostas</a></h2>]]></content:encoded></item><item><title><![CDATA[Expressões condicionais e booleanos]]></title><description><![CDATA[<h2 id="1-express-es-condicionais-com-if">1. Express&#xF5;es condicionais com <em>if</em></h2><p>Para construir programas mais complexos, &#xE9; preciso construir express&#xF5;es condicionais, que criem diferentes caminhos no seu algoritmo, para diferentes valores.</p><p>Se voc&#xEA; pretende construir uma base de dados sobre as ADIs, voc&#xEA; precisa ser capaz de construir comandos que</p>]]></description><link>https://code.arcos.org.br/expressoes-condicionais-e-booleanos/</link><guid isPermaLink="false">644a852ad9432f055b15cc82</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Fri, 29 Jan 2021 21:36:01 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-express-es-condicionais-com-if">1. Express&#xF5;es condicionais com <em>if</em></h2><p>Para construir programas mais complexos, &#xE9; preciso construir express&#xF5;es condicionais, que criem diferentes caminhos no seu algoritmo, para diferentes valores.</p><p>Se voc&#xEA; pretende construir uma base de dados sobre as ADIs, voc&#xEA; precisa ser capaz de construir comandos que determinem que uma informa&#xE7;&#xE3;o seja inserida na sua base de dados, <em>se e somente se</em>, o campo classe tiver o valor &apos;ADI&apos;.</p><p>Para criar algoritmos capazes de selecionar os andamentos mais relevantes de um processo, voc&#xEA; precisa desenvolver comandos capazes de ignorar certos, se eles fizerem parte de uma lista que voc&#xEA; definiu de <em>andamentos irrelevantes </em>para a sua pesquisa.</p><p>As express&#xF5;es condicionais mais b&#xE1;sicas seguem a estrutura:</p><ol><li>Se determinada afirma&#xE7;&#xE3;o for verdadeira, ent&#xE3;o realize tal sequ&#xEA;ncia de comandos.</li></ol><p>Mas como podemos perguntar se uma afirma&#xE7;&#xE3;o &#xE9; verdadeira? Isso nos coloca frente ao conceito de vari&#xE1;veis booleanas.</p><h2 id="2-vari-veis-booleanas">2. Vari&#xE1;veis booleanas</h2><p>Existem duas vari&#xE1;veis booleanas:</p><ol><li>True</li><li>False</li></ol><p>Elas v&#xEA;m assim, escritas com inicial mai&#xFA;scula, e elas s&#xE3;o express&#xF5;es reservadas (keywords) do Python, motivo pelo qual voc&#xEA; nunca pode usar True ou False como nome de uma vari&#xE1;vel ou de uma fun&#xE7;&#xE3;o. A compreens&#xE3;o dessas vari&#xE1;veis &#xE9; um dos elementos mais filos&#xF3;ficos da teoria computacional e, de fato, a pr&#xF3;pria concep&#xE7;&#xE3;o desse tipo de vari&#xE1;vel foi um dos conceitos fundamentais desenvolvidos no s&#xE9;culo XIX, que permitiram o desenvolvimento da filosofia da linguagem no s&#xE9;culo XX.</p><p>Tudo come&#xE7;a com uma pergunta lingu&#xED;stica: </p><ul><li>a que se refere o numeral &apos;1&apos;?</li></ul><p>Como todo <em>nome</em>, o numeral um se refere a um determinado objeto. Nesse caso, o objeto referido &#xE9; o n&#xFA;mero &apos;1&apos;, que &#xE9; uma certa quantidade. J&#xE1; ressaltamos antes que n&#xE3;o devemos confundir o <em>nome do n&#xFA;mero</em>, sejam eles numerais expressos em algarismos(&apos;1&apos;, &apos;i&apos;), sejam eles expressos em letras (&apos;um&apos;, &apos;one&apos;, &apos;uno&apos;), sejam eles expressos por polin&#xF4;mios que apresentam opera&#xE7;&#xF5;es matem&#xE1;ticas (&apos;0,5 + 0,5&apos;, &apos;0,24 * 4&apos; ou &apos;10/10&apos;). O <em>referente</em> de todos esses nomes &#xE9; o mesmo: a quantidade 1.</p><p>A mesma coisa ocorre com outros nomes: Napole&#xE3;o Bonaparte se refere a uma pessoa determinada, buritirana se refere a um tipo de vegetal, a&#xE7;a&#xED; se refere a um tipo de fruta.</p><p>Mas a que se referem as frases, tais como:</p><ol><li>2 + 2 = 4</li><li>A terra gira em torno do sol.</li><li>int(&apos;1&apos;) = 1</li></ol><p>Se os termos das frases t&#xEA;m referentes concretos muito claros, &#xE9; dif&#xED;cil saber qual &#xE9; o referente da frase como um todo. Uma solu&#xE7;&#xE3;o poss&#xED;vel seria dizer: frases n&#xE3;o t&#xEA;m referentes, o que &#xE9; uma possibilidade razo&#xE1;vel. Frases (diferentemente dos termos que a comp&#xF5;em) s&#xE3;o enunciados que aparentemente n&#xE3;o apontam para nenhum objeto, para nenhuma classe, para nenhuma a&#xE7;&#xE3;o.</p><p>Essa &#xE9; uma solu&#xE7;&#xE3;o poss&#xED;vel, mas n&#xE3;o &#xE9; uma solu&#xE7;&#xE3;o adequada &#xE0; linguagens de programa&#xE7;&#xE3;o, em que toda express&#xE3;o v&#xE1;lida precisa apontar para um objeto. Mas para qual objeto podem apontar as frases? Uma solu&#xE7;&#xE3;o engenhosa foi proposta pelo matem&#xE1;tico George Boole no s&#xE9;culo XIX: todas as express&#xF5;es verdadeiras t&#xEA;m o valor Verdadeiro, todas as express&#xF5;es falsas t&#xEA;m um valor Falso.</p><p>Ocorre que, em v&#xE1;rias linguagens, o valor &#xE9; um objeto: </p><ol><li>O valor do numeral 1 &#xE9; o valor num&#xE9;rico 1.</li><li>O valor de uma string &#xE9; o conjunto de caracteres previamente defindo.</li><li>O valor de uma lista &#xE9; o conjunto ordenado de objetos que ela cont&#xE9;m.</li><li>O valor de uma express&#xE3;o que envolve o operador de identidade &#xE9; sempre <em>True </em>ou <em>False</em>, que s&#xE3;o os valores booleanos.</li></ol><p>Essa curiosa rela&#xE7;&#xE3;o pode ser vista quando digitamos no console certos nomes ou express&#xF5;es, pois o console retorna o seu valor como output.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-58.png" class="kg-image" alt loading="lazy" width="594" height="277"></figure><p>Teste ingressar express&#xF5;es como essas no seu console e voc&#xEA; ver&#xE1; que toda vez que voc&#xEA; colocar uma express&#xE3;o de igualdade que pode ser processada (por ter os seus termos todos definidos), o resultado ser&#xE1; sempre <em>True </em>ou <em>False</em>. </p><blockquote>Lembre-se de que &#xE9; preciso usar o operador &apos;==&apos; (que expressa uma rela&#xE7;&#xE3;o de igualdade), e n&#xE3;o com a fun&#xE7;&#xE3;o &apos;=&apos; (que atribui valores a vari&#xE1;veis). </blockquote><p>A compreens&#xE3;o das express&#xF5;es acima como verdadeiras (ou falsas) &#xE9; intuitiva. O que n&#xE3;o &#xE9; intuitivo &#xE9; a veracidade das seguintes express&#xF5;es:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-59.png" class="kg-image" alt loading="lazy" width="605" height="101" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-59.png 600w, https://code.arcos.org.br/content/images/2021/01/image-59.png 605w"></figure><p>Em Python, o valor de toda express&#xE3;o verdadeira &#xE9; o valor booleano True e o valor de toda express&#xE3;o falsa &#xE9; o valor booleano False. Por isso, quando igualamos duas express&#xF5;es verdadeiras, teremos sempre o valor &apos;True&apos;, visto que o operador de igualdade n&#xE3;o compara <em>textos </em>(que s&#xE3;o evidentemente diversos), mas compara <em>valores</em>.</p><h2 id="3-condicionais-booleanos">3. Condicionais + Booleanos</h2><p>Feita essa passagem pelas vari&#xE1;veis booleanas, voc&#xEA; pode entender que toda express&#xE3;o condicional pode ser expressada em termos booleanos:</p><ul><li>Se True, ent&#xE3;o execute a fun&#xE7;&#xE3;o f. </li></ul><p>Em termos de c&#xF3;digo de Python, teremos algo como:</p><pre><code class="language-Python">expressao = (1 + 1 == 2)

if expressao:
    print (expressao)</code></pre><p>Observe que, no explorador de vari&#xE1;veis, o valor da vari&#xE1;vel <em>expressao</em> n&#xE3;o &#xE9; &apos;1 + 1 = 2&apos; (o que corresponderia a uma string), o valor da express&#xE3;o matem&#xE1;tica <em>1 + 1 = 2 </em>&#xE9; simplesmente <em>True.</em></p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-60.png" class="kg-image" alt loading="lazy" width="596" height="119"></figure><p>Portanto, o comando que demos foi o correspondente a:</p><pre><code class="language-Python">if True:
    print (True)</code></pre><p>Agora que voc&#xEA; entendeu a l&#xF3;gica subjacente, pode operar bem essa estrutura, sem cair em armadilhas. Em especial, voc&#xEA; quase nunca quer que o seu programa retorne True or False. O que voc&#xEA; normalmente quer &#xE9; que, se a express&#xE3;o for verdadeira (ou seja, se o valor dela for True), um determinado comando deve ser executado.</p><p>Um modelo que usaremos muito (mas muito mesmo) &#xE9; procurar se determinadas express&#xF5;es est&#xE3;o dentro de uma string ou dentro dos elementos de uma lista, o que pode ser conseguido com o seguinte c&#xF3;digo:</p><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]

if &apos;ADI5500&apos; in processos:
    print(&apos;O processo procurado est&#xE1; na lista&apos;)
</code></pre><p>Como a express&#xE3;o <em>&apos;ADI5500&apos; in processos </em>&#xE9; verdadeira, o comando print ser&#xE1; executado e o texto definido aparecer&#xE1; na sua tela.</p><p>Usando a l&#xF3;gica de itera&#xE7;&#xE3;o que voc&#xEA; j&#xE1; deve ter entendido, tamb&#xE9;m podemos verificar se nesta lista (ou em qualquer lista), aparece o termo &apos;ADI&apos;:</p><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]

for item in processos:
    if &apos;ADI&apos; in item:
        print(&apos;O processo &#xE9; uma ADI&apos;)</code></pre><p>Esse &#xE9; um programa que funciona, mas que tem um resultado amb&#xED;guo, pois ele simplesmente imprime duas vezes o mesmo texto, sem deixar saber qual &#xE9; o item.</p><p>Existem algumas formas de melhorarmos essa funcionalidade:</p><blockquote>Concatena&#xE7;&#xE3;o</blockquote><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]

for item in processos:
    if &apos;ADI&apos; in item:
        print(&apos;O processo &apos; + item + &apos; &#xE9; uma ADI&apos;)</code></pre><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-62.png" class="kg-image" alt loading="lazy" width="595" height="70"></figure><p>Esse j&#xE1; &#xE9; um resultado mais interessante, pois diferencia quais s&#xE3;o as ADIs.</p><blockquote>Criar lista</blockquote><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]
adi = []

for item in processos:
    if &apos;ADI&apos; in item:
        adi.append(item)
        
print (adi)</code></pre><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-63.png" class="kg-image" alt loading="lazy" width="581" height="41"></figure><p>Agora voc&#xEA; tem uma nova lista. S&#xE3;o somente duas ADIs nesta lista em concreto, mas essa l&#xF3;gica pode permitir que voc&#xEA; extraia todas as ADIs existentes em uma lista, para depois extrair os dados dela. </p><p>Essa combina&#xE7;&#xE3;o de iteradores com express&#xF5;es condicionais pode gerar uma infinidade de solu&#xE7;&#xF5;es interessantes para os seus desafios com dados.</p><h2 id="4-operadores-de-igualdade-e-diferen-a">4. Operadores de igualdade e diferen&#xE7;a</h2><p>Trabalhamos at&#xE9; aqui apenas com o operador de igualdade &apos;==&apos;, que retorna o valor True quando liga duas express&#xF5;es que t&#xEA;m o mesmo valor, seja esse valor um n&#xFA;mero (no caso de express&#xF5;es num&#xE9;ricas), seja esse valor uma vari&#xE1;vel booleana (no caso de express&#xF5;es).</p><p>Um dos nossos erros mais comuns (e mais dif&#xED;ceis de superar) &#xE9; nossa tend&#xEA;ncia a usar o &apos;=&apos; como operador de igualdade, em vez de usar o &apos;==&apos;. Muitas vezes digitamos rapidamente express&#xF5;es condicionais e n&#xE3;o nos atentamos que estamos usando equivocadamente o &apos;=&apos; no lugar do &apos;==&apos;. </p><p>Oposto ao operador de igualdade, &#xE9; o operador de diferen&#xE7;a, que em Python &#xE9; representado pelo &apos;!=&apos;, como mostra o quadro abaixo, que voc&#xEA; pode construir no Console. J&#xE1; os operadores <em>maior que</em> e <em>menor que</em> seguem o uso que voc&#xEA; j&#xE1; conhece de matem&#xE1;tica b&#xE1;sica.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-67.png" class="kg-image" alt loading="lazy" width="583" height="232"></figure><h2 id="5-operadores-booleanos">5. Operadores booleanos</h2><p>Para criar express&#xF5;es ainda mais complexas, voc&#xEA; pode usar os chamados operadores l&#xF3;gicos, ou operadores booleanos, visto que eles entram justamente nas opera&#xE7;&#xF5;es cujos resultados s&#xE3;o justamente as vari&#xE1;veis True e False:</p><ul><li>and</li><li>or</li><li>not</li></ul><p>Voc&#xEA; certamente conhece esses operadores das pesquisas de jurisprud&#xEA;ncia, nas quais utilizamos esse tipo de l&#xF3;gica com frequ&#xEA;ncia. Podemos come&#xE7;ar com uma busca de todos os processos que cont&#xE9;m a express&#xE3;o &quot;princ&#xED;pio da proporcionalidade&quot;. Depois, queremos refinar essa pesquisa e usamos um operador <em>and</em> para indicar que queremos todos os processos que cont&#xE9;m essa express&#xE3;o <em>e que tamb&#xE9;m </em>cont&#xE9;m em sua classe a string &apos;ADI&apos;. </p><p>Podemos refinar ainda mais as nossas buscas, acrescentando novos operadores <em>and</em>, que tornam mais restritas os crit&#xE9;rios que tornam verdadeira a express&#xE3;o que avaliamos por meio da fun&#xE7;&#xE3;o <em>if. </em></p><p>Quando queremos ampliar as buscas, usamos o <em>or</em>, pois a nossa express&#xE3;o ser&#xE1; verdadeira tanto se a primeira condi&#xE7;&#xE3;o se cumprir quanto se a segunda condi&#xE7;&#xE3;o se cumprir. Queremos processos, por exemplo, dos relatores Gilmar Mendes ou Dias Toffoli ou Ricardo Lewandowski. Com isso, nossa busca retornar&#xE1; todos os resultados que tornam True alguma dessas condi&#xE7;&#xF5;es.</p><p>O not &#xE9; um operador interessante porque ele inverte a vari&#xE1;vel booleana buscada. Muitas vezes, queremos excluir de uma lista todos os processos que n&#xE3;o t&#xEA;m uma caracter&#xED;stica. Voc&#xEA; deve ser capaz de entender o que o seguinte c&#xF3;digo muda em rela&#xE7;&#xE3;o ao c&#xF3;digo da janela anterior.</p><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]
adi = []

for item in processos:
    if &apos;ADI&apos; not in item:
        adi.append(item)
print (adi)</code></pre><p>Nesse caso, geramos uma lista de todos os processos que n&#xE3;o t&#xEA;m a string &apos;ADI&apos;, em vez de gerar uma lista dos processos que a t&#xEA;m. </p><h2 id="5-express-es-condicionais-com-else-e-elif">5 Express&#xF5;es condicionais com Else e Elif</h2><p>A express&#xE3;o condicional <em>if</em> pode ser complementada por dois comandos que tornam mais pl&#xE1;sticas as nossas express&#xF5;es condicionais, pois elas permitem executar fun&#xE7;&#xF5;es diversas no caso de a condi&#xE7;&#xE3;o inicial ser False e n&#xE3;o True. Continuando o nosso pen&#xFA;ltimo c&#xF3;digo, podemos colocar uma condi&#xE7;&#xE3;o else:</p><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]
adi = []
adpf = []
outros = []

for item in processos:
    if &apos;ADI&apos; in item:
        adi.append(item)
    else:
        outros.append(item)
        
print (&apos;Lista de ADIs: &apos; + str(adi))
print (&apos;Lista de outros processos: &apos; + str(outros))	</code></pre><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-66.png" class="kg-image" alt loading="lazy" width="612" height="67" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-66.png 600w, https://code.arcos.org.br/content/images/2021/01/image-66.png 612w"></figure><p>Agora temos dois resultados simult&#xE2;neos, e n&#xE3;o apenas um, o que &#xE9; muito &#xFA;til quando queremos fazer uma triagem. </p><p>Repare que o <em>else </em>vem no mesmo recuo do if, para que ele seja entendido como parte da mesma express&#xE3;o condicional. E, tal como if e os iteradores, o <em>else </em>vem sempre complementado por um &apos;:&apos;, cuja aus&#xEA;ncia gera um erro de sintaxe.</p><p>Para refinar a nossa triagem, podemos usar um operador elif (que vem de <em>else if</em>): ele &#xE9; como um novo if, operando apenas nos casos em que a primeira condi&#xE7;&#xE3;o n&#xE3;o se confirmou. Por isso, falamos de condicionais <em>encadeadas</em>. </p><pre><code class="language-Python">processos = [&apos;ADI500&apos;, &apos;ADI5500&apos;, &apos;ADPF250&apos;, &apos;MS3456&apos;]
adi = []
adpf = []
outros = []

for item in processos:
    if &apos;ADI&apos; in item:
        adi.append(item)
    elif &apos;ADPF&apos; in item: 
        adpf.append(item)
    else:
        outros.append(item)
        
print (&apos;Lista de ADIs: &apos; + str(adi))
print (&apos;Lista de ADPFs: &apos; + str(adpf))
print (&apos;Lista de outros processos: &apos; + str(outros))</code></pre><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-65.png" class="kg-image" alt loading="lazy" width="598" height="76"></figure><p>Voc&#xEA; tamb&#xE9;m pode <em>aninhar </em>condicionais, o que ocorre quando a fun&#xE7;&#xE3;o executada por um if &#xE9; tamb&#xE9;m uma fun&#xE7;&#xE3;o condicional. Mas deixaremos esse desafio para as Atividades pr&#xE1;ticas.</p><h2 id="6-resumo">6. Resumo</h2><p>Neste texto, voc&#xEA; deve ter aprendido:</p><ol><li>Entender que os valores de express&#xF5;es com &apos;==&apos; s&#xE3;o vari&#xE1;veis booleanas (True ou False).</li><li>Desenvolver express&#xF5;es condicionais com if, else e elif.</li></ol>]]></content:encoded></item><item><title><![CDATA[Iteradores e listas]]></title><description><![CDATA[<h2 id="1-introdu-o">1. Introdu&#xE7;&#xE3;o</h2><p>No M&#xF3;dulo 2 do curso, voc&#xEA; aprendeu especialmente sobre as vari&#xE1;veis string, com opera&#xE7;&#xF5;es simples, realizadas dentro do console. Neste m&#xF3;dulo, passaremos ao espa&#xE7;o em que voc&#xEA; efetivamente desenvolver&#xE1; seus programas:</p>]]></description><link>https://code.arcos.org.br/iteradores-e-conjuntos/</link><guid isPermaLink="false">644a852ad9432f055b15cc81</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Thu, 28 Jan 2021 01:21:04 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-introdu-o">1. Introdu&#xE7;&#xE3;o</h2><p>No M&#xF3;dulo 2 do curso, voc&#xEA; aprendeu especialmente sobre as vari&#xE1;veis string, com opera&#xE7;&#xF5;es simples, realizadas dentro do console. Neste m&#xF3;dulo, passaremos ao espa&#xE7;o em que voc&#xEA; efetivamente desenvolver&#xE1; seus programas: o Editor.</p><p>Somente nesse espa&#xE7;o &#xE9; que voc&#xEA; conseguir&#xE1; criar algoritmos: sequ&#xEA;ncias de comandos, que devidamente executados, podem oferecer os resultados que voc&#xEA; busca por meio desse encadeamento de fun&#xE7;&#xF5;es e vari&#xE1;veis.</p><h2 id="2-do-console-ao-editor">2. Do Console ao Editor</h2><p>O Editor &#xE9; a parte mais importante do Spyder, tanto que ele fica no ponto que mais se destaca ao nosso olhar: o canto superior direito. No primeiro momento, o Spyder apresenta no Editor uma propaganda do Kite, que &#xE9; uma ferramenta que auxilia o desenvolvimento de softwares.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-51.png" class="kg-image" alt loading="lazy" width="1123" height="575" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-51.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-51.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-51.png 1123w" sizes="(min-width: 720px) 720px"></figure><p>Trata-se de uma ferramenta interessante, que oferece um auto-completar mais robusto, mas que escapa aos objetivos deste curso (se voc&#xEA; tiver interesse, existe nessa tela o link para o help desse aplicativo). Ent&#xE3;o, nosso primeiro passo ser&#xE1; fechar as duas janelas que est&#xE3;o em aberto (temp.py e kite_tutorial.py) e abrir um novo arquivo, para conter o seu programa.</p><figure class="kg-card kg-embed-card"><!-- copy and paste. Modify height and width if desired. -->
<iframe class="embeddedObject shadow resizable" name="embedded_content" scrolling="no" frameborder="0" type="text/html" style="overflow:hidden;" src="https://www.screencast.com/users/alexandrearcos/folders/Capture/media/a5401359-053f-4a39-b2b3-669a303b13bd/embed" height="450" width="690" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure><p>Fechando as duas janelas, o Spyder abre automaticamente um documento novo: untitled.py. Esse &#xE9; um documento em branco, apenas com uma indica&#xE7;&#xE3;o da autoria e da data de cria&#xE7;&#xE3;o (em verde, entre aspas triplas) e um coment&#xE1;rio na primeira linha indicando que o encoding padr&#xE3;o &#xE9; UTF-8. </p><blockquote><em><strong>Encoding </strong></em>indica a forma como os dados s&#xE3;o gravados. Quando voc&#xEA; grava um arquivo, cada caractere &#xE9; representado por um c&#xF3;digo. Um encoding &#xE9; um conjunto espec&#xED;fico desses c&#xF3;digos que designam um caractere espec&#xED;fico. Se voc&#xEA; grava um arquivo com um encoding, &#xE9; preciso abri-lo com o mesmo encoding, sob pena de haver leituras erradas. &#xA0;No nosso caso, devemos usar exatamente o UTF-8, que &#xE9; o encoding padr&#xE3;o da internet, utilizado inclusive nas p&#xE1;ginas dos tribunais brasileiros.</blockquote><p></p><blockquote><strong>Coment&#xE1;rios </strong>s&#xE3;o trechos de c&#xF3;digo introduzidos por um #, que indica que essa parte do texto n&#xE3;o deve ser executada. Usamos os coment&#xE1;rios para o que se chama de <em><a href="https://www.ime.usp.br/~pf/algoritmos/aulas/docu.html?ref=code.arcos.org.br">documenta&#xE7;&#xE3;o</a></em>, que &#xE9; a explica&#xE7;&#xE3;o do que faz cada parte do nosso programa, para facilitar a sua compreens&#xE3;o posterior (inclusive por n&#xF3;s mesmos, j&#xE1; que com o tempo nos esquecemos do sentido espec&#xED;fico de cada uma das linhas que escrevemos).</blockquote><p>Se voc&#xEA; quiser, pode alterar esse texto incial dos seus c&#xF3;digos no menu <em>Tools: Prefereces: Editor: Advanced Settings: Edit Template for new files</em>. Isso abrir&#xE1; o arquivo template.py, que em que voc&#xEA; pode definir o que voc&#xEA; quer que apare&#xE7;a no in&#xED;cio de cada um dos seus programas. </p><p>No menu <em>Tools: Preferences: General: Advanced Settings</em> voc&#xEA; tamb&#xE9;m pode alterar a linguagem do Spyder para portugu&#xEA;s, se voc&#xEA; preferir. Mas vamos continuar usando o ingl&#xEA;s, pois a maior parte dos recursos de aux&#xED;lio &#xE0; programa&#xE7;&#xE3;o est&#xE1; em ingl&#xEA;s e, por isso, dominar a terminologia em ingl&#xEA;s facilita o seu desenvolvimento posterior.</p><p>Agora que voc&#xEA; tem o seu Editor aberto, podemos fazer nosso primeiro exerc&#xED;cio: retome o ponto <a href="https://code.arcos.org.br/variaveis-em-python/#4-4-intervalos-de-caracteres">4.4 do texto Fun&#xE7;&#xF5;es e Vari&#xE1;veis</a>, em que criamos um mecanismo para extrair o nome do relator de uma string. Como usamos o console, voc&#xEA; precisou fazer cada passo. Agora, o desafio &#xE9; criar uma sequ&#xEA;ncia de passos a serem seguidos de uma vez, para alcan&#xE7;ar o resultado. Sempre &#xE9; poss&#xED;vel escrever resolver um problema de v&#xE1;rias formas e uma delas &#xE9;:</p><pre><code class="language-Python">string = &apos;ADI 333, Relator: Marco Aur&#xE9;lio, Resultado: Procedente&apos;
inicio = string.find(&apos;Relator: &apos;)+len(&apos;Relator: &apos;)
fim = string.find(&apos;,&apos;,inicio)
print (string[inicio:fim])</code></pre><p>N&#xE3;o usaremos mais as capturas de tela do console porque voc&#xEA; n&#xE3;o tem como copiar os textos a partir das imagens. Usando a caixa de texto de programa&#xE7;&#xE3;o, voc&#xEA; pode copiar facilmente os textos para o seu Editor, sem ter de digitar tudo novamente.</p><p>Se voc&#xEA; colar esse pequeno programa no seu Editor, n&#xE3;o ocorrer&#xE1; nada imediatamente. No console, o texto que voc&#xEA; colar pode ser executado por meio de um Enter. No Editor, para executar o programa, &#xE9; preciso dar o comando Run (atalho F5), o que vai fazer com que no seu console apare&#xE7;a o resultado do input do seu programa: o output <em>Marco Aur&#xE9;lio</em>.</p><p>Outra grande vantagem do Editor &#xE9; que, ao contr&#xE1;rio do que ocorre no Console, voc&#xEA; pode gravar (usando o Save do Spyder) os c&#xF3;digos que voc&#xEA; desenvolve, gerando arquivos com a extens&#xE3;o .py. Esses arquivos podem ser depois abertos e executados no ambiente do Spyder, mas tamb&#xE9;m podem ser executados pelo seu sistema operacional.</p><h2 id="3-listas">3. Listas</h2><p>Agora &#xE9; hora de inserir um novo tipo de vari&#xE1;vel, que tamb&#xE9;m usaremos exaustivamentes: as listas. Enquanto as <em>strings</em> s&#xE3;o sequ&#xEA;ncias de caracteres, as listas s&#xE3;o sequ&#xEA;ncias de <em>objetos</em>.</p><pre><code class="language-Python">animais = [&apos;cachorro&apos;, &apos;bem-te-vi&apos;, &apos;jacar&#xE9;&apos;]
numeros = [1, 2, 3, 100, 2165]
listas = [animais, numeros]
tudomisturado = [1, 2, &apos;cachorro&apos;, numeros]</code></pre><p>Uma das coisas interessantes do Pythone &#xE9; que n&#xE3;o importa o que voc&#xEA; coloca em uma lista. Tudo cabe nelas e cada um desses objetos &#xE9; identificado pela sua posi&#xE7;&#xE3;o, exatamente como nas strings. As &#xFA;nicas peculiaridades das listas s&#xE3;o bastante intuitivas:</p><ol><li>elas ocorrem sempre entre colchetes. Se voc&#xEA; usar par&#xEA;nteses, o que &#xA0;ter&#xE1; ser&#xE1; uma lista imut&#xE1;vel (que n&#xE3;o pode ter sua composi&#xE7;&#xE3;o alterada por fun&#xE7;&#xF5;es), que se chama tupla. </li><li>os objetos s&#xE3;o separados por v&#xED;rgulas.</li></ol><p>Com o que voc&#xEA; j&#xE1; sabe de posi&#xE7;&#xE3;o nas strings, voc&#xEA; pode compreender as express&#xF5;es abaixo. Caso n&#xE3;o entenda, conv&#xE9;m voltar ao texto do M&#xF3;dulo 2 e reler o texto sobre posi&#xE7;&#xE3;o nas strings).</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-55.png" class="kg-image" alt loading="lazy" width="600" height="271" srcset="https://code.arcos.org.br/content/images/2021/01/image-55.png 600w"></figure><blockquote>N&#xE3;o &#xE9; demais lembrar que a primeira posi&#xE7;&#xE3;o &#xE9; a 0 e n&#xE3;o a 1.</blockquote><p>Voc&#xEA; pode ler elementos de uma lista usando a mesma l&#xF3;gica das strings, com os marcadores de posi&#xE7;&#xE3;o. Mas como voc&#xEA; pode fazer para ler o &#xFA;ltimo valor de uma lista?</p><p>Primeiro, vamos construir uma lista com os n&#xFA;meros inteiros de 0 a 9, o que podemos fazer aplicando a fun&#xE7;&#xE3;o list ao comando range(10), que voc&#xEA; j&#xE1; conhece.</p><p>Para extrair o &#xFA;ltimo elemento da lista, usaremos posi&#xE7;&#xF5;es negativas. At&#xE9; agora, somente trabalhamos com posi&#xE7;&#xF5;es positivas, mas tamb&#xE9;m podemos usar posi&#xE7;&#xF5;es negativas, baseadas no fato de que o Python trata a &#xFA;ltima posi&#xE7;&#xE3;o como sendo tamb&#xE9;m a primeira posi&#xE7;&#xE3;o negativa: -1. Assim, se voc&#xEA; quiser somente os dois &#xFA;ltimos n&#xFA;meros de uma lista com 10 n&#xFA;meros, voc&#xEA; pode usar o comando:</p><pre><code class="language-Python">lista = list(range(10))
print(lista[-2:])</code></pre><p>Outra caracter&#xED;stica interessante das listas &#xE9; que elas s&#xE3;o concaten&#xE1;veis, como as strings. Veja o resultado do c&#xF3;digo:</p><pre><code class="language-Python">lista = list(range(10))
print (lista + lista)</code></pre><p>Uma vez que voc&#xEA; entenda como funciona uma lista, voc&#xEA; entender&#xE1; facilmente o que &#xE9; um iterador, pois o iterador que utilizamos (<em>for</em>) &#xE9; normalmente baseado em listas.</p><h2 id="4-iterador-for">4. Iterador <em>for</em></h2><p>O iterador <em>for </em>&#xE9; uma forma de executar uma fun&#xE7;&#xE3;o com rela&#xE7;&#xE3;o a cada um dos objetos de uma lista. Por exemplo:</p><pre><code class="language-Python">for item in animais:
	print (item)</code></pre><p>Se voc&#xEA; acrescentar essas duas linhas ao seu editor e executar (run), o resultado ser&#xE1;:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-56.png" class="kg-image" alt loading="lazy" width="597" height="85"></figure><p>Portanto, o que o comando anterior realizou foi:</p><ol><li> processar a fun&#xE7;&#xE3;o print uma vez para cada uma das posi&#xE7;&#xF5;es contidas na lista <em>animais</em>;</li><li>em cada execu&#xE7;&#xE3;o da fun&#xE7;&#xE3;o, atribuir &#xE0; vari&#xE1;vel <em>item </em>o valor correspondente ao objeto contido na lista. </li></ol><p>Como a lista tem 3 itens, s&#xE3;o 3 execu&#xE7;&#xF5;es de print, cada uma imprimindo o valor contido na respectiva posi&#xE7;&#xE3;o.</p><p>No &#xE2;mbito do direito, podemos ter uma lista composta pelos numeros das adis a serem buscadas e uma string com o formato geral dos endere&#xE7;os em que eles est&#xE3;o gravados, como j&#xE1; vimos no texto Fun&#xE7;&#xF5;es e Vari&#xE1;veis. Se usarmos o iterador <em>for</em>, podemos gerar os endere&#xE7;os que devem ser buscados no STF.</p><pre><code class="language-Python">adi = (&apos;333&apos;,&apos;444&apos;, &apos;555&apos;, &apos;666&apos;)
url = &apos;http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=&apos;

for item in adi:
    print (url + item)</code></pre><p>Se voc&#xEA; observar com cuidado, ver&#xE1; que o formato geral do for &#xE9;:</p><blockquote>for vari&#xE1;vel in lista:<br> &#xA0; &#xA0;fun&#xE7;&#xE3;o a ser repetida</blockquote><p>Dois detalhes importantes sobre esse formato:</p><ol><li>&#xC9; essencial que a primeira linha seja encerrada por um &apos;:&apos;, que indica que depois disso vir&#xE1; a fun&#xE7;&#xE3;o a ser repetida.</li><li> &#xC9; necess&#xE1;rio um marcador para que o Python saiba exatamente qual &#xE9; a fun&#xE7;&#xE3;o a ser iterada. H&#xE1; linguagens que marcam com par&#xEA;nteses ou com chaves essa fun&#xE7;&#xF5;es. Em Python n&#xE3;o: a &#xFA;nica marca&#xE7;&#xE3;o exigida &#xE9; um recuo, que chamamos tipicamente de <em>indenta&#xE7;&#xE3;o</em> (um anglicismo que vem de <em>indentation, </em>palavra inglesa para recuo).</li></ol><p>N&#xE3;o importa quantos espa&#xE7;os voc&#xEA; coloque antes do <em>print</em>, desde que haja um espa&#xE7;o que o deixe mais &#xE0; direita que o <em>for</em>. Por&#xE9;m, h&#xE1; um costume entre os desenvolvedores em Python de deixar 4 espa&#xE7;os, que &#xE9; o recuo padr&#xE3;o, ou usar um s&#xED;mbolo de tabula&#xE7;&#xE3;o.</p><p>Parece que dois espa&#xE7;os &#xE9; pouco, pois pode dar destaque suficiente na leitura, mas isso &#xE9; s&#xF3; uma quest&#xE3;o de legibilidade. Se voc&#xEA; colocar 1, 2 ou 10 espa&#xE7;os, seu programa rodar&#xE1; da mesma forma. Por&#xE9;m, uma vez que voc&#xEA; definir uma indenta&#xE7;&#xE3;o, o Python s&#xF3; vai entender como ligado ao for outras linhas de comando que tenham o mesmo recuo.</p><blockquote>Inclusive, se voc&#xEA; usar uma indenta&#xE7;&#xE3;o de 1 tabula&#xE7;&#xE3;o e outra de 4 espa&#xE7;os, elas n&#xE3;o ser&#xE3;o entendidas como recuos id&#xEA;nticos. Uma vez que voc&#xEA; defina o recuo usado na linha seguinte ao for, ele precisa ser mantido, para que o Python entenda que fun&#xE7;&#xF5;es nas linhas seguintes fazem parte do <em>loop </em>(c&#xF3;digo a ser iterado)<em> </em>estabelecido<em> </em>pelo <em>for.</em></blockquote><pre><code class="language-Python">for item in adi:
    print (&apos;endere&#xE7;o da ADI&apos; + item + &apos;:&apos;)
    print (url + item)</code></pre><p>Outro detalhe: n&#xE3;o importa o nome que voc&#xEA; d&#xE1; &#xE0; vari&#xE1;vel iterada. Usamos aqui o nome <em>item</em>, mas podemos usar <em>n</em>, <em>vez</em>, <em>abacate</em> ou qualquer outro nome v&#xE1;lido para vari&#xE1;veis (t&#xF3;pico que tamb&#xE9;m estudamos no texto passado). As express&#xF5;es seguintes v&#xE3;o gerar exatamente o mesmo output do comando anterior.</p><pre><code class="language-Python">for n in adi:
    print (&apos;endere&#xE7;o da ADI&apos; + n + &apos;:&apos;)
    print (url + n)
    
for vez in adi:
    print (&apos;endere&#xE7;o da ADI&apos; + vez + &apos;:&apos;)
    print (url + vez)</code></pre><p>Atente a dois erros muito comuns que cometemos ao definir iteradores:</p><ol><li>Esquecer os dois pontos. V&#xE1;rias vezes eu esque&#xE7;o e o resultado &#xE9; um erro de <em>invalid syntax</em>, pois os &apos;:&apos; s&#xE3;o necess&#xE1;rios para a devida constru&#xE7;&#xE3;o do iterador.</li><li>Usar recuos diferentes, o que tipicamente gera como resultado um <em>IndentationError</em>.</li></ol><p>Tomados esses cuidados b&#xE1;sicos, voc&#xEA; conseguir&#xE1; dominar facilmente esse instrumento muito poderoso de itera&#xE7;&#xE3;o.</p><p>Desafio: tente descobrir qual &#xE9; a interessante coincid&#xEA;ncia que ocorrer&#xE1; quando voc&#xEA; usa um for iterando a lista:</p><blockquote>lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</blockquote><pre><code class="language-Python">lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for n in lista:
    print (n)</code></pre><p>Trata-se de um caso bem particular, em que o <em>valor </em>do objeto contido na lista &#xE9; id&#xEA;ntico a sua <em>posi&#xE7;&#xE3;o</em>. O n&#xFA;mero 0 ocupa a posi&#xE7;&#xE3;o 0, o n&#xFA;mero 1 ocupa a posi&#xE7;&#xE3;o 1 e assim por diante. Por isso, a itera&#xE7;&#xE3;o acima vai gerar um curioso resultado:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-57.png" class="kg-image" alt loading="lazy" width="487" height="179"></figure><p>Essa &#xE9; uma &#xA0;ferramenta importante para n&#xF3;s porque se trata de uma forma simples de gerar uma lista ordenada de n&#xFA;meros inteiros, que se inicia em 0 (como as posi&#xE7;&#xF5;es de sequ&#xEA;ncias em Python).</p><p>E se eu quisesse uma lista de 1000 n&#xFA;meros? N&#xE3;o seria aconselh&#xE1;vel escrever uma lista assim, mas voc&#xEA; pode ger&#xE1;-las trocando a sua lista escrita a m&#xE3;o pela express&#xE3;o <em>range(1000)</em>:</p><pre><code class="language-Python">for n in range(1000):
    print (n)</code></pre><p>Em menos de um segundo, seu computador deve ser capaz de imprimir esses 1000 n&#xFA;meros na tela. No meu, ele demorou algo em torno de 2 segundos para produzir uma sequ&#xEA;ncia de 10.000 n&#xFA;meros. </p><blockquote><strong>Desafio</strong>: agora que voc&#xEA; consegue produzir listas quase infinitas de n&#xFA;meros, voc&#xEA; pode fazer algo muito &#xFA;til para os nossos extratores: gerar listas com os endere&#xE7;os de todas as ADIs em um determinado intervalo: entre 5000 e 6000, por exemplo.</blockquote><pre><code class="language-Python">for n in range(1001):
    print (&apos;ADI&apos;+str(5000+n))</code></pre><p>Repare neste c&#xF3;digo dois detalhes dos quais j&#xE1; hav&#xED;amos falado antes:</p><ol><li>O intervalo entre a a&#xE7;&#xE3;o 5000 e a 6000 tem 1001 objetos;</li><li>S&#xF3; podemos concatenar strings com outras strings, nunca strings com n&#xFA;meros. Por isso, como voc&#xEA; j&#xE1; vez na Atividade 1, &#xE9; preciso converter a vari&#xE1;vel num&#xE9;rica <em>n</em> em uma string, o que se consegue pelo comando str(n). No caso, str(5000+n) porque 5.000 &#xE9; o n&#xFA;mero inicial de nossa sequ&#xEA;ncia.</li></ol><p>A esta altura, voc&#xEA; j&#xE1; deve ter imaginado que o problema que colocaremos no final desta unidade seja produzir a lista das urls que dever&#xE3;o ser buscadas para podermos colher as informa&#xE7;&#xF5;es sobre esses processos. E voc&#xEA; imaginou bem.</p><h3 id="4-1-combinando-listas-e-iteradores">4.1 Combinando listas e iteradores</h3><p>No &#xFA;ltimo c&#xF3;digo, voc&#xEA; aprendeu a gerar uma sequ&#xEA;ncia de nomes de ADIs. Mas como &#xE9; poss&#xED;vel armazen&#xE1;-las em uma lista?</p><p>Basta usar, no lugar do <em>print</em> (que envia para a tela) o comando nomedalista.append, que armazena os dados na &#xFA;ltima posi&#xE7;&#xE3;o de uma lista <em>anteriormente definida</em>. </p><p>Esse anteriormente definida &#xE9; importante porque, antes de acrescentar elementos a uma lista, ela precisa ser criada, mesmo que esteja em branco, como ocorre no seguinte caso:</p><pre><code class="language-Python">adi = []
for n in range(1001):
    adi.append (&apos;ADI&apos;+str(5000+n))
    
print (adi)</code></pre><p>Com esse c&#xF3;digo, voc&#xEA; consegue gerar uma lista com os nomes de todas as ADIs de 5000 a 6000. Esse &#xE9; um tipo muito importante de constru&#xE7;&#xE3;o porque n&#xF3;s o usaremos depois de extrairmos os dados de um processo, pois &#xE9; com um comando derivado dessa constru&#xE7;&#xE3;o que poderemos gravar os dados de cada processo em uma lista que segue uma ordem bem definida. </p><p>Quando construirmos nossos geradores de bancos de dados, voc&#xEA; aprender&#xE1; a &#xA0;&apos;empilhar&apos; essas listas, visto que uma &apos;pilha&apos; de listas bem organizadas tem a mesma estrutura de uma tabela. Mas a gera&#xE7;&#xE3;o dessas tabelas pode esperar um &#xA0;pouco porque, antes disso, voc&#xEA; precisa aprender mais algumas fun&#xE7;&#xF5;es.</p><h2 id="5-resumo">5. Resumo</h2><p>Neste texto, voc&#xEA; deve ter aprendido:</p><ol><li>A criar programas no editor e salv&#xE1;-los.</li><li>Trabalhar com listas, extraindo os valores de certas posi&#xE7;&#xF5;es.</li><li>Criar loops com o for, executando comandos de forma iterada.</li><li>Utilizar o iterador for para gerar sequ&#xEA;ncias de n&#xFA;meros inteiros.</li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[Módulo 05 - Funções, Módulos e Programas]]></title><description><![CDATA[<ul><li>Leitura: Estudo obrigat&#xF3;rio do M&#xF3;dulo 5</li><li>Atividade </li></ul><!--kg-card-begin: html--><div class="post-excerpt" style="font-size: 0.01em;opacity:0;margins:0 0 0;">a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a</div>]]></description><link>https://code.arcos.org.br/modulo05-2/</link><guid isPermaLink="false">644a852ad9432f055b15cc7d</guid><category><![CDATA[modulo]]></category><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Wed, 27 Jan 2021 02:25:00 GMT</pubDate><content:encoded><![CDATA[<ul><li>Leitura: Estudo obrigat&#xF3;rio do M&#xF3;dulo 5</li><li>Atividade </li></ul><!--kg-card-begin: html--><div class="post-excerpt" style="font-size: 0.01em;opacity:0;margins:0 0 0;">a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a </div><!--kg-card-end: html--><h2 id="2-introdu-o">2. Introdu&#xE7;&#xE3;o</h2><p>At&#xE9; aqui, voc&#xEA; aprendeu a:</p><ol><li>definir e manipular vari&#xE1;veis,</li><li>definir e manipular listas,</li><li>criar loops usando o iterador <em>for e</em></li><li>criar express&#xF5;es condicionais com operadores l&#xF3;gicos.</li></ol><p>Com esses instrumentos voc&#xEA; pode fazer v&#xE1;rios programas que s&#xE3;o capazes de lidar com dados previamente definidos (as listas de dados ou as strings que apresentamos no enunciado dos problemas pr&#xE1;ticos apresentados para voc&#xEA;s at&#xE9; agora). </p><p>O desenvolvimento da habilidade de buscar e organizar dados que possam ser operados por esse programa ser&#xE1; definido nos pr&#xF3;ximos m&#xF3;dulos. Neste m&#xF3;dulo, apresentaremos algumas funcionalidades do Python que auxiliam a desenvolver os programas que usaremos especificamente no curso de Data Science: fun&#xE7;&#xF5;es e m&#xF3;dulos.</p><h2 id="3-estudo-obrigat-rio">3. Estudo obrigat&#xF3;rio</h2><blockquote>Costa, Alexandre. <a href="https://code.arcos.org.br/programas-funcoes-e-modulos/">Fun&#xE7;&#xF5;es e M&#xF3;dulos</a>. Code.arcos, 2021.</blockquote><p></p><blockquote>Castro, Pedro Luz. Fun&#xE7;&#xF5;es em <a href="https://youtu.be/C4HoZhkxlAg?ref=code.arcos.org.br">Fun&#xE7;&#xF5;es e Iterators</a>, de 00:00 a 16:20. Youtube, 2020.</blockquote><h2 id="4-estudo-complementar">4. Estudo complementar</h2><blockquote>1: Miller, Brad; Ranun, David. Como Pensar Como um Cientista da Computa&#xE7;&#xE3;o. <a href="https://panda.ime.usp.br/pensepy/static/pensepy/05-Funcoes/funcoes.html?ref=code.arcos.org.br">Cap. 5 - Fun&#xE7;&#xF5;es</a>.</blockquote><blockquote>Castro, Pedro Luz de. <a href="https://youtu.be/vOBdMUZyvpE?ref=code.arcos.org.br">Dicion&#xE1;rios</a>. Youtube, 2020.</blockquote><p>Na primeira edi&#xE7;&#xE3;o do curso, utilizamos um sistema de extra&#xE7;&#xE3;o de dados que usava dicion&#xE1;rios. Estrat&#xE9;gias de extra&#xE7;&#xE3;o que combinam dicion&#xE1;rios e Xpath s&#xE3;o poderosas formas de construir programas capazes de, ao mesmo tempo, extrair e organizar os dados, oferecendo como resultado bancos de dados j&#xE1; estruturados.</p><p>Por&#xE9;m, nossa escolha no curso DSD foi a de dividir esse trabalho em dois programas diferentes: extratores e geradores de tabela. Com isso, os dicion&#xE1;rios deixaram de ser uma parte central do curso b&#xE1;sico de programa&#xE7;&#xE3;o, mas eles s&#xE3;o uma ferramenta muito interessante para algumas estrat&#xE9;gias avan&#xE7;adas de <em>data science</em> e direito.</p><h2 id="4-dados-complementares">4. Dados complementares</h2><blockquote> <a href="https://www.dropbox.com/s/cmw2nliwi2m8luo/titanic.csv?dl=0&amp;ref=code.arcos.org.br">Tabela Titanic</a>. Arquivo .csv com dados do titanic, para fazer atividades que demandem dados.</blockquote><h2 id="4-atividades">4. Atividades</h2><h3 id="4-1-atividade-sugerida-exerc-cio-m-dulo-5">4.1 Atividade sugerida: <a href="https://code.arcos.org.br/exercicios-modulo-5/">Exerc&#xED;cio M&#xF3;dulo 5</a></h3><h3 id="4-2-atividade-complementar-fizzbuzz">4.2 Atividade complementar: FizzBuzz</h3><p>FizBuzz &#xE9; um desafio cl&#xE1;ssico de computa&#xE7;&#xE3;o:</p><blockquote>Escreva uma fun&#xE7;&#xE3;o que, para todo n&#xFA;mero entre 1 e 100, printe:<br>a) &quot;Fizz&quot; se o n&#xFA;mero for divis&#xED;vel por 3;</blockquote><blockquote>b) &quot;Buzz&quot; se o n&#xFA;mero for divis&#xED;vel por 5;</blockquote><blockquote>c) &quot;FizzBuzz&quot; se o n&#xFA;mero for divis&#xED;vel por 3 e por 5;</blockquote><blockquote>d) O pr&#xF3;prio n&#xFA;mero, em todos os outros casos.</blockquote><p>A resolu&#xE7;&#xE3;o do problema pode ser encontrada na seguinte videoaula.</p><ul><li>Videoaula: <a href="https://www.youtube.com/watch?v=1N5cFDN24_c&amp;list=PL9jqBGC5UtwXF48N-tLPpUJpHbmlx30ih&amp;index=1&amp;ref=code.arcos.org.br">Resolu&#xE7;&#xE3;o do FizzBuzz</a>.</li></ul><h3 id="4-2-atividade-avan-ada-lista-de-exerc-cios-2">4.2 Atividade avan&#xE7;ada: <a href="https://www.dropbox.com/s/ov1nqe7m5zlicvh/Lista%202.ipynb?dl=0&amp;ref=code.arcos.org.br">Lista de Exerc&#xED;cios 2</a></h3><p>A atividade &#xE9; a resolu&#xE7;&#xE3;o da Lista 2 de exerc&#xED;cios, que envolve alguns conhecimentos mais avan&#xE7;ados e cuja resolu&#xE7;&#xE3;o, feita pelo Stefan, est&#xE1; no video abaixo.</p><blockquote>Rotenberg, Stefan . Videoaula: <a href="https://youtu.be/JUGTRV-RmQQ?ref=code.arcos.org.br">Resolu&#xE7;&#xE3;o da Lista 2</a>.</blockquote><p>Esta &#xE9; uma longa resolu&#xE7;&#xE3;o da lista 2 porque, de fato, ela vai muito al&#xE9;m de uma resolu&#xE7;&#xE3;o, pois o Stefan usa as quest&#xF5;es como base para explorar v&#xE1;rios conhecimentos sobre programa&#xE7;&#xE3;o em Python.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Exercícios Módulo 2 - Problemas básicos]]></title><description><![CDATA[<p>Estes problemas b&#xE1;sicos se destinam a ser resolvidos no console do Spyder.</p><h2 id="problema-1-modificando-strings">Problema 1. Modificando strings</h2><p>Copie os seguintes dados e cole no console do Spyder.</p><pre><code class="language-Python">processo = 222
classe = &apos;ADIn&apos;
</code></pre><p>Depois, utilizando as fun&#xE7;&#xF5;es <em>replace</em> e <em>str</em>, modifique os valores das vari&#xE1;</p>]]></description><link>https://code.arcos.org.br/atividade01/</link><guid isPermaLink="false">644a852ad9432f055b15cc80</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Tue, 26 Jan 2021 17:20:10 GMT</pubDate><content:encoded><![CDATA[<p>Estes problemas b&#xE1;sicos se destinam a ser resolvidos no console do Spyder.</p><h2 id="problema-1-modificando-strings">Problema 1. Modificando strings</h2><p>Copie os seguintes dados e cole no console do Spyder.</p><pre><code class="language-Python">processo = 222
classe = &apos;ADIn&apos;
</code></pre><p>Depois, utilizando as fun&#xE7;&#xF5;es <em>replace</em> e <em>str</em>, modifique os valores das vari&#xE1;veis de forma que a concatena&#xE7;&#xE3;o classe + processo gere a string &apos;ADI222&apos;.</p><h2 id="problema-2-de-strings-a-vari-veis-num-ricas-ida-e-volta">Problema 2. De strings a vari&#xE1;veis num&#xE9;ricas: ida e volta</h2><p>Uma vez que voc&#xEA; tenha conseguido fazer a atividade anterior (de tal forma que processo corresponda a &apos;222&apos; e classe corresponda a &apos;ADI&apos;), modifique a vari&#xE1;vel <em>processo</em> <u>por meio do uso de fun&#xE7;&#xF5;es e de opera&#xE7;&#xF5;es matem&#xE1;ticas</u> (n&#xE3;o vale simplesmente redefinir o valor de processo!) de tal forma que a concatena&#xE7;&#xE3;o classe + processo gere a string &apos;ADI223&apos;. </p><pre><code class="language-Python">processo = &apos;222&apos;
classe = &apos;ADI&apos;


</code></pre><h2 id="problema-3-extraindo-trechos-de-uma-string">Problema 3. Extraindo trechos de uma string</h2><p>Copie o trecho seguinte e cole no seu console. Ele define para a vari&#xE1;vel html o conte&#xFA;do de um trecho da string que o seu computador recebe quando clica no link da <a href="http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000&amp;ref=code.arcos.org.br">ADI 6000</a> (e que aparece quando voc&#xEA; entra nesse link e clica Ctrl-U). Usando a l&#xF3;gica do marcador de inicio e marcador de fim, trabalhada no texto, extraia dessa string o nome do relator.</p><p>Como atividade complementar, voc&#xEA; pode se exercitar extraindo outros conte&#xFA;dos: Requerente, Requerido, Origem, etc.</p><pre><code class="language-Python">html = &apos;&apos;&apos;&lt;/div&gt;
	&lt;div id=&quot;divImpressao&quot;&gt;&lt;div&gt;&lt;h3&gt;&lt;strong&gt;A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE (Med. Liminar) - 6000&lt;/strong&gt;&lt;/h3&gt;&lt;table width=&quot;99%&quot; cellspacing=&quot;5&quot;&gt;&lt;tr&gt;&lt;td&gt;Origem:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;RIO DE JANEIRO&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Entrada no STF:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Relator:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;MINISTRO ALEXANDRE DE MORAES&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Distribu&#xED;do:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;30-Ago-2018&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Partes:&lt;/td&gt;&lt;td colspan=&quot;3&quot;&gt;Requerente: &lt;strong&gt;GOVERNADOR DO ESTADO DO RIO DE JANEIRO
(CF 103, 00V)&lt;/strong&gt;&lt;br /&gt;Requerido :&lt;strong&gt;ASSEMBLEIA LEGISLATIVA DO ESTADO DO RIO DE JANEIRO 
&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Dispositivo Legal Questionado&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Leis n&#xB0; 8071, de 27 de agosto de 2018 e n&#xB0; 8072, de 27 de agosto  de  2018, 
ambos do Estado do Rio de Janeiro. 

     Lei n&#xB0; 8071, de 27 de agosto de 2018

                                       Disp&#xF5;e  sobre  a  composi&#xE7;&#xE3;o  das  perdas 
                                       salariais dos servidores do Quadro  &#xDA;nico 
                                       de Pessoal do Poder Judici&#xE1;rio do  Estado 
                                       do Rio de Janeiro.

     Art. 001&#xBA; - Ficam reajustadas em 5% (cinco por cento), a contar  de  01  de 
setembro de  2018,  as  remunera&#xE7;&#xF5;es  dos  servidores  ocupantes  de  cargo   de 
provimento efetivo, de cargo de provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es  gratificadas  e 
fun&#xE7;&#xF5;es comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio do  Estado 
do Rio de Janeiro. 

     Art. 002&#xBA; - As  despesas  decorrentes  desta  Lei  ser&#xE3;o  atendidas   pelas 
dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder Executivo  autorizado  a  abrir 
cr&#xE9;ditos suplementares. 

     Art. 003&#xBA; - Esta Lei entrar&#xE1; em vigor na data de sua publica&#xE7;&#xE3;o.

     Lei n&#xB0; 8072, de 27 de agosto de 2018

                                        Disp&#xF5;e sobre  a recomposi&#xE7;&#xE3;o  de  perdas 
                                        remunerat&#xF3;rias dos seridores  do  Quadro 
                                        Permanente  de  Servi&#xE7;os  Auxiliares  do 
                                        Minist&#xE9;rio P&#xFA;blico e Defensoria  P&#xFA;blica 
                                        do Estado do Rio de Janeiro.

     Art. 001&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores  do  Quadro  Permanente  dos  Servi&#xE7;os 
Auxiliares do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.

     Art. 002&#xBA; - Fica reajustada em 5% (cinco por cento) a remunera&#xE7;&#xE3;o, a contar 
de 01 de setembro de 2018, dos servidores do Quadro  Permanente  de  Pessoal  de 
Apoio Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.

     Art. 003&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 001&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas ao Minist&#xE9;rio P&#xFA;blico do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 004&#xBA; - As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 002&#xBA;  desta  lei 
correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias consignadas a Defensoria P&#xFA;blica  do 
Estado do Rio de Janeiro, ficando o Poder Executivo autorizado a abrir  cr&#xE9;ditos 
suplementares.

     Art. 005&#xBA; - Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Fundamenta&#xE7;&#xE3;o Constitucional&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
- Art. 002&#xB0;
- Art. 003&#xB0;, 0IV
- Art. 005&#xB0;, &quot;caput&quot;
- Art. 037, &quot;caput&quot;
- Art. 084, 0II
- Art. 165
- Art. 169&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Resultado da Liminar&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Decis&#xE3;o Monocr&#xE1;tica - Liminar Deferida&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Resultado Final&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Procedente&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Final&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     O Tribunal, por unanimidade, confirmou a medida cautelar e julgou procedente o pedido formulado na a&#xE7;&#xE3;o direta para declarar a inconstitucionalidade das Leis n&#xBA; 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro, nos termos do voto do Relator. 
     - Plen&#xE1;rio, Sess&#xE3;o Virtual de 20.9.2019 a 26.9.2019.
     - Ac&#xF3;rd&#xE3;o, DJ 15.10.2019.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Data de Julgamento Final&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Plen&#xE1;rio&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Data de Publica&#xE7;&#xE3;o da Decis&#xE3;o Final&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ac&#xF3;rd&#xE3;o, DJ 15.10.2019&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Decis&#xE3;o Monocr&#xE1;tica da Liminar&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de A&#xE7;&#xE3;o Direta de Inconstitucionalidade, com pedido de
medida cautelar, ajuizada pelo Governador do Estado do Rio de Janeiro,
em face das Leis 8.071/2018 e 8.072/2018 daquele Estado, que conferem,
respectivamente e a contar de 1&#xBA; de setembro de 2018, reajuste de 5%
(cinco por cento) na remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a
do Estado do Rio de Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do
Estado do Rio de Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro. Eis o teor das leis impugnadas:
LEI 8.071, de 27 de agosto de 2018.
Art. 1&#xBA; Ficam reajustadas em 5% (cinco por cento), a contar
de 1&#xBA; de setembro de 2018, as remunera&#xE7;&#xF5;es dos servidores
ocupantes de cargo de provimento efetivo, de cargo de
provimento em comiss&#xE3;o, fun&#xE7;&#xF5;es gratificadas e fun&#xE7;&#xF5;es
comissionadas, do Quadro &#xFA;nico de Pessoal do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro.
Art. 2&#xBA; As despesas decorrentes desta Lei ser&#xE3;o atendidas
pelas dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias pr&#xF3;prias, ficando o Poder
Executivo autorizado a abrir cr&#xE9;ditos suplementares.
Art. 3&#xBA; Esta Lei entrar&#xE1; em vigor na data de sua
publica&#xE7;&#xE3;o.
LEI 8.072, de 27 de agosto de 2018.
Art. 1&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente dos Servi&#xE7;os Auxiliares do
Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro.
Art. 2&#xBA; Fica reajustada em 5% (cinco por cento) a
remunera&#xE7;&#xE3;o, a contar de 1&#xBA; de setembro de 2018, dos
servidores do Quadro Permanente de Pessoal de Apoio
Administrativo da Defensoria P&#xFA;blica Geral do Estado do Rio
de Janeiro.
Art. 3&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 1&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas ao Minist&#xE9;rio P&#xFA;blico do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 4&#xBA; As despesas resultantes da aplica&#xE7;&#xE3;o do artigo 2&#xBA;
desta lei correr&#xE3;o &#xE0; conta das dota&#xE7;&#xF5;es or&#xE7;ament&#xE1;rias
consignadas a Defensoria P&#xFA;blica do Estado do Rio de Janeiro,
ficando o Poder Executivo autorizado a abrir cr&#xE9;ditos
suplementares.
Art. 5&#xBA; Esta Lei entra em vigor na data de sua publica&#xE7;&#xE3;o.
Inicialmente, o Autor reporta-se &#xE0; situa&#xE7;&#xE3;o de pen&#xFA;ria das finan&#xE7;as
do Estado do Rio de Janeiro, notadamente a partir do ano de 2016, a qual
teria culminado, com respaldo no art. 65 da Lei de Responsabilidade
Fiscal, no reconhecimento do estado de calamidade p&#xFA;blica no &#xE2;mbito da
administra&#xE7;&#xE3;o financeira do Estado, e em posterior ades&#xE3;o do Estado ao
Regime de Recupera&#xE7;&#xE3;o Fiscal &#x2013; RRF, institu&#xED;do pela Lei Complementar
159/2017.
Observa o Autor que, nos termos do art. 8&#xBA; da Lei Complementar
citada, &#xE9; vedada, durante a vig&#xEA;ncia do RRF, a concess&#xE3;o de reajuste a
membros dos Poderes ou de &#xF3;rg&#xE3;os, e a servidores e empregados
p&#xFA;blicos, entre outros.
Informa que, a despeito desse grave contexto f&#xE1;tico e normativo, a
Assembleia Legislativa derrubou o veto aposto pelo Chefe do Poder
Executivo aos projetos de lei dos quais resultaram as normas
impugnadas, concedendo reajuste a servidores do Tribunal de Justi&#xE7;a, do
Minist&#xE9;rio P&#xFA;blico e da Defensoria P&#xFA;blica do Estado do Rio de Janeiro.
Salienta que, durante o processo legislativo das normas em foco, o
Conselho de Supervis&#xE3;o Fiscal do Minist&#xE9;rio da Fazenda alertou que os
referidos projetos de lei, caso aprovados e concretizados, seriam causas
para exclus&#xE3;o do Estado do RRF, o que, segundo a Secretaria de Estado
de Fazenda do Estado do Rio de Janeiro, implicaria a imediata obriga&#xE7;&#xE3;o
de pagamento, pelo Estado &#xE0; Uni&#xE3;o Federal, de mais de R$ 27 bilh&#xF5;es de
reais, al&#xE9;m dos encargos de inadimpl&#xEA;ncia.
Posto esse cen&#xE1;rio, argumenta o Autor que as normas atacadas
implicam viola&#xE7;&#xE3;o ao princ&#xED;pio da independ&#xEA;ncia e harmonia dos
Poderes, pois &#x201C;(i) colocam o Poder Judici&#xE1;rio, o Minist&#xE9;rio P&#xFA;blico e a
Defensoria P&#xFA;blica como inst&#xE2;ncias hegem&#xF4;nicas, acima do modelo de
neutralidade e igualdade institucional tra&#xE7;ado pela Constitui&#xE7;&#xE3;o Federal; e (ii)
aniquilam o Poder Executivo e a prerrogativa de seu Chefe de dire&#xE7;&#xE3;o geral da
Administra&#xE7;&#xE3;o P&#xFA;blica, consistente, no caso dos autos, na ades&#xE3;o do Estado ao
RRF e na sua vital manuten&#xE7;&#xE3;o&#x201D;.
Afirma, ademais, que as leis em quest&#xE3;o violam os princ&#xED;pios da
moralidade, da proporcionalidade e da razoabilidade, porque
&#x201C;concretizam interesses pecuni&#xE1;rios e pr&#xF3;prios de um grupo de servidores do
Tribunal de Justi&#xE7;a, do Minist&#xE9;rio P&#xFA;blico e da Defensoria &#xE0;s custas do retorno
do Estado do Rio de Janeiro ao caos financeiro e social&#x201D;, havendo, com a
potencial exclus&#xE3;o do Estado do RRF, risco de &#x201C;imediata interrup&#xE7;&#xE3;o da
presta&#xE7;&#xE3;o dos mais b&#xE1;sicos servi&#xE7;os p&#xFA;blicos&#x201D;.
Alega, tamb&#xE9;m, haver viola&#xE7;&#xE3;o ao princ&#xED;pio da isonomia, em raz&#xE3;o
de as leis hostilizadas conferirem tratamento privilegiado a determinado
grupo de servidores, em detrimento dos demais, e da pr&#xF3;pria popula&#xE7;&#xE3;o
do Estado do Rio de Janeiro, que seria extremamente prejudicada com a
exclus&#xE3;o do Estado do RRF.
Aduz existir afronta aos princ&#xED;pios do sistema financeiro e
or&#xE7;ament&#xE1;rio, na medida em que as leis hostilizadas conduzem &#x201C;&#xE0;
exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal&#x201D;, bem como &#x201C;representam
grave retrocesso e colocam-se na extrema contram&#xE3;o do dever constitucional de
gest&#xE3;o respons&#xE1;vel&#x201D;.
Argui, por fim, que a Lei Fluminense 8.072/2018 padeceria de v&#xED;cio
de inconstitucionalidade formal, no que tange &#xE0; Defensoria P&#xFA;blica, por
inobserv&#xE2;ncia dos arts. 134, &#xA7; 2&#xBA; e 99, &#xA7; 2&#xBA;, da Constitui&#xE7;&#xE3;o Federal, de
aplica&#xE7;&#xE3;o obrigat&#xF3;ria aos Estados por for&#xE7;a do princ&#xED;pio da simetria, dos
quais se extrai que compete privativamente ao Defensor P&#xFA;blico-Geral a
iniciativa de lei que trate da remunera&#xE7;&#xE3;o de seus servidores.
Com esses fundamentos, e vislumbrando haver periculum in mora na
potencial exclus&#xE3;o do Estado do Regime de Recupera&#xE7;&#xE3;o Fiscal, j&#xE1;
sinalizada pelo Conselho de Supervis&#xE3;o do Minist&#xE9;rio da Fazenda, o
Autor formula pedido cautelar para que seja determinada a imediata
suspens&#xE3;o dos efeitos das leis impugnadas.
No m&#xE9;rito, requer a confirma&#xE7;&#xE3;o da medida cautelar, com a
declara&#xE7;&#xE3;o de inconstitucionalidade das normas hostilizadas.
A Associa&#xE7;&#xE3;o dos Servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio
de Janeiro, ASSEMPERJ, e o Sindicato dos Servidores do Poder Judici&#xE1;rio
do Estado do Rio de Janeiro, SINDIJUSTI&#xC7;A-RJ, manifestaram-se nos
autos requerendo a admiss&#xE3;o de seu ingresso como amici curiae (pe&#xE7;as 11
e 15, respectivamente, dos autos eletr&#xF4;nicos). Em suas raz&#xF5;es, sustentam a
validade das normas questionadas e a impossibilidade de concess&#xE3;o de
medida cautelar.
&#xC9; o relat&#xF3;rio.
A concess&#xE3;o de medida cautelar nas a&#xE7;&#xF5;es de jurisdi&#xE7;&#xE3;o
constitucional concentrada exige a comprova&#xE7;&#xE3;o de perigo de les&#xE3;o
irrepar&#xE1;vel (IVES GANDRA MARTINS, Repert&#xF3;rio IOB de
jurisprud&#xEA;ncia, n 8/95, p. 150/154, abr. 1995), uma vez que se trata de
exce&#xE7;&#xE3;o ao princ&#xED;pio segundo o qual os atos normativos s&#xE3;o
presumidamente constitucionais (ADI 1.155-3/DF, Pleno, Rel. Min.
MARCO AUR&#xC9;LIO, DJ de 18/5/2001). Conforme ensinamento de PAULO
BROSSARD, segundo axioma incontroverso, a lei se presume
constitucional, porque elaborada pelo Poder Legislativo e sancionada
pelo Poder Executivo, isto &#xE9;, por dois dos tr&#xEA;s poderes, situados no
mesmo plano que o Judici&#xE1;rio (A constitui&#xE7;&#xE3;o e as leis a ela anteriores.
Arquivo Minist&#xE9;rio Justi&#xE7;a. Bras&#xED;lia, 45 (180), jul./dez. 1992. p. 139).
A an&#xE1;lise dos requisitos do fumus boni iuris e periculum in mora para
sua concess&#xE3;o admite maior discricionariedade por parte do SUPREMO
TRIBUNAL FEDERAL, com a realiza&#xE7;&#xE3;o de verdadeiro ju&#xED;zo de
conveni&#xEA;ncia pol&#xED;tica da suspens&#xE3;o da efic&#xE1;cia (ADI 3.401 MC, Rel. Min.
GILMAR MENDES, Pleno, decis&#xE3;o: 3/2/2005), pelo qual dever&#xE1; ser
analisada a conveni&#xEA;ncia da suspens&#xE3;o cautelar da lei impugnada (ADI
425 MC, Rel. Min. PAULO BROSSARD, Pleno, decis&#xE3;o: 4/4/1991; ADI 467
MC, Rel. Min. OCT&#xC1;VIO GALLOTTI, Pleno, decis&#xE3;o: 3/4/1991),
permitindo, dessa forma, uma maior subjetividade na an&#xE1;lise da
relev&#xE2;ncia do tema, bem assim em ju&#xED;zo de conveni&#xEA;ncia, ditado pela
gravidade que envolve a discuss&#xE3;o (ADI 490 MC, Rel. Min. CELSO DE
MELLO, Pleno, decis&#xE3;o: 6/12/1990; ADI 508 MC, Rel. Min. OCT&#xC1;VIO
GALLOTTI, Pleno, decis&#xE3;o: 16/4/1991), bem como da plausibilidade
inequ&#xED;voca e dos evidentes riscos sociais ou individuais, de v&#xE1;rias ordens,
que a execu&#xE7;&#xE3;o provis&#xF3;ria da lei questionada gera imediatamente (ADI
474 MC, Rel. Min. SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 4/4/1991), ou,
ainda, das prov&#xE1;veis repercuss&#xF5;es pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado (ADI 718 MC, Rel. Min. CELSO DE MELLO, Pleno, decis&#xE3;o:
3/8/1992), da relev&#xE2;ncia da quest&#xE3;o constitucional (ADI 804 MC, Rel. Min.
SEP&#xDA;LVEDA PERTENCE, Pleno, decis&#xE3;o: 27/11/1992) e da relev&#xE2;ncia da
fundamenta&#xE7;&#xE3;o da argui&#xE7;&#xE3;o de inconstitucionalidade, al&#xE9;m da ocorr&#xEA;ncia
de periculum in mora, tais os entraves &#xE0; atividade econ&#xF4;mica (ADI 173 MC,
Rel. Min. MOREIRA ALVES, Pleno, decis&#xE3;o: 9/3/1990), social ou pol&#xED;tico.
Na presente hip&#xF3;tese, est&#xE3;o presentes os necess&#xE1;rios fumus boni juris
e periculum in mora para a concess&#xE3;o da medida liminar.
Sem preju&#xED;zo da posterior aprecia&#xE7;&#xE3;o das teses contidas na peti&#xE7;&#xE3;o
inicial, a respeito da alegada afronta aos arts. 2&#xBA;, 3&#xBA;, IV, 5&#xBA;, caput, 37, caput,
84, II, 134, &#xA7; 2&#xBA;, c/c art. 99, e 165 a 169, todos da CF, entendo manifesto, por
fundamento diverso, o fumus boni iuris.
Os grandes desafios da Democracia representativa s&#xE3;o o
fortalecimento e a plena efetiva&#xE7;&#xE3;o dos mecanismos de controle
impeditivos da ocorr&#xEA;ncia de abuso de poder pol&#xED;tico ou econ&#xF4;mico nas
elei&#xE7;&#xF5;es, de maneira a evitar o surgimento de condi&#xE7;&#xF5;es que possam
desequilibrar seu resultado, maculando a legitima vontade popular.
A norma impugnada concedeu aos servidores do Poder Judici&#xE1;rio,
Minist&#xE9;rio P&#xFA;blico e Defensoria P&#xFA;blica do Estado do Rio de Janeiro
vantagem remunerat&#xF3;ria consistente no reajuste de 5% (cinco por cento)
sobre seus vencimentos, com efic&#xE1;cia imediata j&#xE1; para o pr&#xF3;ximo m&#xEA;s de
setembro de 2018; ou seja, pouco mais de 30 dias das elei&#xE7;&#xF5;es gerais.
A concess&#xE3;o e implanta&#xE7;&#xE3;o de aumento salarial a categorias
espec&#xED;ficas &#xE0;s v&#xE9;speras do pleito eleitoral, portanto, poder&#xE1; configurar
desvio de finalidade no exerc&#xED;cio de poder pol&#xED;tico legiferante, com reais
possibilidades de influ&#xEA;ncia no pleito eleitoral e perigoso ferimento a
liberdade do voto (CF, art. 60, IV, b); ao pluralismo pol&#xED;tico (CF, art. 1&#xBA;, V e
par&#xE1;grafo &#xFA;nico), ao princ&#xED;pio da igualdade (CF, art. 5&#xBA;, caput) e a
moralidade p&#xFA;blica (CF, art. 37, caput).
Observe-se, que em respeito aos princ&#xED;pios constitucionais que
regem o exerc&#xED;cio dos direitos pol&#xED;ticos, a norma editada no curso do
per&#xED;odo de elei&#xE7;&#xF5;es, entre as conven&#xE7;&#xF5;es partid&#xE1;rias e a posse dos eleitos
no pleito de outubro pr&#xF3;ximo, &#xE9; expressamente vedada pela legisla&#xE7;&#xE3;o
eleitoral, que veda a concess&#xE3;o de reajustes dessa natureza, conforme o
art. 73, VIII, da Lei 9.504/1997:
Art. 73. S&#xE3;o proibidas aos agentes p&#xFA;blicos, servidores ou n&#xE3;o, as
seguintes condutas tendentes a afetar a igualdade de oportunidades entre
candidatos nos pleitos eleitorais:
(...)
VIII - fazer, na circunscri&#xE7;&#xE3;o do pleito, revis&#xE3;o geral da remunera&#xE7;&#xE3;o
dos servidores p&#xFA;blicos que exceda a recomposi&#xE7;&#xE3;o da perda de seu
poder aquisitivo ao longo do ano da elei&#xE7;&#xE3;o, a partir do in&#xED;cio do prazo
estabelecido no art. 7&#xBA; desta Lei e at&#xE9; a posse dos eleitos.
O percentual concedido se amolda a hip&#xF3;tese do inciso VIII, do
referido art. 73, uma vez que &#xE9; superior a infla&#xE7;&#xE3;o apurada no mesmo
per&#xED;odo pelos &#xED;ndices oficiais de pesquisa (IPCA/IBGE), que, neste ano de
2018, registra o patamar de 2,94%; pois a legisla&#xE7;&#xE3;o aprovada prev&#xEA; um
benef&#xED;cio setorial, n&#xE3;o se qualificando como revis&#xE3;o geral da remunera&#xE7;&#xE3;o
(art. 37, X, da CF), pois n&#xE3;o destinada a todos os servidores da
Administra&#xE7;&#xE3;o P&#xFA;blica estadual.
&#xC9; fato not&#xF3;rio o quadro narrado na peti&#xE7;&#xE3;o inicial a respeito do
estado atual das finan&#xE7;as p&#xFA;blicas do Estado do Rio de Janeiro, inclusive
no tocante &#xE0; potencial frustra&#xE7;&#xE3;o de pagamentos a servidores p&#xFA;blicos em
passado recente; que bem demonstra que aprova&#xE7;&#xF5;es legislativas
concessivas de aumentos salariais t&#xEA;m, no momento presente, forte apelo
junto ao eleitorado fluminense e, naturalmente, mobilizam todo tipo de
interesse pol&#xED;tico, social e corporativo, com perigosos reflexos na
normalidade e legitimidade das elei&#xE7;&#xF5;es em curso naquela unidade
federativa.
Ressalte-se, ainda, que o texto constitucional prev&#xEA; o abuso do poder
pol&#xED;tico nas elei&#xE7;&#xF5;es como conduta merecedora das mais graves san&#xE7;&#xF5;es
pol&#xED;ticas, c&#xED;veis e administrativas, como revelado pela art. 14, &#xA7; 9&#xBA;, da CF,
que determina ao legislador complementar a institui&#xE7;&#xE3;o de hip&#xF3;teses de
inelegibilidades voltadas a proteger a &#x201C;normalidade e legitimidade das
elei&#xE7;&#xF5;es contra a influ&#xEA;ncia do poder econ&#xF4;mico ou o abuso do exerc&#xED;cio de fun&#xE7;&#xE3;o,
cargo ou emprego na administra&#xE7;&#xE3;o direta ou indireta&#x201D;; bem como, o
implemento do referido reajuste salarial, em franca viola&#xE7;&#xE3;o &#xE0; legisla&#xE7;&#xE3;o
eleitoral, nos termos do &#xA7;4&#xBA; do art. 37 do texto constitucional, sujeita os
agentes p&#xFA;blicos respons&#xE1;veis por sua implementa&#xE7;&#xE3;o (Governador e
demais chefes de Poderes e &#xF3;rg&#xE3;os aut&#xF4;nomos), por expressa indica&#xE7;&#xE3;o
do art. 73, &#xA7; 7&#xBA;, da Lei 9.504/1997, &#xE0;s san&#xE7;&#xF5;es da Lei de Improbidade
Administrativa, na forma do art. 10, incisos IX e XI, e do art. 11, caput e
inciso I, da Lei 8.429/1992.
O perigo da demora est&#xE1; caracterizado pela proximidade do
processo eleitoral, que recomenda a atua&#xE7;&#xE3;o imediata do SUPREMO
TRIBUNAL FEDERAL, a fim de prevenir a consuma&#xE7;&#xE3;o de condutas que
t&#xEA;m o potencial de desestabilizar o curso regular das elei&#xE7;&#xF5;es; uma vez
que, as leis em quest&#xE3;o foram publicadas no Di&#xE1;rio Oficial do Estado do
Rio de Janeiro em 28/8/2018, ter&#xE7;a-feira, impugnadas perante o
SUPREMO TRIBUNAL FEDERAL em 30/8/2018, quinta-feira; com
previs&#xE3;o de efeitos imediatos, a contar de 1&#xBA;/9/2018, s&#xE1;bado pr&#xF3;ximo.
Consequentemente, as v&#xE9;speras das elei&#xE7;&#xF5;es, caso mantida a efic&#xE1;cia das
leis impugnadas, a folha de pagamento dos &#xF3;rg&#xE3;os p&#xFA;blicos afetados ser&#xE1;
impactada pelo benef&#xED;cio concedido a poucos dias do pleito eleitoral.
Diante de todo o exposto, em face da gravidade das quest&#xF5;es e as
poss&#xED;veis repercuss&#xF5;es eleitorais pela manuten&#xE7;&#xE3;o da efic&#xE1;cia do ato
impugnado, com fundamento no art. 10, &#xA7; 3&#xBA;, da Lei 9.868/1999 e no art.
21, V, do Regimento Interno do Supremo Tribunal Federal, CONCEDO A
MEDIDA CAUTELAR pleiteada, ad referendum do Plen&#xE1;rio desta
SUPREMA CORTE, para suspender os efeitos das Leis 8.071/2018 e
8.072/2018 do Estado do Rio de Janeiro, que conferem, respectivamente e
a contar de 1&#xBA; de setembro de 2018, reajuste de 5% (cinco por cento) na
remunera&#xE7;&#xE3;o dos servidores do Tribunal de Justi&#xE7;a do Estado do Rio de
Janeiro e dos servidores do Minist&#xE9;rio P&#xFA;blico do Estado do Rio de
Janeiro e da Defensoria P&#xFA;blica Geral do Estado do Rio de Janeiro.
Comunique-se ao Presidente da Assembleia Legislativa, ao
Governador, ao Presidente do Tribunal de Justi&#xE7;a, ao Procurador-Geral de
Justi&#xE7;a e ao Defensor P&#xFA;blico-Geral, todos do Estado do Rio de Janeiro,
para ci&#xEA;ncia e cumprimento desta decis&#xE3;o, solicitando-lhes informa&#xE7;&#xF5;es,
no prazo m&#xE1;ximo de 10 (dez) dias. Ap&#xF3;s esse prazo, d&#xEA;-se vista ao
Advogado-Geral da Uni&#xE3;o e ao Procurador-Geral da Rep&#xFA;blica,
sucessivamente, no prazo de 5 (cinco) dias, para que cada qual se
manifeste na forma do art. 12 da Lei 9.868/1999.
Por fim, considerando que a ASSEMPERJ e o SINDJUSTI&#xC7;A-RJ
preenchem os requisitos legais, nos termos do art. 7&#xBA;, &#xA7; 2&#xBA;, da Lei
9.868/1999, DEFIRO OS PEDIDOS DE INGRESSO COMO AMICI
CURIAE na presente A&#xE7;&#xE3;o Direta de Inconstitucionalidade.
Nos termos do art. 21, X, do Regimento Interno do Supremo
Tribunal Federal, pe&#xE7;o dia para julgamento, pelo Plen&#xE1;rio, do referendo
da medida ora concedida.
Publique-se. Intimem-se.
Bras&#xED;lia, 31 de agosto de 2018.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Incidentes&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     Trata-se de Embargos de Declara&#xE7;&#xE3;o opostos pela Associa&#xE7;&#xE3;o dos
Servidores do Minist&#xE9;rio P&#xFA;blico do Rio de Janeiro, ASSEMPERJ (Peti&#xE7;&#xE3;o
STF 74.969/2019, pe&#xE7;a 85 dos autos), e pelo Sindicato dos Servidores do
Poder Judici&#xE1;rio do Rio de Janeiro, SINDJUSTI&#xC7;A/RJ (Peti&#xE7;&#xE3;o STF
75.230/2019, pe&#xE7;a 87), ambas na qualidade de amicus curiae, em face de
decis&#xE3;o deste Relator (decis&#xE3;o de 29/10/2019, pe&#xE7;a 83) que negou
seguimento aos Embargos de Declara&#xE7;&#xE3;o opostos contra o julgamento do
m&#xE9;rito da presente A&#xE7;&#xE3;o Direta pelo Plen&#xE1;rio da CORTE.
Aludem ao artigo 138, &#xA7; 1&#xBA;, do novo C&#xF3;digo de Processo Civil para
defender o cabimento dos primeiros aclarat&#xF3;rios, cujos v&#xED;cios ali alegados
s&#xE3;o de um modo geral reiterados nesse novo recurso.
Pleiteiam o provimento dos Segundos Embargos para que os
Primeiros &#x201C;sejam submetidos a julgamento do Plen&#xE1;rio do Supremo Tribunal
Federal&#x201D;, possibilitando a reforma do ac&#xF3;rd&#xE3;o embargado, &#x201C;no sentido de
conhecer a constitucionalidade das Leis 8.071/18 e 8.072/18 do Estado do Rio de
Janeiro&#x201D;.
&#xC9; o relat&#xF3;rio.
Pela decis&#xE3;o de 29/10/2019 foi negado seguimento aos primeiros
Embargos Declarat&#xF3;rios com fundamento na aus&#xEA;ncia de legitimidade
recursal dos peticionantes.
Os Segundos Embargos de Declara&#xE7;&#xE3;o, opostos em 28 e 29 de
novembro do corrente ano, encontram-se prejudicados, pois n&#xE3;o h&#xE1; mais
qualquer possibilidade de revers&#xE3;o do ac&#xF3;rd&#xE3;o Embargado.
Em 29/10/2019, neguei seguimento aos Primeiros Embargos de
Declara&#xE7;&#xE3;o interpostos pelos embargantes, os quais veiculavam
basicamente as mesmas argumenta&#xE7;&#xF5;es apresentadas nessa
oportunidade. Na ocasi&#xE3;o, considerando a n&#xE3;o interposi&#xE7;&#xE3;o de recurso
por parte dos sujeitos com legitimidade para tanto e o decurso do prazo
recursal, determinei &#xE0; Secretaria que certificasse imediatamente o tr&#xE2;nsito
em julgado, o que foi feito (pe&#xE7;a 84 dos autos eletr&#xF4;nicos).
Como se sabe, os Segundos Embargos de declara&#xE7;&#xE3;o devem ater-se a
v&#xED;cios unicamente do julgado anterior, que examinou os Primeiros. No
caso, a inadmiss&#xE3;o dos Primeiros Embargos de Declara&#xE7;&#xE3;o formalizados
pelos amici curiae est&#xE1; amparada em recente e firme jurisprud&#xEA;ncia do
SUPREMO TRIBUNAL FEDERAL, moldada j&#xE1; ap&#xF3;s o advento do Novo
C&#xF3;digo de Processo Civil.
Portanto, a decis&#xE3;o embargada n&#xE3;o apresenta nenhum dos v&#xED;cios
pass&#xED;veis de corre&#xE7;&#xE3;o por meio de embargos de declara&#xE7;&#xE3;o, a saber,
omiss&#xE3;o, contradi&#xE7;&#xE3;o, obscuridade ou erro material. Evidencia-se o
prop&#xF3;sito infringente, para o qual n&#xE3;o est&#xE1; vocacionado o presente
recurso.
Por todo o exposto, ausentes os v&#xED;cios dos incisos do art. 1.022 do
C&#xF3;digo de Processo Civil, REJEITO OS EMBARGOS DE DECLARA&#xC7;&#xC3;O.
(peti&#xE7;&#xE3;o STF 74.969/2019 e peti&#xE7;&#xE3;o STF 75.230/2019).
Ficam os peticion&#xE1;rios advertidos de que a reitera&#xE7;&#xE3;o de
expedientes descabidos importar&#xE1; a aplica&#xE7;&#xE3;o das san&#xE7;&#xF5;es cab&#xED;veis.
Arquivem-se os autos imediatamente.
Ap&#xF3;s, publique-se.
Bras&#xED;lia, 18 de fevereiro de 2020.
&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Ementa&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
     A&#xC7;&#xC3;O DIRETA DE INCONSTITUCIONALIDADE.
CONSTITUCIONAL. LEIS 8.071/2018 E 8.072/2018 DO ESTADO DO RIO
DE JANEIRO. CONCESS&#xC3;O DE BENEF&#xCD;CIO REMUNERAT&#xD3;RIO PARA
RECOMPOSI&#xC7;&#xC3;O DO PODER AQUISITIVO DAS REMUNERA&#xC7;&#xD5;ES
DOS SERVIDORES DO TRIBUNAL DE JUSTI&#xC7;A, DO MINIST&#xC9;RIO
P&#xDA;BLICO E DA DEFENSORIA P&#xDA;BLICA. ART. 37, X, DA
CONSTITUI&#xC7;&#xC3;O FEDERAL. MAT&#xC9;RIA RESERVADA &#xC0; INICIATIVA
PRIVATIVA DO CHEFE DO PODER EXECUTIVO. PRECEDENTES.
MEDIDA CAUTELAR CONFIRMADA. A&#xC7;&#xC3;O JULGADA
PROCEDENTE.
1. A concess&#xE3;o de benef&#xED;cio remunerat&#xF3;rio fundada no art. 37, X, da
CF, para recomposi&#xE7;&#xE3;o do poder aquisitivo das remunera&#xE7;&#xF5;es de
servidores p&#xFA;blicos, &#xE9; mat&#xE9;ria reservada &#xE0; iniciativa privativa do chefe do
Poder Executivo, que a exerce em benef&#xED;cio dos servidores de todos os
Poderes e &#xF3;rg&#xE3;os da Administra&#xE7;&#xE3;o P&#xFA;blica respectiva.
2. As Leis 8.071/2018 e 8.072/2018 do Estado do Rio de Janeiro t&#xEA;m
n&#xED;tidos contornos de revis&#xE3;o geral dos vencimentos devidos aos servidores do Poder Judici&#xE1;rio, do Minist&#xE9;rio P&#xFA;blico e da Defensoria
P&#xFA;blica, uma vez que o incremento salarial &#xE9; conferido linearmente a
todos, independentemente da carreira, e de forma global, incidente n&#xE3;o
apenas sobre parcelas salariais espec&#xED;ficas, mas sobre o montante
remunerat&#xF3;rio total, inclusive cargos em comiss&#xE3;o e fun&#xE7;&#xF5;es gratificadas.
Inconstitucionalidade por v&#xED;cio de iniciativa do Chefe do Executivo para
deflagrar o processo legislativo.
3. Medida cautelar confirmada. A&#xE7;&#xE3;o Direta de Inconstitucionalidade
julgada procedente.&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;&lt;b style=&quot;rgb(57,82,95)&quot;&gt;Indexa&#xE7;&#xE3;o&lt;/b&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;
    LEI ESTADUAL&lt;/pre&gt;&lt;/div&gt;&lt;b&gt;Fim do Documento&lt;/b&gt;&apos;&apos;&apos;
</code></pre><h2 id="p-gina-com-as-respostas"><a href="https://code.arcos.org.br/respostas-exercicio-modulo-2/">P&#xE1;gina com as respostas</a></h2>]]></content:encoded></item><item><title><![CDATA[Comandos e Variáveis]]></title><description><![CDATA[<h2 id="1-comandos">1. Comandos</h2><p>No come&#xE7;o est&#xE3;o os verbos: os verbos nos d&#xE3;o as express&#xF5;es que utilizamos para definir as a&#xE7;&#xF5;es que o nosso programa deve executar:</p><ul><li>imprima</li><li>grave</li><li>busque</li></ul><p>Cada uma dessas express&#xF5;es &#xE9; chamada de <em>fun&#xE7;</em></p>]]></description><link>https://code.arcos.org.br/variaveis-em-python/</link><guid isPermaLink="false">644a852ad9432f055b15cc7f</guid><dc:creator><![CDATA[Alexandre Araújo Costa]]></dc:creator><pubDate>Tue, 26 Jan 2021 03:51:42 GMT</pubDate><content:encoded><![CDATA[<h2 id="1-comandos">1. Comandos</h2><p>No come&#xE7;o est&#xE3;o os verbos: os verbos nos d&#xE3;o as express&#xF5;es que utilizamos para definir as a&#xE7;&#xF5;es que o nosso programa deve executar:</p><ul><li>imprima</li><li>grave</li><li>busque</li></ul><p>Cada uma dessas express&#xF5;es &#xE9; chamada de <em>fun&#xE7;&#xE3;o</em> (<em>function</em>), e todo algoritmo tem como elemento b&#xE1;sico essas essas determina&#xE7;&#xF5;es de <em>fazer alguma coisa</em>. </p><p>Fazer o qu&#xEA;?</p><ul><li>imprima algo</li><li>grave algo</li><li>busque algo</li></ul><p>Esse &quot;algo&quot; &#xE9; um objeto que complementa a fun&#xE7;&#xE3;o, sendo que a combina&#xE7;&#xE3;o <em>fun&#xE7;&#xE3;o </em>+ <em>objeto</em> nos oferece os exemplos mais simples de comandos (em ingl&#xEA;s, <em>statements</em>, palavra que costuma ser traduzidas por <em>instru&#xE7;&#xF5;es</em>). </p><p>Quem tem forma&#xE7;&#xE3;o em direito tipicamente conhece a diferen&#xE7;a entre uma <em>ordem concreta</em> e uma <em>norma abstrata</em>, e a diferen&#xE7;a entre fun&#xE7;&#xF5;es e comandos &#xE9; similar: </p><ol><li>comandos s&#xE3;o instru&#xE7;&#xF5;es concretas, na medida em que eles se constituem em express&#xF5;es <em>execut&#xE1;veis;</em></li><li>fun&#xE7;&#xF5;es s&#xE3;o instru&#xE7;&#xF5;es abstratas, na medida em que elas somente podem ser executadas na medida em que voc&#xEA; complemente a fun&#xE7;&#xE3;o com alguns <em>valores, </em>sem os quais n&#xE3;o &#xE9; poss&#xED;vel saber exatamente o que deve ser executado.</li></ol><blockquote>Abra x.</blockquote><p>Esta &#xE9; uma fun&#xE7;&#xE3;o, pois voc&#xEA; entende que se trata de uma instru&#xE7;&#xE3;o para abrir algo, mas n&#xE3;o &#xE9; poss&#xED;vel executar essa fun&#xE7;&#xE3;o porque o x n&#xE3;o foi determinado.</p><blockquote>Abra o Spyder. </blockquote><p>Este &#xE9; um comando para voc&#xEA; abrir o Spyder. Executar esse comando &#xE9; simples, desde que voc&#xEA; tenha instalado a plataforma Anaconda. No Windows, basta voc&#xEA; digitar Spyder no menu de busca que fica no canto inferior direito:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-3.png" class="kg-image" alt loading="lazy" width="547" height="144"></figure><p>Quando voc&#xEA; fizer isso, basta clicar sobre o Spyder e ele executar&#xE1; o programa, abrindo uma tela que a primeira vista parece desafiadora:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-5.png" class="kg-image" alt loading="lazy" width="1327" height="687" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-5.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-5.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-5.png 1327w" sizes="(min-width: 720px) 720px"></figure><p>S&#xE3;o muitas janelas ao mesmo tempo, e elas podem parecer um pouco confusas a quem est&#xE1; come&#xE7;ando a usar esse ambiente de desenvolvimento. Como esse &#xE9; provavelmente o seu caso, vamos por partes, e a primeira parte a ser explorada &#xE9; a janela chamada console, no canto inferior direito.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-9.png" class="kg-image" alt loading="lazy" width="1262" height="772" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-9.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-9.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-9.png 1262w" sizes="(min-width: 720px) 720px"></figure><p>Essa &#xE9; uma janela em que voc&#xEA; pode inserir comandos simples como input [In] e voc&#xEA; receber&#xE1; o resultado desses comandos como output [Out]. Para come&#xE7;armos, insira no console o comando: print(&apos;STF&apos;). </p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-10.png" class="kg-image" alt loading="lazy" width="530" height="228"></figure><p>Tome o cuidado de repetir todos os caracteres, pois as linguagens de computa&#xE7;&#xE3;o t&#xEA;m uma sintaxe muito estrita e pequenas mudan&#xE7;as podem modificar bastante o resultado. Se voc&#xEA; copiou corretamente, o resultado ser&#xE1; o seguinte:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-12.png" class="kg-image" alt loading="lazy" width="530" height="228"></figure><p>Seguindo a sua determina&#xE7;&#xE3;o, o Spyder imprimiu na tela a sequ&#xEA;ncia de caracteres STF. Por&#xE9;m, se voc&#xEA; n&#xE3;o tomar cuidado, pode gerar resultados muito diversos. Tente os comandos:</p><ul><li>print STF</li></ul><p>Nesse caso, voc&#xEA; deve ter a seguinte mensagem de erro no console:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-16.png" class="kg-image" alt loading="lazy" width="576" height="98"></figure><p>Quando n&#xE3;o h&#xE1; par&#xEA;nteses, o Spyder acusa um &quot;erro de sintaxe&quot;, ou seja, a falta de um elemento necess&#xE1;rio para que o comando seja compreens&#xED;vel. Trata-se de um esquecimento t&#xE3;o comum que a mensagem de erro j&#xE1; traz a sugest&#xE3;o de corre&#xE7;&#xE3;o.</p><p>Em sua teoria lingu&#xED;stica, Saussurre diferenciou os aspectos sint&#xE1;ticos da linguagem (ligados &#xE0; observ&#xE2;ncia das regras de constru&#xE7;&#xE3;o das express&#xF5;es lingu&#xED;sticas) dos seus aspectos sem&#xE2;nticos (ligados &#xE0; compreensibilidade dos significados). O Python utiliza essa distin&#xE7;&#xE3;o para diferenciar os erros que cometemos ao codificar os comandos, e voc&#xEA; receber&#xE1; o aviso de SyntaxError dezenas de vezes ao longo do curso, pois ele ocorre cada vez que esquecemos de inserir algum elemento necess&#xE1;rio para que os comandos estejam completos.</p><p>Todo comando &#xA0; <em>print</em> exige um complemento entre par&#xEA;nteses, tanto que voc&#xEA; encontrar&#xE1; esse comando (<em>function</em>) descrito como <em>print()</em>, para indicar que a sua sint&#xE1;tica exige esse complemento entre par&#xEA;nteses. </p><p>Tente agora uma nova express&#xE3;o:</p><ul><li>print (STF)</li></ul><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-17.png" class="kg-image" alt loading="lazy" width="627" height="122" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-17.png 600w, https://code.arcos.org.br/content/images/2021/01/image-17.png 627w"></figure><p>Repare que este &#xE9; um erro diferente. N&#xE3;o &#xE9; um SyntaxError, mas um erro sem&#xE2;ntico, referente ao <em>significado</em> da express&#xE3;o (<em>name</em>) STF. </p><p>Quando voc&#xEA; manda imprimir &apos;STF&apos;, o que o computador entende &#xE9; que voc&#xEA; mandou imprimir uma sequ&#xEA;ncia (<em>string</em>) de caracteres formada por S, T e F. Ele n&#xE3;o tem elementos para entender que STF &#xE9; um tribunal, nem mesmo que &#xE9; uma sigla. </p><p>A string &apos;STF&apos; n&#xE3;o <em>aponta</em> para um objeto externo a ela (um tribunal, uma quantidade, um endere&#xE7;o): ela &#xE9; simplesmente uma sequ&#xEA;ncia de letras, como seria tamb&#xE9;m &apos;TSF&apos; ou &quot;FST&quot;. </p><p>O marcador de string s&#xE3;o as aspas (para o Python, tanto faz usar aspas duplas ou simples, desde que voc&#xEA; abra e feche a string com aspas do mesmo tipo), que possibilitam que voc&#xEA; use comandos como:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-14.png" class="kg-image" alt loading="lazy" width="627" height="241" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-14.png 600w, https://code.arcos.org.br/content/images/2021/01/image-14.png 627w"></figure><p>O <em>print</em> &#xE9; entendido como um comando, mas o <em>&apos;print&apos;</em>, por estar entre aspas, &#xE9; processado como uma <em>string</em>. Por&#xE9;m, se voc&#xEA; insere o <em>print (STF)</em>, sem aspas, o Python entende que STF seria um nome (<em>name</em>), ou seja, uma express&#xE3;o que aponta para um objeto (que pode ser um n&#xFA;mero, uma string ou uma fun&#xE7;&#xE3;o). </p><p>Todo nome tem um <em>significado</em>, mas STF n&#xE3;o &#xE9; o nome de uma fun&#xE7;&#xE3;o do Python e voc&#xEA; n&#xE3;o atribuiu significado algum &#xE0; express&#xE3;o STF. O NameError indica que &#xA0;STF &#xE9; um nome que n&#xE3;o teve seu significado definido. E o mesmo ocorre com o <em>Print</em> em mai&#xFA;scula, que n&#xE3;o &#xE9; um comando do Python e, por isso, tamb&#xE9;m &#xE9; entendido como um nome que n&#xE3;o tem significado definido, o que gera a mensagem de erro &apos;name STF is not defined&apos;.</p><p>A falta de um <em>significado</em> n&#xE3;o &#xE9; um problema sint&#xE1;tico (que &#xE9; uma express&#xE3;o mal constru&#xED;da pela falta de um elemento), e sim um problema sem&#xE2;ntico (uma incapacidade de dar sentido a um nome cujo sentido n&#xE3;o havia sido determinado previamente), o que gera o NameError, em vez do SyntaxError.</p><p>Agora tente um novo comando:</p><ul><li>Print (&apos;STF&apos;)</li></ul><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-20.png" class="kg-image" alt loading="lazy" width="623" height="127" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-20.png 600w, https://code.arcos.org.br/content/images/2021/01/image-20.png 623w"></figure><p>Observe que voc&#xEA; teve a mesma mensagem de erro porque <em>Print</em> n&#xE3;o &#xE9; uma fun&#xE7;&#xE3;o do Python, que &#xE9; sens&#xED;vel &#xE0; diferen&#xE7;a entre mai&#xFA;sculas e min&#xFA;sculas. <em>Print</em> &#xE9; diferente de <em>print</em>, que &#xE9; diferente de PRINT<em>. </em>Portanto, o Python n&#xE3;o tem como processar o comando <em>Print (&apos;STF&apos;)</em>, que n&#xE3;o tem significado algum na <em>linguagem </em>Python.</p><p>N&#xE3;o usamos o termo <em>linguagem de programa&#xE7;&#xE3;o</em> &#xE0; toa. Python &#xE9; efetivamente uma linguagem, que &#xE9; processada por um programa espec&#xED;fico: o interpretador. Diferentemente do seu c&#xE9;rebro, que busca dar sentidos adequados para express&#xF5;es com problema (como &quot;Python &#xE9; uma langagem&quot;), o interpretador do Python s&#xF3; sabe processar express&#xF5;es constru&#xED;das de forma muito precisa.</p><p>Essa incapacidade de lidar com imprecis&#xF5;es pode parecer um defeito, mas n&#xE3;o &#xE9;. Uma linguagem extremamente precisa exige que voc&#xEA; explique exatamente o que ela precisa fazer (o que pode ser um peso), mas ela realiza <em>exatamente</em> aquilo que voc&#xEA; determinar. A exig&#xEA;ncia de que a fun&#xE7;&#xE3;o print tenha um complemento entre par&#xEA;nteses permite que voc&#xEA; saiba exatamente o que voc&#xEA; est&#xE1; mandando imprimir. A diferencia&#xE7;&#xE3;o entre STF e &apos;STF&apos; permite que voc&#xEA; mande imprimir strings (como &apos;STF&apos; ou &apos;Marco Aur&#xE9;lio&apos; ou &apos;Procedente&apos;) ou que voc&#xEA; imprima o conte&#xFA;do de nomes <em>cujo significado voc&#xEA; defina previamente</em>.</p><h2 id="2-vari-veis">2. Vari&#xE1;veis</h2><h3 id="2-1-nomes">2.1 Nomes</h3><p>Como posso definir significados para um nome? </p><p>Depende, &#xE9; claro, do tipo de significado que voc&#xEA; atribua a ele. Neste ponto, vamos come&#xE7;ar pelo significado que mais usaremos: nomes podem significar uma <em>string</em>. </p><p>Para atribuir (<em>assign</em>) um significado ao nome, usamos a fun&#xE7;&#xE3;o &apos;=&apos;:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-21.png" class="kg-image" alt loading="lazy" width="596" height="75"></figure><blockquote>Importante<em>: Processo = &apos;ADI333&apos;</em> n&#xE3;o &#xE9; uma afirma&#xE7;&#xE3;o sobre o nome processo, mas &#xE9; uma atribui&#xE7;&#xE3;o de significado. Em Python, o s&#xED;mbolo de igual n&#xE3;o &#xE9; &apos;=&apos;, mas &#xE9; &apos;==&apos;. </blockquote><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-22.png" class="kg-image" alt loading="lazy" width="596" height="166"></figure><p>Uma vez definido que o nome <em>processo</em> ter&#xE1; por conte&#xFA;do a string &apos;ADI333&apos;, a express&#xE3;o <em>processo == &apos;ADI333&apos; </em>ser&#xE1; uma afirma&#xE7;&#xE3;o verdadeira, enquanto <em>processo == &apos;ADI222&apos; </em>ser&#xE1; uma afirma&#xE7;&#xE3;o falsa.</p><h3 id="2-2-vari-veis-e-atributos">2.2 Vari&#xE1;veis e atributos</h3><p>Imagine que queremos construir um banco de dados sobre processos. Voc&#xEA; j&#xE1; sabe o que &#xE9; uma <a href="https://dsd.arcos.org.br/dados/?ref=code.arcos.org.br">unidade de an&#xE1;lise</a> e sabe que, quando constru&#xED;mos uma base de dados, n&#xF3;s ligamos cada unidade (cada linha de nossa tabela) a uma s&#xE9;rie de &apos;atributos&apos;. Se construirmos uma tabela que t&#xEA;m como unidade de an&#xE1;lise <em>processos</em>, podemos ter esses 3 atributos b&#xE1;sicos:</p><ol><li>N&#xFA;mero do Processo</li><li>Data de Julgamento</li><li>Relator</li></ol><p>Como esses atributos <em>variam</em> para cada uma dos processos, eles s&#xE3;o chamados de <em>vari&#xE1;veis</em>. Para o analista de dados, que observa as informa&#xE7;&#xF5;es a partir de seu significado, as vari&#xE1;veis s&#xE3;o os atributos das suas unidades de an&#xE1;lise, que entram como parte dos seus bancos de dados. </p><p>J&#xE1; um programador, concentrados no modo pelo qual o computador processa as informa&#xE7;&#xF5;es, as vari&#xE1;veis s&#xE3;o <em>nomes</em> dados para dados que &#xE9; preciso gravar e manipular dentro dos programas. &#xA0;Quando voc&#xEA; define que <em>processo = &apos;ADI333&apos;</em>, seu programa aloca uma certa &#xE1;rea da mem&#xF3;ria do seu computador para guardar esse dado. Por isso, toda vez que voc&#xEA; cria uma vari&#xE1;vel, voc&#xEA; precisa atribuir um valor a ela. </p><p>Um analista de dados pode criar uma <em>vari&#xE1;vel </em>em abstrato<em>, </em>definindo conceitualmente quais ser&#xE3;o os atributos que ser&#xE3;o mapeados por essa categoria. Por&#xE9;m, dentro da programa&#xE7;&#xE3;o, n&#xE3;o podem ser criadas vari&#xE1;veis dessa forma, pois vari&#xE1;veis n&#xE3;o s&#xE3;o categorias, mas s&#xE3;o uma determinada liga&#xE7;&#xE3;o entre um <em>nome</em> e um <em>valor</em>. N&#xE3;o existe uma fun&#xE7;&#xE3;o <em>criar vari&#xE1;vel processo</em>. O que existe &#xE9; a atribui&#xE7;&#xE3;o de um valor (como &apos;ADI333&apos;) a um nome, de tal forma que esse nome funcionar&#xE1; <em>como uma vari&#xE1;vel:</em></p><ul><li>toda vez que voc&#xEA; inserir o nome <em>processo</em>, o programa utilizar&#xE1; o valor ligado a esse nome;</li><li>toda vez que voc&#xEA; atribuir um novo valor ao nome <em>processo</em>, o programa substituir&#xE1; o valor anterior pelo novo valor.</li></ul><p>Em Python, as <em>vari&#xE1;veis</em> s&#xE3;o nomes que admitem dois tipos b&#xE1;sicos de valores: strings e n&#xFA;meros (sendo que h&#xE1; v&#xE1;rios tipos de n&#xFA;meros). Voc&#xEA; logo se acostumar&#xE1; a chamar de <em>vari&#xE1;veis </em>cada um dos nomes aos quais voc&#xEA; designar&#xE1; um valor (que, em termos do modelo de d ados, s&#xE3;o os atributos que ser&#xE3;o mapeados). </p><p>Cada programa que voc&#xEA; escrever lidar&#xE1; com uma s&#xE9;rie de <em>vari&#xE1;veis</em> porque nunca fazemos algoritmos para lidar com um processo judicial apenas. O trabalho de fazer um programa para analisar processos judiciais s&#xF3; vale a pena quando podemos repetir a mesma opera&#xE7;&#xE3;o para um grande n&#xFA;mero de objetos, de tal forma que o trabalho de fazer o c&#xF3;digo seja mais r&#xE1;pido do que o trabalho de analisar individualmente cada processo em busca das informa&#xE7;&#xF5;es que desejamos.</p><h3 id="2-3-o-nome-das-vari-veis-em-python">2.3 O nome das vari&#xE1;veis em Python</h3><p>Em Python, temos de adaptar a denomina&#xE7;&#xE3;o dos dois primeiros atributos porque os nomes n&#xE3;o admitem <em>espa&#xE7;os</em> (pois <em>data de julgamento</em> seria entendido como 3 nomes e n&#xE3;o como um) e n&#xE3;o admite acentos (porque os nomes em Python s&#xF3; podem ser escritos no limitado repert&#xF3;rio da tabela <a href="https://pt.wikipedia.org/wiki/ASCII?ref=code.arcos.org.br">ASCII</a>). Os nomes das vari&#xE1;veis precisam come&#xE7;ar com uma letra, mas admitem tamb&#xE9;m n&#xFA;meros e undercores, nada mais.</p><p>Assim, podemos adaptar os nomes pensados antes para:</p><ol><li>NumeroDoProcesso</li><li>data_de_julgamento</li><li>Relator</li></ol><p>Outra sa&#xED;da t&#xED;pica seria usar underline no lugar dos espa&#xE7;os, ou simplificar ainda mais os nomes, que &#xE9; o que eu normalmente fa&#xE7;o, ficando com uma palavra apenas, em letras min&#xFA;sculas:</p><ol><li>processo</li><li>julgamento</li><li>relator</li></ol><p>A defini&#xE7;&#xE3;o dos nomes &#xE9; uma quest&#xE3;o de estilo, mas usarei essa &#xFA;ltima combina&#xE7;&#xE3;o porque voc&#xEA;s v&#xE3;o ter de escrever v&#xE1;rias vezes esses nomes, e nomes mais simples geram menos erros (embora digam menos sobre o que os nomes significam de fato, algo que &#xE9; mais claro no modelo anterior).</p><p>Agora escolha no site do STF uma a&#xE7;&#xE3;o e insira um conte&#xFA;do para cada uma dessas vari&#xE1;veis, tal como:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-23.png" class="kg-image" alt loading="lazy" width="601" height="97" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-23.png 600w, https://code.arcos.org.br/content/images/2021/01/image-23.png 601w"></figure><p>Cronometre o tempo que voc&#xEA; leva para entrar na p&#xE1;gina, procurar os dados do processo e escrever isso no Spyder. Imagino que voc&#xEA; levar&#xE1; entre 40 e 50 segundos para realizar essa atividade, com rela&#xE7;&#xE3;o a 3 informa&#xE7;&#xF5;es simples e pequenas.</p><p>Voc&#xEA; logo aprender&#xE1; a criar um programa que realize isso de forma automatizada, entrando no site do STF, colhendo todos os atributos que voc&#xEA; definir em cerca de 1 processo por segundo. Como o programa ser&#xE1; centenas de vezes mais r&#xE1;pido (e bem mais preciso) do que voc&#xEA;, valer&#xE1; o esfor&#xE7;o de elaborar o algoritmo que diga exatamente o que o computador deve fazer. Para isso, &#xE9; preciso aprender a lidar com as vari&#xE1;veis.</p><h3 id="2-4-variable-explorer">2.4 Variable explorer</h3><p>Por falar nas vari&#xE1;veis, &#xE9; hora de observar uma outra parte do Spyder, que estava um pouco escondida: o explorador de vari&#xE1;veis (<em>variable explorer</em>).</p><p>Na exibi&#xE7;&#xE3;o padr&#xE3;o do Spyder (<em>Spyder Default Layout</em>), existe uma janela grande na esquerda (que ainda n&#xE3;o usamos), e na direita existe o console (que est&#xE1;vamos usando at&#xE9; agora) e tamb&#xE9;m uma janela de Help. Se voc&#xEA; olhar com cuidado, ver&#xE1; a aba Variable Explorer ao lado da aba de Help, na janela superior direita.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-24.png" class="kg-image" alt loading="lazy" width="1324" height="712" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-24.png 600w, https://code.arcos.org.br/content/images/size/w1000/2021/01/image-24.png 1000w, https://code.arcos.org.br/content/images/2021/01/image-24.png 1324w" sizes="(min-width: 720px) 720px"></figure><p>Para dar mais visibilidade a essa ferramenta que nos &#xE9; muito &#xFA;til vamos adotar o formato de tela que ser&#xE1; o layout padr&#xE3;o das grava&#xE7;&#xF5;es de tela deste curso: a exibi&#xE7;&#xE3;o RStudio, alterada na barra View, como indica o v&#xED;deo abaixo, que deve ser visto em tela cheia porque as letras ficam muito pequenas na exibi&#xE7;&#xE3;o reduzida:</p><!--kg-card-begin: html--><iframe class="embeddedObject shadow resizable" name="embedded_content" scrolling="no" frameborder="0" type="text/html" style="overflow:hidden;" src="https://www.screencast.com/users/alexandrearcos/folders/Capture/media/d10e3b9d-309e-41ac-a6db-0b944b1df983/embed" height="300px" width="100%" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<!--kg-card-end: html--><p>Essa modifica&#xE7;&#xE3;o deixa o explorador de vari&#xE1;veis na sua janela superior direita, e veja que ali est&#xE3;o as 3 vari&#xE1;veis definidas, bem como o conte&#xFA;do que atribu&#xED;mos a elas.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-25.png" class="kg-image" alt loading="lazy" width="552" height="179"></figure><p>Est&#xE3;o ali as 3 vari&#xE1;veis definidas, com o conte&#xFA;do que foi dado. Como atribu&#xED;mos 3 conte&#xFA;dos string, o tipo da vari&#xE1;vel aparece como &apos;str&apos;.</p><h2 id="3-strings-e-n-meros">3. Strings e n&#xFA;meros</h2><p>N&#xE3;o confunda &apos;333&apos; com 333.</p><p>Os n&#xFA;meros, em Python, aparecem sem aspas e a sua utilidade &#xE9; justamente que eles podem ser tratados por meio de opera&#xE7;&#xF5;es matem&#xE1;ticas. Se voc&#xEA; voltar para o console (que mudou de lado e est&#xE1; agora na parte inferior esquerda) e escrever <em>333 + 333 </em>, o que aparecer&#xE1; na sua tela?</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-29.png" class="kg-image" alt loading="lazy" width="588" height="123"></figure><p>Isso ocorre porque um n&#xFA;mero pode ter v&#xE1;rios nomes. 333, 332+1 e 666/2 s&#xE3;o tr&#xEA;s nomes diferentes do mesmo n&#xFA;mero. O n&#xFA;mero &#xE9; a quantidade designada, n&#xE3;o importa se o designemos de uma forma direta (333) ou por meio de combina&#xE7;&#xF5;es de s&#xED;mbolos que &#xA0;(como 111x3). Tamb&#xE9;m podemos designar um n&#xFA;mero quando o definimos como o <em>valor </em>de uma <em>vari&#xE1;vel:</em></p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-30.png" class="kg-image" alt loading="lazy" width="580" height="79"></figure><p>Note que, nos inputs, o Spyder deixa os n&#xFA;meros em amarelo, para ajudar a diferenciar das strings, que s&#xE3;o brancas.</p><p>Quando definimos que processo = 333, processo passa a ser um nome para a quantidade 333, o que permite que usemos o nome processo dentro de opera&#xE7;&#xF5;es matem&#xE1;ticas, tal como se us&#xE1;ssemos o numeral <em>333.</em></p><blockquote>N&#xE3;o confundir o n&#xFA;mero 333 com o numeral <em>333</em>, pois numeral &#xE9; um nome do n&#xFA;mero, usando algarismos (que, por sua vez, s&#xE3;o s&#xED;mbolos usados para construir numerais: 0, 1, 2, III, IV, V, etc.).</blockquote><p>Olhe novamente o explorador de vari&#xE1;veis e voc&#xEA; ver&#xE1; que algo mudou:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-31.png" class="kg-image" alt loading="lazy" width="589" height="179"></figure><p>A vari&#xE1;vel de nome <em>processo</em> continua tendo 333 como valor, mas esse valor agora &#xE9; um <em>int</em>, ou seja, um n&#xFA;mero integral (<em>integer</em>). Antes, tratava-se da string &apos;333&apos;, que &#xE9; um valor totalmente diverso. Nesse caso espec&#xED;fico, por mais que falemos em &apos;N&#xFA;mero do Processo&apos;, o <em>333 </em>de ADI333 n&#xE3;o &#xE9; um n&#xFA;mero (uma quantidade), mas &#xE9; uma indica&#xE7;&#xE3;o de que ela ingressou no Tribunal depois da ADI332 e antes da ADI333. </p><blockquote>N&#xE3;o &#xA0;devemos usar esse 333 em nenhuma opera&#xE7;&#xE3;o matem&#xE1;tica e, por isso, devemos tratar o n&#xFA;mero do processo como str, e n&#xE3;o &#xA0;como int.</blockquote><p>Uma vez que retornemos o 333 para string, experimente qual &#xE9; o resultado das express&#xF5;es:</p><ul><li>processo + processo </li><li>processo - processo</li><li>processo * 5</li></ul><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-33.png" class="kg-image" alt loading="lazy" width="595" height="258"></figure><p>Observe que a primeira express&#xE3;o concatena as duas strings poderemos us&#xE1;-lo em uma opera&#xE7;&#xE3;o &apos;+&apos;, que n&#xE3;o &#xE9; de soma, mas de concatena&#xE7;&#xE3;o. O s&#xED;mbolo &apos;+&apos;, que &#xE9; usado para somar n&#xFA;meros, &#xE9; tamb&#xE9;m usado para concatenar strings. J&#xE1; o s&#xED;mbolo &apos;*&apos; concatena v&#xE1;rias vezes uma string consigo mesma.</p><p>Por&#xE9;m, n&#xE3;o h&#xE1; opera&#xE7;&#xF5;es de strings ligadas aos s&#xED;mbolos &apos;-&apos; ou &apos;/&apos;, o que gera mensagens de erro: esses dois operadores somente s&#xE3;o aplicados a n&#xFA;meros.</p><p>Um problema comum ocorre quando temos uma vari&#xE1;vel num&#xE9;rica e pretendemos concaten&#xE1;-la com uma string. Isso acontece, por exemplo, se voc&#xEA; tem uma lista de 50 andamentos de um processo e deseja chamar cada andamentos desses de <em>andamento1, andamento2, andamento3 </em>e assim por diante. Para usar esse caso no console, voc&#xEA; pode definir:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-34.png" class="kg-image" alt loading="lazy" width="588" height="189"></figure><p>Nesse caso, retorna um TypeError, pois strings somente podem ser concatenadas a outras strings. Pare resolver esse problema, voc&#xEA; precisa usar a fun&#xE7;&#xE3;o str(), que converte uma vari&#xE1;vel qualquer em uma string, que poder&#xE1; ent&#xE3;o ser concatenada.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-36.png" class="kg-image" alt loading="lazy" width="597" height="55"></figure><p>Outra situa&#xE7;&#xE3;o comum &#xE9; a de voc&#xEA; buscar informa&#xE7;&#xF5;es em uma base de dados e acabar tendo n&#xFA;meros no formato string. Voc&#xEA; pode ter uma tabela com a <em>dura&#xE7;&#xE3;o do processo</em> ou o <em>valor da causa</em>, que s&#xE3;o quantidades, mas que v&#xE3;o ser interpretados como strings porque foram extra&#xED;dos apenas como textos contidos em uma tabela. Nesse caso, voc&#xEA; precisa usar a fun&#xE7;&#xE3;o int(), para converter a string em um n&#xFA;mero inteiro, quando ela &#xE9; formada por algarismos ar&#xE1;bicos.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-38.png" class="kg-image" alt loading="lazy" width="537" height="169"></figure><p>Se voc&#xEA; observar o Variable Explorer, ver&#xE1; que a express&#xE3;o int(processo) retorna um n&#xFA;mero, mas n&#xE3;o alterou o valor da vari&#xE1;vel. Ocorre que, muitas vezes, voc&#xEA; deseja justamente alterar esse valor de forma definitiva, por tratar-se efetivamente de um n&#xFA;mero e n&#xE3;o de um nome. Nesse caso, voc&#xEA; pode redefinir o valor de processo:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-40.png" class="kg-image" alt loading="lazy" width="594" height="74"></figure><h2 id="4-trabalhando-com-strings">4. Trabalhando com strings</h2><p>Agora que voc&#xEA; j&#xE1; sabe o que &#xE9; uma string e sabe converter integers em strings (e vice versa), voc&#xEA; precisa aprender o &#xFA;ltimo t&#xF3;pico dessa parte inicial sobre vari&#xE1;veis: manipular as strings.</p><h3 id="4-1-replace">4.1 Replace</h3><p>Esse &#xE9; um ponto importante porque &#xE9; preciso utilizar esse tipo de altera&#xE7;&#xE3;o o tempo todo nos processos de extra&#xE7;&#xE3;o de dados. Por exemplo, muitas vezes extra&#xED;mos o campo ministro e temos dados como &apos;Min. Marco Aur&#xE9;lio&apos;, mas desejamos retirar o t&#xED;tulo, ficando apenas com o nome. Essa &#xE9; uma fun&#xE7;&#xE3;o para a qual utilizamos a fun&#xE7;&#xE3;o <em>replace</em>, que segue o seguinte modelo:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-41.png" class="kg-image" alt loading="lazy" width="598" height="82"></figure><p>Usamos, ent&#xE3;o, o <em>string.replace(&apos;texto a ser substitu&#xED;do&apos;, &apos;texto a inserir&apos;)</em>, sendo que nesse caso espec&#xED;fico inserimos uma string vazia &apos;&apos;, que apaga o texto substitu&#xED;do.</p><p>O replace pode ser usado das formas mais variadas, tais como:</p><ul><li>substituir letras acentuadas por n&#xE3;o acentuadas (pois elas s&#xE3;o entendidas como letras diferentes e &#xE9; preciso padronizar as bases de dados);</li><li>simplificar as bases (por exemplo, substituindo todas as A&#xE7;&#xE3;o Direita de Constitucionalidade por ADI);</li><li>limpar os dados (por exemplo, substituindo dois espa&#xE7;os por um espa&#xE7;o).</li></ul><h3 id="4-2-concatenar">4.2 Concatenar</h3><p>Outra foram de manipular as strings &#xE9; concaten&#xE1;-las de forma adequada, para gerar express&#xF5;es maiores. Uma express&#xE3;o que voc&#xEA; precisar&#xE1; de usar muitas vezes &#xE9; o endere&#xE7;o na internet (<em>url</em>) em que est&#xE3;o os dados de cada processo. Um dos endere&#xE7;os que cont&#xE9;m dados sobre a ADI 6000 &#xE9; o:</p><blockquote><a href="http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000&amp;ref=code.arcos.org.br">h<a href="http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000&amp;ref=code.arcos.org.br">ttp://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=ADI&amp;documento=&amp;s1=0&amp;numProcesso=6000</a></a></blockquote><p>Estudaremos ainda a estrutura desses endere&#xE7;os, mas voc&#xEA; j&#xE1; deve ter notado que o numProcesso=6000 est&#xE1; relacionado com o n&#xFA;mero do processo o que nos permite criar uma vari&#xE1;vel <em>endere&#xE7;o </em>que possa nos oferecer o endere&#xE7;o das v&#xE1;rias ADIs:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-43.png" class="kg-image" alt loading="lazy" width="588" height="146"></figure><p>Com essa constru&#xE7;&#xE3;o de que a vari&#xE1;vel url &#xE9; formada pela concatena&#xE7;&#xE3;o de duas strings (o in&#xED;cio do endere&#xE7;o mais o n&#xFA;mero do processo). Com isso, se voc&#xEA; mudar o n&#xFA;mero do processo, ser&#xE1; gerado um novo endere&#xE7;o.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-44.png" class="kg-image" alt loading="lazy" width="589" height="172"></figure><h3 id="4-3-posi-o-dos-caracteres-na-string">4.3 Posi&#xE7;&#xE3;o dos caracteres na string</h3><p>Por fim, voc&#xEA; pode manipular as strings a partir da altera&#xE7;&#xE3;o direta de elementos que fazem parte dela, usando refer&#xEA;ncias aos elementos que a constituem.</p><p>A string &#xE9; literalmente uma sequ&#xEA;ncia de caracteres, e &#xE9; assim que ela &#xE9; armazenada e pode ser acessada: uma sequ&#xEA;ncia linear, que come&#xE7;a do caractere de n&#xFA;mero 0 e segue sendo numerada at&#xE9; o &#xFA;ltimo objeto. Para identificar um caractere, basta dar o nome da string seguido de sua posi&#xE7;&#xE3;o, entre colchetes.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-45.png" class="kg-image" alt loading="lazy" width="597" height="206"></figure><p>Nesse in&#xED;cio, nunca &#xE9; demais ressaltar que:</p><blockquote><strong>A primeira posi&#xE7;&#xE3;o de toda string &#xE9; 0</strong>. N&#xE3;o &#xE9; 1. &#xC9; 0!</blockquote><p>Isso precisa ser ressaltado porque trata-se de uma caracter&#xED;stica do Python que &#xE9; diferente de outras linguagens, como R. Como essa posi&#xE7;&#xE3;o inicial no 0 n&#xE3;o &#xE9; intuitiva (nossa tend&#xEA;ncia &#xE9; contar a partir do 1), trata-se de uma das causas mais comuns de erros de programa&#xE7;&#xE3;o.</p><p>Essa &#xE9; uma conven&#xE7;&#xE3;o contraintuitiva, mas que parece ter motivo porque facilita o c&#xE1;lculo de intervalos. Imagine que voc&#xEA; deseja baixar do STF as ADIs 100 a 300. Uma forma usual &#xE9; identificar o padr&#xE3;o do endere&#xE7;o da ADI100 e depois automatizar que o programa buscar&#xE1; a a&#xE7;&#xE3;o &#xA0;100, depois a 100+1, depois a 100+2, depois a 100+3 e assim por diante. A forma mais usual de fazer isso &#xE9; indicar que o programa deve buscar a a&#xE7;&#xE3;o 100+n (porque 1 &#xE9; o n&#xFA;mero da primeira a&#xE7;&#xE3;o), repetindo isso 201 vezes (seriam 200 se voc&#xEA; quisesse de 101 a 300). Nesse caso, h&#xE1; duas op&#xE7;&#xF5;es:</p><ol><li>se n variar de 0 a 200 (como ocorre em Python), basta voc&#xEA; dizer que o programa deve buscar no portal do STF a a&#xE7;&#xE3;o 100 +n (pois a primeira a&#xE7;&#xE3;o a ser buscada ser&#xE1; justamente a ADI001, que &#xE9; 100 + 0);</li><li>j&#xE1; se n variar de 1 a 201, voc&#xEA; teria de dizer que a a&#xE7;&#xE3;o buscada seria correspondente a 100 +(n -1), porque voc&#xEA; precisaria somar 0 &#xE0; sua posi&#xE7;&#xE3;o inicial, para que o intervalo fosse correto. Sem esse cuidado, voc&#xEA; teria grande chance de come&#xE7;ar o intervalo do lugar errado, o que te daria as a&#xE7;&#xF5;es de 101 a 201. </li></ol><p>Embora voc&#xEA; tenha que se lembrar que a posi&#xE7;&#xE3;o inicial &#xE9; sempre 0 (o que pode ser dif&#xED;cil no come&#xE7;o), voc&#xEA; ter&#xE1; menos chance de cometer erros quando calcular intervalos, j&#xE1; que nesse momento o que voc&#xEA; quer de verdade &#xE9; que o intervalo seja de<strong> 100 + 0</strong>, 100 + 1, 100 + 2 e assim por diante. Logo, o fato de a posi&#xE7;&#xE3;o inicial ser 0 facilita o c&#xE1;lculo dos intervalos (evitando der de somar +1 em todo intervalo) e torna os c&#xF3;digos mais elegantes.</p><h3 id="4-4-intervalos-de-caracteres">4.4 Intervalos de caracteres</h3><p>Agora que voc&#xEA; sabe identificar um caractere dentro da string, &#xE9; f&#xE1;cil voc&#xEA; conseguir extrair um intervalo, que &#xE9; dado por meio de um &quot;:&quot;, segundo o modelo:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-46.png" class="kg-image" alt loading="lazy" width="603" height="135" srcset="https://code.arcos.org.br/content/images/size/w600/2021/01/image-46.png 600w, https://code.arcos.org.br/content/images/2021/01/image-46.png 603w"></figure><p>Aqui, os desenvolvedores da linguagem tamb&#xE9;m tiveram de fazer uma escolha dif&#xED;cil. Se voc&#xEA; define um intervalo [0:3], voc&#xEA; pode querer dizer 4 coisas diferentes:</p><ol><li>Voc&#xEA; deseja somente o que est&#xE1; no meio, excluindo os pontos de marca&#xE7;&#xE3;o, o que deveria retornar as posi&#xE7;&#xF5;es 1 e 2.</li><li>Voc&#xEA; deseja incluir as posi&#xE7;&#xF5;es indicadas no intervalo, o que retornaria 0, 1, 2 e 3. </li><li>Voc&#xEA; deseja incluir a posi&#xE7;&#xE3;o inicial e excluir a posi&#xE7;&#xE3;o final, o que retornaria 0, 1 e 2.</li><li>Voc&#xEA; deseja excluir a posi&#xE7;&#xE3;o inicial e incluir a posi&#xE7;&#xE3;o final, o que retornaria 1, 2 e 3.</li></ol><p>Os desenvolvedores de Python resolveram utilizar a sa&#xED;da 3. &#xC9; muito comum desejarmos incluir desde a primeira posi&#xE7;&#xE3;o, e seria muito ruim que a extra&#xE7;&#xE3;o do termo &apos;ADI&apos; fosse escrito como [-1:3]. Como o intervalo deveria incluir a primeira posi&#xE7;&#xE3;o, seria razo&#xE1;vel que ele inclu&#xED;sse tamb&#xE9;m a segunda, de tal forma que &apos;ADI&apos; corresponderia a [0:2]. Por&#xE9;m, como voc&#xEA; deve ter notado pela figura anterior, a sa&#xED;da do Python foi a terceira: incluir o in&#xED;cio e excluir o final.</p><p>Por que essa escolha que tamb&#xE9;m parece estranha. Acho que ela se explica tamb&#xE9;m pelo modo usual de calcularmos intervalos. Imagine que voc&#xEA; deseja buscar o relator de uma ADI no texto da p&#xE1;gina. Uma sa&#xED;da t&#xED;pica seria usar a fun&#xE7;&#xE3;o find(), que &#xE9; usada da seguinte forma.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-47.png" class="kg-image" alt loading="lazy" width="598" height="120"></figure><p>O comando string.find(&apos;Relator: &apos;) busca a primeira ocorr&#xEA;ncia de &apos;Relator:&apos; dentro da vari&#xE1;vel <em>string </em>e retorna a posi&#xE7;&#xE3;o do primeiro caractere dessa sequ&#xEA;ncia. Com isso, o comando string[9:] nos retorna a sequ&#xEA;ncia da posi&#xE7;&#xE3;o 9 at&#xE9; o final. </p><p>Mas a verdade &#xE9; que n&#xE3;o queremos extrair o termo &apos;Relator: &apos;, somente o nome do relator, e por isso devemos deslocar o in&#xED;cio da extra&#xE7;&#xE3;o da posi&#xE7;&#xE3;o 9 para a posi&#xE7;&#xE3;o 9 + o n&#xFA;mero de caracteres de &apos;Relator: &apos;, que nos &#xE9; dado pelo util&#xED;ssimo comando len(), que vem de <em>lenght:</em></p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-48.png" class="kg-image" alt loading="lazy" width="595" height="134"></figure><p>Para facilitar a nossa vida, podemos otimizar esse resultado inserindo uma vari&#xE1;vel <em>inicio</em>, que &#xE9; a posi&#xE7;&#xE3;o onde est&#xE1; o termo &apos;Relator: &apos;, que serve como marcador de in&#xED;cio do nome do relator, somado do n&#xFA;mero de caracteres desse marcador.</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-49.png" class="kg-image" alt loading="lazy" width="596" height="129"></figure><p>Com isso, chegamos ao mesmo resultado, mas de uma forma mais elegante e leg&#xED;vel. &#xA0;E agora que conseguimos encontrar o ponto inicial de extra&#xE7;&#xE3;o, podemos encontrar tamb&#xE9;m uma marca&#xE7;&#xE3;o adequada para o final desse nome, que acaba logo antes de uma &apos;,&apos;. Com isso, podemos encontrar o final se descobrirmos a posi&#xE7;&#xE3;o dessa &apos;,&apos;. </p><p>Ocorre que n&#xF3;s n&#xE3;o queremos que esse marcador do final entre no nosso intervalo! E &#xE9; por isso que os desenvolvedores de Python devem ter escolhido a op&#xE7;&#xE3;o 3: </p><blockquote>normalmente queremos que a posi&#xE7;&#xE3;o inicial seja inclu&#xED;da, e queremos que o marcador de fim seja exclu&#xED;do do texto extra&#xED;do.</blockquote><p>Se voc&#xEA; usar um string.find(&apos;,&apos;), o resultado ser&#xE1; a posi&#xE7;&#xE3;o da primeira v&#xED;rgula, que vem depois de &apos;ADI 333&apos;, o que n&#xE3;o nos interessa. Por&#xE9;m, isso &#xE9; facilmente resolvido pela utiliza&#xE7;&#xE3;o da forma completa da fun&#xE7;&#xE3;o <em>find</em>, que admite a inclus&#xE3;o de uma posi&#xE7;&#xE3;o inicial para a busca, que ser&#xE1; justamente a vari&#xE1;vel. Com isso, teremos:</p><figure class="kg-card kg-image-card"><img src="https://code.arcos.org.br/content/images/2021/01/image-50.png" class="kg-image" alt loading="lazy" width="600" height="201" srcset="https://code.arcos.org.br/content/images/2021/01/image-50.png 600w"></figure><p>Essa l&#xF3;gica de encontrar um marcador de in&#xED;cio e um marcador de fim, para extrair o que est&#xE1; no meio, ser&#xE1; utilizada exaustivamente nos nossos programas de extra&#xE7;&#xE3;o. </p><p>A extra&#xE7;&#xE3;o desses segmentos &#xE9; important&#xED;ssima porque, quando buscamos informa&#xE7;&#xF5;es dentro de uma p&#xE1;gina da internet, o que temos &#xE9; uma imensa string, com milhares de caracteres, e precisamos extrair pontos espec&#xED;ficos. Uma posi&#xE7;&#xE3;o errada transforma &quot;Marco Aur&#xE9;lio&quot; em &quot;arco Aur&#xE9;lio&quot;. Duas posi&#xE7;&#xF5;es de erro podem transformar um &apos;Improcedente&apos; em &apos;procedente &#xA0;&apos;. Mas, com uma escolha adequada de marcadores de in&#xED;cio e de fim, voc&#xEA; &#xE9; capaz de extrair qualquer texto que desejar.</p><h2 id="5-resumo">5. Resumo</h2><p>O que voc&#xEA; aprendeu at&#xE9; aqui:</p><ol><li>Definir vari&#xE1;veis string e num&#xE9;ricas,</li><li>Alterar o valor das vari&#xE1;veis,</li><li>Manipular strings usando a fun&#xE7;&#xE3;o replace,</li><li>Extrair textos a partir de sua posi&#xE7;&#xE3;o na string,</li><li>Encontrar posi&#xE7;&#xF5;es na string usando a fun&#xE7;&#xE3;o <em>find</em>,</li><li>Extrair trechos usando a l&#xF3;gica de marcador de in&#xED;cio + marcador de fim.</li></ol><h2 id="6-atividades">6. Atividades</h2><p>Uma vez que voc&#xEA; tenha dominado os conte&#xFA;dos trabalhados neste texto, voc&#xEA; ser&#xE1; capaz de realizar a <a href="https://code.arcos.org.br/atividade01/">Atividade 1 - Problemas b&#xE1;sicos</a>, que traz alguns desafios que podem ser realizados trabalhando no console do Spyder.</p>]]></content:encoded></item></channel></rss>