2012-08-30 5 views
0

파이썬에서 코드를 작성하려고합니다. 그러면 문자열 입력에서 HTML 태그가 제거됩니다. 그러나 어떤 이유로 코드는 가정용 파이썬 설치에서 실행되지 않고 Udacity 인터페이스에서 종료됩니다.Python에서 기본 검색 및 바꾸기가 실행되지 않습니다.

어디로 잘못 가고 있습니까?

def remove_tags(sentence): 
    list = [] 
    state = 0 
    while state == 0: 
     location1 = sentence.find('<') 
     location2 = sentence.find('>',location1) 
     if location1 != -1: 
      chamber = sentence[location1:location2+1] 
      sentence.replace(chamber,'') 
     elif location1 == -1: 
      state = 1 
      return sentence.split() 
    return sentence.split() 

print remove_tags('''<table cellpadding='3'> 
        <tr><td>Hello</td><td>World!</td></tr> 
        </table>''') 

답변

1

바꾸기는하지만 어디에도 결과를 저장하지 않으므로 손실됩니다.

sentence = sentence.replace(chamber,'') 

대신 : 나는이 같은 의미 가정. "대신에"

sentence.replace(chamber,'') 

문자열은 파이썬에서 불변 등 modfied 할 수 없습니다 새 문자열은 항상 만들어 지므로 유지해야하는 경우 이름에 할당해야합니다.

귀하의 while 루프합니다 (return 문을 통해) 유일한 출구는 텍스트 < 발견하지 않으며, 텍스트, 이후로 시작하는 < 문자를 포함하지 않는 한 이런 일이 없을 것 경우는 방금 설명한 것 같이 sentence의 값을 절대로 변경하지 마십시오.

또한 elif은 중복되어 있습니다. else을 사용하고 조건을 생략하면 if에있는 것과 반대입니다. 또한 state 변수 또는 list 변수가 필요하지 않습니다. (나쁜 이름으로 시작해야합니다.)

나는이 같은 함수 뭔가를 다시 것 :

def remove_tags(html): 
    while '<' in html: 
     start = html.find('<') 
     end = html.find('>', start) 
     tag = html[start:end+1] 
     html = html.replace(tag, '', 1) 
    return html.split() 

가 나는 또한 더 나은 그들이 사용하는지 반영하기 위해 변수 이름을 변경했습니다.

물론이 작은 기능은 HTML 태그의 속성에 > 기호가있는 경우 원하는 것을 제거하지 못합니다. 대신, BeautifulSoup와 같은 HTML 파서를 사용하여이 작업을 수행하십시오.

+0

감사합니다! 문제 해결됨.;) – c3ntury

2

while 루프를 종료하려면 state의 값을 변경하는 문장을 포함시켜야합니다.

그대로, sentence에 '<'문자가없고, while 루프 내부에서 돌아 오기를 기다리는 중입니다. sentence의 값을 절대로 변경하지 않으므로 결코 return을 치는 것이 아닙니다.

state 변수를 사용하기 때문에이 코드가 혼동 스럽지만 루프가 무한 루프로 표시되고 종료는 루프가 아니라 루프 내부에서 발생합니다. 그게 당신의 의도라면, while True으로 더 명확하게 기술 될 것입니다.

그러나 가장 명확한 버전은 while '<' in sentence:입니다. 그런 다음 내부 if 성명서를 삭제할 수 있습니다.

while '<' in sentence: 
    location1 = sentence.find('<') 
    location2 = sentence.find('>',location1) 
    chamber = sentence[location1:location2+1] 
    sentence = sentence.replace(chamber,'') 

return sentence.split() 
+0

죄송합니다. 게시물에 추가 할 때 상태가 바뀌는 라인을 놓쳤습니다. 코드는 여전히 슬프게도 결과를 산출하지 못합니다. :/ – c3ntury

+0

하나의 제어 구조 - 'while'또는 내부'return' 중 하나를 고르고 그걸 고수하십시오. 이 방법은 너무 혼란 스럽다 (최소한 나 자신과 같은 addlepate에게는). –

관련 문제