Форум » Логические выражения » ege15 №105 » Ответить

ege15 №105

s11kai: Здравствуйте, Константин Юрьевич. Подскажите пожалуйста, в чем ошибка, у меня получается 26, а в ответе 25 [pre2] P = set(range(44, 49+1)) Q = set range(28, 53+1)) A = set() for x in range(28,53+1): if (((x in A) <= (x in P)) or (x in Q)) == False: A.add(x) print(A) print(len([x for x in A])) [/pre2]

Ответов - 3

polyakovss: Здравствуйте, s11kai! В ДАННОМ случае len([x for x in A]) определяет не длину отрезка А, а количество точек с целочисленными координатами на этом отрезке. Длина отрезка будет на 1 меньше. Замечание: if (((x in A) <= (x in P)) or (x in Q)) == True:

Поляков: s11kai пишет: в чем ошибка, у меня получается 26, а в ответе 25 Здравствуйте! Я бы не рекомендовал использовать такой подход при решении задач на отрезки. Причину точно указал Сергей Сергеевич выше. Чтобы формально получить правильный результат, можно провести масштабирование: [pre2] K = 100 P = set(range(44*K, 49*K+1)) Q = set(range(28*K, 53*K+1)) U = set(range(100*K)) A = U.copy() for x in U: if (((x in A) <= (x in P)) or (x in Q)) == False: A.remove(x) # print(A) print( len([x for x in A])/K )[/pre2] Программа выведет ответ 25,01.

s11kai: Понятно, что конкретную задачу вручную решить проще, но хочется иметь программный вариант для проверки, а опыт работы с питоном отсутствует, поэтому спасибо и за анализ ошибки и за формальный способ ее программного устранения.




полная версия страницы