Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/75: Рейтинг темы: голосов - 75, средняя оценка - 4.57
-11 / 2 / 1
Регистрация: 22.09.2021
Сообщений: 97

Синус и косинус

22.09.2021, 18:15. Показов 15845. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите функцию trigonometric_function(mode, x, n), принимающую на вход строку – что именно нужно определить, затем значение угла в радианах, затем n – до какого значения (включительно) меняется k.
Функция возвращает одно число – значение функции

Пример 1
Ввод:
Python
1
2
data = ['sin', 1.57, 3]
print(trigonometric_function(*data))
Вывод:
0.9998434952309573

Пример 2
Ввод:
Python
1
2
data = ['cos', 1.047, 4]
print(trigonometric_function(*data))
Вывод:
0.5001715072143693
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2021, 18:15
Ответы с готовыми решениями:

Вывести на экран синус и косинус угла введёного пользователем
Напишите программу, которая в одной строке выводит на экран синус и косинус угла введёного пользователем с точностью до десятых....

Водной строке вывести на экран синус и косинус угла, введённого пользователем, с точностью до десятых
Вот нужно решить такую задачу-Напишите программу, которая в одной строке выводит на экран синус и косинус угла введёного пользователем с...

Решение ребуса "Синус + Синус + Косинус = Тангенс"
Написать на С++ программу, решающую ребус: СИНУС + СИНУС + КОСИНУС = ТАНГЕНС Пример: ВАГОН + ВАГОН = СОСТАВ #include...

26
5535 / 2888 / 573
Регистрация: 07.11.2019
Сообщений: 4,814
25.09.2021, 10:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
Если дедушка Гвидо оставил в Питоне бритву опасную eval, значит - была причина. Вероятно, он полагал, что некоторые взрослые бреются.
Да, просто eval очень мощная функция в этом ее большой плюс.
Но, "некоторые женятся бреются, а некоторые так.."
Решать, использовать или нет, eval нужно в контексте задачи и доверия к входящим данным. Вот такие мысли. Никого не хотел переубедить или как-то обидеть.
Смотрите, что написано про eval у Лутца:
Кликните здесь для просмотра всего текста
Использование функции eval для преобразования строк в объекты, как демонстрировалось выше в коде, представляет собой мощный прием. Фактически временами он чересчур мощный. Функция eval благополучно выполнит любое выражение Python — даже то, которое способно удалить все файлы на вашем компьютере, располагая необходимыми полномочиями!
Функции int и float производят преобразование только в числа, но такое ограничение означает, что они обычно быстрее (и безопаснее, т.к. не принимают произвольные выражения)
Для той же самой цели можно применять и функцию eval (S), но она сопряжена с более высокими затратами и проблемами в плане безопасности.
Фактически eval компилирует и запускает строку как порцию программы, при этом предполагая, что выполняемая строка была получена из надежного источника — ловкий пользователь способен отправить строку, которая удалит файлы на компьютере, так что будьте аккуратны с таком вызовом.
Однако имейте в виду, что поскольку это выполняет введенный тест, как если бы он был программным кодом, могут возникнуть последствия в плане безопасности, которые мы здесь почти полностью игнорируем, не говоря даже о необходимости доверия к источнику вводимого текста. При отсутствии такого доверия придерживайтесь использования input в Python З.Х и raw_input в Python 2.Х.
Это мощная концепция, которая подвержена тем же самым проблемам с безопасностью, о которых шла речь в предшествующих главах. Если вы не можете доверять источнику строки с кодом, тогда используйте более ограничивающие инструменты преобразования наподобие int и float.
Хотя в данном случае это справедливо и временами удобно, как было показано ранее (скажем, в главе 10), функция eval работает относительно медленно (она обязана скомпилировать и выполнить код), к тому же небезопасна (вы должны доверять источнику строки).
1
3584 / 2184 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
25.09.2021, 12:11
Цитата Сообщение от Catstail Посмотреть сообщение
А бесконечные указания типа: "eval опасен!", "goto - страшный грех" и т.п. я рассматриваю как доктринёрство.
SQL запросы экранируете или так: запускаете, что пользователь даст, например, DROP TABLE? Рассматриваю ли я SQL как "страшный грех" - нет. Каждому инструменту свое применение.
eval, полагаю, имеет слишком узкое применение, чтобы его использовать на проде - для внутреннего использования пожалуйста! Хотя все же имеет смысл экранировать "опасные" команды либо запускать в песочнице и не под админом.
Цитата Сообщение от Catstail Посмотреть сообщение
я могу и свой eval написать. Он будет вполне безопасным.
Будет ли он так же эффективен, как и его исходный вариант? Сомневаюсь, что пилить интерпретатор Python'а внутри Python'а без JIT'а имеет хоть какой-то, кроме образовательных целей, смысл, т. к. объем работ титанический.
P. S. Единственная сфера использования eval'а, где он более-менее применим, - это консоль для отладки приложения, как Dev Console в браузере. Могу, конечно, ошибаться.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
25.09.2021, 16:40
В консоли для отладки приложения можно. А в детской задаче нельзя? Что же до вычисления формулы - это 200 сторк кода. Или даже меньше.
0
3584 / 2184 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
25.09.2021, 23:09
Цитата Сообщение от Catstail Посмотреть сообщение
А в детской задаче нельзя?
Кликните здесь для просмотра всего текста
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
26.09.2021, 08:14
Arsegg, я обычно этим не грешу. Ведь в этой задаче методическая сущность - организация переключателя для вычисления разных функций. Использование лямбд здесь не намного лучше eval. Или я недопонял. Но на всякий случай вот - вполне безопасный вычислитель (алгоритм Бауэра):

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from math import sin,cos,log,exp
 
def calc(formula):
    
    def parse(formula):
        res=[]
        tmp=''
        for s in formula:
            if s in (',','(',')','+','-','*','/','^'):
                if len(tmp)>0:
                    res.append(tmp)
                res.append(s)
                tmp=''
            else:
                tmp=tmp+s
        if len(tmp)>0:
            res.append(tmp)
        return res
        
    def prty_arn(op):
        ops=['(','+','-','*','/','^','sin','cos','log','exp']
        prt=[0,1,1,2,2,3,3,3,3,3]
        arn=[0,2,2,2,2,2,1,1,1,1]
        k=ops.index(op)
        return (prt[k],arn[k])
    
    def exec_op(op):
        
        (_,arn)=prty_arn(op)
        
        if arn==2:
            a2=stack_n.pop()
            a1=stack_n.pop()
        else:
            a1=stack_n.pop()
 
        if op=='+':
            return a1+a2
        elif op=='-':
            return a1-a2
        elif op=='*':
            return a1*a2
        elif op=='/':
            return a1/a2
        elif op=='^':
            return a1**a2
        elif op=='sin':
            return sin(a1)
        elif op=='cos':
            return cos(a1)
        elif op=='exp':
            return exp(a1)
        elif op=='log':
            return log(a1)
        return None
 
    arr_lex=parse(formula)
    stack_o=[]
    stack_n=[]
    
    for lex in arr_lex:
        
        if '9'>=lex[0]>='0':
            
            stack_n.append(float(lex))
            
        elif lex=='(':
            
            stack_o.append(lex)
            
        elif lex==')':
            
            while len(stack_o)>0:
                op=stack_o.pop()
                if op=='(':
                    break
                stack_n.append(exec_op(op))
            else:
                return (None,'Несбалансированы скобки-1')
 
        else:
            
            if len(stack_o)==0:
                stack_o.append(lex)
            else:
                
                (pn,_)=prty_arn(lex)
                (po,_)=prty_arn(stack_o[-1])
                
                if pn>po:
                    stack_o.append(lex)
                else:
                    while True:
                        op=stack_o.pop()
                        stack_n.append(exec_op(op))
                        if len(stack_o)==0 or stack_o[-1] != po:
                            break
                    stack_o.append(lex)
                    
    while len(stack_o)>0:
        op=stack_o.pop()
        stack_n.append(exec_op(op))
 
    if len(stack_n)==1:
        
        return (stack_n[0],'OK')
        
    else:
        
        return (None,'Несбалансированы скобки-2')
 
 
print(calc("5+7-sin(7*3)"))
print(eval("5+7-sin(7*3)"))
1
3584 / 2184 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
26.09.2021, 11:54
Цитата Сообщение от Catstail Посмотреть сообщение
Использование лямбд здесь не намного лучше eval.
Чем вызов функции по ссылке хуже, чем eval?
eval - крайне медленная функция, которая поднимает, по сути, под-интерпретатор Python'а: грузит контекст (std lib), разбивает строку на лексемы, строит AST дерево, вычисляет выражение.
Цитата Сообщение от Catstail Посмотреть сообщение
Ведь в этой задаче методическая сущность - организация переключателя для вычисления разных функций.
Для этого есть switch-case (связка if-elif-else), хеш-мапа по имени функции и ссылку на нее саму, Simple Factory method, Abstract Factory.
P. S. Factory Comparison.
P. P. S. А писать лексер + парсер для задачи, где в аргументе уже передается имя функции - это оверинжиниринг, имхо.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
26.09.2021, 11:58
Arsegg, согласен, но лучше я напишу лексер с парсером, чем буду носить ярлык "добыватель изюма из булки"
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2021, 11:58

Синус и косинус
Здравствуйте! Как можно записать \sin{\left(\frac{\pi k}{2}\right)} и \cos{\left(\frac{\pi k}{2}\right)} в форме (-1) в степени... ?

Синус и косинус
Помогите пожалуйста посчитать... Не знаю как, потому что таких табличных значений нет... sin 10Pi/3 - cos 11Pi/6=? Заранее...

Синус и косинус
Вас никогда не интересовал вопрос, как умный человек Брадис посчитал синус и косинус в знаменитых таблицах Брадиса? Неужели рисовал на...

синус и косинус?
нужна программа которая будет считать синус, косинус, тангенс и катангенс! на язике С

Косинус и синус х
как пошитать косину и синус х. в консольном ет выглядело так y = sin(x) а в билдере как:wall:


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru