我无法弄清楚我的循环有什么问题。我仍然是蟒蛇新手,但我发誓这在过去是有效的

时间:2016-12-15 21:14:35

标签: python

我正在努力为学校完成这项任务,但无法弄清楚如何去做。我遇到的问题是for循环。它不断返回无效语法

import matplotlib.pyplot as plt
import numpy as np
import scipy
from scipy import stats
T = 1
r=0.06
m=0.03
mu = r-m
sigma = 0.2
H=99
S0 = 100
M=100
N =10
dt = T/N
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N) 
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W 
S = S0*np.exp(X) ### geometric brownian motion ###
i = 1
j=100
while S >= H
    if True
        S = S*np.exp(X)
        i += 1
    if False
        print(" Barrier crossed at ",i)
        break
    elif 
        print("error")
        break   

plt.plot(t, S)
plt.show()

2 个答案:

答案 0 :(得分:0)

首先,if False永远不会评估您希望的方式,False始终为假。

您还需要使用冒号(:)完成while循环语句和所有条件语句,这就是您收到语法错误的原因。此外,您的elif没有要评估的条件,因此会引发另一个语法错误。

答案 1 :(得分:0)

代码审查

首先通过在while循环语句的末尾添加分号:来修复无效语法。尽管如此,您的代码仍然无法评估。你可以以这样的错误结束,因为多个元素的数组的真值是不明确的

基本上,如果您打印条件print(S >= H)
您将获得一个数组[False True False True True True True True True True]

您可以将表达式分配给array = S >= H之类的变量。您可能希望使用while array.all():while array.any():

之类的内容进行评估

现在,array.all()会产生False,并且会在评估/执行的情况下进行任何评估/执行,最后会显示情节。

如果您决定尝试使用array.any(),则会导致True,并且会评估循环内的所有内容。

要使其工作,您必须纠正更多语法问题。在每个if语句之后添加分号并在elif之后添加条件并且不要忘记分号。

现在,if False:下的块不会被评估,因为总是为假if True:下的块将始终被评估,因为始终为True 。无论如何,结果将永远留在循环中进行操作并且情节不会出现。