2016-09-19 1 views
1

У меня есть программа, которая запрашивает ввод предложения, затем запрашивает слово и сообщает вам позицию этого слова:Невозможно получить программу для печати «не в предложении», когда слово не в предложении

sentence = input("enter sentence: ").lower() 
askedword = input("enter word to locate position: ").lower() 
words = sentence.split(" ") 

for i, word in enumerate(words): 
    if askedword == word : 
      print(i+1) 
    #elif keyword != words : 
     #print ("this not") 

Однако я не могу получить программу для правильной работы, когда я изменить его, чтобы сказать, что если входное слово не в предложении, а затем распечатать «это не в предложении»

ответ

5

Списки являются последовательности, как и например, вы можете использовать the in operation для проверки на членство в списке words. Если внутри, найти положение внутри предложения с words.index:

sentence = input("enter sentence: ").lower() 
askedword = input("enter word to locate position: ").lower() 
words = sentence.split(" ") 

if askedword in words: 
    print('Position of word: ', words.index(askedword)) 
else: 
    print("Word is not in the given sentence.") 

С вводом образца:

enter sentence: hello world 

enter word to locate position: world 
Position of word: 1 

и ложный случай:

enter sentence: hello world 

enter word to locate position: worldz 
Word is not in the given sentence. 

Если вы хотите, чтобы проверить против множественных совпадений, то способ определения списка с enumerate - это путь:

r = [i for i, j in enumerate(words, start=1) if j == askedword] 

Затем проверить ли этот список пуст или нет и печати соответственно:

if r: 
    print("Positions of word:", *r) 
else: 
    print("Word is not in the given sentence.") 
+0

это только находит первый раз, когда слово присутствует в предложении, например, если я вводил предложение собака, сидящая на собаке, его должно было появиться с 1 и 5, так или иначе я могу это сделать? – Dummy8123

+0

@ Dummy8123 Право, ни один из ответов, по-видимому, не попал на вас, вы хотели проверить наличие нескольких явлений, я обновил свой ответ, чтобы ответить на этот вопрос. –

3

Джим ответ комбинирование тест на askedword in words с вызовом words.index(askedword) -is самый лучший и самый Pythonic подход, на мой взгляд.

Еще один вариант того же подхода состоит в том, чтобы использовать try - except:

try: 
    print(words.index(askedword) + 1) 
except ValueError: 
    print("word not in sentence") 

Однако, я просто подумал, что я бы указать на то, что структура кода OP выглядит, как вы, возможно, были попытки принять следующий шаблон, который также работает:

for i, word in enumerate(words): 
    if askedword == word : 
     print(i+1) 
     break 
else: # triggered if the loop runs out without breaking 
    print ("word not in sentence") 

в необычной изюминкой отсутствует в большинстве других языков программирования, это else связывается с петлей for, а не к if (правильно, отруби свои руки от моих отступов). See the python.org documentation here.

+0

Я попробовал попытку и, кроме одного, однако, похоже, что он выводит первую локализацию – Dummy8123

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