Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générer des boucles imbriquées

    9 septembre 2018 à 3:27:22

    Bonsoir à la communauté ,

    je souhaite générer N boucles imbriquées de cette manière là :

    for i1 in range(1,4):
    	for i2 in range(1,4):
    
    
    
    
    		         for iN in range(1,4):

    Le nombre de boucles dépendant de N . On m'a orienté vers la récursivité , avez-vous une indication (PAS la réponse)à me donner pour m'aider ?

    Merci d'avance à la communauté.



    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      9 septembre 2018 à 10:05:44

      Je pense que si tu en es à cette solution (boucles imbriqués), tu risques d'avoir de gros problèmes de performance.

      Il faudrait connaître ton problème afin de savoir quelle serait la meilleure façon de le résoudre...

      • Partager sur Facebook
      • Partager sur Twitter
        9 septembre 2018 à 18:45:00

        L'utilisateur saisit deux entrées, d'une part le nombre de dés, nbd (que l'on limitera pratiquement à 10) et, d'autre part la somme, s, comprise entre nbd et 
        6.nbd. Le programme calcule et affiche le nombre de façons de faire s avec les NBD dés.

        Pour ce problème , je voulais utiliser la récursivité , ce qui me permettra de générer plusieurs boucles

        .

        -
        Edité par JackoMyo 9 septembre 2018 à 18:48:18

        • Partager sur Facebook
        • Partager sur Twitter
          12 septembre 2018 à 15:37:05

          Bonjour,

          Il a des outils pour répondre à ta problématique dans le module itertools.

          • Partager sur Facebook
          • Partager sur Twitter
            18 septembre 2018 à 23:36:11

            Bonjour,

            justement j'essaye de faire sans , c'est en guise d'exercice en programmation.

            • Partager sur Facebook
            • Partager sur Twitter
              19 septembre 2018 à 8:30:00

              Salut, pour utiliser une fonction récursive, il faut commencer par se demander quelle est la condition d'arrêt.
              Ici, la fonction ne s’appellera pas quand c'est le dernier dé (la somme voulue est atteinte et la combinaison affichée) ; sinon, il faut lancer un dé avec un valeur bornée (pour que la somme voulue reste atteignable) et rappeler la fonction avec un dé en moins...

              #!/usr/local/bin/python2.7
              # -*-coding:Utf-8 -*
              
              def lancer_de(serie, somme, somme_voulue, nbd_restant):
              	if nbd_restant == 1: # le dernier dés
              		serie.append(somme_voulue - somme)
              		print(serie)
              	else:
              		manque = somme_voulue - somme
              		nbd_restant -= 1
              		
              		if manque > 1 + 6 * nbd_restant:
              			mini = manque - 6 * nbd_restant
              		else:
              			mini = 1
              			
              		if manque < 6 + nbd_restant:
              			maxi = manque - nbd_restant
              		else:
              			maxi = 6
              	
              		for i in range(mini, maxi+1):
              			copie = list(serie)
              			copie.append(i)
              			lancer_de(copie, somme+i, somme_voulue, nbd_restant)
              
              if __name__ == '__main__':
              	#TODO saisie nbd et somme_voulue + controles
              	
              	nbd = 2
              	somme_voulue = 6
              
              	assert(1 <= nbd <= 6)
              	assert(nbd <= somme_voulue <= 6 * nbd)
              
              	print("Faire {} avec {} dés à 6 faces :".format(somme_voulue, nbd))
              	lancer_de([], 0, somme_voulue, nbd)



              -
              Edité par jeremy7644 19 septembre 2018 à 8:32:14

              • Partager sur Facebook
              • Partager sur Twitter
                19 septembre 2018 à 9:17:30

                Marrant, il a explicitement demandé de pas avoir la réponse ^^'
                • Partager sur Facebook
                • Partager sur Twitter

                « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
                D. Mendeleïev

                  25 septembre 2018 à 0:10:39

                  KirbXCoucou a écrit:

                  Marrant, il a explicitement demandé de pas avoir la réponse ^^'


                  Merci d'avoir répondu à ma place , je ne sais quoi dire
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Générer des boucles imbriquées

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown