如何解决如果在字符串中找到sin或cos或tan,如何添加弧度?
基本上,如果用户键入sin(或cos(或tan(:
返回sin(radians(或cos(radians(或tan(radians(分别为
例如:
输入:tan(sin(30))
输出:tan(radians(sin(radians(30))))
解决方法
这将起作用。
if user_input[:3].lower() in ['sin','cos','tan']:
output = user_input[:4] + 'radians(' + user_input[4:] + ')'
,
您需要通过正则表达式进行替换:
pattern = r"((?:tan\(|cos\(|sin\()+)([^)]+)"
sub = r"\1radians(\2)"
re.sub(pattern,sub,"sin(30)")
#'sin(radians(30))'
re.sub(pattern,"sin(cos(30))")
#'sin(cos(radians(30)))'
第一组"\1"
代表函数名称,第二组"\2"
代表括号中的参数。
不使用正则表达式
代码
import math
# Enter expression
s = input('Input expression')
# Find desired function in expression
# i.e. string before first paren
func = s[:s.find("(")].strip()
# Find degrees in expression
# i.e. string between parens
degrees = float(s[s.find("(")+1:s.find(")")])
# Convert to radians (needed by trigonometric functions)
radians = math.radians(degrees)
# Creates data structures allowing to select function to apply
func_names = ['sin','tan'] # function names
functions = [math.sin,math.cos,math.tan] # functions
try:
index = func_names.index(func) # index of function
answer = functions[index](radians) # with index == 0,will have math.sin(radians)
print(answer)
except ValueError:
print(f'Function (func) not implemented') # func not in list
替代方法:使用字典而不是try / catch
acw1668在评论中建议
# ...code above before try/catch block
# Dictionary with key value pairs of name:function
# This creates {'sin': math.sin,'cos': math.cos,'tan': math.tan}
funcs = {k:f for k,f in zip(func_names,functions)}
if func in funcs:
print(funcs[func](radians))
else:
print(f'Sorry,function {func} not implemented')
,
import re
from math import radians,sin,cos,tan
eval_string = "cos(tan(30)"
for i in re.findall("(cos\(|sin\(|tan\()",eval_string):
if i == "cos(":
eval_string = re.sub("(cos\()","cos(radians(",eval_string)
elif i == "sin(":
eval_string = re.sub("(sin\()","sin(radians(",eval_string)
elif i == "tan(":
eval_string = re.sub("(tan\()","tan(radians(",eval_string)
print(eval_string)
print(eval(eval_string))
我确实找到了解决方案,只有最后一个括号除外,这很容易解决,尽管有点长?
我感谢所有回答并启发我找到正确答案的人。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。