analisando valores booleanos com argparse
<p>eu gostaria de usar argparse para analisar argumentos de linha de comando booleanos escritos como &quot;--foo true&quot; ou &quot;--foo false&quot;. por exemplo:</p><pre><code>my\_program --my\_boolean\_flag false </code></pre><p>no entanto, o código de teste a seguir não faz o que eu gostaria:</p><pre><code>import argparse parser = argparse.argumentparser(description="my parser") parser.add\_argument("--my\_bool", type=bool) cmd\_line = ["--my\_bool", "false"] parsed\_args = parser.parse(cmd\_line) </code></pre><p>infelizmente, <code>parsed\_args.my\_bool</code> é avaliado como <code>true</code>. este é o caso mesmo quando eu altero <code>cmd\_line</code> para <code>["--my\_bool", ""]</code>, o que é surpreendente, já que <code>bool("")</code> é valido para <code>false</code>.</p><p>como posso fazer com que argparse parse <code>"false"</code>, <code>"f"</code> e suas variantes minúsculas como <code>false</code>?</p>
<p>ainda outra solução usando as sugestões anteriores, mas com o erro de análise &quot;correto&quot; de <code>argparse</code>:</p><pre><code>def str2bool(v): if v.lower() in ('yes', 'true', 't', 'y', '1'): return true elif v.lower() in ('no', 'false', 'f', 'n', '0'): return false else: raise argparse.argumenttypeerror('boolean value expected.') </code></pre><p>isso é muito útil para fazer comutadores com valores padrão; por exemplo</p><pre><code>parser.add\_argument("--nice", type=str2bool, nargs='?', const=true, default=nice, help="activate nice mode.") </code></pre><p>permite-me usar:</p><pre><code>script --nice script --nice &lt;bool&gt; </code></pre><p>e ainda usar um valor padrão (específico para as configurações do usuário). uma desvantagem (indiretamente relacionada) com essa abordagem é que os 'narjos' podem pegar um argumento posicional - veja <a href="https://stackoverflow.com/questions/26985650/argparse-do-not-catch-positional-arguments-with-nargs">esta questão relacionada</a> e <a href="http://bugs.python.org/issue9338">este relatório de bug argparse</a> .</p>
<p>opa mayki, tudo bem com você?</p>
<p>isso aconteceu porque o <code>&#43;</code> também é um quantificador dentro das expressões regulares, então precisamos utilizar a <code>\</code> para dizer que queremos o literal mesmo:</p>
<p>eu criei uma regex para testar aqui, um pouco diferente da sua veja:</p>
<pre class="prettyprint"><code>let pattern &#61; /[\d\.]&#43;e\&#43;\d{2}/g</code></pre><p>veja que eu estou criando um grupo que vai receber dígitos e ponto final, ai eu utilizo o <code>&#43;</code> para identificar que esse padrão de números e pontos para pegar mais de um</p>
<p>depois coloquei o <code>e</code>e o <code>\&#43;</code> para identificar que é de fato um <code>&#43;</code> e um <code>\d{2}</code> para ser os 2 últimos digitos</p>
<p>testando esse padrão:</p>
<pre class="prettyprint"><code>let valor &#61; &#34;2.4446506362607e&#43;29&#43;3.7298826723704e&#43;29&#34;
let pattern &#61; /[\d\.]&#43;e\&#43;\d{2}/g

let resposta &#61; valor.matchall(pattern)
resposta.next()

&gt;&gt;&gt;&gt;
done: false
value: array [ &#34;2.4446506362607e&#43;29&#34; ]

resposta.next()
&gt;&gt;&gt;
done: false
value: array [ &#34;3.7298826723704e&#43;29&#34; ]
</code></pre><p>compreendeu? </p>
<p>abraços e bons estudos!</p> <p>olá daniel,</p>
<p>parece que o problema é que você está comparando o texto digitado no input com um número inteiro.</p>
<p>o valor retornado pela função <code>input</code> é string.</p>
<p>experimente modificar o código para:</p>
<pre class="prettyprint"><code>if g &#61;&#61; &#39;1&#39;:
 print(&#39;oque é oque é?&#39;)
 oque.adivinhacao()
elif g &#61;&#61; &#39;2&#39;:
 print(&#39;ultimas palavras?&#39;)
 game.forca()</code></pre><p>se tiver problemas avise...</p>
<p>luan</p> <p>você pode usar find com <a href="http://en.wikipedia.org/wiki/xargs">xargs</a> para isso</p><p><code>find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -imysongs mv -i mysongs /somedir</code></p><blockquote> <p>o comando -i no comando acima informa ao xargs qual string de substituição você deseja usar (caso contrário, adiciona os argumentos ao final do comando).</p> </blockquote><p>or<br> no seu comando, tente mover '{}' após o comando <code>mv</code>.</p><p><code>find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;</code></p> <p>usando <a href="http://ruby-doc.org/core-1.9.3/string.html#method-i-scan"><code>scan</code></a> deve fazer o truque:</p><pre><code>string.scan(/regex/) </code></pre> <p>o <code>while</code> está checando se o valor é null. enquanto não for null, continua infinitamente.</p>
<p>o enter não é null. se quiser checar uma linha vazia, faça algo como <code>while(!s.isempty())</code></p> <p>tente isto:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'ucs-2be'); }, $str); </code></pre><p>caso seja baseado em utf-16, c/c++/java/json-style:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'utf-16be'); }, $str); </code></pre> <p>olá valdiney, é para você fazer uma variação de código.</p>
<p>usar sua curiosidade e criatividade, variar, não se prender só ao que foi pedido, tipo:</p>
<p></p>fazendo diferente:
<strong> teste 1 </strong>
<strong> teste 2 </strong>
<strong> teste 3 </strong>
<p></p>
<p></p> <pre><code>for (iterator&lt;string&gt; i = someiterable.iterator(); i.hasnext();) { string item = i.next(); system.out.println(item); } </code></pre><p>note que se você precisar usar <code>i.remove();</code> no seu loop, ou acessar o iterador real de alguma forma, você não pode usar o idioma <code>for ( : )</code>, já que o iterador é meramente inferido.</p><p>como foi observado por denis bueno, este código funciona para qualquer objeto que implemente a interface <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/iterable.html"><code>iterable</code></a> .</p><p>além disso, se o lado direito do idioma <code>for (:)</code> for um objeto <code>array</code> em vez de <code>iterable</code>, o código interno usará um contador de índice int e verificará <code>array.length</code>. veja o <a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2">java language specification</a> .</p> <p>dois caminhos. símbolos (<code>:foo</code> notação) ou constantes (<code>foo</code> notação).</p><p>os símbolos são apropriados quando você deseja melhorar a legibilidade sem conter o código com strings literais.</p><pre><code>postal\_code[:minnesota] = "mn" postal\_code[:new\_york] = "ny" </code></pre><p>constantes são apropriadas quando você tem um valor subjacente que é importante. apenas declare um módulo para manter suas constantes e, em seguida, declare as constantes dentro disso.</p><pre><code>module foo bar = 1 baz = 2 biz = 4 end flags = foo::bar | foo::baz # flags = 3 </code></pre> <p>você pode tentar colocar uma nova linha nos dados:</p><pre><code>&lt;data&gt;foo bar baz baz bar&lt;/data&gt; </code></pre><p>se isso não funcionar, talvez seja necessário analisar a string manualmente.</p><p>se você precisar de xaml direto, é fácil:</p><pre class="lang-xml prettyprint-override"><code>&lt;textblock&gt; lorem &lt;linebreak/&gt; ipsum &lt;/textblock&gt; </code></pre>