Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/193: Рейтинг темы: голосов - 193, средняя оценка - 4.64
-16 / 3 / 0
Регистрация: 15.12.2018
Сообщений: 82

Уравнения степени не выше второй — часть 2

09.02.2019, 17:04. Показов 41738. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделайте функцию solve(*coefficients), которая умеет решать уравнения степени не выше второй (квадратные и линейные).

Если у функции три аргумента, их надо трактовать как a, b и c в уравнении ax2+bx+c=0.
Если два — как коэффициенты b и c в уравнении bx+c=0.
Если один — как коэффициент c в уравнении c = 0.
Если список коэффициентов пуст или коэффициентов больше трёх, то функция должна вернуть None.
Значения корней возвращайте в том же виде, как их возвращала функция roots_of_quadratic_equation(a,b,c) из задачи «Уравнения степени не выше второй» Для решения можно как переписать ту функцию, так и использовать её внутри новой функции.

Пример 1
Ввод
print(sorted(solve(1, 2, 1)))
Вывод
[-1.0]
Пример 2
Ввод
print(sorted(solve(1, -3, 2)))
Вывод
[1.0, 2.0]


вот код и я что-то не понимаю где я накосячил с ним, помогите пожалуйста исправить код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def roots_of_quadratic_equation(*k):
    a, b, c = k[0], k[1], k[2]
    D = b ** 2 - 4 * a * c  # дискриминант
    x1 = (-b + D ** 0.5) / (2 * a)  # первый корень
    x2 = (-b - D ** 0.5) / (2 * a)  # второй корень
 
    return x1, x2
 
 
def solve(*coeffs):
    if len(coeffs) == 3:
        return roots_of_quadratic_equation(*coeffs)
    elif len(coeffs) == 2:
        b, c = coeffs[0], coeffs[1]
        return -c / b
    else:
        return 0
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2019, 17:04
Ответы с готовыми решениями:

Уравнения степени не выше второй — часть 2
Сделайте функцию solve(*coefficients), которая умеет решать уравнения степени не выше второй (квадратные и линейные). Если у функции...

Уравнения степени не выше второй — часть 3
Напишите программу, которая запрашивает у пользователя строку с коэффициентами уравнения (степени не выше второй), затем печатает корни...

Уравнения степени не выше второй
Напишите функцию roots_of_quadratic_equation(a,b,c), которая принимает параметры a,b,c и возвращает решения уравнения ax2 + bx + c = 0. ...

8
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.02.2019, 18:43
Kalet,

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def find_root_of_equation(k):
    if len(k) == 3:
        roots_of_quadratic_equation(k)
    elif len(k) == 2:
        roots_of_linear_equation(k)
    elif len(k) == 1:
        print(k[0])
    else:
        print(None)
    
def roots_of_quadratic_equation(k):
    a, b, c = k[0], k[1], k[2]
    if a != 0:
        D = b ** 2 - 4 * a * c  # дискриминант
        if D > 0:
            x1 = (-b + D ** 0.5) / (2 * a)  # первый корень
            x2 = (-b - D ** 0.5) / (2 * a)  # второй корень
            print(x1, x2)
        elif D == 0:
            x = -b / (2 * a)
            print(x)
        else:
            print("Дискриминант менше нуля")
    else:
        print("Передайте ненулевое значние a")
    
def roots_of_linear_equation(k):
    b, c = k[0], k[1]
    if b != 0:
        print(-c/b)
    else:
      print("Деление на 0 запрещено")
    
res = find_root_of_equation([2, 8, 6])
res = find_root_of_equation([0, 4, 6])
res = find_root_of_equation([2, 0, 0])
res = find_root_of_equation([2, 4, 6])
print()
res = find_root_of_equation([8, 6])
res = find_root_of_equation([0, 6])
print()
res = find_root_of_equation([1])
print()
res = find_root_of_equation([1, 2, 3, 4])
Можешь оптимизировать, проверяя сначала значения из списка и затем кидая его на соответствующую функцию, проверяя, подаются ли числа на вход (или может, строки?), заменив print'ы на return'ы. Но это уже сам. Я логику тебе подсказал верную.
1
-16 / 3 / 0
Регистрация: 15.12.2018
Сообщений: 82
09.02.2019, 19:18  [ТС]
То есть, мой код неверный? Ибо из 17 в 44 строки превратилось, а ошибка то у меня в том, что Ввод
print(sorted(solve(1, 2, 1)))
Ожидаемый результат
[-1.0]
Вывод
[-1.0, -1.0]
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.02.2019, 19:31
Kalet, для начала почитай, что такое дискриминант)
и что такое ZeroDivisionError. Также о try/except загугли.
Не знаю, я особо в твой код не вникал. Мне хватило только на определение дискриминанта посмотреть. Но там явно есть ошибки. Плюс такое лучше функцией вызывать.
За тебя я весь код писать не буду точно. Логику верную написал, а входы/выходы сам под условия задачи подтачивай.

P.S. советую по началу не смотреть на количество строк. Этот код можно как на 100 строк расширить, так и в 10 уложиться, образно. Главное логику удавливай сначала, а мастерство оно потом придёт, с опытом.
0
-16 / 3 / 0
Регистрация: 15.12.2018
Сообщений: 82
10.02.2019, 16:57  [ТС]
дискриминант правильный же, сколько уже уравнений решал на нем
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
10.02.2019, 17:09
Kalet, для начала. ты неверно обрабатываешь входной список, если уж на то пошло.

и потом, вот проверь свой алгоритм (вход я исправил уже)

Python
1
2
3
4
5
6
7
8
9
10
11
12
def roots_of_quadratic_equation(k):
    #print(k)
    a, b, c = k[0], k[1], k[2]
    # print(a)
    D = b ** 2 - 4 * a * c  # дискриминант
    x1 = (-b + D ** 0.5) / (2 * a)  # первый корень
    x2 = (-b - D ** 0.5) / (2 * a)  # второй корень
 
    return x1, x2
    
print(roots_of_quadratic_equation([0, 4, 6]))
print(roots_of_quadratic_equation([2, 4, 6]))
а ещё учитывать нужно, что если дискриминант равен нулю, то корень будет один. или всё-таки два в любом случае, а?
а ещё учитывать нужно, что если дискриминант меньше нулю, то корней вовсе не будет. или всё-равно их будет два, в любом случае, а? да-да, можно представить в виде комплексного числа, но нужно ли это здесь?
0
14 / 11 / 3
Регистрация: 23.11.2018
Сообщений: 15
05.05.2020, 11:51
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def roots_of_quadratic_equation(a, b, c: int):
    d = b ** 2 - 4 * a * c
    if d >= 0:
        x1 = (-b + d ** 0.5) / (2 * a)  # первый корень
        x2 = (-b - d ** 0.5) / (2 * a)
        x.append(x1)
        if x1 == x2:
            return x
        else:
            x.append(x2)
            return x
    else:
        return x
 
 
x = []
 
 
def solve(*coefficients: int):
    global x
    if len(coefficients) == 3:
        a, b, c = coefficients[0], coefficients[1], coefficients[2]
        return roots_of_quadratic_equation(a, b, c)
    elif len(coefficients) == 2:
        b, c = coefficients[0], coefficients[1]
        x.append(-c / b)
        return x
    elif len(coefficients) == 1:
        if coefficients[0] == 0:
            return ['all']
        else:
            return x
    else:
        return None
2
5 / 5 / 0
Регистрация: 07.03.2021
Сообщений: 20
12.03.2021, 14:58
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def solve(*coefficients):
    if len(coefficients) == 3:
        d = coefficients[1] ** 2 - 4 * coefficients[0] * coefficients[2]
        if coefficients[0] == 0 and coefficients[1] == 0 and coefficients[2] == 0:
            x = ["all"]
        elif coefficients[0] == 0 and coefficients[1] == 0:
            x = ''
        elif coefficients[0] == 0:
            x = [-coefficients[2] / coefficients[1]]
        elif coefficients[1] == 0:
            x = [(coefficients[2] / coefficients[0]) ** 0.5]
        elif coefficients[2] == 0:
            x = [0, -coefficients[1] / coefficients[0]]
        else:
            if d == 0:
                x = [-coefficients[1] / (2 * coefficients[0])]
            elif d < 0:
                x = ''
            else:
                x = [float((-coefficients[1] + d ** 0.5) / (2 * coefficients[0])),
                     float((-coefficients[1] - d ** 0.5) / (2 * coefficients[0]))]
        return x
    elif len(coefficients) == 2:
        return [-coefficients[1] / coefficients[0]]
    elif len(coefficients) == 1:
        if coefficients[0] == 0:
            return ["all"]
        else:
            return []
    else:
        return ["all"]
0
5 / 5 / 0
Регистрация: 07.11.2021
Сообщений: 21
19.03.2022, 20:06
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
k = []
 
 
def roots_of_quadratic_equation(a, b, c):
    a, b, c = int(a), int(b), int(c)
    d = b ** 2 - 4 * a * c
    if d >= 0 and a != 0:
        x1 = (-b + d ** 0.5) / (2 * a)
        x2 = (-b - d ** 0.5) / (2 * a)
        x.append(x1)
        if x1 == x2:
            return x
        else:
            x.append(x2)
            return x
    else:
        return x
 
 
x = []
 
 
def solve(*coefficients: int):
    global x
    if len(coefficients) == 3:
        if coefficients[0] == 0 and coefficients[1] == 0 and coefficients[2] == 0:
            return ['all']
        else:
            a, b, c = coefficients[0], coefficients[1], coefficients[2]
            return roots_of_quadratic_equation(a, b, c)
    elif len(coefficients) == 2:
        b, c = coefficients[0], coefficients[1]
        x.append(-c / b)
        return x
    elif len(coefficients) == 1:
        if coefficients[0] == 0:
            return ['all']
        else:
            return x
    else:
        return None
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2022, 20:06
Помогаю со студенческими работами здесь

Не могу исправить ошибку (Уравнения степени не выше второй — часть 3)
Не получается исправить код... помогите, пожалуйста;) Напишите программу, которая запрашивает у пользователя строку с коэффициентами...

Уравнения степени не выше второй
Добрый день. Помогите найти ошибку в решении. Есть задача: Сделайте функцию solve(*coefficients), которая умеет решать уравнения степени...

Уравнения степени не выше второй — часть 3
Напишите программу, которая запрашивает у пользователя строку с коэффициентами уравнения (степени не выше второй), затем печатает корни...

Уравнения степени не выше второй — часть 3
есть код import math def roots_of_quadratic_equation(a, b, c): if a == 0 and b == 0 and c == 0: return elif...

Уравнения степени не выше второй — часть 3
Напишите программу, которая запрашивает у пользователя строку с коэффициентами уравнения (степени не выше второй), затем печатает корни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru