2010-09-08 13 views
50

mam ciąg jak tenJak sprawdzić, czy w Pythonie znak jest pisany wielkimi literami?

>>> x="Alpha_beta_Gamma" 
>>> words = [y for y in x.split('_')] 
>>> words 
['Alpha', 'beta', 'Gamma'] 

chcę wyjście mówiący X nie jest conformant jako drugi element listy słów zaczyna się od małych liter oraz jeśli ciąg x = "Alpha_Beta_Gamma" to powinno wydrukować ciąg jest zgodne

+0

Co o x = "Alpha_BEta_Gamma"? –

+0

Dobry połów Alpha_BEta_Gamma jest inavlid tak jak powinno być Alpha_Beta_Gamma – lisa

+0

czy używasz Python3? –

Odpowiedz

51

Może chcesz str.istitle

>>> help(str.istitle) 
Help on method_descriptor: 

istitle(...) 
    S.istitle() -> bool 

    Return True if S is a titlecased string and there is at least one 
    character in S, i.e. uppercase characters may only follow uncased 
    characters and lowercase characters only cased ones. Return False 
    otherwise. 

>>> "Alpha_beta_Gamma".istitle() 
False 
>>> "Alpha_Beta_Gamma".istitle() 
True 
>>> "Alpha_Beta_GAmma".istitle() 
False 
+0

Cóż hmm muszę zaznaczyć wszystkie jednak wszystkie odpowiedzi tutaj były poprawne w oparciu o pierwotne wymaganie i dał. – lisa

+0

Cóż, hmm, muszę zaznaczyć twoją odpowiedź jako słuszną, mimo że wszystkie odpowiedzi tutaj były poprawne w oparciu o pierwotny wymóg, który dałem. – lisa

1

można użyć tego wyrażenia regularnego:

^[A-Z][a-z]*(?:_[A-Z][a-z]*)*$ 

Przykładowy kod:

import re 

strings = ["Alpha_beta_Gamma", "Alpha_Beta_Gamma"] 
pattern = r'^[A-Z][a-z]*(?:_[A-Z][a-z]*)*$' 

for s in strings: 
    if re.match(pattern, s): 
     print s + " conforms" 
    else: 
     print s + " doesn't conform" 

Jak widać na codepad

+1

+1, ale może się nie udać w przypadku znaków spoza alfabetu angielskiego, np. "Ălălalt". –

53

Aby sprawdzić, czy wszystkie słowa zaczynają się górną przypadku wykorzystania tego:

print all(word[0].isupper() for word in words) 
+0

>>> x = "Alpha_beta_Gamma" >>> słowa = [y dla y w x.split ('_')] >>> wydrukuj wszystko (słowo [0] .isupper() dla słowa w wyrazach) Plik "", wiersz 1 wydrukuj wszystko (słowo [0] .isupper() dla słowa w wyrazach) ^ Błąd składni: nieprawidłowa składnia – lisa

+1

@lisa: Masz naprawdę starą wersję Pythona (<2.4). Napisz 'print all ([word [0] .isupper() dla słowa w słowach])' zamiast. –

+2

@lisa: w Pythonie 3 używaj 'print (all ...)', ponieważ 'print' jest funkcją, a nie instrukcją. –

2
words = x.split("_") 
for word in words: 
    if word[0] == word[0].upper() and word[1:] == word[1:].lower(): 
     print word, "is conformant" 
    else: 
     print word, "is non conformant" 
+1

Część kodu jest nieefektywna. Możesz go zastąpić słowem [0] .isupper() '. –

+1

I druga część z 'word [1:].islower() ' – NullUserException

+0

Witam używam python 3 i daje mi błąd – lisa

2

Można użyć tego kodu :

def is_valid(string): 
    words = string.split('_') 
    for word in words: 
     if not word.istitle(): 
      return False, word 
    return True, words 
x="Alpha_beta_Gamma" 
assert is_valid(x)==(False,'beta') 
x="Alpha_Beta_Gamma" 
assert is_valid(x)==(True,['Alpha', 'Beta', 'Gamma']) 

ten sposób można wiedzieć, czy jest poprawny, a co jest złe słowo

1
x="Alpha_beta_Gamma" 
is_uppercase_letter = True in map(lambda l: l.isupper(), x) 
print is_uppercase_letter 
>>>>True 

Więc można napisać go w 1 ciąg

+0

Myślę, że dostałeś to w tył - OP wydaje się chcieć, aby wydruk był prawdziwy wtedy i tylko wtedy, gdy pierwsza litera (i żadna inna) każdego słowa nie jest wielka, a twoja, drukuje true, nawet jeśli warunki nie są spełnione . –

Powiązane problemy