Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Где недочёт в коде?

Заметки бывшего главреда Мудрец (15572), на голосовании 1 месяц назад
Код рабочий, но не во всех случаях:
 from math import sqrt 
a, b, c, d = map(float, input().split())
D = b**2 - 4*a*(c-d)
if D < 0:
print('NO')
else:
x1 = (-b + sqrt(D))/(2*a)
x2 = (-b - sqrt(D))/(2*a)
x1 = int(x1)
x2 = int(x2)
if x1 == x2:
print(x1)
else:
print(min(x1, x2), max(x1, x2))
я уж и импорт модуля добавил (грешил на неточность при вычислении степени), но всё равно где-то косяк
Голосование за лучший ответ
меньше чем три Просветленный (20051) 2 месяца назад
что не символ, то недочет
Заметки бывшего главредаМудрец (15572) 2 месяца назад
В целом он рабочий.
Кент Искусственный Интеллект (111015) 2 месяца назад
В этом коде ошибка

from math import sqrt
a, b, c, d = map(float, input().split(","))
Гнездо Соловья Гуру (2528) 2 месяца назад
Почему нельзя было сразу написать
Х1 = int(-b + sqrt...)
Заметки бывшего главредаМудрец (15572) 2 месяца назад
Потому что по какой-то причине не сработало. Я пробовал.
Вопрос не об этом.
Celtic Hammer Мудрец (15908) 2 месяца назад
Подсчитываешь дискриминант квадратных уравнений? А зачем нужны подобные деяния редакторам "Сельской правды"?
Заметки бывшего главредаМудрец (15572) 2 месяца назад
Вычисляет корни квадратных уравнений. Зачем моим коллегам из "Сельское правды" это может понадобиться, понятия не имею.
Юрий Семыкин Искусственный Интеллект (200741) 2 месяца назад
Сравнение на равенство действительных чисел и есть недочёт. Сравнивать целесообразно дискриминант, но не на равенство, а на близость к нулю.
Заметки бывшего главредаМудрец (15572) 2 месяца назад
Поясните, не вкуриваю.
Юрий Семыкин Искусственный Интеллект (200741) Заметки сельского главреда, действительные числа, которые теоретически должны быть равны, при машинном вычислении, равны не будут в большинстве случаев из-за погрешности вычисления. Хоть на 1 в последнем разряде.
Заметки бывшего главредаМудрец (15572) 2 месяца назад
Тоже самое, что и в примере выше:
 from math import sqrt  
a, b, c, d = map(float, input().split())
D = b**2 - 4*a*(c-d)
if D < 0:
print('NO')
else:
x1 = (-b + sqrt(D))/(2*a)
x2 = (-b - sqrt(D))/(2*a)
if x1 == x2:
print(x1)
else:
print(int(min(x1, x2)), int(max(x1, x2)))
Sergio 2.1 Оракул (63896) 2 месяца назад
 from math import sqrt 

a, b, c, d = map(float, input().split())

if a == 0:
if b == 0:
print('NO' if c != d else 'INF')
else:
x = (d - c) / b
print(f'{x:.5f}')
else:
D = b**2 - 4*a*(c-d)
if D < 0:
print('NO')
else:
x1 = (-b + sqrt(D)) / (2*a)
x2 = (-b - sqrt(D)) / (2*a)
if abs(x1 - x2) < 1e-9: # Проверка на равенство с учетом погрешности
print(f'{x1:.5f}')
else:
print(f'{min(x1, x2):.5f} {max(x1, x2):.5f}')
Заметки бывшего главредаМудрец (15572) 2 месяца назад
Можно проще сказать? Как отвечатер выше? Но он, увы, не все варианты из-за чего подтормаживает решение, указал.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (258841) 2 месяца назад
еще вариант
 from math import sqrt 

def solve_quadratic(a, b, delta):
D = b**2 - 4*a*delta
roots = []
if D > 0:
sqrt_D = sqrt(D)
roots = [(-b + sqrt_D) / (2 * a), (-b - sqrt_D) / (2 * a)]
elif D == 0:
roots = [-b / (2 * a)]
return [int(x) for x in roots if x.is_integer()]

def solve_linear(b, delta):
if b == 0:
return ['INF'] if delta == 0 else []
x = -delta / b
return [int(x)] if x.is_integer() else []

def main():
a, b, c, d = map(float, input().split())
delta = c - d

result = (
solve_linear(b, delta) if a == 0 else
solve_quadratic(a, b, delta)
)

print('NO' if not result else ' '.join(map(str, result)))

if __name__ == "__main__":
main()
Помощник PYTHON Профи (607) 2 месяца назад
Привет! В вашем коде есть недочет в строке, где вы пытаетесь использовать символ "&lt;". Вместо этого вам следует использовать символ "<" для сравнения значения D с нулем. Вот исправленный код:

 from math import sqrt

a, b, c, d = map(float, input().split())
D = b**2 - 4*a*(c-d)

if D < 0:
print('NO')
else:
x1 = (-b + sqrt(D))/(2*a)
x2 = (-b - sqrt(D))/(2*a)
x1 = int(x1)
x2 = int(x2)

if x1 == x2:
print(x1)
else:
print(min(x1, x2), max(x1, x2))
```

Теперь ваш код должен работать правильно во всех случаях. Надеюсь, это поможет вам! Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.
Celtic HammerМудрец (15908) 2 месяца назад
Твоя нейросеть бредит. Там нет никакого "&lt;"
Похожие вопросы