Python — пересечение множеств возвращает только первое значение

#python #set #set-intersection

#python #установить #set-пересечение

Вопрос:

Если я ввожу три имени (Rolf, Charlie, Mike), friends_nearby_set intersection возвращает только первый ввод (Rolf).

Если я ввожу (Charlie, Rolf, Mike), friends_nearby_set intersection возвращается только (Charlie).

Ожидаемый результат от friends_nearby_set intersection должен быть (Rolf, Charlie).

Авторский код возвращает правильное значение в видеоуроке, который я смотрю. Но по какой-то причине для меня это не возвращает правильное пересечение. Любое объяснение?

 friends = input('Enter three friends name, separated by commas (no spaces, please): ').split(',')

people = open('people.txt', 'r')
people_nearby = [line.strip() for line in people.readlines()]

people.close()

friends_set = set(friends)
people_nearby_set = set(people_nearby)

friends_nearby_set = friends_set.intersection(people_nearby_set)

nearby_friends_file = open('nearby_friends.txt', 'w')

for friend in friends_nearby_set:
    print(f'{friend} is nearby! Meet up with them.')
    nearby_friends_file.write(f'{friend}n')

nearby_friends_file.close()
  

Вот скриншот во время отладки.

отладка

Ответ №1:

Ниже приведен результат, прежде чем вводить имена, введите имена трех друзей, разделенные запятыми (без пробелов, пожалуйста)

наборы Python могут быть чувствительны к регистру попробуйте убрать пробел между запятой и следующим именем вот пример

 set_1 = {'Rolf', ' Charlie'}
set_2 = {'Rolf', 'Charlie'}

print(set_1.intersection(set_2))
  

вывод

 {'Rolf'}
  

не {'Rolf', 'Charlie'} потому что в первом раньше было пробел. поэтому обратите внимание, когда вы вводите имена, вводите их как Rolf,Charlie,Mike

а также попробуйте удалить лишние пробелы до и после ввода, как показано ниже

 friends = input('Enter three friends name, separated by commas (no spaces, please): ').strip().split(',')
  

И я видел здесь, как вы пишете, может быть источником ошибки для
просто откройте файл в режиме добавления вместо режима записи

nearby_friends_file = open('nearby_friends.txt', 'w')

Для

nearby_friends_file = open('nearby_friends.txt', 'a')

потому что w перезапишет файл, в то время как a будет добавляться в файл