CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : python : trouver un caractère dans une liste

DébutPage précedente
1
Page suivantePage suivante
louirio louirio
MP
Niveau 1
14 janvier 2020 à 21:25:26

Bonjour,
J'ai un exercice à faire et le but est de demander un mdp a l'utilisateur et de vérifier s'il contient au moins un caractère spécial,un chiffre et une voyelle minuscule. Mais je ne vois pas comment faire pour qu'il détecte si le mdp contient tout ça (sinon le "reste" je peux le faire)

louirio louirio
MP
Niveau 1
14 janvier 2020 à 21:26:22

pour l'instant j'ai fait que ça :
verif_finale=[":","?","$","!","1","2","3","4","5","6","7","8","9","0","a","e","i","o","u","y"]
cara=[":","?","$","!"]
nbr=["1","2","3","4","5","6","7","8","9","0"]
lettre=["a","e","i","o","u","y"]
mdp=input("Entrer votre mot de passe.")

cybevil cybevil
MP
Niveau 17
14 janvier 2020 à 21:34:38

Tu dois faire une boucle qui parcours toute les lettres de ton mot de passe, puis dans cette boucle t’en fais une autre qui teste pour chaque caractère de ton mot de passe si il est présent dans tes listes, si le caractère est présent dans caractère spécial par exemple tu passes un boolean en true, pareil pour les autres

Message édité le 14 janvier 2020 à 21:35:54 par cybevil
SiBeteNDaye SiBeteNDaye
MP
Niveau 6
16 janvier 2020 à 12:31:01

Voilà une possibilité pour terminer ton script de vérification:
- créer une variable booléenne pour chaque contrainte (voyelle minusucule, chiffre, caractère spécial) que tu initialise à False
- itérer sur chaque caractère de mdp</mdp> et pour chaque contrainte, vérifier si le caractère se trouve dans la liste de caractères valides. Si oui, tu passes la variable booléenne correspondante à True. - à la fin, tu renvoies vrai si toutes les variables booléennes sont vraies. Le pseudo-code : <code>fonction valider_mot_de_passe(mdp) b_voyelle = False b_chiffre = False b_special = False Pour c dans mdp faire si b_voyelle est faux et que c est dans lettre alors b_voyelle devient vrai si b_chiffre est faux et que c est dans nbr alors b_chiffre devient vrai si b_special est faux et que c est dans cara alors b_special devient vrai fin pour Retourner vrai si b_voyelle est vrai et b_chiffre est vrai et b_special est vrai sinon retourner faux

Une autre façon de s'y prendre
Comme toujours il y a plusieurs façon de résoudre ton problème. Celle que tu a commencé à implémenter est bonne, mais elle a l'inconvénient d'obliger à déclarer explicitement la liste des caractères spéciaux. Or, aujourd'hui l'encodage unicode des caractères permet de représenter à peu près n'importe quelle caractère de n'importe quelle système d'écriture, et même des glyphes du genre '😆','🙅' ou '∜'.
Pourquoi est-ce que "Enchanté ➔ ՈՒրախ եմ Ձեզ հետ ծանոթանալ😆" ne pourrait pas être un mot de passe valide? Il y a pourtant deux voyelles minuscules (a et é), deux caractères spéciaux (➔ et 😆, sans compter les espaces) et des lettres (EnchntՈՒրախեմՁեզհետծանոթանալ). En plus ça permet de construire des passphrases complexes incrackables.
Imagine s'il fallait lister tous les caractères spéciaux de l'unicode, il y en a des centaines : https://unicode-table.com

Ça sort certainement pas mal de ce qu'on te demande, mais pour mettre l'exo. en perspective voici une solution qui ne nécessite pas de dresser la liste des caractères spéciaux.
Pour ça on peut utiliser des expressions régulières ou REGEX : https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/916990-les-expressions-regulieres-partie-1-2
Pour faire (trop) simple, une expression régulière est une chaîne de caractères qui décrivent des 'règles' de recherche de chaînes de caractères. Par exemple, la règle "toutes les chaînes 'mp' suivi d'un chiffre" décrit les chaînes "mp3","mp4","mp5", etc. et se traduit par l'expression régulière 'mp[0-9]'. [0-9] signifie dans une expression régulière "n'importe quel chiffre entre 0 et 9".
En python on peut utiliser la bibliothèque re pour manipuler des regex. Par exemple, re.search(r, str) recherche la première sous-chaîne de str qui correspond à la regex r. re.search('mp[0-9]', 'Le fichier issou.mp3 ') renverra donc un objet de type 'match' contenant la chaîne 'mp3'. re.search('mp[0-9]', 'Bonjour ') renverra None.

Pour répondre à l'exercice en avec des regex on peut faire ainsi :
1) On enlève les espaces de mdp pour les ignorer dans les vérifications, et on supprime les accents.
2) On vérifie qu'on trouve au moins une voyelle dans mdp avec l'expression régulière '[aeiouy]' (un caractère parmis 'a','e','i','o','u' ou 'y'). Si oui on passe à l'étape suivante
3) On vérifie qu'on trouve au moins un chiffre dans mdp avec la regex '\d' (équivalente à '[0-9]' : un chiffre entre 0 et 9). Si oui on passe à l'étape suivante
4) On vérifie qu'on trouve au moins un caractère qui n'est ni un chiffre ni une lettre dans mdp avec la regex '[\W_]' (\W signifie 'un caractère qui n'est pas une lettre, pas un chiffre et pas underscore'. '[\W_]' signifie 'un caractère qui n'est pas un chiffre, pas une lettre mais qui peut être un underscore). Si oui le mot de passe est valide.

Avec cette solution :
#abcdef gh99 est un mdp valide.
8) Enchanté ➔ ՈՒրախ եմ Ձեզ հետ ծանոթանալ😆 est un mdp valide.
18⚓⚓⚓⚓⚓⚓⚓⚓⚓⛵a est aussi valide.

Le code commente et testable directement est ici : https://repl.it/repls/FreePreviousAbilities

Message édité le 16 janvier 2020 à 12:31:51 par SiBeteNDaye
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment