2016-06-09 3 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

Единственным условием ошибки является то, что предоставленное ключевое слово отсутствует в списке слов. Понимание списка получает список всех совпадающих индексов в предложении для предоставленного ключевого слова. Если список, созданный из понимания этого списка, пуст, ключевое слово не соответствует никаким словам, и вам нужно повторно пригласить пользователя ввести другое ключевое слово. Когда ключевое слово соответствует хотя бы одному индексу, 'indexes' будет оценивать значение' True' и вызывать его из цикла 'while'. Затем он распечатает все соответствующие индексы. –

+0

Большое вам спасибо, что вы спасатель! хх – user6287713

Смежные вопросы