2016-06-09 1 views
-2

사용자가 문장에 입력하는 단어의 위치를 ​​찾는 코드를 작성했습니다. 그러나 그들이 단어를 입력 한 후에 나는 위치를 찾고 그것을 인쇄하고 그곳에서 멈추도록 코드가 필요합니다. 그러나 그것은 멈추지 않고 대신 else 문으로 이어집니다. else 문은 문장에없는 단어를 입력하면 발생합니다. 만약 내가 break를 사용한다면, 단어가 문장에서 두 번 이상 나타나면 단어의 첫 번째 위치 만 인쇄합니다. 어떻게해야합니까?for 루프를 중단해야하지만 휴식은 작동하지 않습니다.

sentence = "ask not what your country can do for you ask what you can do for your country" 
print(sentence) 
keyword = input("Input a keyword from the sentence: ").lower() 
words = sentence.split(' ') 

for i, word in enumerate(words): 
    if keyword == word: 
     print("The position of %s in the sentence is %s" % (keyword,i+1)) 


if keyword != word: 
    keyword2 = input("That was an invalid input. Please enter a word that is in the sentence: ").lower() 
    words = sentence.split(' ') 
    for i, word in enumerate(words): 
     if keyword2 == word: 
      print("The position of %s is %s" % (keyword2,i+1)) 
+0

단어가 두 번 이상 나타나는 경우 단어의 각 위치를 원하십니까? – Doshmajhan

+0

조건이 만족되면'break' 명령을 사용하십시오. – user590028

+0

그냥 함수에 포장하고 값을 찾으면 반환 할 수 있습니다. 그런 다음 함수를 호출 할 때 반환 된 값을 인쇄하십시오. 그렇게하면 코드를 다시 코딩하지 않고도 다른 인스턴스에서 다시 사용할 수 있습니다. :) – codykochmann

답변

1

모든 색인을 먼저 가져온 다음 일치하는 색인이없는 경우에만 두 번째 기능을 수행 할 수 있습니다. 당신은 단지 하나의 단계를 사용할 수 있도록

indexes = [i for i, word in enumerate(words) if word == keyword] 
if indexes: 
    for i in indexes: 
     print('The position is {}'.format(i)) 

if not indexes: 
    ... 

또한 while 루프를 사용할 수 있습니다.

keyword = input("Please enter a word that is in the sentence: ").lower() 
indexes = [i for i, word in enumerate(words) if word == keyword] 
while not indexes: 
    keyword = input("That was an invalid input. Please enter a word that is in the sentence: ").lower() 
    indexes = [i for i, word in enumerate(words) if word == keyword] 

for i in indexes: 
    print('The position is {}'.format(i)) 
+0

도움을 주셔서 감사합니다. while 루프 예제에 대한 질문이 있습니다. 실제로 문제를 해결하는 방법을 알고 싶습니다. 두 위치를 모두 인쇄 한 다음 오류 메시지를 인쇄하기 전에 어떻게 멈추는가하는 문제와 같습니다. 목록 이해의 목적은 무엇입니까? – user6287713

+0

유일한 오류 조건은 제공된 키워드가 단어 목록에없는 경우입니다. 목록 이해는 제공된 키워드에 대한 문장에서 일치하는 모든 색인의 목록을 가져옵니다. 목록 작성에서 생성 된 목록이 비어 있으면 키워드가 어떤 단어와도 일치하지 않으므로 사용자가 다른 키워드를 입력하도록 다시 프롬프트해야합니다. 키워드가 적어도 하나의 인덱스와 일치하면'index'는'True'로 평가하고'while' 루프를 벗어납니다. 그런 다음 모든 일치하는 색인을 인쇄합니다. –

+0

네가 생명의 은인이되어 주셔서 감사합니다. 더블 엑스 – user6287713

관련 문제