Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在同一文件中写入从函数计算的多个数据_Python - Fatal编程技术网

Python 在同一文件中写入从函数计算的多个数据

Python 在同一文件中写入从函数计算的多个数据,python,Python,我正在尝试将通过此函数计算的数据写入文件中。但是这个函数被调用了很多次。假设另一个文件中有9个数字,此函数将计算这9个数字的根。此函数的这9个根应写入同一文件中。但我在这里所做的方式将在文件中写入计算根,但下一个将在文件中替换它。在调用此函数之前,对这9个数字中的每一个都执行了其他数学函数,因此这些函数会被一次又一次地单独调用。是否可以将它们全部写入同一个文件中?多谢各位 def Newton(poly, start): """ Newton's method for finding t

我正在尝试将通过此函数计算的数据写入文件中。但是这个函数被调用了很多次。假设另一个文件中有9个数字,此函数将计算这9个数字的根。此函数的这9个根应写入同一文件中。但我在这里所做的方式将在文件中写入计算根,但下一个将在文件中替换它。在调用此函数之前,对这9个数字中的每一个都执行了其他数学函数,因此这些函数会被一次又一次地单独调用。是否可以将它们全部写入同一个文件中?多谢各位

def Newton(poly, start):
    """ Newton's method for finding the roots of a polynomial."""
    x = start 
    poly_diff = poly_differentiate(poly)
    n = 1
    counter = 0
    r_i = 0

    cFile = open("curve.dat", "w")   
    while True:
        if (n >= 0) and (n < 1):
            break

        x_n = x - (float(poly_substitute(poly, x)) / poly_substitute(poly_diff, x))

        if x_n == x:
            break

        x = x_n # this is the u value corresponding to the given time

        n -= 1
        counter += 1
        x = str(x)
        cFile.write('\n' + x + '\n')

    if r_i:
        print "t(u) = ", (x, counter)

    else:
        print "t(u) = ", x


    cFile.close 
def Newton(多边形,开始):
“”“牛顿求多项式根的方法。”“”
x=开始
多边形微分=多边形微分(多边形)
n=1
计数器=0
r_i=0
cFile=开放(“曲线数据”,“w”)
尽管如此:
如果(n>=0)和(n<1):
打破
x_n=x-(浮点数(poly_替换(poly,x))/poly_替换(poly_diff,x))
如果x_n==x:
打破
x=x_n#这是对应于给定时间的u值
n-=1
计数器+=1
x=str(x)
cFile.write('\n'+x+'\n')
如果r_i:
打印“t(u)=”(x,计数器)
其他:
打印“t(u)=”,x
关闭
根据我得到的建议,我将代码更改为:

def Newton(poly, start):
    """ Newton's method for finding the roots of a polynomial."""
    x = start 
    poly_diff = poly_differentiate(poly)
    n = 1
    counter = 0

    while True:
        if (n >= 0) and (n < 1):
            break

        x_n = x - (float(poly_substitute(poly, x)) / poly_substitute(poly_diff, x))

        if x_n == x:
            break

        x = x_n # this is the u value corresponding to the given time

        n -= 1
        counter += 1
        yield x 

    Bezier(x)

def Bezier(u_value) :
    """ Calculating sampling points using rational bezier curve equation"""
    u = u_value

    p_u = math.pow(1 - u, 3) * 0.7 + 3 * u * math.pow(1 - u, 2) * 0.23 \
        + 3 * (1 - u) * math.pow(u, 2) * 0.1 + math.pow(u, 3) * 0.52

    p_u = p_u * w

    d = math.pow(1 - u, 3) * w + 3 * u * w * math.pow(1 - u, 2) + 3 * (1 - u) *\ 
        w * math.pow(u, 2) + math.pow(u, 3) * w

    p_u = p_u / d

    yield p_u

    plist = list (p_u)
    print plist
def Newton(多边形,开始):
“”“牛顿求多项式根的方法。”“”
x=开始
多边形微分=多边形微分(多边形)
n=1
计数器=0
尽管如此:
如果(n>=0)和(n<1):
打破
x_n=x-(浮点数(poly_替换(poly,x))/poly_替换(poly_diff,x))
如果x_n==x:
打破
x=x_n#这是对应于给定时间的u值
n-=1
计数器+=1
产量x
贝塞尔(x)
def贝塞尔(u_值):
“”“使用有理贝塞尔曲线方程计算采样点”“”
u=u_值
p_=数学功率(1-u,3)*0.7+3*u*数学功率(1-u,2)*0.23\
+3*(1-u)*数学功率(u,2)*0.1+数学功率(u,3)*0.52
p_=p_*w
d=数学功率(1-u,3)*w+3*u*w*数学功率(1-u,2)+3*(1-u)*\
w*数学功率(u,2)+数学功率(u,3)*w
p_=p_/d
产量p_
plist=列表(p_)
印字夹板

我在Bezier()函数中也使用了同样的方法,但是plist没有创建,因为它不打印任何内容。请帮忙。谢谢。

虽然我不完全理解你的问题,但我认为答案可以归结为:

以追加模式而不是写入模式打开文件。所以不是

cFile = open("curve.dat", "w") 


虽然我不完全理解你的问题,但我认为答案可以归结为:

以追加模式而不是写入模式打开文件。所以不是

cFile = open("curve.dat", "w") 


函数做两件事:计算多项式的根,并将结果写入输出文件。理想情况下,函数应该做一件事

因此,尝试将其分解为一个函数,该函数接收一个多项式并返回一个包含根的列表,然后一步将该列表写入一个文件

修改函数的最简单方法是替换行

x = str(x)
cFile.write('\n' + x + '\n')

然后您可以这样调用您的函数:

roots = list(Newton(polynomial, start))
要了解这一点,请阅读。要将结果列表写入文件,可以使用以下代码:

with open("curve.dat", "w") as output_file:
    output_file.write("\n".join(str(x) for x in roots)

函数做两件事:计算多项式的根,并将结果写入输出文件。理想情况下,函数应该做一件事

因此,尝试将其分解为一个函数,该函数接收一个多项式并返回一个包含根的列表,然后一步将该列表写入一个文件

修改函数的最简单方法是替换行

x = str(x)
cFile.write('\n' + x + '\n')

然后您可以这样调用您的函数:

roots = list(Newton(polynomial, start))
要了解这一点,请阅读。要将结果列表写入文件,可以使用以下代码:

with open("curve.dat", "w") as output_file:
    output_file.write("\n".join(str(x) for x in roots)

为什么在Bezier中使用yield,它不会返回多个值,因此您可以更改:

yield p_u
plist = list (p_u)
print plist
致:


为什么在Bezier中使用yield,它不会返回多个值,因此您可以更改:

yield p_u
plist = list (p_u)
print plist
致:


谢谢,我会尝试一下,看看会发生什么。这是可行的,但问题是每次我运行代码时,值都会不断添加到文件中,这是不可行的。谢谢,我会尝试一下,看看会发生什么。这是可行的,但问题是每次我运行代码时,值都会不断添加到文件中,这是不可行的。我以前使用过列表。与列表中的文件一样,下一个文件将替换当前值。再次调用函数时,如何附加值?感谢牛顿中的根(…):output_file.writeline(root)@Bjorn我创建了另一个函数来将根写入文件并复制了上述代码,但它显示了一个语法错误,指向该函数后面的第一行代码。我不明白我做错了什么。谢谢。您需要显示代码和错误。这可能是一个单独的问题。@Bjorn我已经解决了语法错误。那只是个愚蠢的错误,对不起。我已经改变了我上面的问题。你能看一下吗。谢谢你。我以前用过这个名单。与列表中的文件一样,下一个文件将替换当前值。再次调用函数时,如何附加值?感谢牛顿中的根(…):output_file.writeline(root)@Bjorn我创建了另一个函数来将根写入文件并复制了上述代码,但它显示了一个语法错误,指向该函数后面的第一行代码。我不明白我做错了什么。谢谢。您需要显示代码和错误。这应该是