我正在用Python编写我的第一个程序,我收到了一个错误:
"TypeError: unsupported operand type (s) for /: 'str' and 'str'
这就是我正在做的事情:
import sys
import math
import scipy.stats import norm
S_t = sys.argv[1];
K = sys.argv[2];
r = sys.argv[3];
T = sys.argv[4];
sigma_0 = sys.argv[5];
d1 = (math.log(S_t/K) + (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T));
x = norm.cdf(d1);
我不确定我的错误在哪里。另外,x = norm.cdf(d1)
是计算累积范数的最佳方法吗?
答案 0 :(得分:6)
问题是S_t
和K
是字符串,因为命令行参数是字符串。
如果你想将它们转换为其他类型,你必须告诉Python如何转换或转换什么。例如:
S_t = float(sys.argv[1])
K = float(sys.argv[2])
r = float(sys.argv[3])
T = float(sys.argv[4])
同时,值得学习自己调试。当你在这样的长行中得到一个错误,并且你无法分辨它的错误部分时,将其分解。如果你有这个:
d1 = (math.log(S_t/K) + (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))
尝试将其分解为
d1a = math.log(S_t/K)
d1b = (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))
d1 = d1a + d1b
现在,查看错误是在d1a
还是d1b
。因为它在d1a
,所以再次分解:
d1a1 = S_t/k
d1a = math.log(d1a1)
现在你可以在d1a1
看到它了。这更容易弄明白 - 如果你仍然无法弄清楚,你可以在这里发布一个更短的问题:
import sys
S_t = sys.argv[1]
K = sys.argv[2]
d1a1 = S_t/k