2015-02-02 1 views
0

첫 번째 글자 만 변환하는 함수가 필요하다. 그러나이 함수는 단어의 첫 번째 글자가 문자로 시작하지 않으면 문제를 해결해야한다. 예를 들어 '_sun ','-tree ','2cat '이 단어들은 _Sun, -Tree, 2Cat와 같을 필요가 있습니다. 이것은 내가 지금까지 가지고있는 것입니다, 그것은 어떤 단어로도 변환 할 수 있지만 두 번째 부분은 어떻게 사용해야하는지 모르겠습니다. ASCII를 사용해야합니까 ?? 첫 번째 문자의 가치를 얻고 단어가 문자로 시작하는지 확인 하시겠습니까?파이썬 함수는 첫 글자 만 대문자로 시작한다

def convert(capital): 
    return capital[0].upper() + capital[1:] 

def main(): 
    print(convert('sun')) 

main() 

답변

3

함수 관계없이, 첫 번째 문자를 대문자로.

이 작업을 수행하려면 첫 번째 문자를 다른 방식으로 찾아야합니다. 당신은 str.isalpha() function을 사용할 수

def convert(capital): 
    index = 0 
    while index < len(capital) and not capital[index].isalpha(): 
     index += 1 
    return capital[:index] + capital[index:].capitalize() 

또 다른 방법 일 것 regular expression-based substitution를 사용하는; 당신이 볼 수있는 문자를 대문자로 함수를 사용해야합니다 :

import re 

def convert(capital): 
    return re.sub(r'([a-z])(.*)$', lambda m: m.group(1).upper() + m.group(2), 
        capital, flags=re.I) 

이 첫 글자에 대문자와 소문자를 구별하지 않고로 일치하고, 대체 대문자 버전이. 단어의 시작 중 하나를 가지고

def convert(capital): 
    first, _, rest = capital.partition(' ') 
    return '{} {}'.format(first.title(), rest) 
+0

'str.title'은'대문자 사용 단어 수 '에 대한 기념일을 허용하지 않습니다. 여기에 완벽 할 것입니다 :-) – mgilson

+0

@mgilson : 여전히 사용할 수 있지만 첫 번째 공간으로 분할해야합니다. 추가했습니다. –

2

하나의 옵션은, 예를 정규식을 사용하고 1 개 교체로 제한하는 것입니다 :

>>> import re 
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), '2cat', 1) 
'2Cat' 
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), 'sun', 1) 
'Sun' 
0

당신 만 보인다 :

세 번째 아이디어는 텍스트 모든 단어에 대해 동일한 않습니다 str.title()을 사용하지만, 첫 번째 단어에 적용하는 것입니다 두 번째 문자가 문자이거나 두 번째 문자가 문자 일 때 두 가지 가능성이 있습니다.

print(s.capitalize() if s[0].isalpha() else s[0] + s[1:].capitalize()) 
+0

이것은 다소 제한적입니다. 나는 OP가 돌아와서 *에 대해 물을 것이라고 확신하지만''_-sun'' *은 어떨까요? –

+0

@MartijnPieters, * 모든 단어의 첫 번째 문자 만 변환하는 함수를 작성해야하지만이 함수는 단어의 첫 번째 문자가 문자 *로 시작하지 않으면 문제를 해결해야합니다. 즉 코드가하는 것입니다. –

+0

물론 문제가 해결됩니다. 그러나 거의 그렇게 간단하지 않습니다. –

관련 문제