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 :

Création d'un programme basique [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut Création d'un programme basique
    Bonjour a tous,

    J'ai commencé a apprendre Python il y a quelque jours et j'ai un petit exercice a faire,
    Je dois créer un programme et je suis bloqué: je dois faire un programme qui demande à l'utilisateur d'insérer un caractère et si c'est une lettre, il doit changer la case (genre majuscule/minuscule) sinon dire que c'est pas une lettre. J'ai commencé a créer étape par étape:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    lettre=str(input("Saisir une lettre\n"))
    if lettre == lettre.upper() :
    	print("Vous avez saisi la lettre majuscule",lettre)
    	print("Après transformation en minuscule, on obtient la lettre",lettre.lower())
     
    elif lettre == lettre.lower() :
    	print("Vous avez saisi la lettre minuscule",lettre)
    	print("Après transformation en majuscule, on obtient la lettre",lettre.upper())
    J'ai reussi a créé la partie qui change la case, mais je veux que mon programme reconnait la difference entre une lettre (comme "a") et un symbole (comme "$") et que si un symbole est inséré, il print une phrase en disant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print("Vous avez saisi le caractère",lettre,"ce n'est pas une lettre.")
    Comment je peux ajouter un autre "elif" qui va filtrer la difference entre les lettres et le reste ?

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    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 : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wow1605 Voir le message
    Bonjour a tous,

    je veux que mon programme reconnait la difference entre une lettre (comme "a") et un symbole (comme "$")
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> "a".isalpha()
    True
    >>> "$".isalpha()
    False
    >>>

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 196
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Pour commencer, on peut envisager de créer un alphabet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> alphabet = "abcdefghijklmnopqrstuvwxyz"
    >>> lettre = 'E'
    >>> lettre.lower() in alphabet  
    True
    >>> lettre = '$'
    >>> lettre.lower() in alphabet 
    False

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wow1605 Voir le message
    Bonjour a tous,
    Salut

    Citation Envoyé par wow1605 Voir le message
    Comment je peux ajouter un autre "elif" qui va filtrer la difference entre les lettres et le reste ?
    La solution de Hominidé utilise une méthode spéciale attachée aux strings. La solution de f-leb est plus généraliste: tester si l'élément saisi appartient ou n'appartient pas à un ensemble d'éléments autorisés. A toi de voir laquelle convient à ton énoncé (as-tu le droit de passer par des outils déjà existants ou bien te demande-t-on de les réécrire pour mieux t'imprégner de leurs façons de faire).

    Si d'ailleurs on te demande de les réécrire, alors je ne pense pas que tu aies le droit de passer par str.upper() et/ou str.lower(). Ceci dit c'est bien ce que tu as écrit. Mais si ton prof n'accepte pas...

    Il y a une façon de faire plus basique: passer par le fait que les caractères se suivent tous dans la table unicode. Ainsi si 'c' se trouve deux rangs plus haut que 'a', alors 'C' se trouvera deux rangs plus haut que 'A'. Et si 'a' se trouve à 32 rangs de 'A', alors 'c' se trouvera aussi à 32 rangs de 'C'.

    Ainsi convertir une lettre depuis les minuscules vers les majuscules peut se faire de cette façon: chr(ord(lettre) - ord('a') + ord('A')). Et l'inverse se fera ainsi: chr(ord(lettre) - ord('A') + ord('a')). Et tester si une lettre est minuscule (majuscule) peut se faire ainsi: 'a' <= lettre <= 'z' (resp. 'A' <= lettre <= 'Z').
    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
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par wow1605 Voir le message
    Comment je peux ajouter un autre "elif" qui va filtrer la difference entre les lettres et le reste ?
    Vous n'avez pas besoin d'ajouter un elif mais d'ajouter un else pour traduire ce que vous écririez en français:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si minuscule alors:
       ...
    sinon si majuscule:
       ...
    sinon:
         le reste.

    Vous pouvez aussi vous rappeler que les caractères ASCII sont ordonnés: une minuscule (majuscule) sera plus grande que 'a' (ou 'A') et plus petite que 'z' (ou 'Z').

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    J'ai trouvé, merci a tous pour vos conseil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    lettre=input("Saisir une lettre\n")
    if(lettre>='A' and lettre<='Z'):
        print("Vous avez saisi la lettre majuscule",lettre)
        print("Après transformation en minuscule, on obtient la lettre",lettre.lower())
    elif (lettre>='a' and lettre<='z'):
        print("Vous avez saisi la lettre minuscule",lettre)
        print("Après transformation en majuscule, on obtient la lettre",lettre.upper())
    else:
        print("Vous avez saisi le caractère",lettre,"ce n'est pas une lettre.")

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wow1605 Voir le message
    if(lettre>='A' and lettre<='Z')
    Pas besoin de parenthèses, et espacer ne coûte pas plus cher tout en améliorant la lisibilité => if lettre >= 'A' and lettre <= 'Z'.
    Et tu n'as pas vu mon exemple qui évite de devoir répéter "lettre" ? => if 'A' <= lettre <= 'Z'.
    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]

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Remarque : on parle de "casse" et non de "case".

  9. #9
    Invité
    Invité(e)
    Par défaut
    Slt !

    Lol, je découvre que l'on peut tester si une lettre est inférieure ou supérieure à une autre.

    Moi je proposerais d'utiliser string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import string
    def test(x):
    	if x in string.ascii_lowercase:
    		print("x is lower")
    	elif x in string.ascii_uppercase:
    		print("x is upper")
    	else:
    		print("x is a symbol")
    C'est on ne peut plus simple et clair.

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    C'est on ne peut plus simple et clair.
    ça revient à comparer le caractère à tous ceux des chaînes de caractères que sont string.ascii_lowercase et string.ascii_uppercase. Çà fonctionne mais c'est inefficace.

    Des lettre.islower()/lettre.isupper() sont bien plus efficaces et fonctionnent avec tous les caractères (pas seulement le sous ensemble ASCII).

    Citation Envoyé par LeNarvalo Voir le message
    je découvre que l'on peut tester si une lettre est inférieure ou supérieure à une autre.
    Une lettre est juste la représentation d'un nombre (qui sont ordonnés).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Les lettre.lower()/lettre.upper() utilisés par le PO dans son post initial sont bien plus efficaces et fonctionnent avec tous les caractères (pas seulement le sous ensemble ASCII).
    - W
    Oui mais je ne pense pas que le PO veuille savoir quel est la majuscule de µ par exemple ?
    >>> "µ".islower()
    True
    >>> "µ".upper()
    'Μ'
    >>> 'Μ'.lower()
    'μ'
    >>> 'M'.lower()
    'm'


    Côté efficacité ça devrait être suffisant :
    1 000 000 de test("µ")
    Durée : 0.176 sec

    Avec islower() / isupper() :
    Durée : 0.103 sec

    Avec la méthode de Sve@r ("a" <= letter <= "z"):
    Durée : 0.172 sec

    Je m'attendais à une différence beaucoup plus grande !

  12. #12
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,
    Citation Envoyé par wow1605 Voir le message
    J'ai trouvé, merci a tous pour vos conseil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    lettre=input("Saisir une lettre\n")
    if(lettre>='A' and lettre<='Z'):
        print("Vous avez saisi la lettre majuscule",lettre)
        print("Après transformation en minuscule, on obtient la lettre",lettre.lower())
    elif (lettre>='a' and lettre<='z'):
        print("Vous avez saisi la lettre minuscule",lettre)
        print("Après transformation en majuscule, on obtient la lettre",lettre.upper())
    else:
        print("Vous avez saisi le caractère",lettre,"ce n'est pas une lettre.")
    Dans l'exercice, si l'utilisateur saisit une lettre non-ASCII, faut-il la rejeter ?
    • Si oui, alors, pour tester que c'est une lettre ASCII, il faut aussi vérifier la condition len(lettre) == 1 et, quand ce n'est pas une lettre ASCII, il faut changer le texte "ce n'est pas une lettre" en "ce n'est pas une lettre ASCII".
    • Sinon, alors l'exercice ne s'adresse pas à des débutants en Python.
    • Si l'exercice ne précise pas l'encodage, alors son auteur manque de rigueur.


    En Unicode, rien n'est simple. (Je sens que ça va être mon nouveau slogan favori, la précédente occurrence étant ici.)

    En Unicode, on n'a pas seulement deux casses (lowercase et uppercase). On en a aussi une 3e : titlecase.
    Les catégories correspondantes sont Ll (Letter, lowercase), Lu (Letter, uppercase) et Lt (Letter, titlecase).

    Cela conduit à des subtilités comme celle qui est décrite dans la documentation de str.upper() :
    Return a copy of the string with all the cased characters 4 converted to uppercase. Note that s.upper().isupper() might be False if s contains uncased characters or if the Unicode category of the resulting character(s) is not “Lu” (Letter, uppercase), but e.g. “Lt” (Letter, titlecase).

    The uppercasing algorithm used is described in section 3.13 of the Unicode Standard.
    D'ailleurs, pour vérifier qu'une chaîne est alphabétique, str.isalpha() vérifie si tous ses points de codage ont une catégorie parmi Ll (Letter, lowercase), Lu (Letter, uppercase), Lt (Letter, titlecase), Lm (Letter, modifier) et Lo (Letter, other).

    Du coup, si je fais lettre = "e" + chr(0x301), cela crée un e accent aigu, mais lettre.isalpha() vaut False, car le point de codage COMBINING ACUTE ACCENT (U+0301) est dans la catégorie Mn (Mark, nonspacing).

    Bref, il faudrait que les exercices soient rigoureux dans leurs énoncés et précisent qu'ils se restreignent à l'ASCII.
    Depuis Unicode, manipuler des chaînes de caractères, c'est devenu trop compliqué, même pour des développeurs professionnels.

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Bref, il faudrait que les exercices soient rigoureux dans leurs énoncés et précisent qu'ils se restreignent à l'ASCII.
    Depuis Unicode, manipuler des chaînes de caractères, c'est devenu trop compliqué, même pour des développeurs professionnels.
    Peut-être que le prof a simplement voulu donner un exercice qui permette de s'exercer aux blocs conditionnels sans penser à mal ni à toutes ces subtilités que tu décris si bien mais qui sont peut-être au dessus de la compréhension d'un débutant
    J'ai testé x="e"+chr(0x301) de ton autre lien puis "+".join(x*3). Amusant
    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
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    Je suis même aller plus loin dans mon programme, si je veux par exemple qu'il change la casse aussi pour les lettres comme "é" ou "ù", j'ai fais comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    lettre=str(input("Saisir une lettre\n"))
    if (lettre == lettre.upper() == lettre.lower()) :
    	print("Vous avez saisi le caractère",lettre,"ce n'est pas une lettre.")
    elif (lettre == lettre.upper() and lettre != lettre.lower()):
    	print("Vous avez saisi la lettre majuscule",lettre)
    	print("Après transformation en minuscule, on obtient la lettre",lettre.lower())
    elif (lettre == lettre.lower() and lettre != lettre.upper()):
    	print("Vous avez saisi la lettre minuscule",lettre)
    	print("Après transformation en majuscule, on obtient la lettre",lettre.upper())
    La première ligne concerne l'entrée de la lettre en question
    Première condition, si le caractère est le même en minuscule et majuscule, alors c'est surement un symbole comme "$" ou "%"
    Deuxième et troisième condition change la casse si c'est un caractère qui a une forme différente en majuscule ou minuscule

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wow1605 Voir le message
    Je suis même aller plus loin dans mon programme, si je veux par exemple qu'il change la casse aussi pour les lettres comme "é" ou "ù", j'ai fais comme sa:
    Tu connais la comptine "sur le pont d'Avignon"? A un moment il est dit "les beaux messieurs font comme ça". Mais si tu ne sais pas l'écrire, alors tu peux écrire à la place "comme cela". Ce n'est pas parce qu'on est en informatique que l'orthographe est à oublier.

    Citation Envoyé par wow1605 Voir le message
    Première condition, si le caractère est le même en minuscule et majuscule, alors c'est surement un symbole comme "$" ou "%"
    Déjà les parenthèses sur des cas simples ne sont pas nécessaires. Et moi j'aurais simplement dit "caractère pas entre 'a' et 'z' ni entre 'A' et 'Z'' => if (lettre < 'a' or lettre > 'z') and (lettre < 'A' or lettre > 'Z').

    Citation Envoyé par wow1605 Voir le message
    Deuxième et troisième condition change la casse si c'est un caractère qui a une forme différente en majuscule ou minuscule
    Hum... et le cas "else" éventuel il regrouperait quelle population ?
    Attention le trop est l'ennemi du bien. Partir sur des conditions "exotiques" peut avoir des risques de rater un cas très particulier. Restes-en aux solutions simples qui fonctionnent.
    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]

  16. #16
    Invité
    Invité(e)
    Par défaut
    @Pyramidev Très intéressant, je ne connaissais pas ces autres casses ! A partir du moment où il y a un input dans le code, on peut peut-être mettre de côté tous les caractères non présent sur nos claviers AZERTY ? ^^

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    A partir du moment où il y a un input dans le code, on peut peut-être mettre de côté tous les caractères non présent sur nos claviers AZERTY ? ^^
    Tout dépend de ton but. Si tu veux faire un outil international (incluant le russe, le chinois et le japonais) te faudra voir à gérer plus finement ce qui est "inputé()" que l'éliminer définitivement....
    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]

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par wow1605 Voir le message
    Je suis même aller plus loin dans mon programme, si je veux par exemple qu'il change la casse aussi pour les lettres comme "é" ou "ù", j'ai fais comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    lettre=str(input("Saisir une lettre\n"))
    if (lettre == lettre.upper() == lettre.lower()) :
    	print("Vous avez saisi le caractère",lettre,"ce n'est pas une lettre.")
    elif (lettre == lettre.upper() and lettre != lettre.lower()):
    	print("Vous avez saisi la lettre majuscule",lettre)
    	print("Après transformation en minuscule, on obtient la lettre",lettre.lower())
    elif (lettre == lettre.lower() and lettre != lettre.upper()):
    	print("Vous avez saisi la lettre minuscule",lettre)
    	print("Après transformation en majuscule, on obtient la lettre",lettre.upper())
    La première ligne concerne l'entrée de la lettre en question
    Première condition, si le caractère est le même en minuscule et majuscule, alors c'est surement un symbole comme "$" ou "%"
    Deuxième et troisième condition change la casse si c'est un caractère qui a une forme différente en majuscule ou minuscule
    Il faudrait un peu revoir la logique. La double condition lettre == lettre.upper() == lettre.lower() se réduit à lettre.upper() == lettre.lower().
    Si cette condition est vraie, on va exécuter le bloc qui dit "ce n'est pas une lettre" et ignorer les autres branches du if elif...

    Si cette condition est fausse, on va aller au premier elif ou la condition sera juste lettre == lettre.upper() car le premier test ayant attrapé tout ce qui n'est ni majuscule ou minuscule, on sait, arrivé là, que c'est soit une majuscule soit une minuscule (et rien d'autre). Conséquence le 2ème elif et la condition associées peuvent être remplacées par un else.

    Citation Envoyé par LeNarvalo Voir le message
    Oui mais je ne pense pas que le PO veuille savoir quel est la majuscule de µ par exemple ?
    Tout jeune déjà j'avais du mal a discerner .lower de .islower J'ai corrigé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par f-leb Voir le message

    Pour commencer, on peut envisager de créer un alphabet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> alphabet = "abcdefghijklmnopqrstuvwxyz"
    ...
    Citation Envoyé par Sve@r Voir le message
    Et tester si une lettre est minuscule (majuscule) peut se faire ainsi: 'a' <= lettre <= 'z' (resp. 'A' <= lettre <= 'Z').
    A votre avis, quelle méthode est plus rapide ? La double comparaison ou le test avec l’alphabet (if lettre in alphabet) ?

    Et la méthode avec une regex ?

  20. #20
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    A votre avis, quelle méthode est plus rapide ? La double comparaison ou le test avec l’alphabet (if lettre in alphabet) ?
    L'intuition me fait dire la double comparaison. Il ne s'agit pour le processeur que de 2 tests d'égalité. L'opération "in" implique fatalement une boucle. Dans ce cas précis la boucle ne concerne que 26 éléments donc elle peut être rapide mais si on prend un cas plus général...

    Citation Envoyé par Beginner. Voir le message
    Et la méthode avec une regex ?
    Et si nous regardions ensembles...

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/usr/bin/env python3 
    # coding: utf-8 
     
    import random
    import timeit
    import re
    from functools import partial
     
    # Les fonctions à tester
    def fct_in(l):
    	t="abcdefghijklmnopqrstuvwxyz"
    	for x in l: x in t
     
    def fct_eq(l):
    	for x in l: "a" <= x <= "z"
     
    def fct_re(l):
    	t="abcdefghijklmnopqrstuvwxyz"
    	for x in l: re.search(x, t)
     
    fct={
    	"in" : fct_in,
    	"equal" : fct_eq,
    	"regex" : fct_re,
    }
     
    # Initialisation random
    random.seed()
     
    # Les données à traiter (début, milieu, fin, autre)
    data="amz0"
     
    # Le nombre de répétitions (les moyennes se feront sur cette valeur)
    repeat=100
     
    # Appel des fonctions dans un ordre aléatoire et affichage du chrono
    print("start=%s, repeat=%d" % (data, repeat))
    for (k, v) in random.sample(fct.items(), len(fct)):
    	t=timeit.Timer(partial(v, data)).repeat(repeat=repeat, number=100_000)
    	print("%s: min=%f, max=%f, avg=%f" % (k, min(t), max(t), sum(t)/len(t)))
    # for

    Pour être honnête, le "égal" et "in" sont quasiment équivalents. Parfois c'est le "égal" qui devance, parfois c'est le "in". Mais le regex lui est carrément à la rue *10. C'est compréhensible, c'est un truc énorme le regex (mais peut-être j'ai pas pris la bonne méthode)...
    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]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/09/2006, 09h55
  2. Création d'un programme de Gestion / compta : langage ?
    Par Alexino2 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 11/04/2006, 15h00
  3. Réponses: 10
    Dernier message: 31/01/2006, 11h36
  4. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  5. Création installer pour programme
    Par yanndublanche dans le forum Windows
    Réponses: 7
    Dernier message: 11/10/2005, 00h29

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