You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实验作业问题:SD1列输出0但standard1函数计算值正确

标准差计算实验:SD1列无法存储值的问题修复

问题描述

我正在完成计算机科学课程的标准差计算实验,代码整体逻辑正常,DEV/DEV1列可正常输出,但SD1列始终输出0;尽管standard1函数能正确打印出SD1的计算值,却无法将值存入sd1列表以在对应列显示。

原代码

n=20
import math
def main():
    #Listdec
    x=[0]*n
    dev=[0.0]*n
    dev1=[0.0]*n
    sd1=[0]*n
    #filedec
    infile=open("lab4.txt","r")
    outfile=open("lab4.out","w")
    #vardec
    sumx=0.0
    std=0.0
    xbar=0.0
    dev2=0.0
    sd2=0.0
    #callfunction
    sumx=loadrec(infile,x)
    sd2=standard1
    #compute average
    xbar=sumx/n
    #call deviation function
    dev2=deviation(x,dev,dev1,xbar)
    #compute standard deviation
    std=math.sqrt(dev2/n)
    #function standard
    standard1(x,xbar,std,sd1)
    #sd2=standard(dev1,sd1,std)
    #calloutdata
    outdata(outfile,x,dev,dev1,sd1)
    print("SUM=",sumx)
    print("AVG=",xbar)
    print("STD=",std)
    print("SD2=",sd2)
    #closefile
    infile.close()
    outfile.close()
    dummy=input("Press enter to continue") #you know what this is by now 
    #functions
def loadrec(file,a):
    #local var
    k=0
    s=0
    while(k<n):
        #reads first line of data
        templist=file.readline().strip('\n').split(',')
        a[k]=int(templist[0])
        s=s+a[k]
        k=k+1
    return(s)
def standard1(a,b,c,d):
    #a=student score b=avg c=standard deviation
    k=0
    s=0
    while(k<n):
        s=(a[k]-b)/c
        print(s)
        k=k+1
    return(k)

def deviation(a,b,c,d):
    #a=x b=dev c=dev1 d=xbar
    #local var
    k=0
    s=0
    while(k<n):
        b[k]=d-a[k]
        c[k]=b[k]*b[k]
        s=s+c[k]
        k=k+1
    return(s)
def outdata(file,a,b,c,d):
    #localvar
    #file=outfile a=x b=dev c=dev1 d=sd1
    k=0
    #shoves the results to the screen
    print("Scores","   ","DEV","   ","DEV1","   ","SD1","\n")
    while (k<n):
        print((str(a[k])+str("   ")+str(b[k])+("   ")+str(c[k])+str("   ")+str(d[k])))
        file.write(str(a[k])+"  "+str(b[k])+"  "+str(c[k])+str("\n"))
        k=k+1

main()

数据文件lab4.txt内容

75
90
80
85
76
70
68
84
92
80
50
60
73
89
100
40
75
76
94
86

问题排查

  • 核心问题:standard1函数未将计算值存入列表
    函数仅计算并打印了标准化值,但未将结果赋值给传入的sd1列表(参数d),导致sd1始终保持初始全0状态。
  • 次要问题:无效的sd2赋值
    sd2=standard1是将函数对象本身赋值给变量,而非调用函数,完全不符合预期逻辑。
  • 输出文件缺失SD1数据
    outdata函数的文件写入部分仅包含Scores、DEV、DEV1三列,未写入SD1的计算结果。

解决方案

1. 修复standard1函数

修改函数逻辑,将计算结果存入sd1列表:

def standard1(a,b,c,d):
    #a=学生分数 b=平均分 c=标准差 d=sd1列表
    k=0
    while(k<n):
        # 将标准化值存入列表对应位置
        d[k] = (a[k]-b)/c
        print(d[k])
        k=k+1

2. 修正sd2的无效赋值

若不需要sd2可直接删除该行;若需要调用其他函数,改为正确的函数调用格式(可参考原代码中注释掉的sd2=standard(dev1,sd1,std)调整)。

3. 修复outdata函数的文件写入

让输出文件包含完整的四列数据:

def outdata(file,a,b,c,d):
    #file=输出文件 a=x b=dev c=dev1 d=sd1
    k=0
    print("Scores","   ","DEV","   ","DEV1","   ","SD1","\n")
    while (k<n):
        # 优化控制台输出格式
        print(f"{a[k]:<6} {b[k]:<6.2f} {c[k]:<6.2f} {d[k]:<6.2f}")
        # 写入文件时包含SD1列
        file.write(f"{a[k]}  {b[k]:.2f}  {c[k]:.2f}  {d[k]:.2f}\n")
        k=k+1

效果验证

修改完成后,sd1列表会正确存储每个数据的标准化值,SD1列可正常显示计算结果,输出文件也会包含完整的四列数据。

内容的提问来源于stack exchange,提问作者DawsonB9822

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:52