Partage
  • Partager sur Facebook
  • Partager sur Twitter

IA avec des listes ne donne pas ce que je veux . .

Sujet résolu
Anonyme
    24 septembre 2014 à 20:24:20

    Bonjour j'ai fait un code qui est sensé choisir une destination pour rejoindre un tuple intermédiare représentant une position sur une carte faite avec des listes. Pas clair ? :diable: le Code ici :

    #-*-coding: utf8-*
    
    import itertools
    import random
    
    liste1   = [0, 1]
    liste2   = [4, 3]
    position_actuelle = liste2
    go_liste = []
    
    for go_ in itertools.product(liste1, liste2):
    	go_liste.append(go_)
    
    choix_tuple = random.randrange(0, len(go_liste))
    print(go_liste[choix_tuple])
    
    while 1:
    	pre, sec = tuple(position_actuelle)
    	go1, go2 = tuple(go_liste[choix_tuple])
    	pre, sec, go1, go2 = int(pre), int(sec), int(go1), int(go2)
    	if pre == go1: break
    	if pre != go1:
    		if pre > go1:
    			pre -= 1
    			print("pre > go1  " + str(pre))
    		elif pre < go1:
    			pre += 1
    			print("pre < go1  " + str(pre))
    	if sec == go2: break
    	if sec != go2:
    		if sec > go2:
    			sec -= 1
    			print("sec > go2  " + str(sec))
    		elif sec < go2:
    			sec += 1
    			print("sec < go2  " + str(sec))
    	if pre == go1 and sec == go2:
    		print("(pre, sec) +  >  + (go1, go2) :: " + str(pre) + " " + str(sec) + " " + str(go1) + " " + str(go2))
    		break
    
    input()

    Ici j'ai une liste de départ liste1 et une auter liste, d'arrivée, liste2. Je les "produit" pour avoir en somme une version développée. Puis je stock ses version dans une liste et j'en choisi une version. Enfin j'essaye de faire pre = go1 et sec = go2 pour atteindre la destination.

    Je ne peux pas faire les pre += 1 / pre -= 1 bizarrement . . . . . .

    Help ! Merci :euh:

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2014 à 22:05:35

      Je suis pas sûr d'avoir bien compris ce que tu souhaite faire. En tout cas, y'a un truc qui me tique : dès que pre == go1 OU sec == go2, tu t'arrêtes. Pourquoi ? Ça me paraît pas très logique.

      -
      Edité par Escargotine 24 septembre 2014 à 22:18:24

      • Partager sur Facebook
      • Partager sur Twitter
        24 septembre 2014 à 22:30:43

        :o Fola t'es une vraie locomotive. On te donne des conseils, et t'es déjà parti sur un nouveau code :lol:.

        Il y a plein de chose à changer dans ton code:

        #Inutile
        position_actuelle = liste2  #La façon dont tu l'utilise n'a aucune utilité
        pre, sec, go1, go2 = int(pre), int(sec), int(go1), int(go2)  #Sont déjà entier
        if pre == go1 and sec == go2: #Cette condition ne sera jamais remplie car tu break avant
        
        #Logique?
        position_actuelle = liste2  #liste2 n'est pas censé être l'arrivée
        
        #Un sens?
        print("pre > go1  " + str(pre))
        
        #Utilise des noms explicites
        depart = [0, 1]
        arrivee = [4, 3]
        
        #Plus python
        if sec == go2:
            break
        
        #Remplace:
        #random.randrange(0, len(go_liste)) par
        choix_tuple = random.randchoice(go_liste)
        
        #if pre != go1 par:
        else
            
        #if pre < go1 par:
        else

        Et j'en ai sûrement loupé.

        Bien après beaucoup de concentration :colere:, j'ai enfin compris ce que tu essayais de faire. Ton objectif est de choisir une destination aléatoire que tu composera à partir des coordonnées du départ et de l'arrivée. Ensuite tu compare les coordonnées de ta position avec celles de la destination et si elles sont différentes tu ajoute/soustrait 1:

        import random
         
        depart = [0, 1]
        arrivee = [4, 3]
        
        destination = [random.choice(depart), random.choice(arrivee)]
        
        #Ma position initiale est la même que celle du départ
        ma_position = list(depart)
        print("position initiale: {}".format(ma_position))
        
        
        #Boucle de déplacement
        while True:
            
            if ma_position[0] == destination[0]:
                pass
            else:
                if ma_position[0] > destination[0]:
                    ma_position[0] -= 1
                else:
                    ma_position[0] += 1
            
            if ma_position[1] == destination[1]:
                pass
            else:
                if ma_position[1] > destination[1]:
                    ma_position[1] -= 1
                else:
                    ma_position[1] += 1
        
            print("position actuelle: {}".format(ma_position))
        
            if ma_position == destination:
                break
        
        input("On est arrivée à la destination: {}".format(ma_position))

        Tu peux raccourcir la boucle de déplacement comme ceci:

        while True:
        
            if ma_position == destination:
                break
        
            for indice, coordonnee in enumerate(ma_position):
                if coordonnee == destination[indice]:
                    pass
                elif coordonnee > destination[indice]:
                    ma_position[indice] -= 1
                else:
                    ma_position[indice] += 1
            
            print("position actuelle: {}".format(ma_position))

        Es-tu encore là, où es-tu déjà sur un nouveau code :lol:.

        -
        Edité par Olygrim 24 septembre 2014 à 22:32:13

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          24 septembre 2014 à 23:36:33

          D'accord... maintenant j'ai tout compris xD
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            25 septembre 2014 à 17:06:04

            Olygrim a écrit:

            :o Fola t'es une vraie locomotive. On te donne des conseils, et t'es déjà parti sur un nouveau code :lol:.

            Es-tu encore là, où es-tu déjà sur un nouveau code :lol:.

            Oui je suis toujours là :D

            louk a écrit:

            Je suis pas sûr d'avoir bien compris ce que tu souhaite faire. En tout cas, y'a un truc qui me tique : dès que pre == go1 OU sec == go2, tu t'arrêtes. Pourquoi ? Ça me paraît pas très logique.

            Oui effectivement j'ai posté une autre version du code que j'ai sous les yeux et j'ai bein merdé avec ca j'aurais du mettre pass ou meme rien

            Oki merci ;)

            -
            Edité par Anonyme 25 septembre 2014 à 17:06:20

            • Partager sur Facebook
            • Partager sur Twitter

            IA avec des listes ne donne pas ce que je veux . .

            × 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