【问题标题】:How to write math equation from function to a file?如何将数学方程从函数写入文件?
【发布时间】:2018-10-04 17:04:10
【问题描述】:

我正在尝试从文件中统计数据并计算平均值、中位数、最小值和最大值。 我能做到的就这么多了。

我苦苦挣扎的地方是,我需要给用户一个选项,将计算出的统计数据保存到一个新文件中。它给了我一个错误,说'str'对象没有属性'write'

有谁知道我如何将“computed_stats”函数写入文件? 非常感谢任何帮助!

这是我的大部分代码的屏幕截图。我没有足够的屏幕空间来包含提示用户输入选择的表格或加载数据的函数。对于这个问题,它们似乎并不重要。

def table():
    print("Choose an option:")
    print("1. Load data")
    print("2. Display computed statistics")
    print("3. Save computed statistics")
    print("4. Exit")

def load_data(filename):
    with open(filename) as f:
        for lines in f:
            numbers = lines.split()
            return(numbers)

def compute_stats(data_list):

    minimum = (min(data_list))
    maximum = (max(data_list))
    mean = (sum(data_list) / (len(data_list)))
    data = sorted(data_list)
    if (len(data) % 2) == 1:
        median = data[len(data) // 2]      
    else:
        median = (data[len(data) // 2] + data[len(data) // 2 - 1]) / 2
    return minimum, maximum, mean, median

def print_stats(data_list):
    minumum, maximum, mean, median = compute_stats(data_list)
    print(minimum)
    print(maximum)
    print(mean)
    print(median)


def save_stats(new_file):
    global comp_data    
    with open(new_file, 'w') as f:        
        f.close()



def main():


    selection = 0
    while selection != "4":
        table()
        selection = input("Choose a selection: ")
        print()

        if selection == "1":
            data_list = input("Enter the name of your file: ")
            data_list = load_data(data_list)
            data_list = [int(x) for x in data_list]
            print("Data read sucessfully \n")


        elif selection == "2":          
            print_stats(data_list)


        elif selection == "3":
            new_file = input("Enter File Name")
            save_stats(new_file)


main()

【问题讨论】:

  • 将您的代码显示为文本。屏幕截图是不可接受的,因为它不能被复制并粘贴到编辑器中进行实验等。
  • 在 Python-3.x 之外添加一个纯 Python 标签
  • 代码图片在这里没用。我怀疑您使用 Paint 编写代码。我们大多数人都使用代码编辑器,这意味着代码可以作为文本使用。请将您的代码以文本形式发布在此处,直接从代码编辑器复制和粘贴,并正确格式化以使其可读(对于 Python,正确缩进)。
  • 大家好。对于那个很抱歉。我是该网站的新手,并在上班前匆忙发布了此信息。刚刚把我的代码贴在那里。我正在尝试获取从“Computed_stats”函数计算的统计信息以写入新文件。我觉得我需要从中返回值,但我不确定。在将信息传递给不同的功能时,我真的很挣扎。

标签: python python-3.x function file-writing


【解决方案1】:

您在这里遇到的一个经典问题是您将结果的表示与计算混为一谈。在您的代码中,computed_stats 函数同时执行打印和计算。顺便说一句,它的名字很糟糕,像print_statistics 这样的东西可能会更好。通常,当您的函数名称不自然地以动词开头时,它们的职责定义不正确。

对于第一次更改,我会这样做:

def compute_statistics(data_list):
    # Do whatever computations you need but don't print anything
    minimum = #Insert computation for minimum here
    maximum = #Insert computation for maximum here
    mean = #Insert computation for mean here
    median = #Insert computation for median here
    return minimum, maximum, mean, median # whatever statistics you are computing

def print_statistics(data_list):
    minimum, maximum, mean, median=compute_statistics(data_list)
    # Put your printing logic here using the results from above

def save_statistics(file_name, data_list):
    minimum, maximum, mean, median=compute_statistics(data_list)
    with open(file_name,'w') as outfile:
        file.write(f"min = {minimum}\n")
        # Put all your saving logic here

如果您希望打印的版本与保存的版本完全相同,您还可以添加一个用于生成该字符串的函数,您可以从print_statisticssave_statistics 调用该函数。

稍后,您可能希望考虑如何更好地管理应用程序的状态,这样您就不必每次都重新计算统计信息。但那是另一个故事了。

【讨论】:

  • 嘿!感谢分配的提示。我对此完全陌生。我有一种感觉,我的函数命名很糟糕,所以这是一个很大的帮助。我尝试按照您提到的方式设置它,但是当我最终运行我的 print_statistics 函数时,它说最小值,最大值..ect.. 没有定义。对此有何想法?
  • 不看代码就很难知道。我的猜测是您忘记分配变量,无论是在调用 compute_statistics (我的 print_statistics 函数中的第一行)之后还是在返回之前在 compute_statistics 内(我将编辑答案以澄清)。您收到的错误消息应该在某处向您显示一个行号,该行号指向变量被访问但未定义的位置。
  • 哦,我刚刚看到你编辑了你的问题。您的错误在minumum,...=compute_stats 行中。它应该是最小的。请注意,应避免将您的问题编辑成与您所做的完全不同的问题,因为现在对原始问题的任何答案现在都可能完全偏离主题
  • 对上面的混乱感到抱歉。如果您希望我可以将其更改回来,我仍然保存了原始代码。只是想在进行任何更改之前检查一下,以避免进一步的混淆。另外,我非常感谢您在这里的建议。这非常有帮助!
  • 没关系,只是注意到您已经编辑了答案。抱歉,如果我让这变得比它需要的更困难一些。再次感谢!
猜你喜欢
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多