Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/05/2014, à 11:31

Hizoka

[Résolu] [python3] Tester une chaine de caractere

Bonjour,

je cherche un moyen simple de faire le test suivant :
ma variable VAR contient elle autre chose que les lettres [a-z] (pas d'accent, de majuscule, d'espace...) ?

est-il possible de faire sans RE ? Ca m’embête de charger un module pour un seul teste dans tout mon logiciel...

j'ai testé différents trucs mais pas fonctionnel...

merci à vous !

Dernière modification par Hizoka (Le 29/05/2014, à 13:29)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 29/05/2014, à 12:34

pingouinux

Re : [Résolu] [python3] Tester une chaine de caractere

Bonjour,
Voici une façon de faire

#!/usr/bin/python3

v1='Abcfg9é';v2='abcdef'

def ok(v) :
   for c in v :
      if ord(c)<ord('a') or ord(c)>ord('z') : return False
   return True

print(v1,ok(v1))
print(v2,ok(v2))

et voici ce qu'on obtient

Abcfg9é False
abcdef True

Dernière modification par pingouinux (Le 29/05/2014, à 12:35)

Hors ligne

#3 Le 29/05/2014, à 12:35

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

str.isalpha()

?


https://docs.python.org/3.0/library/stdtypes.html

doc python a écrit :

str.isalpha()
    Return true if all characters in the string are alphabetic and there is at least one character, false otherwise.

exemples ici :
http://www.tutorialspoint.com/python/string_isalpha.htm


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#4 Le 29/05/2014, à 12:41

Hizoka

Re : [Résolu] [python3] Tester une chaine de caractere

=> waxdesf
Non non déjà testé smile

a = "pépé"
b = "PaPa"
a.isalpha()
=> True
b.isalpha()
=> True

=> pingouinux
pas mal en effet !

Et pour faire encore pire, on peut le faire en une ligne sur un if ? tongue


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 29/05/2014, à 12:48

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

euh chez moi ça marche !

>>> test='péPé'
>>> test2= 'truc'
>>> print test.isalpha()
False
>>> print test2.isalpha()
True
>>> 

Quel est le type de ta variable ? l'encodage ?


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#6 Le 29/05/2014, à 12:50

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

Mon erreur : j'étais en python2. Essaye de convertir ta variable en unicode avant.


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#7 Le 29/05/2014, à 12:55

pingouinux

Re : [Résolu] [python3] Tester une chaine de caractere

Sur une seule ligne :

all( map(lambda c: ord('a')<=ord(c)<=ord('z'), VAR) )

Hors ligne

#8 Le 29/05/2014, à 12:56

Hizoka

Re : [Résolu] [python3] Tester une chaine de caractere

ca ne change pas chez moi, et dans ce cas, si la variable vaut "PaPa" ca renverra True quand même non ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 29/05/2014, à 12:58

Hizoka

Re : [Résolu] [python3] Tester une chaine de caractere

=> pingouinux
Juste parfait !
peux tu expliquer un peu le tout stp ? car la j'ai du mal a tout piger smile
en fait c'est le all et map surtout.
j'ai bien piger qu'on compare les numeros des caracteres.

Dernière modification par Hizoka (Le 29/05/2014, à 13:00)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 29/05/2014, à 13:00

Brunod

Re : [Résolu] [python3] Tester une chaine de caractere

HS : @ pingouinux : c'est toujours un plaisir de lire ta prose ! smile


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#11 Le 29/05/2014, à 13:06

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

Voilà pour pyton3:

>>> test='truc'
>>> test=test.encode('utf-8')
>>> print (test.isalpha())
True
>>> test= 'Pépé'
>>> test=test.encode('utf-8')
>>> print (test.isalpha())
False

Donc en une ligne  :

>>> print ('pépé'.encode('utf-8').isalpha())
False
>>> print ('pepe'.encode('utf-8').isalpha())
True

Ici tu auras besoin en plus de tester .islower() pour les majuscules...

Donc la fonction de pingouinux me semble très bien.

Dernière modification par waxdesf (Le 29/05/2014, à 13:06)


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#12 Le 29/05/2014, à 13:11

Hizoka

Re : [Résolu] [python3] Tester une chaine de caractere

etrange j'ai testé tout à l'heure... j'ai dû me planter dans mon test...

pas mal aussi ton systeme mais difficile a mettre sur une ligne smile.

Merci à vous !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#13 Le 29/05/2014, à 13:15

pingouinux

Re : [Résolu] [python3] Tester une chaine de caractere

Hizoka #9 a écrit :

peux tu expliquer un peu le tout stp ? car la j'ai du mal a tout piger smile
en fait c'est le all et map surtout.
j'ai bien piger qu'on compare les numeros des caracteres.

all( map(lambda c: ord('a')<=ord(c)<=ord('z'), VAR) )

lambda c: ord('a')<=ord(c)<=ord('z') : fonction qui retourne vrai si c est un caractère de la plage a-z
map( fonction, iterable )  : applique la fonction à tous les éléments de iterable (ici, tous les caractères de VAR)
all(iterable) : retourne vrai si tous les éléments de iterable sont vrais

Hors ligne

#14 Le 29/05/2014, à 13:22

pingouinux

Re : [Résolu] [python3] Tester une chaine de caractere

@waxdesf #11 :
Attention, ta fonction accepte aussi les majuscules

>>> 'Pepe'.encode('utf-8').isalpha()
True

Hors ligne

#15 Le 29/05/2014, à 13:25

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

Voilà le test sur une ligne :

foo.islower() and foo.encode('utf-8').isalpha()

tu peux en faire une lambda:

lambda : foo.islower() and foo.encode('utf-8').isalpha(), foo

qui retourne True si la fariable 'foo' est correcte,

un test:

if foo.islower() and foo.encode('utf-8').isalpha():
    print ('good !')

une fonction:

def fonction(foo):
    return foo.islower() and foo.encode('utf-8').isalpha()
pingouinux a écrit :

@waxdesf #11 :
Attention, ta fonction accepte aussi les majuscules

J'ai remarqué un peu tard ! c'est corrigé ci-dessus.

Dernière modification par waxdesf (Le 29/05/2014, à 13:27)


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#16 Le 29/05/2014, à 13:27

Hizoka

Re : [Résolu] [python3] Tester une chaine de caractere

merci à vous.

Ca m'aura encore permit d'apprendre de nouvelles choses !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#17 Le 29/05/2014, à 13:33

waxdesf

Re : [Résolu] [python3] Tester une chaine de caractere

Bonne continuation !
et si tu dois traiter du texte (en particulier en français) avec python, je te recommande d'aller lire ceci :
http://sametmax.com/lencoding-en-python … our-toute/

J'ai tellement tellement tellement galéré avec l'encodage....


Ubuntu 17.10 / ASUS S550CM
Intel i7-3517U 1.9GHz
Nvidia GT 635M / Intel HD

Hors ligne

#18 Le 30/05/2014, à 06:16

pingouinux

Re : [Résolu] [python3] Tester une chaine de caractere

On peut simplifier ce que je propose en #7 :

all( map(lambda c: 'a'<=c<='z', VAR) )

Hors ligne