Моя проблема заключается в следующем:

def searchWordlist():
path = str(raw_input(PATH))
word = str(raw_input(WORD))
with open(path) as f:
    for line in f:
        if word in line:
            print "Word found"

Чем я добавил следующий код:

else:
    print "Word not found"

Но это, очевидно, не может работать, потому что будет печатать «Слово не найдено», пока слово не будет найдено. Ну .. а как мне распечатать что слово не найдено ?! Я не знаю.

Заранее спасибо!

2
Lucas 12 Дек 2016 в 21:56

5 ответов

Лучший ответ
def searchWordlist():    
    path = str(raw_input(PATH))
    word = str(raw_input(WORD))
    loc = -1
    with open(path) as f:
        for i, line in enumerate(f):
            if word in line:
                loc = i
                break
    if loc >= 0:
        print ("Word found at line {}".format(loc))
    else:
        print ("Word not found")

В качестве бонуса, это отслеживает, где в файле слово впервые увидено, если вообще.

1
Patrick Haugh 12 Дек 2016 в 19:00

У Python есть специальный прием для такого рода вещей:

for line in f:
    if word in line:
        print "Word found"
        break
else:
    print "Word not found"

Здесь else идет вместе с for и, в частности, выполняется, если цикл завершается нормально, не нажимая break.

4
Alex Hall 12 Дек 2016 в 19:25

Если все, что вам нужно, это напечатать, найден ли word в одной из строк:

def searchWordlist():    
    path = str(raw_input(PATH))
    word = str(raw_input(WORD))
    with open(path) as f:
        if any(word in line for line in f):
            print('Word found')
        else:
            print('Word not found')
3
user1501961 12 Дек 2016 в 19:12
def searchWordlist():
    found_word = False
    path = str(raw_input(PATH))
    word = str(raw_input(WORD))
    with open(path) as f:
        for line in f:
            if word in line:
                print "Word found"
                found_word = True
    if not found_word:
        print "Word not found!"

Этот код выполняет ваш код как обычно, за исключением того, что, если он находит слово, он устанавливает логическое значение в true, означающее, что он нашел слово. Затем, после полного анализа файла, он видит, было ли найдено слово, если переменная равна true. Если слово не было найдено, то печатается, что слово не было найдено. Если вы хотите, чтобы код останавливался после того, как слово было найдено впервые, но break после found_word = True.

0
Comrade SparklePony 12 Дек 2016 в 20:01

Вы можете заставить свою функцию возвращаться, как только она найдет слово, если вам нужно только найти первое вхождение. Это имеет дополнительный бонус: нет необходимости перебирать весь файл, если в этом нет необходимости.

def searchWordlist():
  path = str(raw_input(PATH))
  word = str(raw_input(WORD))
  with open(path) as f:
    for line in f:
      if word in line:
        print "Word found"
        return 1
  print "Word not found"
  return 0
1
Marsenau 12 Дек 2016 в 19:16