我有一个程序,要求输入一个句子,然后要求一个单词,并告诉你该单词的位置:
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")
但是当我编辑它时,我无法让程序正常工作,如果输入的单词不在句子中,那么打印“这不在句子中”
答案 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.