Найти - Пользователи
Полная версия: Задачка
Начало » Python для новичков » Задачка
1
ArtemDav
Кирилл хочет выбирать из последовательности чисел те, которые удовлетворяют заданному условию и перемножить их.условие такое числа не должны входить в заданную окрестность (Включая границы).

ФОРМАТ ВВОДА: В первой строке через пробел записаны целые числа, которые требуются проанализировать . Во второй строке записаны два целых числа: центр и радиус окрестности.

Формат Вывода: Одно число - рузультат работы программы

Пример1: 1 2 3 4 5 6 7 8 9 10 -Enter- 5 2 -Enter- 1440 (ответ)
Пример2:1 3 5 7 9 11 13 17 19-Enter- 1 7 -Enter- 415701(ответ)

ПРИМЕЧАНИЕ: Где Enter это ввод.

Мой код:
 n = input().split()
n2 = input().split()
n_n = []
count = 0
value = 1
successfull = False
j = n_n
x = 1
for i in n:
    n_n.append(int(i))
for i in n_n:
    if int(n2) != i:
        count += 1
        value += 1
    else:
        j = n_n
        break
while True:
    if not successfull:
        while True:
            if int(n2) - n_n <= 0:
                if int(n2) != n_n:
                    n_n.remove(n_n)
                    value -= 1
                    count -= 1
                else:
                    break
            else:
                break
        while True:
            if int(n2) + n_n != n_n:
                n_n.remove(n_n)
                value += 1
            else:
                n_n.remove(n_n)])
                successfull = True
                break
    else:
        break
for i in n_n:
    x *= i
print(x)
# Если ввести числа из первого примера - все нормально пройдет, а со вторым проблема :(
PEHDOM
ArtemDav поместите код в теги:
 [code python][/code]
чтобы сохранилось форматирование
ArtemDav
PEHDOM
ArtemDav поместите код в теги:
Исправил
PEHDOM
ArtemDav
Исправил
неа
 ...
n_n = 
...
что такое n_n? я так понимаю пропали квадратные скобки и все что в них долно быть..
PEHDOM
также непонятно условие задачи , если выбирать те, которые удовлетворяют заданному условию и перемножить их. А числа не должны входить в заданную окрестность (Включая границы). то
Пример1: 1 2 3 4 5 6 7 8 9 -Enter- 5(центр) 2(“радиус”) получаем окрестность от 3 до 7 включительно , выходит 1*2*8*9 = 144 у вас же 1440
Пример2:1 3 5 7 9 11 13 17 -Enter- 1(центр) 7(“радиус”) , окрестность от -6 до 8, 9*11*13*17 = 21879 у вас же 415701
WTF? либо условие неправильное, либо ответ.
ArtemDav
PEHDOM
также непонятно условие задачи , если выбирать те, которые удовлетворяют заданному условию и перемножить их. А числа не должны входить в заданную окрестность (Включая границы). то Пример1: 1 2 3 4 5 6 7 8 9 -Enter- 5(центр) 2(“радиус”) получаем окрестность от 3 до 7 включительно , выходит 1*2*8*9 = 144 у вас же 1440 Пример2:1 3 5 7 9 11 13 17 -Enter- 1(центр) 7(“радиус”) , окрестность от -6 до 8, 9*11*13*17 = 21879 у вас же 415701WTF? либо условие неправильное, либо ответ.
Извиняюсь, мой косяк, не дописал просто. Можете пересмотреть?
PEHDOM
ArtemDav
Можете пересмотреть?
ну хоть чтото,но в любом случае там какаято ересь в коде, я не могу понять что вы делаете и для чего в практически эталонной задаче на произведение элементов массива, где нужно всегото добавить условие на невхождение
там решение на 10 строк кода.
 def lst_mult(num_list, cond):
    min_val = int(cond[0]) - int(cond[1]) # нижняя граница
    max_val = int(cond[0]) + int(cond[1]) # верхняя граница
    res = 1  # результат умножения
    for x in num_list:  # перебираем все элементы
        x = int(x) 
        if x < min_val or x > max_val:  # если х меньше нижней границы или больше верхней
            res *= x                               # умножаем результат на элемент списка
    return res
num_list = '1 2 3 4 5 6 7 8 9 10'.split()
cond = '5 2'.split()
print(lst_mult(num_list, cond))
num_list = '1 3 5 7 9 11 13 17 19'.split()
cond = '1 7'.split()
print(lst_mult(num_list, cond))
>>>
1440
415701
>>>
это “школьное” решение, если же использовать reduce из functools то там вообще можно уложиться в три-четыре строки
 def lst_mult(num_list, cond):
    num_lst = [int(x) for x in num_list]
    center, radius = [int(x) for x in cond]
    min_val, max_val = center - radius, center + radius
    return (reduce(lambda res, x: res*x, [x for x in num_lst if not min_val <= x <= max_val ], 1))
или даже в одну, но это уже чистой воды выпендреж, так как код становиться трудночиаемый
 lst_mult = lambda num_lst, cond: reduce(lambda res, x: res*x, [int(x) for x in num_lst if not (int(cond[0]) - int(cond[1])) <= int(x) <= (int(cond[0]) + int(cond[1])) ], 1)
ArtemDav
PEHDOM
\
Почему при вводе: 1 2 3 4 5 6 7 8 9 10 -Enter- 1 7 -> Я получаю не 720, а 90?
PEHDOM
ArtemDav
Почему при вводе: 1 2 3 4 5 6 7 8 9 10 -Enter- 1 7 -> Я получаю не 720, а 90?
потому что 1+7 = 8, по условию задачи числа не должны входить в заданную окрестность (Включая границы), тоесть 8 не входит, остаються 9 * 10 = 90
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