2017-09-30 2 views
-1

이 함수의 경우이 코드에서만이 코드가 작동하지만 모든 예제에서 작동하지 않는 이유를 모르겠습니다. 누구든지 나를 도울 수 있습니까?비영어 문자를 제거하는 방법

def remove_punctuation(s): 
    '''(str) -> str 
    Return s with all non-space or non-alphanumeric 
    characters removed. 
    >>> remove_punctuation('a, b, c, 3!!') 
    'a b c 3' 
    ''' 
    new_str = '' 
    for char in s: 
     if char.isdigit() or char.isalpha(): 
      new_str = new_str + char + " " 
    new_s = new_str[:len(new_str)-1] 
    return new_s 

여기 있습니다. 이 때문에 라인

new_str = new_str + char + " " 

코드에

+0

가 어떻게 모든 예제와 경우에이 기능이 작동해야합니까 :


여기 str.join() 및 지능형리스트/발전기 식을 사용하여 문자열에서 문자를 제거하는 일반적인 방법은 무엇입니까? – dg123

+0

작동하지 않는 예제를 게시하는 것이 도움이 될 수 있습니다. – mhawke

답변

0

항상 각 보존 문자 뒤에 공백을 추가합니다. 따라서 영숫자 문자는 중간에 공백으로 끝납니다.

기능이 작동하지 않는 또 다른 예는 문자열 내에 여러 공백이있는 경우입니다 (예 : 'a, b, c, 3!! '. 귀하의 설명에 따라 공간을 보존해야합니다.

이 기능은 문자가 isspace()을 사용하여 공백인지 여부를 확인할 수도 있습니다.

def remove_punctuation(s): 
    '''(str) -> str 
    Return s with all non-space or non-alphanumeric 
    characters removed. 
    >>> remove_punctuation('a, b, c, 3!!') 
    'a b c 3' 
    ''' 
    new_str = '' 
    for char in s: 
     if char.isalnum() or char.isspace(): 
      new_str = new_str + char 
    return new_str 

print(repr(remove_punctuation('a, b, c, 3!!'))) 
print(repr(remove_punctuation('a, b, c, 3!!'))) 

출력 : 만 공백 문자를 유지하려면

 
'a b c 3' 
'a b c 3' 

다음 char == ' 'char.isspace()을 대체 할 수있는이 공백 문자뿐만 아니라, 탭, 새로운 라인 등이 포함됩니다.

def remove_punctuation(s): 
    '''(str) -> str 
    Return s with all non-space or non-alphanumeric 
    characters removed. 
    >>> remove_punctuation('a, b, c, 3!!') 
    'a b c 3' 
    ''' 
    return ''.join(c for c in s if c.isalnum() or c.isspace()) 
관련 문제