8
votes

Python: "rompre" de la déclaration si la déclaration à l'intérieur d'une boucle

Je comprends que l'on ne peut pas "casser" une déclaration IF et seulement d'une boucle, mais j'essaie de conceptuellement arrêter une déclaration de l'évaluation après avoir trouvé un "vrai" la première fois que c'est à l'intérieur d'une boucle .

X inflation 0 randomValue 0.500605733928 prob container 0.0294117647059
X inflation 1 randomValue 0.500605733928 prob container 0.0294117647059
X inflation 2 randomValue 0.500605733928 prob container 0.0294117647059
X inflation 3 randomValue 0.500605733928 prob container 0.0294117647059
X inflation 4 randomValue 0.500605733928 prob container 0.147058823529
X inflation 5 randomValue 0.500605733928 prob container 0.235294117647
X inflation 6 randomValue 0.500605733928 prob container 0.441176470588
O inflation 7 randomValue 0.500605733928 prob container 0.588235294118
X stock 0 randomValue 0.392225720409 prob container 0.0294117647059
X stock 1 randomValue 0.392225720409 prob container 0.0294117647059
X stock 2 randomValue 0.392225720409 prob container 0.0294117647059
X stock 3 randomValue 0.392225720409 prob container 0.0294117647059
X stock 4 randomValue 0.392225720409 prob container 0.0294117647059
X stock 5 randomValue 0.392225720409 prob container 0.0294117647059
X stock 6 randomValue 0.392225720409 prob container 0.0882352941176
X stock 7 randomValue 0.392225720409 prob container 0.0882352941176
X stock 8 randomValue 0.392225720409 prob container 0.0882352941176
X stock 9 randomValue 0.392225720409 prob container 0.117647058824
X stock 10 randomValue 0.392225720409 prob container 0.147058823529
X stock 11 randomValue 0.392225720409 prob container 0.205882352941
X stock 12 randomValue 0.392225720409 prob container 0.264705882353
X stock 13 randomValue 0.392225720409 prob container 0.294117647059
X stock 14 randomValue 0.392225720409 prob container 0.382352941176
O stock 15 randomValue 0.392225720409 prob container 0.441176470588
X inflation 0 randomValue 0.146182475695 prob container 0.0294117647059
X inflation 1 randomValue 0.146182475695 prob container 0.0294117647059
X inflation 2 randomValue 0.146182475695 prob container 0.0294117647059
X inflation 3 randomValue 0.146182475695 prob container 0.0294117647059
O inflation 4 randomValue 0.146182475695 prob container 0.147058823529
X stock 0 randomValue 0.745100497977 prob container 0.0294117647059
X stock 1 randomValue 0.745100497977 prob container 0.0294117647059
X stock 2 randomValue 0.745100497977 prob container 0.0294117647059
X stock 3 randomValue 0.745100497977 prob container 0.0294117647059
X stock 4 randomValue 0.745100497977 prob container 0.0294117647059
X stock 5 randomValue 0.745100497977 prob container 0.0294117647059
X stock 6 randomValue 0.745100497977 prob container 0.0882352941176
X stock 7 randomValue 0.745100497977 prob container 0.0882352941176
X stock 8 randomValue 0.745100497977 prob container 0.0882352941176
X stock 9 randomValue 0.745100497977 prob container 0.117647058824
X stock 10 randomValue 0.745100497977 prob container 0.147058823529
X stock 11 randomValue 0.745100497977 prob container 0.205882352941
X stock 12 randomValue 0.745100497977 prob container 0.264705882353
X stock 13 randomValue 0.745100497977 prob container 0.294117647059
X stock 14 randomValue 0.745100497977 prob container 0.382352941176
X stock 15 randomValue 0.745100497977 prob container 0.441176470588
X stock 16 randomValue 0.745100497977 prob container 0.470588235294
X stock 17 randomValue 0.745100497977 prob container 0.470588235294
X stock 18 randomValue 0.745100497977 prob container 0.529411764706
X stock 19 randomValue 0.745100497977 prob container 0.588235294118
X stock 20 randomValue 0.745100497977 prob container 0.647058823529
O stock 21 randomValue 0.745100497977 prob container 0.764705882353
X inflation 0 randomValue 0.332170052306 prob container 0.0294117647059
X inflation 1 randomValue 0.332170052306 prob container 0.0294117647059
X inflation 2 randomValue 0.332170052306 prob container 0.0294117647059
X inflation 3 randomValue 0.332170052306 prob container 0.0294117647059
X inflation 4 randomValue 0.332170052306 prob container 0.147058823529
X inflation 5 randomValue 0.332170052306 prob container 0.235294117647
O inflation 6 randomValue 0.332170052306 prob container 0.441176470588
X stock 0 randomValue 0.145551106438 prob container 0.0294117647059
X stock 1 randomValue 0.145551106438 prob container 0.0294117647059
X stock 2 randomValue 0.145551106438 prob container 0.0294117647059
X stock 3 randomValue 0.145551106438 prob container 0.0294117647059
X stock 4 randomValue 0.145551106438 prob container 0.0294117647059
X stock 5 randomValue 0.145551106438 prob container 0.0294117647059
X stock 6 randomValue 0.145551106438 prob container 0.0882352941176
X stock 7 randomValue 0.145551106438 prob container 0.0882352941176
X stock 8 randomValue 0.145551106438 prob container 0.0882352941176
X stock 9 randomValue 0.145551106438 prob container 0.117647058824
O stock 10 randomValue 0.145551106438 prob container 0.147058823529
{'inflation': [0.028073642645577577], 'stock': [-0.07388514885974767]}


0 commentaires

5 Réponses :


12
votes
    if randomValue <= sum(i.freq for i in diceList[0:i+1]):         
        print 'O', i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
        break
Break will terminate "the nearest enclosing loop, skipping the optional else clause if the loop has one." The outer loop will just continue with the next iteration. So you are not "breaking the if" but the loop the if is enclosed in. Before the break, you can just set all values from diceList[0:i+1] to diceList[0:len(diceList)+1] to true.

2 commentaires

J'avais essayé la pause comme vous l'avez suggéré initialement, et cela a effectivement travaillé (voir la mise à jour ci-dessus), mais je ne peux pas sembler obtenir les valeurs sélectionnées à ajouter aux listes de dictionnaires car elles traversent les boucles (notez l'addition de boucle tandis que). Il devrait y avoir 3 valeurs dans chaque liste de clés du dictionnaire, mais comme vous pouvez le constater, seule la dernière itération se présente. Je semble vous écraser à chaque passage au lieu d'ajouter. Des idées?


Oop, cependant. J'ai déménagé à l'extérieur de la boucle et cela l'a arrêté d'écraser. Surveillance de ma part. Merci!



2
votes

Une méthode consiste à soulever une exception dans le code intérieur et à l'attraper à l'intérieur de la boucle et continuez la boucle.


0 commentaires

0
votes

De ce que je comprends, vous essayez d'enregistrer la comparaison du reste de la boucle. Je pense que vous devez diviser la boucle que vous en avez dans deux boucles, une fois la déclaration IF et trouve le point de partition, puis la seconde qui saute simplement la comparaison. Vous pouvez conserver le courant que je travaille sur une variable externe à la boucle, puis continuez à partir de ce point dans la deuxième boucle.


0 commentaires

1
votes

Quelles sont les conditions que vous connaissez la déclaration est true ? Je pensais que cela pourrait être "si la dernière déclaration était vraie", mais dans votre sortie d'échantillon, vous remettez finalement à false ?

De toute façon, envisagez d'ajouter cela comme une sorte de première condition à votre Si: xxx

si la première partie est évaluée comme false (c'est-à-dire que vous savez déjà que c'est vrai ), Python ne devrait pas évaluer le second terme du et (puisqu'il ne peut plus être vrai ) et déplacez-vous. Vous devez simplement ajouter une autre clause d'autre (et peut-être peut-être peut-être le sinon un elif ) et le gérer là-bas.

NB: de cette façon pourrait être un peu hacky en fonction de ce que vous devez faire pour déterminer si vous connaissez déjà la déclaration est true : \


0 commentaires

0
votes

Si vous êtes sûr que vous voulez sortir du bloc de code IF, et que vous le feriez si seulement "pause" fonctionnerait, vous pouvez mettre "pause" où vous le vouliez, puis placez la totalité de la déclaration bloc dans une boucle avec une seule itération.


0 commentaires