Python"不支持的操作数类型"

Jos*_*osh 0 python math python-3.x

我正在用Python编写我的第一个程序,我收到一个错误:

 "TypeError: unsupported operand type (s) for /: 'str' and 'str'
Run Code Online (Sandbox Code Playgroud)

这就是我正在做的事情:

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);
Run Code Online (Sandbox Code Playgroud)

我不确定我的错误在哪里.另外,x = norm.cdf(d1)计算累积规范的最佳方法是什么?

aba*_*ert 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])
Run Code Online (Sandbox Code Playgroud)

同时,值得学习自己调试.当你在这样的长行中得到一个错误,并且你无法分辨它的错误部分时,将其分解.如果你有这个:

d1 = (math.log(S_t/K) + (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))
Run Code Online (Sandbox Code Playgroud)

尝试将其分解为

d1a = math.log(S_t/K)
d1b = (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))
d1 = d1a + d1b
Run Code Online (Sandbox Code Playgroud)

现在,看看错误是否在d1ad1b.从它进入d1a,再次分解:

d1a1 = S_t/k
d1a = math.log(d1a1)
Run Code Online (Sandbox Code Playgroud)

现在你可以看到它了d1a1.这更容易弄明白 - 如果你仍然无法弄明白,你可以在这里发布一个更短的问题:

import sys

S_t = sys.argv[1]
K = sys.argv[2]

d1a1 = S_t/k
Run Code Online (Sandbox Code Playgroud)