2013-05-27 1 views
1

나는이 website에서 내 파이썬 코딩을 연습하고 있습니다. 이것은 내가 모든을 testcases를 전달 해달라고 문제특정 문자열이 다른 문자열에 나타나는지 확인하십시오.

Return True if the given string contains an appearance of "xyz" where the xyz is 
not directly preceeded by a period (.). So "xxyz" counts but "x.xyz" does not. 

xyz_there('abcxyz') → True 
xyz_there('abc.xyz') → False 
xyz_there('xyz.abc') → True 

이 어떤 알 수없는 이유로, 내 코드입니다. 나는 import을 허용하지 않는 웹 사이트를 표시 그것은

def xyz_there(str): 

    counter = str.count(".xyz") 
    if (counter > 0): 
     return False 
    else: 
     return True 
+1

문자열 "abc"에 대해 코드에서 True를 반환합니다. –

+0

@OmriBarel 지금 당장 잘못된 페이지로 연결되었습니다. 다시 한번 확인해주세요. – user2284926

+0

나는 귀하의 코드만을 언급하고있었습니다. 그것은 "abc"에 대해 True를 반환합니다, 나는 그것이 당신이 원하는 것이 확실하지 않습니다. –

답변

4

디버깅 문제가 있기 때문에 단순한는 아마도 :

'xyz' in test.replace('.xyz', '') 

그렇지 않으면, 당신이 주장 뒤에 부정적인 표정으로 정규 표현식을 사용할 수 있습니다 :의 수를 계산 .xyz의 일부가 아닌 xyz이되어 있다면

import re 

tests = ['abcxyz', 'abc.xyz', 'xyz.abc'] 
for test in tests: 
    res = re.search(r'(?<!\.)xyz', test) 
    print test, bool(res) 

#abcxyz True 
#abc.xyz False 
#xyz.abc True 
+0

내 논리에 무슨 문제가 있습니까 ?? – user2284926

+0

나는 '대체'트릭을 생각해야했다. – DSM

3

한 가지 방법은 볼 수초, .xyz의 수를 계산하고 두 번째보다 첫 번째가 더 많이 있는지 확인합니다. 예를 들어 :

def xyz_there(s): 
    return s.count("xyz") > s.count(".xyz") 

웹 사이트에있는 모든 테스트를 통과한다.

관련 문제