IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pourtant logique dans ma tête (script décrémenter/incrémenter)


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2022
    Messages : 5
    Par défaut Pourtant logique dans ma tête (script décrémenter/incrémenter)
    Bonjour!
    Je suis nouveau sur le forum(et en python), je cherche actuellement quelqu'un capable de m'éclairer sur un de mes scripts python qui ne fonctionne tout simplement pas. C'est pourtant logique dans ma tête mais en pratique c'est une toute autre histoire.

    Pour remettre en contexte, c'est un exercice que je me suis donné. J'ai une liste de deux dictionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    numbers = [
        {
            'value': 1,
            'action': True
        },
        {
            'value': 10,
            'action': False
        }
    ]
    Le champ "value" correspond tout simplement a un nombre nécessairement plus grand ou petit que l'autre. "action" va déterminer si le nombre va s'incrémenter ou se décrémenter. Si par exemple j'ai "action":True, alors "value":x va s'incrémenter, et inversement.

    Tout ça est enfermé dans une boucle infinie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while True:
        system('clear') # pour avoir le terminal clair
        print(numbers)
        changeEach()
        sleep(1) # pour éviter de Looper trop vite
    Le print du tableau est nécessaire pour débug et en savoir plus dans l'avancement du script. La fonction changeEach va boucler sur chaque élément de la liste de nombre et en fonction du champ "action" va effectuer ou non l'incrémentation ou la décrémentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    def isfree(numberWanted):
        for number in numbers:
            if not number['value'] == numberWanted:
                return True
            else:
                return False
     
    def changeEach():
        for number in numbers:
            if number['action'] == True:
                wantedNumber = number['value']+1
                number['value'] = wantedNumber if isfree(wantedNumber) else None
            else:
                wantedNumber = number['value']-1
                number['value'] = wantedNumber if isfree(wantedNumber) else None
    J'aimerais que quand les deux nombres sont un à coté de l'autre (par exemple 5 et 6) ils arrêtent d'incrémenter/décrémenter. Hors ils continuent.

    Voici le code en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    from os import system
    from time import sleep
     
    numbers = [
        {
            'value': 1,
            'action': True
        },
        {
            'value': 10,
            'action': False
        }
    ]
     
    def isfree(numberWanted):
        for number in numbers:
            if not number['value'] == numberWanted:
                return True
            else:
                return False
     
    def changeEach():
        for number in numbers:
            if number['action'] == True:
                wantedNumber = number['value']+1
                number['value'] = wantedNumber if isfree(wantedNumber) else None
            else:
                wantedNumber = number['value']-1
                number['value'] = wantedNumber if isfree(wantedNumber) else None
     
    while True:
        system('clear')
        print(numbers)
        changeEach()
        sleep(1)
    Voilà, j'espère avoir été assez clair dans mes propos et mes idées. L'exercice semble être bizarre mais être bloqué depuis quelques temps dessus me rend fou et un conseil ça serait génial!

    Merci, passez une bonne journée!

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour,

    Est-ce logique de prévoir que la valeur de la clé "value" du dictionnaire valent None et qu'en est-il si c'est le cas de l'incrémentation/décrémentation ?

    J'aimerais que quand les deux nombres sont un à coté de l'autre (par exemple 5 et 6) ils arrêtent d'incrémenter/décrémenter. Hors ils continuent.
    Où est cette partie dans le code ? D'ailleurs je ne comprend pas cette problématique, quelles sont les critères pour que ? Suivez-vous une règle spécifique et connue ?

    Aussi si vous pouviez donner l'objectif de votre script, ça aiderait mieux que syntaxiquement à vous aider, mais aussi sur la manière dont vous concevez ce développement.

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 919
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    J'aimerais que quand les deux nombres sont un à coté de l'autre (par exemple 5 et 6) ils arrêtent d'incrémenter/décrémenter. Hors ils continuent.
    Ce qui revient à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while abs(numbers[0]['value']-numbers[1]['value']) != 1:
        changeEach()
        print(numbers)
    ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def changeEach():
        for number in numbers:
            number['value'] += 1 if number['action'] else -1
     
    while abs(numbers[0]['value']-numbers[1]['value']) != 1:
        changeEach()
        print(numbers)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour

    J'aime bien ton état d'esprit. Tu te donnes un exercice puis tu le réalises. C'est comme ça qu'on progresse.

    Il y a toutefois un truc qui me gêne immédiatement: ta fonction isFree(). Elle boucle sur la liste, mais quoi qu'il arrive, sort True ou False dès la première itération. Bref elle ne traite que le premier élément de la liste. Tu l'aurais écrite ainsi def isfree(numberWanted): return numbers[0]["value"] == numberWanted ce serait la même chose. C'est peut-être voulu mais dans ce cas je me demande à quoi sert d'avoir une liste ? D'ailleurs plus je lis le code plus je me demande à quoi sert cette fonction...
    Ensuite je vois que dans ton code existent des possibilités que le nombre devienne None, mais tu ne dis nulle part le but de cette manipulation. Mais si ensuite ton code finit par faire un truc style None+1...

    Ensuite on ne teste jamais "== True", on teste directement l'état booléen. Parce qu'un truc peut être vrai sans être réellement égal à True et dans ce cas le test ne fonctionne pas
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> res=123
    >>> print("ok" if res == True else "bad")
    bad
    >>> print("ok" if res else "bad")
    ok
    >>>
    De plus perso j'utiliserais autre chose que False et True pour symboliser l'incrémentation et décrémentation. Peut-être "<" et ">" seraient plus appropriés.

    Et le souci principal qui fait que ça continue c'est la boucle de ton code principal qui ne s'arrête jamais. Donc tu ne la fais pas s'arrêter, faut pas te plaindre qu'elle ne s'arrête pas...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def changeEach():
        for i in range(len(numbers)):
            ib = min(i+1, len(numbers)-1)
            ia = ib-1
            if abs(numbers[ia]['value']-numbers[ib]['value'])!=1 :
              number = numbers[i]
              if number['action'] == True:
                  number['value']+=1
              else:
                  number['value']-=1
     
    for i in range(10):
        print(numbers)
        changeEach()

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    if number['action'] == True
    Ouais super, je me demande pourquoi j'explique des trucs parfois...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2022
    Messages : 5
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,
    Est-ce logique de prévoir que la valeur de la clé "value" du dictionnaire valent None et qu'en est-il si c'est le cas de l'incrémentation/décrémentation ?
    Où est cette partie dans le code ? D'ailleurs je ne comprend pas cette problématique, quelles sont les critères pour que ? Suivez-vous une règle spécifique et connue ?
    Aussi si vous pouviez donner l'objectif de votre script, ça aiderait mieux que syntaxiquement à vous aider, mais aussi sur la manière dont vous concevez ce développement.
    Bonjour,
    pour schématiser la situation j'ai écrit ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def printTab():
        i=0
        while i<15:
            case='-'
            for number in numbers:
                if number['value'] == i:
                    case=number['value']
            print(case, end=" ")
            i+=1
        print()
    Dans l'idéal, si le script fonctionne ça donnerait quelque chose comme ça au final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    - 1 - - - - - - - - 10 - - - - 
    - - 2 - - - - - - 9 - - - - - 
    - - - 3 - - - - 8 - - - - - - 
    - - - - 4 - - 7 - - - - - - - 
    - - - - - 5 6 - - - - - - - - 
    - - - - - 5 6 - - - - - - - - 
    - - - - - 5 6 - - - - - - - -
    La règle n'est pas connue, c'est un auto-exercice :/

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2022
    Messages : 5
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    Ce qui revient à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while abs(numbers[0]['value']-numbers[1]['value']) != 1:
        changeEach()
        print(numbers)
    ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def changeEach():
        for number in numbers:
            number['value'] += 1 if number['action'] else -1
     
    while abs(numbers[0]['value']-numbers[1]['value']) != 1:
        changeEach()
        print(numbers)
    Bonjour, merci pour votre réponse

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2022
    Messages : 5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    J'aime bien ton état d'esprit. Tu te donnes un exercice puis tu le réalises. C'est comme ça qu'on progresse.

    Il y a toutefois un truc qui me gêne immédiatement: ta fonction isFree(). Elle boucle sur la liste, mais quoi qu'il arrive, sort True ou False dès la première itération. Bref elle ne traite que le premier élément de la liste. Tu l'aurais écrite ainsi def isfree(numberWanted): return numbers[0]["value"] == numberWanted ce serait la même chose. C'est peut-être voulu mais dans ce cas je me demande à quoi sert d'avoir une liste ? D'ailleurs plus je lis le code plus je me demande à quoi sert cette fonction...
    Ensuite je vois que dans ton code existent des possibilités que le nombre devienne None, mais tu ne dis nulle part le but de cette manipulation. Mais si ensuite ton code finit par faire un truc style None+1...

    Ensuite on ne teste jamais "== True", on teste directement l'état booléen. Parce qu'un truc peut être vrai sans être réellement égal à True et dans ce cas le test ne fonctionne pas
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> res=123
    >>> print("ok" if res == True else "bad")
    bad
    >>> print("ok" if res else "bad")
    ok
    >>>
    De plus perso j'utiliserais autre chose que False et True pour symboliser l'incrémentation et décrémentation. Peut-être "<" et ">" seraient plus appropriés.

    Et le souci principal qui fait que ça continue c'est la boucle de ton code principal qui ne s'arrête jamais. Donc tu ne la fais pas s'arrêter, faut pas te plaindre qu'elle ne s'arrête pas...
    Bonjour, oui je me doute bien que le problème se situe dans une des boucles, je m'y prend surement mal..
    merci pour ta réponse

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2022
    Messages : 5
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def changeEach():
        for i in range(len(numbers)):
            ib = min(i+1, len(numbers)-1)
            ia = ib-1
            if abs(numbers[ia]['value']-numbers[ib]['value'])!=1 :
              number = numbers[i]
              if number['action'] == True:
                  number['value']+=1
              else:
                  number['value']-=1
     
    for i in range(10):
        print(numbers)
        changeEach()
    Bonjour,
    j'ai essayé ton code, miraculeusement tout se déroule comme souhaité!
    cependant je ne comprends pas la logique derrière ia, ib

    edit:
    D'accord, je comprends le raisonnement c'est tout con en réalité!
    Merci pour ton aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # si l'absolu de la soustraction des nombres(en commençant par le plus petit) est différente de 1 (c'est a dire un à coté de l'autre)
    for i in range(len(numbers)):
     
            if abs(numbers[0]['value']-numbers[1]['value'])!=1 :
              number = numbers[i]
              if number['action']:
                  number['value']+=1
              else:
                  number['value']-=1

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didici Voir le message
    Bonjour, oui je me doute bien que le problème se situe dans une des boucles, je m'y prend surement mal..
    fred1599 l'a dit: a quel moment testes-tu l'écart entre les nombres ??? Tu veux stopper la boucle à un moment particulier il te faut évaluer si ce moment est arrivé ou pas. Hominidé l'a montré assez succintement mais on peut faire plus détaillé
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    from os import system
    from time import sleep
     
    numbers=(
    	{
    		'value': 1,
    		'action': ">",
    	},
    	{
    		'value': 10,
    		'action': "<",
    	}
    )		# Pas besoin de liste quand un tuple suffit...
     
    def changeEach():
    	for number in numbers:
    		if number['action'] == ">":
    			number['value']+=1
    		else:
    			number['value']-=1
    	# for
    # changeEach()
     
    while True:
    	changeEach()
    	system('clear')
    	print(numbers)
    	if abs(numbers[1]["value"] - numbers[0]["value"]) <= 1: break
    	sleep(1)
    # while

    Après, tu peux aller plus loin. Déjà faire une liste de trucs tous différenciés par un marqueur (ici "<" et ">") autant utiliser un dictionnaire avec le marqueur comme clé. Ce qui permet d'y rajouter ainsi un marqueur supplémentaire représentant la règle de fin (qui, à te lire, n'est pas forcément fixée dès le départ)
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from os import system
    from time import sleep
     
    numbers={
    	"<" : 1,
    	">" : 10,
    	"=" : lambda x, y: abs(x - y) <= 1,
    }
     
    def changeEach():
    	numbers["<"]+=1
    	numbers[">"]-=1
    	return numbers["="](numbers["<"], numbers[">"])
    # changeEach
     
    while True:
    	res=changeEach()
    	system('clear')
    	print(numbers)
    	if res: break
    	sleep(1)
    # while
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 321
    Par défaut
    pas simple de comprendre ce que tu as codé puisque tu ne livres que des brides et bien écartées dans le temps. J'espère donc bien parler de ton code

    printTab()
    Code plus python si on utilise un for item in rangeIl est toujours mieux de passer ta constante "15" dans les paramètres (et mini ...)
    Il est possible
    - de calculer maxi après l'affectation de la variables numbers
    - ou alors utiliser des constantes lors de la déclaration de cette variable , même passer ces 2 parametres au script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    MINI = 1
    MAXI = 10
    # MINI = int(sys.argv[1])
    # MAXI = int(sys.argv[2])
    if MAXI <= MINI:
        exit(127)
    numbers = [
        {
            'value': MINI,
            'action': True
        },
        {
            'value': MAXI,
            'action': False
        }
    ]
    # maxi = max(numbers, key=lambda x:x['value'])["value"]
    -------------

    Tu utilises toujours la boucle infinie pour lancer changeEach() ?
    Je préfère une approche avec générateur et cela permet de bien séparer le traitement de l'affichage. Ici, j'ai essayé de modifier le moins possible ton code original.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    def printTab(items, maxi, mini=0):    # TODO ajouter minimum
        for i in range(maxi+1):
            case = '--'
            for number in items:
                if number['value'] == i:
                    case = f"{number['value']:2d}"  # FIXED: si nombre à 2 chiffres # TODO: si var maxi à 3 chiffres...
            print(case, end=" ")
        print()
     
    def changeEach():
        while abs(numbers[0]['value']-numbers[1]['value']) > 1 :
            for i in range(len(numbers)):
                number = numbers[i]
                if number['action']:
                    number['value'] += 1
                else:
                    number['value'] -= 1
            yield numbers    # retourne dans la boucle "for" les nouvelles valeurs
     
     
    printTab(numbers, MAXI+1)
    for items in changeEach():
        printTab(items, MAXI+1)
    retour avec gestion de mini/maxi et alignement quelque soit la taille de maxi/mini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ./test.py 91 101
    ---  91 --- --- --- --- --- --- --- --- --- 101 --- 
    --- ---  92 --- --- --- --- --- --- --- 100 --- --- 
    --- --- ---  93 --- --- --- --- ---  99 --- --- --- 
    --- --- --- ---  94 --- --- ---  98 --- --- --- --- 
    --- --- --- --- ---  95 ---  97 --- --- --- --- --- 
    --- --- --- --- --- ---  96 --- --- --- --- --- ---

    --------------

    Et si tu désires aussi t'exercer à la POO, tu pourais créer une classe number

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didici Voir le message
    Dans l'idéal, si le script fonctionne ça donnerait quelque chose comme ça au final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    - 1 - - - - - - - - 10 - - - - 
    - - 2 - - - - - - 9 - - - - - 
    - - - 3 - - - - 8 - - - - - - 
    - - - - 4 - - 7 - - - - - - - 
    - - - - - 5 6 - - - - - - - - 
    - - - - - 5 6 - - - - - - - - 
    - - - - - 5 6 - - - - - - - -
    Ah j'avais pas vu ce truc...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from os import system
    from time import sleep
     
    numbers={
    	"<" : 1,
    	">" : 10,
    	"=" : lambda x, y: abs(x - y) <= 1,
    }
     
    def changeEach():
    	numbers["<"]+=1
    	numbers[">"]-=1
    	return numbers["="](numbers["<"], numbers[">"])
    # changeEach
     
    def printTab(n=15):
    	for i in range(n): print("-" if i not in (numbers[k] for k in "<>") else i, end='')
    	print()
    # printTab
     
    while True:
    	res=changeEach()
    	system('clear')
    	#print(numbers)
    	printTab(15)
    	if res: break
    	sleep(1)
    # while
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ouais super, je me demande pourquoi j'explique des trucs parfois...
    J'ai conservé le plus possible le code initiale, pour ne pas trop perturber notre apprenti

  15. #15
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par didici Voir le message
    Bonjour,
    j'ai essayé ton code, miraculeusement tout se déroule comme souhaité!
    cependant je ne comprends pas la logique derrière ia, ib

    edit:
    D'accord, je comprends le raisonnement c'est tout con en réalité!
    Merci pour ton aide
    Tu veux incrémenter que si le nombre à côté n'est pas égal. Sauf que pour le dernier nombre, il n'y a pas de nombres à droite. Donc ia et ib sont juste des indirections, ou ia vaut le nombre courant, ib vaut le nombre juste après, sauf à la toute dernière itération, ou dans ce cas ia et ib sont les 2 derniers éléments de la liste.
    Ce comportement peut être à adapter selon ce que vous souhaitez faire, et prendre en compte comme cas de figures.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre mes fonctions dans un meme script
    Par sparrow dans le forum Langage
    Réponses: 4
    Dernier message: 25/03/2006, 01h26
  2. WORD : remplacement d'un texte dans en-tête
    Par richard038 dans le forum Langage
    Réponses: 4
    Dernier message: 10/02/2006, 18h55
  3. [VBS] appel d'un script VBS dans un autre script VBS???
    Par Amandine62 dans le forum VBScript
    Réponses: 9
    Dernier message: 31/01/2006, 18h17
  4. [HTML] feuilles dans un seul script
    Par fourgeaud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2005, 23h39
  5. Probleme de logique dans une requete
    Par linou dans le forum Langage SQL
    Réponses: 11
    Dernier message: 18/03/2005, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo