Cześć, próbowałem znaleźć ilość liczb, które występują na obu wejściach użytkownika

Na przykład:

s1 = set(input())
s2 = set(input())


setlist = (s1.intersection(s2))
setlist.discard(" ")
print(len(setlist))

Gdy użytkownik wprowadzi: s1: 1 2 6 8 4 5 7 s2: 10 2 3 4 8

Ten kod da odpowiedź 3, jednak w obu zestawach występują 2 liczby.

Problem polega na tym, że traktuje 10 niezależnie jako 1 i 0, a nie tylko 10.

Czy ktoś może mi pomóc w napisaniu właściwego kodu?

Dziękuję Ci!

0
programming student 2 kwiecień 2020, 15:35

4 odpowiedzi

Najlepsza odpowiedź

Twoja pierwsza linia:

s1 = set(input())

Tworzy zestaw przez iterację na łańcuchu zwróconym przez input, to znaczy, wykonuje iterację na jego znakach:

>>> set('1 2 34')
{'3', '2', '1', '4', ' '}

Chcesz najpierw zbudować listę liczb z danych wejściowych, dzieląc ciąg i konwertując części na liczby całkowite:

i1 = input('Enter first list of numbers separated by spaces: ')
numbers1 = [int(num) for num in i1.split()]
s1 = set(numbers1)

Lub bezpośrednio:

s1 = set(int(num) for num in i1.split())

I wszystko będzie dobrze.

1
Thierry Lathuille 2 kwiecień 2020, 13:10
s1 = {1, 2, 6, 4, 5, 7}
s2 = {10, 2, 3, 4, 8}

setlist = (s1.intersection(s2))
print(len(setlist))
0
Boseong Choi 2 kwiecień 2020, 14:54

Ponieważ jeśli otrzymujesz serię znaków, gdy traktujesz ciąg jako iterowalny.
Jeśli chcesz ustrukturyzowaną iterację dla ciągu znaków, powinieneś to zrobić ręcznie.
Wprowadzone dane są oddzielone pojedynczą spacją ( ), więc możesz je po prostu podzielić:

input().split()

Więc odpowiedz na swoją sytuację:

s1 = set(input().split(' '))
s2 = set(input().split(' '))

setlist = (s1.intersection(s2))
setlist.discard(" ")
print(len(setlist))

Wejście i wyjście:

1 2 6 8 4 5 7
10 2 3 4 8
3

Powielają się trzy wartości (2, 4, 8).

0
Boseong Choi 2 kwiecień 2020, 13:13

Elementy w zestawie należy podzielić przecinkami. A więc powinno być:

s1 = {1, 2, 6, 4, 5, 7}
s2 = {10, 2, 3, 4, 8}

Wtedy wszystko powinno działać

0
Oleg Ivanytskyi 2 kwiecień 2020, 12:41