下面是我的代码。在这里,我试图从输入文件中读取变量gobs(x),然后将其用于其他计算,例如计算error(x)。但是,我发现,我可以在循环内从输入文件中正确读取它,但是当尝试在循环外使用它时,只会传输第一个数据。对于我在循环内读取的所有100个数据,当我在循环外使用它们时,它仅显示最后一个数据的值。
代码从下面开始
constant = 99
x0=50
z0=5
def gsyn (x):
return (constant*z0)/(z0**2+(x-x0)**2)
with open ('Grav_H_Cyln_v3_output.txt') as finp:
lines=finp.readlines()
for line in lines:
g=float(line)
x=line
def gobs (x):
return g
print (gobs(x)) # here, gobs(x) is printing properly
def error(x):
return (gsyn(x)-gobs(x))
for i in range (1, 100, 1):
x=i
print (error(x)) # here, only the first value of gobs(x) is coming
print ('stop')
答案 0 :(得分:1)
对于从根本上来说非常简单的问题,这似乎是一个非常奇怪的解决方案。将gobs
用作字典,以便您可以随意设置或检索gobs[x]
。
gobs = dict()
with open ('Grav_H_Cyln_v3_output.txt') as finp:
lines=finp.readlines()
for line in lines:
g=float(line)
gobs[line] = g
print (gobs[line])
答案 1 :(得分:0)
您可以尝试在循环内外创建向量gobs[]
,并在lines
上的循环内填充向量。
那应该做。
答案 2 :(得分:0)
而不是在循环的每次迭代中重新分配值x
,而是将i
附加到声明为外部的列表中if块范围。
x = []
for i in range (1, 100, 1):
x.append(i)
print(x)