Вы присваиваете две переменные (socks
и pairs
) в этой строке:
socks,pairs = Counter(map(int,input().strip().split())),0
Если вы опустите ,0
, это похоже на запись:
socks = Counter(map(int,input().strip().split()))
pairs =
[ 117] Отсюда и ошибка.
Это:
socks, pairs = Counter(map(int,input().strip().split())), 0
означает:
(socks, pairs) = (Counter(map(int,input().strip().split())), 0)
Это как если бы вы написали:
socks = Counter(map(int,input().strip().split()))
pairs = 0
Разница в том, что правая сторона полностью оценена до назначения, но это не имеет значения здесь
Но размеры кортежей должны совпадать. Когда вы опускаете ,0
, оно становится:
(socks, pairs) = (Counter(map(int,input().strip().split())), )
Как видите, размеры не совпадают. Это то, что вызывает проблему.
Это называется назначением кортежей. например, если вы хотите инициировать две переменные x и y и назначить для них два значения a и b, вы можете сделать это следующим образом:
x = a
y = b
или просто:
x, y = a, b
в этом случае первое значение «a» будет назначено первой переменной «x», а второе значение «b» будет назначено второй переменной «y». В этом очень полезно поменять два значения без использования временной переменной следующим образом: x, y = y, x
в вашем случае вы инициируете две переменные: носки и пары, поэтому за ними должны следовать два значения , В вашем случае:
socks = Counter(map(int, input().strip().split()))
pairs = 0
Итак, совершенно очевидно, что вы не можете присвоить одно значение двум переменным. так что вы не можете удалить 0 (начальное значение пар), которое является зарезервированной переменной для накопления во время цикла.