当单词不在句子

时间:2016-09-19 18:25:36

标签: python python-3.x words enumerate sentence

我有一个程序,要求输入一个句子,然后要求一个单词,并告诉你该单词的位置:

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")

但是当我编辑它时,我无法让程序正常工作,如果输入的单词不在句子中,那么打印“这不在句子中”

2 个答案:

答案 0 :(得分: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.")

答案 1 :(得分:3)

Jim的答案 - 将askedword in words的测试与对words.index(askedword)的调用结合起来 - 是我认为最好和最恐怖的方法。

同一方法的另一个变体是使用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.