2016-06-09 45 views
-2

我已经写了一些代码,可以找到用户在一个句子中输入的单词的位置。但是,在他们输入词语后,我需要找到该位置的代码并打印出来,然后停在那里。但它不会停止,而是继续到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

唯一的错误条件是如果提供的关键字不在单词列表中。列表理解获取提供的关键字句子中所有匹配索引的列表。如果从列表理解产生的列表为空,那么关键字不匹配任何单词,并且您需要重新提示用户输入另一个关键字。一旦关键字与至少一个索引匹配,“索引”将评估为“真”,并使其突破“while”循环。然后它会打印所有匹配的索引。 –

+0

非常感谢你,你是一个救星! XX – user6287713