2013-09-06 33 views

Odpowiedz

11

Funkcja str.isalpha() działa. to znaczy.

if my_string.isalpha(): 
    print('it is letters') 
54

Proste:

if string.isalpha(): 
    print("It's all letters") 

str.isalpha() jest prawda, jeśli wszystkie znaki napisu są literami:

return true jeśli wszystkie znaki w ciągu są alfabetyczne i nie ma co najmniej jeden znak, w przeciwnym wypadku false.

Demo:

>>> 'hello'.isalpha() 
True 
>>> '42hello'.isalpha() 
False 
>>> 'hel lo'.isalpha() 
False 
+10

Uwaga: W python2 nie jest to znane z unikodu, więc '" ä ".isalpha()' jest fałszywe. Jednak w python3 '" ä ".isalpha()' ma wartość True, ponieważ python3 ma defiulty łańcuchy unicode. – Squidly

+0

@MrBones: W Pythonie 2 używaj obiektu 'unicode' jeśli to ma znaczenie. –

+0

Tak, właśnie dodawałem go jako dodatkową użyteczną informację dla niczego nie podejrzewających czytelników. – Squidly

6

Dla osób stwierdzających to pytanie za pośrednictwem Google, którzy chcą wiedzieć, czy ciąg zawiera tylko podzbiór wszystkich liter, polecam użyciu regexes:

import re 

def only_letters(tested_string): 
    match = re.match("^[ABCDEFGHJKLM]*$", tested_string) 
    return match is not None 
+5

Przepraszam, że chodzę, ale regex w twoim przykładzie może być również '^ [A-HJ-M] * $', co jest moim zdaniem bardziej czytelne . – Petzku

-1

A całkiem proste rozwiązanie ja wymyśliłem: (Python 3)

def only_letters(tested_string): 
     for letter in tested_string: 
      if not letter in "abcdefghjklmnopqrstuvwxyz": 
       return False 
     return True 

Możesz dodać spację w ciągu, który sprawdzasz, jeśli chcesz, aby spacje były dozwolone.

+0

jeśli litera * nie * w "abcdefghjklmnopqrstuvwxyz" – Guibod

+0

Tęsknisz za I i nie używasz nieprawidłowo: 'jeśli litera ** nie ** w" abcdefgh ** i ** jklmnopqrstuvwxyz "' – Guibod

+0

Prawdopodobnie chcesz używać 'if letter.lower() ...' Tak jak to jest, wielkie litery nie będą się liczyć. Moduł 'string' ma również zmienną predefiniowaną dla wszystkich liter w alfabecie. W rzeczywistości są trzy: dla wielkich, małych i obu. Oczywiście prostsze rozwiązanie jest już podane powyżej: 'isalpha'. – zondo

4

Wygląda na to, że ludzie mówią, że używają str.isalpha.

Jest to funkcja jednolinijkowa do sprawdzania, czy wszystkie znaki są literami.

def only_letters(string): 
    return all(letter.isalpha() for letter in string) 

all akceptuje Iterable wartości logicznych i zwraca True IFF wszystkich logicznych są True.

Bardziej ogólnie, all zwraca True, jeśli obiekty w twojej iteracji będą uznane za True. Byłyby one uważane False

  • None
  • Puste struktury danych (tj: len(list) == 0)
  • False.(Duh)
+0

jest to najciekawsze rozwiązanie, biorąc pod uwagę, że łatwo jest zanegować założenie na podstawie jednego znaku. – Alex

+1

'isalpha' już sprawdza każdą literę. Nie ma potrzeby używać go więcej niż jeden raz. – zondo

0
func only_letters(str): 
    return not any(str.isdigit(c) for c in str) 
+0

Istnieje wiele znaków, które nie są cyframi, a także nie są alfabetyczne, więc jest to bardzo niewiarygodne rozwiązanie. – zondo

3

Faktycznie, jesteśmy teraz w zglobalizowanym świecie 21. wieku i ludzie komunikują się nie tylko przy użyciu ASCII więc podczas odbierania połączeń pytanie o „zaledwie IT litery” trzeba brać pod uwagę liter również z alfabetów innych niż ASCII. Python ma dość chłodne unicodedata biblioteki, która między innymi umożliwia kategoryzację znaków Unicode:

unicodedata.category('陳') 
'Lo' 

unicodedata.category('A') 
'Lu' 

unicodedata.category('1') 
'Nd' 

unicodedata.category('a') 
'Ll' 

categories and their abbreviations są zdefiniowane w standardzie Unicode. Stąd można dość łatwo można wymyślić z funkcji takich jak to:

def only_letters(s): 
    for c in s: 
     cat = unicodedata.category(c) 
     if cat not in ('Ll','Lu','Lo'): 
      return False 
    return True 

, a następnie:

only_letters('Bzdrężyło') 
True 

only_letters('He7lo') 
False 

Jak widać na białej liście kategorie mogą być łatwo kontrolowane przez krotki w kasecie funkcjonować. Zobacz this article, aby uzyskać bardziej szczegółową dyskusję.

0

(1) Użyj str.isalpha() podczas drukowania napisu.

(2) Proszę sprawdzić poniżej programu w celach informacyjnych: -

str = "this"; # No space & digit in this string 
print str.isalpha() # it gives return True 

str = "this is 2"; 
print str.isalpha() # it gives return False 

Uwaga: - Sprawdziłem powyżej przykład w Ubuntu.

Powiązane problemy