为什么程序返回相同的答案时不接受我的代码?

2024-04-25 13:58:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有家庭作业的问题,我写了代码,每次我提交它,它说,返回的答案和预期的答案是相同的,但它仍然被标记为错误。 问题来了

编写一个名为“json_average”的函数,该函数将json格式的字符串作为对象数组格式的参数,其中每个对象都有键“mass”、“density”、“temperature”和“velocity”,每个键映射到一个浮点数。此函数应以JSON字符串的形式返回数组中所有对象的平均“mass”,格式为{“mass”:}

我试着用几种不同的方法编写代码,结果还是一样的。这是我最近的一次尝试。你知道吗

import json 
def json_average (x):
    data = json.loads(x)
    summ = 0 
    n = 0
    for s in data:
        a = s["mass"]
        summ = summ + a
        n  = n + 1
    d = {"mass" : (summ/n)}
    return(d)

这是它的回报

    input ['[{"mass": 43.56, "density": 251.94, "velocity": 60.65, "temperature": 15.06}, {"mass": 7.36, "density": 856.29, "velocity": 84.25, "temperature": 26.59}, {"mass": 95.26, "density": 360.24, "velocity": 67.77, "temperature": 0.25}, {"mass": 82.25, "density": 402.19, "velocity": 82.79, "temperature": -4.6}]']

returned: {'mass': 57.1075}
expected: {"mass": 57.1075}

Tags: 对象函数字符串答案代码jsondata格式
2条回答

在函数中添加此行:

d = json.dumps(d)
  • 如前所述,您很可能缺少json.dumps(d)

其他注意事项:

  • 让变量名镜像内置的python函数或数据类型(例如summ,镜像sum)不是一个好主意
  • 变量名应该是描述性的:summmass_sum
  • n = n + 1n += 1
  • 不需要使用n跟踪值的数量,除非不允许使用built-in functions。使用enumerate,就像for i, s in enumerate(data):。你知道吗
  • 为了便于学习,这里有两个代码的替代实现。你知道吗

备用代码:

def json_average(x):
    data = json.loads(x)
    mass_sum = 0 
    for i, s in enumerate(data, 1):
        mass_sum += s['mass']
    return json.dumps({'mass': mass_sum/i})

使用^{}

  • 列表理解是pythonic for-loop
  • mass_values上使用sumlen
def json_average(x):
    data = json.loads(x)
    mass_values = [value['mass'] for value in data]
    return json.dumps({'mass': sum(mass_values)/len(mass_values)})

相关问题 更多 >