2017-11-15 9 views
0

입력 문자열 사용 및 데이터 목록의 튜플에 포함되는지 확인하는 데 문제가 있습니다.입력 문자열이 모든 튜플의 구성 요소에 속하는지 확인하는 방법

data = [(Mr. John Doe, 345.678.9765, [email protected]), 
     (Ms. Mary Doe, 345.123.4567, [email protected])] 
print("Search for: ") 
s = input() 
while s: 
    for a in data: 
    if any(b[0] == s for b in a): 
     print(a) 
    else: 
     print("Not Found") 
print("Search for: ") 
s = input() 

내가 입력으로 Mr.에 입력하는 경우는 튜플의 구성 요소를 찾기 위해 실패,하지만 입력으로 j를 입력하면이 출력됩니다

(Mr. John Doe, 345.678.9765, [email protected]) 
+0

대신에'str.startswith'를 시도하십시오 ... –

+0

내장 된'any' 함수를 사용하십시오 :'any (모든 항목 (tup의 item in tup)에있는 항목)' –

답변

1

any(b[0] == s for b in a)하는 유일한 것 True 사용자가 전체 이름을 정확하게 이름 문자열에 입력하면 (예 : Mr. John Doe). 상기 사용자 입력은 in 연산자를 사용하여 이름 문자열의 일부에 경우 대신 확인 : b[0] == s for b in ab[0]는의 첫 문자를 참조하기 때문에

data = [('Mr. John Doe', '345.678.9765', '[email protected]'), 
     ('Ms. Mary Doe', '345.123.4567', '[email protected]')] 

print("Search for: ") 

s = input() 

result = None # set a variable to hold our result 

for a in data: 
    if any(s in b for b in a): # use in to check if substring 's' is in string 'b' 
     result = a[0] # save the name that contains user input 
     break   # exit loop if found 
    else: 
     result = "Not Found" 

print(result) 

Mr. 입력에 실패 하였다 이유는 터플의 각 문자열 및 3 문자 문자열은 단일 문자와 결코 같지 않습니다. 우리가 입력 j, 비교 b[0] == s for b in a첫 번째 튜플 ([email protected]에서 j)의 마지막 문자열의 첫 번째 문자와 일치 않습니다 마찬가지로

, 그래서 는 튜플 출력을했다.

희망이 도움이됩니다.

+0

정말 감사드립니다. 그것! – KRZ

+0

대단히 환영합니다! 내 대답이 도움이된다면 투표를 클릭하십시오 (답변 옆에있는 위 화살표를 클릭하십시오). 또는 문제를 해결 한 경우 [동의] (https://meta.stackexchange.com/a/5235)를 클릭하여 고려하십시오. 녹색 체크 표시. 감사! – davedwards