#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