[Tuto] Actions sous condition (If Else..) et plus.

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

[Tuto] Actions sous condition (If Else..) et plus.

#1

Message par codename44 »

Les actions sous condition
Comment fonctionnent les actions sous condition ?

Un des piliers de la programmation est "l'action sous condition"
cela se présente sous la forme :

Code : Tout sélectionner

[b]SI[/b] (proposition-à-vérifier est vraie) [b]ALORS[/b] :
   ...
   on fait ça
   ...
[b]SINON[/b]
    ...
   on fait ça
    ...
 
Toute la profondeur d'un programme est basée sur cette architecture.
En autoit on a :

Code : Tout sélectionner

If (proposition-à-verifier est vraie) Then
    ;actions à effectuer
 
Else
    ;actions à effectuer
 
EndIf
Par exemple :
on veut afficher un message personnalisé en fonction du jour

on demande à l'utilisateur de rentrer le jour d'aujourd'hui
on récupère la variable $jour

Code : Tout sélectionner

$jour = InputBox("Tutorial", "Quel jour sommes nous ?")
 
If ($jour = "Vendredi") Then
    msgbox(0,"Tutorial","c'est bientôt le weekend !")
Else
    If ($jour = "Lundi") Then
        msgbox(0,"Tutorial","Bonne semaine !")
    Else
        msgbox(0,"Tutorial","Comment se passe la semaine ?")
    EndIf
EndIf
Que se passe-t-il si nous rentrons "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 "Bonne semaine ! ", et on saute les actions présentes dans le Else.

Que se passe-t-il si nous rentrons 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 rentrons 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.

Quels sont les opérateurs possibles ?

Nous avons vu le = dans l'exemple précédent, mais il y'en a d'autres :

Image

Exemple 1 :
L'utilisateur doit rentrer le bon mot de passe pour lancer le programme.

Code : Tout sélectionner

$pass = "mot de passe"
$input = InputBox("Tutorial", "Entrez le mot de passe :")
 
If ($input <> $pass) Then
    MsgBox(0,"Tutorial", "Mauvais mot de passe !")
Else
    MsgBox(0,"Tutorial", "Le mot de passe est correct !")
EndIf
Exemple 2 :
Notre programme vérifie si le nombre entré par l'utilisateur est bien positif ou nul.

Code : Tout sélectionner

$nombre = InputBox("Tutorial", "Entrez un nombre :")
 
If ($nombre >= 0) Then
    MsgBox(0,"Tutorial", "Ce nombre est positif.")
Else
    MsgBox(0,"Tutorial", "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 rentrer un bon mot de passe parmis 2 possibles.

Code : Tout sélectionner

$pass1 = "mot de passe"
$pass2 = "autoit fr"
 
$input = InputBox("Tutorial", "Entrez le mot de passe :")
 
If ( ($input <> $pass) AND ($input <> $pass1) ) Then
    MsgBox(0,"Tutorial", "Mauvais mot de passe !")
Else
    MsgBox(0,"Tutorial", "Le mot de passe est correct !")
EndIf

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

Code : Tout sélectionner

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

Si une proposition est dure à trouver, essayez la technique suivante : (lire attentivement, ce n'est pas forcement très clair à la première lecture)
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 voulions afficher un message d'erreur si le mot de passe entré par l'utilisateur ne correspondait à aucun des 2 mots de passes 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 fournit par l'utilisateur correspond à l'un des 2 mots de passes 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

( ($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 : Tout sélectionner

$pass1 = "mot de passe"
$pass2 = "autoit fr"
 
$input = InputBox("Tutorial", "Entrez le mot de passe :")
 
If ( ($input = $pass1) OR ($input = $pass2) ) Then
    MsgBox(0,"Tutorial", "Le mot de passe est correct !")
Else
    MsgBox(0,"Tutorial", "Mauvais mot de passe !")
EndIf

----------------------
J'éspère que tout est suffisamment clair (surtout la fin), n'hésitez pas à faire des remarques
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [Tuto] Actions sous condition (If Else..) et plus.

#2

Message par sylvanie »

Bonsoir,
juste une remarque importante,
il manque la notion du "==" qui teste l'égalité de deux string en faisant attention à la casse.
par exple
$val1="a"
$val2="A"

$val1=$val2 est vraie, alors que $val1==$val2 est fausse.
Ceci est très important dans le cas des testes de chaînes comme lees passwords.
D'ailleurs si on reprends le dernier script exple, et quon y entre "AUTOIT FR" à la place de "autoit fr" alors le script considère que le mot de passe est bon à cause du simple =
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: [Tuto] Actions sous condition (If Else..) et plus.

#3

Message par codename44 »

merci de ta remarque, c'est vrai que j'avais oublié ça !
TomXIII
Niveau 1
Niveau 1
Messages : 10
Enregistré le : dim. 30 mars 2008 11:17
Status : Hors ligne

Re: [Tuto] Actions sous condition (If Else..) et plus.

#4

Message par TomXIII »

Dans ta première version de l'exemple 3 (deux mdp possibles), tu déclares
deux variables: $pass1 et $pass2 sauf que dans ta condition tu demandes
une comparaison avec $pass et $pass1

Code : Tout sélectionner

If ( ($input <> $pass) AND ($input <> $pass1) ) Then
ce qui fait qu'au moment de lancer le script.....tadaaannn message d'erreur!
Même si je débute depuis hier soir j'ai compris qu'il fallait plutot écrire:

Code : Tout sélectionner

If ( ($input <> $pass1) AND ($input <> $pass2) ) Then
Et à ce moment là, çà marche!!!

Sinon continuez comme çà, vos tutos sont très clairs et très utiles! :wink:

P.S:Désolé de pas être passé par la case présentation
Répondre