Как я могу ввести математические функции (exp, log, sin) в Python - PullRequest
0 голосов
/ 26 февраля 2019

Когда я запускаю следующий код:

import math
x=float(input('enter : '))
print(x)

и затем я ввожу: math.sin или cos или pi или log .... такого числа, как: sin (2), я получаю этоошибка:

Traceback (most recent call last):

    File "C:\Users\user\Desktop\hh.py", line 10, in <module>
    x=float(input('enter : '))
    ValueError: could not convert string to float: 'sin(x)'

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вам трудно написать программу для понимания и оценки выражений, особенно таких, которые включают такие функции, как sin или sqrt.Однако, если вы уверены, что пользователь вашей программы в безопасности (а это обычно неверное предположение), вы можете заставить Python выполнить оценку с помощью встроенной функции eval.Вы можете попробовать это:

import math

strexpr = input('enter: ')
print(eval(strexpr))

Затем, если вы запустите эту программу и пользователь наберет math.sin(2), программа напечатает

0.9092974268256817

, что является правильным значением синусадва радиана.

ПРИМЕЧАНИЕ: Эта небольшая программа позволит пользователю набрать любое правильное выражение Python и затем оценить его.Если пользователь знает, как, он мог бы использовать это, чтобы отформатировать жесткий диск и уничтожить все ваши данные или сделать все виды вреда.Используйте это, только если вы полностью уверены в пользователе.Но как ты можешь быть уверен в ком-то еще?

0 голосов
/ 26 февраля 2019

Вы можете получить ответ, объединив комментарии @Walter Tross и @wwii.Как решить проблему, если вы хотите, чтобы пользователи могли вводить код, который будет оцениваться с результатом, сохраненным в x, вы должны использовать:

from ast import literal_eval
x = literal_eval(input('enter:'))

PS Вам нужно будет заключить в кавычкипользовательский ввод.PPS Ваш пользователь может вставить практически любой код, который будет выполнен с использованием этого ввода.

Чтобы понять причину, вы даете команды python и ожидаете, что он оценит то, что вы сказали, и сохранит его в x.Вы даете слова Python, а не превращаете их в числа.Это было бы то же самое, что набрать в своем терминале 2 plus 2.Слова ничего не значат, если у вас нет какого-то компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...