2016-08-11 3 views
-1

어제 내 응용 프로그램의 하위 섹션이 작동했는데 왜 작동하지 않는지 알 수 없습니다. 여기 문자열을 조건부로 다시 포맷하는 중 오류가 발생했습니다.

는해야 할 작업은 다음과 같습니다

입력 : 10th ave 501

출력 : 501 10th ave

이 코드 블록이 patterns라는 목록에서 대상 단어 중 하나를 검색하기로하고, 경우입니다 그 뒤에 숫자가 len <= 4 인 경우 문자열 앞쪽으로 옮깁니다. patterns에는 ave, street, road, place과 같은 단어가 포함되어 있습니다.

address = address.split(' ') 
for pattern in patterns: 
    try: 
     if address[0].isdigit(): 
      continue 
     location = address.index(pattern) + 1 
     number_location = address[location] 
     if 'th' in address[location + 1] or 'floor' in address[location + 1] or '#' in address[location]: 
      continue 
    except (ValueError, IndexError): 
     continue 
    if number_location.isdigit() and len(number_location) <= 4: 
     address = [number_location] + address[:location] + address[location+1:] 
     break 
address = ' '.join(address) 

print address 

는 현재 출력이 그냥 입력 된 것과 동일한 것입니다 :

여기 내 코드입니다. 즉 10th ave 50110th ave 501을 반환합니다. 나는 그것이 흘끗 보일 정도로 비교적 명백한 무엇인가 느낀다.

을 : 문자열에 모든 문자가 숫자 ( source)

원하는 경우, 당신은 단지 첫 번째 문자를 확인하실 수 있습니다 인 경우

반환 사실 :

+1

코드를 쉽게 이해할 수있는 한 가지 팁 : 한 가지 유형의 데이터 만 넣기 단일 변수 이름. 예를 들어'address'를 문자열로, 또한리스트 (address = address.split ('')')로 사용할 수 있습니다. – dsh

+0

501의 길이는 4보다 작거나 같지 않은가요? – Harrison

+0

@ 하리슨 이것이 숙제가 아니고 거리를 정상화하는 문제를 해결하고 싶다면 어쩌면이 [패키지] (https://github.com/openvenues/pypostal)가 도움이 될 수도 있습니다 – BPL

답변

0

'10th'.isdigit()

False 이후입니다
if number_location[0].isdigit() and len(number_location) <= 4: 
+0

의미가 있습니다. 이것은 '501 10th ave'와 같이 올바른 주소가 응용 프로그램을 통과하는 경우를 처리하도록되어 있습니다. 모든 경우를 처리하기 위해 무엇을 할 수 있습니까? 이 말은 주소가 이미 #으로 시작하면 통과하지만 다른 것은 테스트를 받게된다는 뜻입니다. – Harrison

+0

모든 사례가 무엇인지 잘 모르겠습니다. 모든 옵션을 스스로 정의한 다음 해결해야합니다. –

관련 문제