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

Вычислить значение переменной. ZeroDivisionError, округление

15.11.2022, 01:46. Показов 830. Ответов 6

Студворк — интернет-сервис помощи студентам
Дана функция, вычисляющая значение переменной y в зависимости от переменной x. Дан интервал целых чисел, которые может принимать переменная x. Необходимо написать программу на языке Python, которая выведет в текстовый файл result.txt значения переменной y для каждого из предложенных x. Точность значений у при распечатке установить в 3 знака после запятой. Кодировка в текстовом файле должна быть Unicode. Путь к входному и выходному файлу в коде программы нужно сделать относительным.

Список значений создается в текстовом файле source_data.txt
Текстовый файл с исходными данными должен содержать исходную информацию следующего вида:

x=-3
x=-2
x=-1


Выходные данные
В текстовый файл result.txt должны быть выведены результаты в следующем формате:

При x = -3 значение y = 2.348
При x = -2 значение y = 7.928
При x = -1 значение y = -6.122
При x = 0 значение y = -4.115
При x = 1 значение y = -7.254

https://i.yapx.ru/UykWg.png

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
import cmath
 
f = open("source_data.txt", "w", encoding="utf-8")
 
for number in range(-15, 6):
    f.write("x=" + str(number) + '\n')
f.close()
 
with open("source_data.txt") as f, open("result.txt", 'w', encoding="utf-8") as f1:
    try:
        for i in f:
            x = float(i.strip('x='))
 
            if x < -6:
                y = (64*x**8 + 17*x**2 + 74)**3 + 13*x**3 / (82*x**7 + x**3)**5 + (76*x**2 + 52)**4
 
            elif -6 <= x < 1:
                y = cmath.sqrt((75*x**3 + 66*x**2 + 48)**5) - 31*x**4 / (53*x**5 + x**2)**5 + (28*x**2-40)**4
 
            elif x >= 1:
                y = (69*x**8 + 15*x**2 + 38)**6 - 48*x**5 / (34*x**7 - x**3)**5 + cmath.sqrt((30*x-88)**3)
    except ZeroDivisionError:
        pass
 
    f1.write(f"При x = {x} значение y = {y:.3f}")
Мне выдает в result.txt следующее:
При x = 0.0 значение y = 30234.642+0.000j

Два вопроса:
1. Как сделать так, чтобы мне выдавало все значения y, а не только except.
2. Почему не оставляет только три знака после запятой, это связано с комплексными числами? Как это решить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2022, 01:46
Ответы с готовыми решениями:

Вычислить значение переменной Y по одному из заданных выражений в зависимости от значения переменной X
Нужна помощь с кодом 1)Для Вашего варианта таблицы 4.1 задайте в окне ввода значение переменной X с учетом заданного подтипа данных. ...

Вычислить значение переменной Y по одному из заданных выражений в зависимости от значения переменной X
1)Для Вашего варианта таблицы 4.1 задайте в окне ввода значение переменной X с учетом заданного подтипа данных. При вводе маленьких или...

Развилка.Вычислить значение искомой переменной Вычислить значение искомой переменной
Вычислить значение искомой переменной. В качестве F(x) взять функцию F(x)= X2 Заранее спасибо.

6
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
15.11.2022, 02:30
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
f = open("source_data.txt", "w", encoding="utf-8")
 
for number in range(-15, 6):
    f.write("x=" + str(number) + '\n')
f.close()
 
with open("source_data.txt") as f, open("result.txt", 'w', encoding="utf-8") as f1:
    try:
        for i in f:
            x = float(i.strip('x='))
 
            if x < -6:
                y = ((64 * x ** 8 + 17 * x ** 2 + 74) ** 3 + 13 * x ** 3) / ((82 * x ** 7 + x ** 3) ** 5 + (
                        76 * x ** 2 + 52) ** 4)
 
            elif -6 <= x < 1:
                y = (((75 * x ** 3 + 66 * x ** 2 + 48) ** 5) ** 0.5 - 31 * x ** 4) / ((53 * x ** 5 + x ** 2) ** 5 + (
                        28 * x ** 2 - 40) ** 4)
 
            elif x >= 1:
                y = ((69 * x ** 8 + 15 * x ** 2 + 38) ** 6 - 48 * x ** 5) / ((34 * x ** 7 - x ** 3) ** 5 + (
                        (30 * x - 88) ** 3) ** 0.5)
    except ZeroDivisionError:
        pass
 
    f1.write(f"При x = {x} значение y = {y:.3f}")
1
0 / 0 / 0
Регистрация: 15.11.2022
Сообщений: 4
15.11.2022, 16:39  [ТС]
Не очень понял. Вы отказались от использования cmath, тем самым убрав корень, + подредактировали пробелы. Однако это не решило проблемы.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
15.11.2022, 17:14
Лучший ответ Сообщение было отмечено Tolkmor как решение

Решение

Tolkmor, в первую очередь скобки, сначала считаем числитель, потом знаменатель, потом делим. Если числитель и знаменатель не брать в скобки, то последовательность операций нарушается в данном выражении.
На счет cmath и **0.5, если посчитать оба эти варианта и сравнить, то будет True, однако, у меня с cmath записывалось комплексное число, а с 0.5 степень все было нормально. Почему не знаю.

Добавлено через 2 минуты
У вас:
Python
1
y = cmath.sqrt((75*x**3 + 66*x**2 + 48)**5) - 31*x**4 / (53*x**5 + x**2)**5 + (28*x**2-40)**4
сначала посчитаем вот это

cmath.sqrt((75*x**3 + 66*x**2 + 48)**5) - 31*x**4 / (53*x**5 + x**2)**5

потом прибавим

+ (28*x**2-40)**4

Добавлено через 4 минуты
Даже так, тут сначала 31*x**4 будет разделено на (53*x**5 + x**2)**5
а потом уже - и +, что неверно

И в других так же вроде бы.

Добавлено через 12 минут
Хотя я ошибся, не все нормально, сейчас решил проверить все результаты записать, комплексные числа остались/
Записывай тогда так:
Python
1
f1.write(f"При x = {x} значение y = {y.real:.3f}" + '\n')
1
0 / 0 / 0
Регистрация: 15.11.2022
Сообщений: 4
15.11.2022, 17:31  [ТС]
Да, теперь понял. Согласен, спасибо. Первая проблема решена) Однако в result он записывает только значение x = o, а необходим список со всеми значениями. Как решить эту проблему? Нужно чтобы он вывел
При x = 15 значение y =
При x = 14 значение y =

И так весь диапазон. Однако сейчас выводится только значение x = 5.0.

До этого он выводил только x = 0 значение. Изначально он выводил целый список, игнорируя диапазон от -6 до 1, ибо там ZeroDivisionError, я исправил это функцией except pass, однако теперь он записывает только одно значение в result
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
15.11.2022, 17:36
Лучший ответ Сообщение было отмечено Tolkmor как решение

Решение

Tolkmor, тогда писать надо в цикле

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
f = open("source_data.txt", "w", encoding="utf-8")
 
for number in range(-15, 6):
    f.write("x=" + str(number) + '\n')
f.close()
 
with open("source_data.txt") as f, open("result.txt", 'w', encoding="utf-8") as f1:
    try:
        for i in f:
            x = float(i.strip('x='))
 
            if x < -6:
                y = ((64 * x ** 8 + 17 * x ** 2 + 74) ** 3 + 13 * x ** 3) / ((82 * x ** 7 + x ** 3) ** 5 + (
                        76 * x ** 2 + 52) ** 4)
 
            elif -6 <= x < 1:
                y = (((75 * x ** 3 + 66 * x ** 2 + 48) ** 5) ** 0.5 - 31 * x ** 4) / ((53 * x ** 5 + x ** 2) ** 5 + (
                        28 * x ** 2 - 40) ** 4)
 
            elif x >= 1:
                y = ((69 * x ** 8 + 15 * x ** 2 + 38) ** 6 - 48 * x ** 5) / ((34 * x ** 7 - x ** 3) ** 5 + (
                        (30 * x - 88) ** 3) ** 0.5)
 
            f1.write(f"При x = {x} значение y = {y:.3f}\n")
    except ZeroDivisionError:
        pass
1
0 / 0 / 0
Регистрация: 15.11.2022
Сообщений: 4
15.11.2022, 18:07  [ТС]
Да, но для отрицательных значений выходит 0. Надо проверить функцию в вычислителе

Добавлено через 11 минут
Все верно. Остальные значения совпадают, однако отрицательные под 0 все идут почему то
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2022, 18:07
Помогаю со студенческими работами здесь

Вычислить значение у, где. Значение переменной х введите с клавиатуры
Вычислить значение у, где. Значение переменной х введите с клавиатуры.

Задать значение переменной x и вычислить значение
function y=zadanie1(x) y=x-e^-x*asin(e^x)-ln(1+(1-e^2*x).^(1/2)) end Выскакивает ошибка: ??? Undefined function or variable...

Округление переменной
Скажите пожалуйста, как округлить дробную переменную до определенного кол-ва знаков?

Вычислить значение переменной
Имеется оператор v := shortint.MaxValue Какой тип и значение получит переменная v, если к ее исходному значению 1154 ? P.S. Знаю...

Вычислить значение переменной
Вычислить значение переменной


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru