#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
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é
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 ?
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
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 !
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 .
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
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()
@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