2013-08-15 7 views
3

처음 여기 (그리고 프로그래밍 멍청한 놈), 내가 올바른 형식을 얻을 희망!파이썬 목록에있는 문자 두 가지 모양을 인쇄하십시오.

나는 목록에서 원하는 편지가 나타나는 위치를 인쇄하는 기능을 만들려고합니다. 아래 코드는 문자를 찾아서 문자가있는 위치를 인쇄합니다. 즉, 'a'를 검색하면 프로그램은 2 번째 자리 (x + 1)에 응답합니다.

둘 이상의 통화가있는 문자 (예 : 문자 'e')를 검색하는 경우 프로그램에서 두 지점 모두에서 문자를 찾지 만 두 경우 모두 10 번째에 인쇄됩니다 자리.

나는이 사건에서 왜 열 번째와 일흔이어야하는지 알아 내려고하고있다.

# store string in variable 
solution = list('can you guess me') 
guess = raw_input('What letter do you guess on? ') 

# Search list 
def search(guess): 
    nothing = 0 
    for x in solution: 
     if x == guess: 
      print x, 
      print "is in ", 
      print solution.index(x) + 1 
      nothing = 1 

    if nothing == 0: 
     print "Couldn't find ", 
     print guess 

search(guess) 

과 같이 전자를 선택하는 경우 :

What letter do you think is in the answer? e 

프로그램은 출력합니다 : 내가 좋아하는 것

e is in 11 
e is in 11 

는 이유를 알고. :/

+0

[파이썬 - 왜이 함수는 공백을위한 인덱스를 반환하지 않습니까?] (http://stackoverflow.com/questions/18199949/python-why-is-this-function-not-returning-the -index-for-white-space) –

+0

문자열은 이미 파이썬에서 iterable입니다. 그것들을리스트 (첫 번째 라인)에 캐스팅 할 필요는없고,'.index()'는 문자열에서도 작동합니다. – zopieux

답변

2

solution.index(x)은 동일한 검색을 수행하지만 첫 번째로는이 반환됩니다. 곳에서 검색을 시작하는 solution.index()에게

for i, x in enumerate(solution): 
    if x == guess: 
     print x, 
     print "is in ", 
     print i + 1 
     nothing = 1 

다른 접근법은 다음과 같습니다

사용 enumerate() 대신 인덱스를 만들 수 있습니다. 예를 들어 당신이 인쇄 된 이전 위치 :

last = -1 
for x in solution: 
    if x == guess: 
     print x, 
     print "is in ", 
     last = solution.index(x, last) + 1 
     print last 
     nothing = 1 
+0

아, 기본적으로 모든 내장 함수에 대해 더 자세히 알아야합니다. 엄청 고마워! (이제는 'i, x in ...'수정이 의미하는 바를 알아야합니다.) – Bigge

+0

@Bigge :'enumerate()'는'(index, originalvalue)'튜플 시퀀스와 'i, x'는 * 목표 목록입니다. *; 파이썬은'for' 루프가 시퀀스의 다음 항목을 지정할 때 모든 튜플을이 두 이름으로 압축합니다. –

+0

@Bigge : 열거 형 (솔루션)에서'for index_value_pair '를 수행 한 다음'i = index_value_pair [0]'과'x = index_value_pair [1]'을 사용하면되지만 필요 이상으로 장황하다. –

3

방법이 방법에 대해 : 우리가 여기서하고있는 것은 솔루션을 통해 강화하고

solution = 'This is the solution' 

# Search list 
def search(guess): 
    return [i for i,x in enumerate(solution) if x == guess] 

guess = raw_input('Enter your guess: ') 
result = search(guess) 
if result: 
    positions = ','.join(str(i+1) for i in result) 
    print('{0} was found in positions {1}'.format(guess, positions)) 
else: 
    print('Sorry, {0} was not found!'.format(guess)) 

문자가 추측 일치하는 경우, 우리는 그 위치를 반환 . 일치하는 문자가 없으면이 메서드는 빈 목록을 반환합니다. falsey 값입니다.

그런 다음 메서드의 반환 값을 확인합니다. 목록 인 경우 목록 인덱스가 0부터 시작하기 때문에 위치에 1을 더한 다음이를 인쇄합니다.

관련 문제