[Python] Fonction qui renvoie vrai ou faux si une chaîne de caractères quelconque est un numéro de téléphone valide

a marqué ce sujet comme résolu.

Bonjour à tous,

j’aimerai avoir votre aide, je débute en Python et j’ai un devoir maison à rendre mais je n’y arrive pas.

Je dois écrire une fonction nommée vérification() qui prend en paramètre une chaîne de caractères et qui renvoie vrai ou faux si cette chaîne de caractères est un numéro de téléphone valide.

Cela en prenant compte de +33, les espaces, les points et les lettres.

Je pense être parvenu à éliminer une chaîne de caractères contenant - ou + de 10 caractères

def verification(n) :
    vrai =['0','1','2','3','4','5','6','7','8','9',' ',]
    if longueur != 10 :
        print('Ce numéro est invalide')
    else :
        print('Ce numéro est valide') 
numero = input('Taper un numéro')
longueur = len(n) 

Voilà ce que j’ai fait, je sais que c’est pas beaucoup mais j’ai vraiment des lacunes en programmation.

Je vous demande donc votre aide, merci d’avance.

+0 -0

Ecris déjà en français les contraintes que tu dois vérifier.

33.1.12.34.56.78 : Valide ou pas ?

01.23.45.67.89 : Valide ou pas ?

01.234.567.89 : Valide ou pas ? Etc Etc Etc

Avec ce que tu proposes, tu as l’air de dire que tous ces n°s sont invalides, parce que leur longueur n’est pas 10.

Mais dans ce que tu proposes, tu regardes si la variable longueur vaut 10, et ensuite seulement, tu dis que la variable longueur est la longueur de la chaine ( … et encore, ce n’est pas tout à fait ça)

La moindre des choses, c’est de voir ce que Python pense de ce code.
Parce-que là, la seule ligne qui marche, c’est

numero = input('Taper un numéro')

La dernière ligne provoque un masage d’erreur, comprends-tu pourquoi ?

Définir une fonction, c’est bien, mais d’habitude elle se termine par une instruction

return

Et puis, ça ne sert à rien de définir une fonction si on ne l’utilise pas.

Je pense que tu dois lire et comprendre la matériel que ton prof t’a fourni.
A défaut, regarde et fais les exercixes proposés dans cette video : https://www.youtube.com/watch?v=Q63Tpbhnt1E

+0 -0

Autre information que je viens de reçevoir, c’est seulement les numéros de la France métropolitaine.

Point :

+331.12.34.56.78 : Valide

01.23.45.67.89 : Valide

01.234.567.89 : Invalide

01.23.4a.bc.56 : Invalide

01.23.45.67.899:Invalide

01.23.45.67 :Invalide

01.23.45.678.9:Invalide

Espace:

+331 12.34 56 78 : Valide

01 23 45 67 89 : Valide

01 234 567 89 : Invalide

01 23 4a bc 56 : Invalide

01 23 45 67 899: Invalide

01 23 45 67:Invalide

01 23 45 678 9: Invalide

Sans point ni espace:

+33123456789 : Valide

0123456789 : Valide

01234abc56 : Invalide

01234567899 : Invalide

0123456 : Invalide

Je dois donc :

  • vérifier si le numéro n’a que 10 chiffres ou 11 chiffres + '+' s’il commence par +33

  • vérifier si le numéro ne contient que des chiffres à l’exeption de '+' s’il commence par +33

  • vérifier si les chiffres sont rangés par paire s’il y a utilisation de point ou d’espace

  • vérifier lorque qu’il y a utilisation de points ou d’espaces s’ils sont entre chaque paire de chiffre

Le programme que j’ai envoyé dans mon premier post n’est qu’un brouillon je sais qu’il y a besoin de return dans une fonction. Je voulais juste savoir si ce que j’avais déjà fait était bon mais au vu de votre réponse j’ai compris que nan ^^'

Merci d’avance pour votre aide.

Edit: Merci pour la vidéo, elle peut m’être utile.

+0 -0

Bonjour , Je ne suis pas non plus un expert en python mais je ferai une "regex" on match et on revoie le booleen.

La moindre des choses, c’est de voir ce que Python pense de ce code.
Parce-que là, la seule ligne qui marche, c’est

numero = input('Taper un numéro')

La dernière ligne provoque un masage d’erreur, comprends-tu pourquoi ?

etherpin

En revanche tu dois bien récupérer t’on entrer utilisateur

ça eu aider a écrire la regex https://rubular.com/

+0 -0

Si ça peu te rassurer , je me suis arrêter à la 3ème sans avoir mon brevet blanc , j’apprends le code seul pendant mon temps libre. D’abord tu dois savoir se que retourne la fonction input Ensuite je n’aurais certaine pas la meilleure méthode mais je découperai et je contrôlerais chaque saisie avec des conditions

+0 -0

je ne comprends pas le terme "regex" et "booléen"

Une expression régulière en français ("regex", de l’anglais regular expression) est un outil qui permet de chercher ou de remplacer un motif dans une chaine de caractère. Ça peut être une manière de résoudre ton problème mais ce n’est pas la seule et probablement pas la plus simple à ton niveau.

Une variable booléenne (ou un "booléen"), c’est une variable qui vaut Vrai/True/1 ou Faux/False/0.

Tu n’as pas parlé des numéros de la forme 0800 123 456 ou de 0033 qui est une alternative à +33, donc saches que ça existe mais tu n’es pas obligé de prendre en compte tout de suite ces cas de figures. N’hésites pas à commencer doucement avec un nombre restreint de cas de figures puis élargir aux autres cas. :)

+0 -0

A priori, dans la solution attendue par le prof, il ne faut pas utiliser regex. Oublie cette fonction pour l’instant.

Tu connais maintenant les critères pour dire dans quels cas un n° est valide ou non.

Ecris en Français le cheminement. Ca va ressembler à ça :

Si le numéro commence par '+' alors vérifier que le numéro commence par '+33’, et si oui, remplacer ce '+33' par le caractère '0’, pour rentrer dans le cas général. ( attention, c’est un peu plus compliqué que ça)

Si le numéro ne contient ni espace ni point, alors vérifier … …

Tu n’as pas parlé des numéros de la forme 0800 123 456 ou de 0033 qui est une alternative à +33, donc saches que ça existe mais tu n’es pas obligé de prendre en compte tout de suite ces cas de figures. N’hésites pas à commencer doucement avec un nombre restreint de cas de figures puis élargir aux autres cas. :)

Situphen

Mon professeur m’a dit de ne pas faire ce genre de numéro de téléphone mais c’est vrai que je ne l’avais pas énoncé.

Oui, il faut faire le cheminement de façon précise. Si tu le fais de façon ultra-précise, la fin sera facile. Ce sera simplement un exercice de traduction de la langue française vers la langue Python. Si tu le fais de façon superficielle, alors la fin sera plus complexe.

N’hésite pas à poster le cheminement ici, pour validation.

J’ai employé le mot cheminement… j’aurais aussi pu employer le mot 'algorithme’, mais j’ai volontairement employé un mot neutre.

Je ne sais pas dans quel ordre le faire

Tu peu procède par élimination. Le numéros comporte t’il des points?

  • Oui/non

A t’il + 33 ?

  • Oui/non

S’il a des points et pas de +33 fait il bien 14 caractères( chiffres + les points ) Etc etc …

Marycha

Juste comme citer je fais dans l’ordre que je veux ?

Je pense être parvenu à éliminer une chaîne de caractères contenant - ou + de 10 caractères

def verification(n) :
    vrai =['0','1','2','3','4','5','6','7','8','9',' ',]
    if longueur != 10 :
        print('Ce numéro est invalide')
    else :
        print('Ce numéro est valide') 
numero = input('Taper un numéro')
longueur = len(n) 

Voilà ce que j’ai fait, je sais que c’est pas beaucoup mais j’ai vraiment des lacunes en programmation.

Je vous demande donc votre aide, merci d’avance.

Reymond

Non, du dois commencer par ce qui éliminerais de suite ton numéro. Tu la déjà fait dans ton code. Si une chaîne de caractère (puisque c’est de cela qu’il s’agit) ne fait pas au minimum 10 caractères c’est pas la peine d’aller plus loin tu peu le traduire comme ça :

if len(number_tel)<10:
        return false

ensuite tu peu devenir plus précis a t’il des points ou des espaces et si oui sont t’il au bon nombres

  if "." in tel or " " in tel:
        for i in tel:
            if i == ".":
                number +=1
            elif i == " ":
                number +=1

et on peu continué +33 ? etc…

tu vois ou je veux en venir comme ta dit elegance prend un crayon note toi tout se qui fait un numéro de téléphone un numéro valide ce sera tes conditions. Puis après tu pourras commencer à le coder. Il faut ensuite que tu te lance! Récupère ton numéro et fait déjà les tests essaie de tromper ton code et améliore le . Poste le ici on t’aidera à trouver ses faiblesses pour l’amélioré.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte