Проверьте, совпадают ли имена в файле с помощью python

#python

Вопрос:

Я пытаюсь проверить NameList , совпадают ли имена в файле примера John abree , если это так, то он печатает все имена, соответствующие именам в файле примера, например Hello John Hello abree

 NameList = ['John', 'abree', 'acacia']
def names(z):
    with open('example.txt') as file:
        for x in range(1, 3):
            if z == str(NameList[x]) in file.read():
                    print("yes")
                    result = r'Its {names[z]}'


print(names('John'))
Result = f'Hello {names("John")}'
Result = f'Hello {names("abree")}'
 

на выходе получается

 Its None
Its None
 

Как мне это исправить?
Я знаю, что это что-то трудное для понимания, но это просто тест для другого сценария

Комментарии:

1. В функции нет оператора return, вам нужно его добавить.

2.По вашим собственным словам, каким должен быть результат names('John') ? Когда вы это сделаете print(names('John')) , что вы ожидаете напечатать с помощью этого вызова печати, а не само по names себе?

3. @KarlKnechtel Слова в names функции должны быть напечатаны с такими названиями, как это Hello It's John или Hello It's abree

4. Это вообще не отвечает на мой вопрос. Вы понимаете, что значит для функции возвращать значение ? Вы понимаете, что значит говорить о результате функции? Я не говорю о том, чтобы что-то печатать.

5. У меня нет прямого ответа для вас, но вот некоторые проблемы с потоком программ, которые вам нужно исправить: Вам нужно уточнить, что пытается сделать ваша функция. Вернется ли он True , если имя есть в файле? Как упоминалось другими комментаторами, для того, чтобы функция возвращала значение, вам необходимо использовать return оператор. Для вашего кода вы пытаетесь прочитать весь файл 2 раза (не 3, диапазон(1, 3) составляет только от 1 до 2). При втором звонке вы read() получите пустую строку. Массивы в Python основаны на нуле.

Ответ №1:

Я прокомментировал и подумал о выражениях в вашем коде, и это заставило меня почесать затылок. Выражение:

z == str(NameList[x]) in file.read()

Действительно сбивает меня с толку относительно его намерений. Каким-то образом у вас есть список имен, и вы проверяете только его последние 2 записи. Затем у вас есть in оператор для всего содержимого файла. Вы говорите, что хотели напечатать все имена, которые появляются в файле. Но если это так, то способ, которым вы используете функцию, также неверен.

Это моя попытка понять ваш вопрос и увидеть, что у вас было.

Я думаю, что ты хотел сделать что-то вроде этого.

 NameList = ['John', 'abree', 'acacia']

def names(in_list):
    with open('example.txt') as file:
        content = file.read():
    for name in in_list:
        if name in content:
            print(f'Hello {name}')


names(NameList)

Hello John
Hello abree