Найти - Пользователи
Полная версия: Правильно поставить условие
Начало » Центр помощи » Правильно поставить условие
1 2
elisk
Чуть короче:
objects = [1, 0, 50, 11, "Чтото", True, False, 0, 1,1, 50,1,1,1,0,0,0,
           2,2,2,2,2,2,2,2,2,2,2,2,2,True]
z = 1
count = 0   
for i in objects:
	for j in objects[z:]:
		if i is j:
			count += 1
			break
	z+=1
print(len(objects) - count)
JOHN_16
Вообще можно и так
>>> objects = [1, 0, 50, 11, "Чтото", True, False, 1, 0]
>>> len(set(map(id, objects)))
7
Lestoroer
JOHN_16
Вообще можно и так
Ну ты прям нас затроллил
osipbananov
Lestoroer
Да примерно так, но можно короче, завтра напишу свое решение, сегодня компа под рукой нет.
Vlad_Ki
JOHN_16
Вообще можно и так

>>> objects =
>>> len(set(map(id, objects)))
7


Прям шикарно!)
Впечатлил)
ZerG
JOHN_16
Вообще можно и так
Месье знает толк в извращениях
Zodt
Ребят, ну Вы что? Задачка простейшая! Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы. Самый простой, и правильный, вариант решения этой задачи - преобразование в множество, а затем просто вывести длину множествa, а то есть len(set(a)). Теперь о самой задаче: уж поверьте на слово, смысловой нагрузки у этой задачи не просто крайне мало, ее вообще практически нет! К тому же, сама постановка задачи нарушает одну из директив самого языка - простоту! В реальной жизни никому в принципе не придет в голову добиваться результата через такие костыли!

a = [1, 0, 50, 11, "Что-то", True, False, 1, 0]
print(len(set(a)))

scidam
Да, задачка, конечно, интересная, вообще говоря, достаточно глубокая!
Если обязательно нужно использовать оператор сравниня `is`, то есть ее элегантное решение (от JOHN_16).
Но, вот, рассмотрим пример:
 >>> a = [1,1,2,2,3, 10**2, 100]
>>> len(set(map(id,a)))
4
>>> a = [1,1,2,2,3, 100**2, 10000]
>>> len(set(map(id,a)))
5
Все правильно, для сравнения используется `is`, но того ли хотел автор задачи, ведь 100**2 is 10000 == False, но 10 **2 is 100 == True, и вот, мы уже на пороге анализа “внутренней” работы Python'а ….
JOHN_16
Zodt
Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы.
не правда:
 >>> id(True)
4306851104
>>> id(1)
4307228720
>>> True is 1
False
Если мы говорим об объектах, то питон прекрасно отличает True от 1. Вы же путаете то как питон может работать с этими типами объектов, например:
 >>> [bool(x) for x in (True, 1, False, 0, 123)]
[True, True, False, False, True]
>>> True + 1
2
>>> False + 1
1
>>> [int(x) for x in (True, False)]
[1, 0]
Ну а вот, собственно, иерархия классов, которая расставляет все по местам:
 >>> True.__class__.__mro__
(<class 'bool'>, <class 'int'>, <class 'object'>)
>>> int(1).__class__.__mro__
(<class 'int'>, <class 'object'>)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB