Программа не распознает условные операторы в цикле for - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь напечатать «Нет», если введенный пользователем ввод не найден в текстовом файле, который я создал.Он также должен печатать, если в текстовом файле есть строки, если слово (а) .

Моя проблема сейчас заключается в том, что он не выполняет оба условия.Если бы я удалил «line not in user_pass», он бы ничего не печатал.Я просто хочу, чтобы пользователь мог знать, найдены ли введенные пользователем строки в файле, и будет печатать эту строку или "нет", если она не найдена.

Я прокомментировал те, где пытался исправить свой код, но безрезультатно.

Мой код ниже:

def text_search(text):
try:
    filename = "words.txt"
    with open(filename) as search:
        print('\nWord(s) found in file: ')
        for line in search:        
            line = line.rstrip() 
            if 4 > len(line):
                continue
            if line.lower() in text.lower():
                print("\n" + line)
            # elif line not in text: # the function above will not work if this conditional commented out
            #     print("None")
            #     break

            # if line not in text:  # None will be printed so many times and line.lower in text.lower() conditional will not work
            #   print("none")

except OSError:
    print("ERROR: Cannot open file.")

text_search("information")

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Попробуйте это: -

def find_words_in_line(words,line):
    for word in words:
        if(word in line):
            return True;
    return False;

def text_search(text,case_insensitive=True):
    words = list(map(lambda x:x.strip(),text.split()));
    if(case_insensitive):
        text = text.lower();
    try:
        filename = 'words.txt'
        with open(filename) as search:
            found = False;
            for line in search:
                line = line.strip();
                if(find_words_in_line(words,line)):
                    print(line);
                    found = True;
            if(not found):
                print(None);
    except:
        print('File not found');

text_search('information');

Не совсем понял ваш код, поэтому я сделал его самостоятельно в соответствии с вашими требованиями.

0 голосов
/ 28 февраля 2019

Я думаю, вам нужно изменить for line in search: на for line in search.readlines(): Я не думаю, что вы когда-либо читали из файла ... Вы пытались просто print(line) и убедиться, что ваша программа вообще что-нибудь читает?

@ EDIT

Вот как я мог бы подойти к этой проблеме:

def text_search(text):
    word_found = False
    filename = "words.txt"
    try:
        with open(filename) as file:
            file_by_line = file.readlines() # returns a list
    except OSError:
        print("ERROR: Cannot open file.")
    print(file_by_line) # lets you know you read the data correctly
    for line in file_by_line:        
        line = line.rstrip() 
        if 4 > len(line):
            continue
        if line.lower() in text.lower():
            word_found = True
            print("\n" + line)
    if word_found is False:
        print("Could not find that word in the file")

text_search("information")

Мне нравится этот подход, потому что

  1. Понятно, где вы читаете файл и присваиваете его переменной
  2. Затем эта переменная печатается, что полезно для отладки
  3. Меньше материала содержится в предложении try: (Мне нравится не скрывать свои ошибки, но это не так уж и важно, потому что вы хорошо поработали, указав OSError, однако, что если OSError произошло во время line = line.rstrip() по какой-то причине ... вы никогда не узнаете !!) Если бы это помогло, я был бы признателен, если бы вы нажали эту зеленую галочку:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...