Ir para conteúdo
Luis Carlos Moura

Ajuda a utilizar o while

Recommended Posts

Sou um iniciante no Python e estou precisando de ajuda a utilizar ele para realizar o loop para diminuir linhas do programa.
O programa serve para verificar numericamente a probabilidade de um certo evento acontecer.

O script do programa é:

 

from itertools import product
from math import *

from numpy import*

 

#Espaço Amostral, Eventos e Probabilidades para a combinação de dados (D4,D6,D8):

 

X=18

 

espaco = list(product(range(1, 4+1), range(1, 6+1), range(1, 8+1)))
TAM1 = size(array(espaco))/3

 

evento = [ x for x in espaco if x[0] + x[1] + x[2] == X]
evento_1 = [ x for x in espaco if x[0] + x[1] + x[2] == X-1]
evento_2 = [ x for x in espaco if x[0] + x[1] + x[2] == X-2]
evento_3 = [ x for x in espaco if x[0] + x[1] + x[2] == X-3]
evento_4 = [ x for x in espaco if x[0] + x[1] + x[2] == X-4]
evento_5 = [ x for x in espaco if x[0] + x[1] + x[2] == X-5]
evento_6 = [ x for x in espaco if x[0] + x[1] + x[2] == X-6]
evento_7 = [ x for x in espaco if x[0] + x[1] + x[2] == X-7]
evento_8 = [ x for x in espaco if x[0] + x[1] + x[2] == X-8]
evento_9 = [ x for x in espaco if x[0] + x[1] + x[2] == X-9]
evento_10 = [ x for x in espaco if x[0] + x[1] + x[2] == X-10]
evento_11 = [ x for x in espaco if x[0] + x[1] + x[2] == X-11]
evento_12 = [ x for x in espaco if x[0] + x[1] + x[2] == X-12]
evento_13 = [ x for x in espaco if x[0] + x[1] + x[2] == X-13]
evento_14 = [ x for x in espaco if x[0] + x[1] + x[2] == X-14]
evento_15 = [ x for x in espaco if x[0] + x[1] + x[2] == X-15]
evento_16 = [ x for x in espaco if x[0] + x[1] + x[2] == X-16]
evento_17 = [ x for x in espaco if x[0] + x[1] + x[2] == X-17]

 

TAM2 = size(array(evento))/3
TAM2_1 = size(array(evento_1))/3
TAM2_2 = size(array(evento_2))/3
TAM2_3 = size(array(evento_3))/3
TAM2_4 = size(array(evento_4))/3
TAM2_5 = size(array(evento_5))/3
TAM2_6 = size(array(evento_6))/3
TAM2_7 = size(array(evento_7))/3
TAM2_8 = size(array(evento_8))/3
TAM2_9 = size(array(evento_9))/3
TAM2_10 = size(array(evento_11))/3
TAM2_11 = size(array(evento_12))/3
TAM2_12 = size(array(evento_13))/3
TAM2_13 = size(array(evento_14))/3
TAM2_14 = size(array(evento_15))/3
TAM2_15 = size(array(evento_16))/3
TAM2_16 = size(array(evento_17))/3
TAM2_17 = size(array(evento_17))/3

 

A = TAM2*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_1*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_2*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_3*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_4*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_5*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_6*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_7*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_8*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_9*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_10*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_11*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_12*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_13*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_14*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_15*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_16*(1.0/TAM1)
print(round(A*100, 2))
A = TAM2_17*(1.0/TAM1)


print(round(A*100, 2))

 

Ao iniciar o scrip sairá:
0.52
1.56
3.13
5.21
7.29
9.38
10.94
11.98
11.98
10.94
7.29
5.21
3.13
1.56
0.52
0.0
0.0
0.0

 

Eu queria diminuir o tamanho desse programa utilizando um loop, tendo os mesmo resultados no final.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 11closed
      Olá Estou tentando fazer com que o loop, me ordene por ordem de qual 'cliente' comprou mais de determinadas frutas.
       
      Tenho a tabela 'compras' com os campos;
      ID
      ID_CLIENTE = mostra qual cliente fez a compra
      FRUTA = Mostra qual fruta foi comprada
      QTS_FRUTAS = mostra a quantidade de frutas compradas
       
      alguns preenchimentos dos campos da tabela 'compras' para exemplificar;
       
      ID ID_CLIENTE FRUTA QTS_FRUTAS 1 1 Banana 10 2 2 Goiaba 20 3 3 Pera 10 4 2 Goiaba 20 5 1 Banana 30 6 3 Melão 40 7 1 Banana 50 8 3 Banana 10 9 1 Melão 20 10 1 Goiaba 10  
      Como eu falei, eu gostaria que mostrasse por ordem de qual Cliente comprou mais de determinada fruta, nesse caso com a tabela de exemplo acima, como faço para o loop ficar na seguinte ordem
       
      ID_CLIENTE FRUTA QTS_FRUTAS 1 bananas 90 2 Goiabas 40 3 melão 40 1 Melão 20 1 Goiabas 10 3 Bananas 10 3 Pera 10  
      alguém poderia me ajudar, não estou conseguindo fazer esse LOOP rodar da maneira correta, não achei a solução.
    • Por leardini
      Boa noite.
       
      Tenho uma consulta feita em PHP que mostra em uma table o resultado, e preciso que essa consulta o Valor do Campo "ID"  passe para uma Variável para que eu possa usar em outra consulta.
       
      Não consegui muita informação para o tipo de conexão que estou usando SQL Server e não My SQL, e é uns de meus primeiros códigos.
       
      Desde já agradeço a atenção!
       
      $rank = odbc_exec($connection, $verifica); if($pg == 1 or $pg == 0){ $i = 1; }elseif($pg > 1){ $i = $ini+1; } while($dados = odbc_fetch_array($rank)) { $id=$i+1; // AQUI OCORRE O PROBLEMA $idmomb = .$dados['id']; echo ($i % 2) ? "<tr>" : "<tr>"; echo '<td><center>'.$dados['ID'].'</center></td>'; echo '<td><center>'.$dados['MonsterName'].'</center></td>'; echo '<td><center>'.$dados['PublicDrop'].'</center></td>'; echo '<td><center>'.$dados['Quantity'].'</center></td>'; echo '</tr>'; $i++; } echo '</table>';  
    • Por Luis Febro
      Olá, estou tendo dificuldade em fazer a iteração comparando os valores das propriedades do objeto:
       
      let accessories = {bike: ["helmet", 'glasses', "gloves", "smartwatch"], apps: ["Google Maps", "Anki"]};       let compareItems = function(obj, analysedThing) {         let res = "";         Object.entries(obj).map(function(ìtems) {           if (ìtems[1].indexOf(analysedThing) > -1) {              res = ìtems[0];             document.getElementById("quickCode").innerHTML = `it was found ${analysedThing} in the section ${res}`;           } else {             document.getElementById("quickCode").innerHTML = "Nothing was found. Try another item!";           }         });       };       compareItems(accessories, "glasses");  
      Output: Nothing was found. Try another item! // Mas tem sim na primeira propriedade. Se busco algum valor em apps, por outro lado, ele acha para mim. Mas não em bike.
      Alguém pode me orientar para buscar todos os valores e retornar a propriedade correspondente? Grato.
    • Por Falcon89
      Antes de minha dúvida, deixo algumas considerações:
      - Estou em nível de aprendizagem, então, talvez a idéia e o script possa parecer bem "amador"
      - A dúvida não corresponde nada a função ou biblioteca Date, o ano utilizado é ficticio, no caso começando no ano de valor 1;
      - A minha dúvida se relaciona a POO, a utilização do Python como ilustração é meramente ilustrativa.

       

      Vamos a dúvida:
      Então eu criei uma classe chamada tempo com atributo ano, e uma classe pessoa com apenas os atributos em questão, a data de nascimento e a idade. O que eu queria que acontecesse, se possivel, era que ao instanciar uma nova pessoa, ela pegasse o ano atual do objeto 'tempo' já instanciado, e jogasse como ano de nascimento, e já setasse a idade da pessoa, subtraindo o ano atual do objeto tempo pela data de nascimento, fica meio confuso para explicar vou tentar dar um exemplo:
      Supondo que criei o 'tempoObj', que tem o valor do 'tempoObj.ano=1', nesse periodo eu instancio um objeto 'pessoaObj', então eu queria que essa pessoa pegasse o valor do ano que no caso seria 1 e jogasse na "pessoaObj.data_nascimento"que agora teria o valor de 1 e ano atual que também seria o mesmo valor e já setando atravéz da subtração a 'pessoaObj.idade' como 0, em tempo de execução, chamando a funçao avancar_ano() umas 3 vezes, o valor do ano atual seria 'tempoObj.ano = 4', nesse caso a idade dessa pessoa teria que seria 3, porem ao passar "tempoObj.ano" como argumento para data de nascimento e ano atual, ele sempre irá passar o mesmo valor para ambos fazendo com que a idade sempre seja 0.
       Nesse caso existe alguma forma que o valor seja passado para o metodo data_nascimento, some ao instanciar a classe pessoa, e o que o valor recebido so ano do tempoObj seja correspondente ao ano que esta armazenado no tempoObj.ano no momento de execução.
      Já tentei varias formas e sempre chego na mesma, se ficou entendido a questão e se é que existe uma solução, alguém tem essa solução? Desde já agradeço, e peço desculpa se não fui tão claro ao apresentar o problema. 
    • Por Maykel dos Santos Figueire
      Gostaria de saber como posso fazer para ter inputs enviando valores diferentes dentro de um loop do while...
      <form method="POST" name="form" action="<?php echo $_SERVER['PHP_SELF'];?>"> <?php while ($linhasMotoristas = mysqli_fetch_array($consultaMotoristas)) { $motoristasStatus = $linhasMotoristas['status']; $motoristasId = $linhasMotoristas['idmotoristas']; $motoristasNome = $linhasMotoristas['nome']; $motoristasCpf = $linhasMotoristas['cpf']; $motoristasGanhos = $linhasMotoristas['ganhos'] ?> <tr> <td class="s"> <?php if($motoristasStatus == 1){ echo "<div style='color: green;'>●</div>"; }else{echo "<div style='color: red;'>●</div>"; } ?> </td> <td class="m"><?php echo $motoristasId;?></td> <td class="n"><?php echo $motoristasNome;?></td> <td class="c"><input type="hidden" name="<?php $td_1 = $motoristasId;?>"><?php echo $motoristasCpf;?> </td> <td class="g"><?php echo round($motoristasGanhos, 2);?></td> <td> <input type="text" name="valorBruto"> <input type="submit" name="submit"> <?php if (isset($_POST['submit'])?$_POST['submit'] : 0) { $valorBruto = $_POST['valorBruto']; $porcentagemBase = 5/100; $encargosBase = 25/100; $vezesPorcentagem = $valorBruto*$porcentagemBase; $menosEncargosBase = $vezesPorcentagem-$encargosBase; $resultadoLiquido = $menosEncargosBase*$porcentagemBase; $resultadoGeral = $resultadoLiquido; } ?> <?php echo round($resultadoGeral,2); ?> <?php echo $td_1;?> </td> </tr> <?php } ?> </form> Como vocês podem ver na imagem, ele soma todos os campos com o mesmo valor, queria que somasse um valor para cada campo...

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.