Aller au menu - Aller au contenu

Icône Le 'si... alors'

Mise à jour : 10/11/2011
Difficulté : Facile Facile Creative Commons BY-NC-SA
3 274 visites depuis 7 jours, dont 203 sur ce chapitre classé 50/786
Ce chapitre posera les bases de l'action sous condition avec Autoit, en utilisant les opérateurs logiques associés.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

L'action sous condition

Qu'entends-tu par "l'action sous condition" ?

C'est très simple, et vous allez vite vous en rendre compte.

Cette logique de l'action sous condition peut etre résumée par la phrase suivante :
"Si j'ai faim, je vais dans le frigo me chercher une banane. Sinon, je mange une glace." (L'Abus de nourriture est dangereux pour la santé.)

Comment fonctionnent les actions sous condition ?


Un des piliers de la programmation, tout language confondu, est "l'action sous condition".
Cela se présente sous la forme :


Code : Autre
1
2
3
4
5
6
7
8
9
SI (proposition-à-vérifier est vraie ou fausse) ALORS :
   ...
   on fait ça
   ...
SINON
    ...
   on fait ça
    ...
FINI



Toute la profondeur d'un programme est basée sur cette architecture.
En Autoit on a les possibilités suivantes.

If\Then\ElseIf\Else\EndIf



C'est le mode le plus connu, d'ailleurs en AutoIt, ca ressemble drôlement au Basic, vous ne trouvez pas ? ;)
Voila un exemple classique :

Code : Autre
1
2
3
4
5
6
7
If (proposition-à-vérifier est vraie ou fausse) Then
        ; Actions à effectuer
ElseIf (proposition-à-vérifier-2 est vraie ou fausse) Then
        ; Actions à effectuer
Else ;Si n'importe quoi d'autre
        ; Actions à effectuer
EndIf ;on clos la condition


Ce qui pourrait donner :
Code : Autre
1
2
3
4
5
6
7
8
$note_de_maths = 7.5
If $note_de_maths >= 15  Then
        MsgBox(0,"Tutoriel Autoit","Très bien, continue comme ça !")
ElseIf $note_de_maths >= 8 Then
        MsgBox(0,"Tutoriel Autoit","Peut mieux faire !")
Else ;Si n'importe quoi d'autre
         MsgBox(0,"Tutoriel Autoit","Élève assidu qui se retourne parfois... pour regarder le tableau.")
EndIf ;on clot la condition


Les opérateurs utilisés ici (= et >=) sont expliqués ci-après.

Select\Case\EndSelect



Un autre mode de programmation, qui n'en est pas moins pratique et intéressant, est la condition par "case".
Je m'explique :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
ACTIVATION DU MODE SELECTIF
        Case n°1 (à activer si proposition-à-vérifier est vraie)
                 ; Actions à effectuer

        Case n°2 (à activer si proposition2-à-vérifier est vraie)
                 ; Actions à effectuer

        Case n°3 (à activer si proposition3-à-vérifier est vraie)
                 ; Actions à effectuer
;etc.
FIN DU MODE SELECTIF


Ce qui se traduit par :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
Select
        Case (à activer si proposition-à-vérifier est vraie)
                 ; Actions à effectuer

        Case (à activer si proposition2-à-vérifier est vraie)
                 ; Actions à effectuer

        Case (à activer si proposition3-à-vérifier est vraie)
                 ; Actions à effectuer
;etc.
EndSelect


Cette méthode est très utile pour simplifier la lisibilité du texte dans une boucle par exemple.

Switch\Case\EndSwitch



C'est une variante du Select. C'est quasiment la même chose, à l'exception qu'elle est généralement utilisée pour les variations de valeur d'une même variable.
Un exemple tout de suite, un peu plus approfondi pour une fois :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$var = 30

Switch $var
     Case 1 To 10
         MsgBox(0, "Exemple", "$var est plus grand que 1 et moins grand que 11")

     Case 11 To 20
         MsgBox(0, "Exemple", "$var est plus grand que 10 et moins grand que 21")

     Case 21 To 30
         MsgBox(0, "Exemple", "$var est plus grand que 20 et moins grand que 31")

     Case 31 To 40
         MsgBox(0, "Exemple", "$var est plus grand que 30 et moins grand que 41")

     Case Else
         MsgBox(0, "Exemple", "$var est plus grand que 40 ou inférieur ou égal à 0")

EndSwitch


Ici, on va "switcher" dans la variable $var, pour différents intervalles. En l'occurence, c'est la case 21 To 30 qui va s'activer. Ce mode permet donc de ne tester qu'une variable, mais c'est le plus lisible. On l'utilisera pratiquement toujours lors de la création de GUI que vous verrez dans la partie concernée. En effet, on devra alors verifier les actions faites par l'utilisateur, et une variable contiendra ces informations, variable qu'on testera avec un Switch.

Vous pouvez egalement retenir que certains tests sont plus rapides que d'autres. Rassurez-vous, jamais vous ne le remarquerez, mais si vous voulez programmer 'Paf le chien' par exemple, alors vous devrez commencer à vous inquieter de la rapidité de votre code, et Switch est très bon dans ce domaine.

Les opérateurs

Vous avez déjà aperçu le =, mais il existe d'autres opérateurs :


OpérateurSignification
= égal
> supérieur
< inférieur
<= inférieur ou égal
>= supérieur ou égal
<> différent



Ces opérateurs sont très simples à utiliser.

Exemple 1


L'utilisateur doit entrer le bon mot de passe pour lancer le programme.

Code : Autre
1
2
3
4
5
6
7
8
$pass = "mot de passe"
$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ($input <> $pass) Then
    MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
Else
    MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
EndIf

Ici, l'opérateur signifie 'différent de'. S'il est vérifié, alors on affiche "Mauvais mot de passe !".

Exemple 2


Notre programme vérifie si le nombre entré par l'utilisateur est bien positif ou nul.

Code : Autre
1
2
3
4
5
6
7
$nombre = InputBox("Tutoriel", "Entrez un nombre :")

If ($nombre >= 0) Then
    MsgBox(0,"Tutoriel", "Ce nombre est positif.")
Else
    MsgBox(0,"Tutoriel", "ce nombre est négatif.")
EndIf



Il est également possible de faire des propositions plus élaborées grâce aux opérateurs ET, OU qui se traduisent en Autoit par AND, OR.

Exemple 3


L'utilisateur doit entrer un bon mot de passe parmi les deux possibles.

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
$pass1 = "mot de passe"
$pass2 = "autoit fr"

$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ( ($input <> $pass1) AND ($input <> $pass2) ) Then
    MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
    Exit
Else
    MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
    ...suite...
EndIf


Notez que If $input <> $pass AND $input <> $pass1 Then marche également (sans les parenthèses).


Exemple 4


Notre programme vérifie si le nombre entré par l'utilisateur est bien compris entre 0 et 10.

Code : Autre
1
2
3
4
5
6
7
$nombre = InputBox("Tutoriel", "Entrez un nombre :")

If (($nombre >= 0) AND ($nombre <= 10)) Then
    MsgBox(0,"Tutoriel", "Ce nombre est compris entre 0 et 10.")
Else
    MsgBox(0,"Tutoriel", "Ce nombre n'est pas compris entre 0 et 10.")
EndIf


Recherche des conditions


Il peut arriver qu'une proposition soit dure à trouver, essayez alors la technique suivante :
  • vous n'arrivez pas à trouver la proposition (1) à mettre pour que l'action s'effectue,
  • essayez alors de trouver la proposition (2) à mettre pour que l'action NE s'effectue PAS.
  • il suffira alors d'un peu d'astuce pour trouver la (1) à partir de la (2).


Essayons sur l'exemple 3



Dans cet exemple nous voulons afficher un message d'erreur si le mot de passe entré par l'utilisateur ne correspond à aucun des deux mots de passe enregistrés dans le programme, et continuer dans le cas contraire.
Or nous n'arrivons pas à trouver la proposition correspondante.

Cherchons donc la proposition pour que le message d'erreur ne s'affiche pas.

=> Le programme ne doit pas afficher d'erreur si le mot de passe fourni par l'utilisateur correspond à l'un des deux mots de passe enregistrés dans le programme.

On aurait donc la proposition suivante : If ( ($input = $pass1) OR ($input = $pass2) ) (2).
Cette proposition peut être plus facile à trouver.

La proposition (1) se trouve en inversant la (2), en utilisant la correspondance suivante :

Image utilisateur


Code : Autre
1
( ($input = $pass1) OR ($input = $pass2) ) (2) ==> ( ($input <> $pass) AND ($input <> $pass1) ) (1)


On retrouve bien notre proposition.

On aurait donc pu écrire notre exemple 3 de la manière suivante :
Code : Autre
1
2
3
4
5
6
7
8
9
10
$pass1 = "mot de passe"
$pass2 = "autoit fr"

$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ( ($input = $pass1) OR ($input = $pass2) ) Then
    MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
Else
    MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
EndIf


Vous avez tout compris ? Alors c'est le moment de passer à la pratique. :)

Mini-TP

Que pensez-vous d'un mini-TP ? C'est très simple, vous demandez à l'utilisateur le jour, et vous lui répondez en fonction de ce jour !

  1. On demande à l'utilisateur d'entrer le jour d'aujourd'hui : la fonction InputBox semble tout indiquée.
    Pour savoir comment l'utiliser, consultez l'aide comme nous vous l'avons appris (pour ceux dont la mémoire joue des tours, il faut appuyer sur F1 dans Scite4Autoit).
  2. On récupère la variable $jour, et on la traite.


Essayez d'écrire ce programme tout seul, sinon voilà une solution :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
$jour = InputBox("Tutorial", "Quel jour sommes-nous ?")

If ($jour = "Vendredi") Then
    msgbox(0,"Tutoriel","c'est bientôt le week-end !")
Else
    If ($jour = "Lundi") Then
        msgbox(0,"Tutoriel","Bon début de semaine !")
    Else
        msgbox(0,"Tutorial","Comment se passe la semaine ?")
    EndIf
EndIf


Voilà en quelques lignes comment agit le programme.


Que se passe-t-il si nous entrons "Lundi" ?


La première condition If ($jour = "Vendredi") est fausse, on saute donc les actions présentes dans le "If" et on continue dans le "Else".
On arrive alors à un deuxième si-alors, la condition ($jour = "Lundi") est vraie ! On effectue donc les actions présentes dans le If, c'est-à-dire afficher "Bon début de semaine !", et on saute les actions présentes dans le Else.

Que se passe-t-il si nous entrons Mardi ?


La première condition If ($jour = "Vendredi") est fausse, on continue dans le Else
On arrive à la seconde condition If ($jour = "Lundi") qui est fausse également, on continue donc dans le Else, et on affiche donc "Comment se passe la semaine ?".

Que se passe-t-il si nous entrons Vendredi ?


La première condition If ($jour = "Vendredi") est vraie !
On effectue donc les actions présentes dans le If, c'est-à-dire afficher "C'est bientôt le weekend !", et on saute le Else.
Que diriez-vous d'appliquer l'action sous condition aux boucles ? Ça vous dit ? Tant mieux, car c'est le chapitre qui suit.
Chapitre précédent Sommaire Chapitre suivant

Partager

10 commentaires pour "Le 'si... alors'"
Note moyenne : 3.56 / 4 (100 votes)
Pseudo Commentaire
Hors ligne timmalos # Posté le 22/08/2011 à 17:05:47
Avatar

Avis : Très bon

Études : INSA Lyon

Que vous disiez sur ce tuto a été fait à l'arraché est un manque cruel de respect à moi,qui ait passé un nombre d'heures inimaginable à ecrire ce tutoriel, aux personnes qui m'ont aidé, au validateur qui a corrigé ce tutoriel et ne l'aurait surement pas validé si il était fait à l'arraché et enfin aux Zcorrecteurs qui l'ont corrigés.

Je sais pas si vous avez réfléchi 2 secondes avant de dire une banalité pareille , mais comme vous l'avez dis je ne suis qu'un simple membre == Benevole. Donc vous êtes peut etre un zéro qui ne comprend rien, ca ne vous permet pas de dire des choses comme ca.
Maintenant sur le fond, vous avez surement raison et ce chapitre va être revu, car trop de charabia. Maintenant si votre critique était un peu plus constructive, que vous précisiez les points non compris, ceux qui sont fouillis, peut être l'envie de vous aider et de corriger cette partie au plus vite me viendrait à l'esprit.

Image utilisateur
 
Hors ligne Srayzi # Posté le 23/08/2011 à 11:29:00
*fantôme*
Avatar

Avis : Décevant

Ville : Cabriès
Pays : France métropolitaine

C'est vrai j'ai été un peu fort, je n'aurais pas du dire ça je m'excuses, mais ça m'énerve de ne voir qui seul cours sur net pour AutoIt, mais malheureusement pour moi qui est difficile a comprendre je vais te donner mes problèmes de compréhensions :
sur tes exemples, je ne sais pas si c'est un code ou un simple schéma,aussi je comprends mal tes théorie.
Enfin bref, je n'arrive pas à dire on sont mes points d'incompréhension.

Attention ceci est un Pokémon rare !

Il pleut !
Huuuum des frites....
___________________________________________________________________________________________________________________________________________
Lol :lol: :)
 
Hors ligne Little Nooby # Posté le 21/03/2012 à 12:41:49
Je cause trop...
Avatar

Avis : Très bon

Ville : Namur
Pays : Belgique

Le 'si... alors'

Je commence à bien apprécier ton tutoriel! On peut rapidement faire des choses assez sympas.

Je ne pars pas de zéro, j'ai déja utilisé d'autres langages donc je ne sais pas dire si c'est compréhensible pour un zéro.

Sinon, je dois dire qu'il y a quelques trucs que tu pourrais préciser. Par exemple, bien dire lorsqu'on compare deux variables si c'est la référence ou la valeur qui est évaluée. Ou encore, quand on compare deux chaines de caractères, tu ne dis pas qu'il ne tient pas compte de la casse. Enfin, avec Select et Switch, tu ne précises pas si il continue à chercher une fois une condition trouvée, ... Toutes des petites choses comme ça, personnellement j'aime bien testé les trucs par moi-même au fur et à mesure mais d'autres préfèreront avoir plus de précisions et même, je suis peut-être surement passé à coté de certaines opportunités que donnent ces syntaxes.

Mais je répète, j'ai bien apprécié ce début de tutoriel, je sens que je vai le continuer avec joie. Ah, et c'est très chouette ce mini-TP qui permet de tester rapidement si l'on a assimilé le chapitre.

Merci beaucoup!

P.S.:
Pour le mini-TP, je trouve la boucle switch plus adaptée, voici mon code :
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$input3 = InputBox("MiniTP", "Quel jour sommes-nous?")

Switch $input3
	Case "Lundi"
		MsgBox(0, "Monday's suck.", "Que cette semaine soit un nouveau départ pour toi!")
	Case "Mardi"
		MsgBox(0, "Tuesday is better.", "Allez, on continue comme ça!")
	Case "Mercredi"
		MsgBox(0, "Wednseday also sucks.", "Mecredi est trop loin de lundi et trop loin du week-end," & @CRLF & _
				"mecredi est plat et creux, tu devrais t'appeller Mercredi.")
	Case "Jeudi"
		MsgBox(0, "Thursday has no end.", "Le pire jour de la semaine, courage.")
	Case "Vendredi"
		MsgBox(0, "Friday is perfect.", "Vivement le soir!")
	Case "Samedi"
		MsgBox(0, "Saturday night fever.", "On travail le matin et le soir, c'est la fête!")
	Case "Dimanche"
		MsgBox(0, "Sunday is calm.", "Dimanche, on ne fait rien, non rien!")
	Case Else
		MsgBox(0, "Are you retarded?", "Tu devais donner un jour de la semaine!")
EndSwitch


P.P.S.: Il n'y a pas moyen de d'avoir le type de code AutoIt? Si non, c'est quoi le plus adapté?

Je ne me trompe jamais, je trouve des façons de ne pas faire ce que je voulais.
 
Hors ligne happy2fairytail # Posté le 13/05/2012 à 19:31:19
In vino veritas
Avatar

Avis : Très bon

OUA c'est surement le language le plus byzarre que j'ai jamais vu ( faut dire je que suis resté sur Basic , html et un peu de java autant dire que j'ai rien vu)
en effet j'ai pas compris la porté de la fonction Case ^^" mais bon. Je tennais a te dire que j'adore ( je ne l'ai pas encore fini encore 95% à lire mais bon ..) ton tuto.
Cependant je ne suis pas sur que l'explication sur les opérateurs logiques soit optimal ( je les connais mais j'ai pas entierement comprit ce que tu as dis ^^)
Bref je voulais te demandais (je sais quel manque de tact de ma part de te repprocher une chose aussi banal que les opérateurs alors je ne suis qu'un novice... c'est la nature humaine qui veut sa..)
si on pouvais utiliser != à la place de <> ??

merci d'avance pour la réponse et merci pour ce tuto

Secret (cliquez pour afficher)
La fortune vient en dormant!
 
Hors ligne timmalos # Posté le 15/05/2012 à 15:04:15
Avatar

Avis : Très bon

Études : INSA Lyon

En Autoit, le Different est l'operateur "<>"
Vous ne pouvez pas utiliser "!="

Image utilisateur
 

Voir tous les commentaires
Ce tutoriel a été corrigé par les zCorrecteurs.