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

时间:2019-11-05 01:45:34

标签: python json

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

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

我尝试用几种不同的方式编写代码,但仍然得到相同的结果。这是我最近的尝试。

<ListView
    SelectionMode="None">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="data:Music">
            <SwipeControl Loaded="SwipeControl_Loaded">
                <SwipeControl.LeftItems>
                    <SwipeItems Mode="Reveal">
                        <SwipeItem Text="Favorite">
                        </SwipeItem>
                    </SwipeItems>
                </SwipeControl.LeftItems>
                <SwipeControl.RightItems>
                    <SwipeItems Mode="Execute">
                        <SwipeItem Text="Remove">
                        </SwipeItem>
                    </SwipeItems>
                </SwipeControl.RightItems>
                <local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=PlaylistController, Path=ShowAlbumText}">
                    <local:PlaylistControlItem.ContextFlyout>
                        <MenuFlyout Opening="OpenMusicMenuFlyout" />
                    </local:PlaylistControlItem.ContextFlyout>
                </local:PlaylistControlItem>
            </SwipeControl>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这是它返回的内容

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)

2 个答案:

答案 0 :(得分:0)

在函数中添加以下行:

d = json.dumps(d)

答案 1 :(得分:0)

  • 如前所述,您很可能会错过json.dumps(d)

其他注意事项:

  • 让变量名镜像内置的python函数或数据类型(例如summ,镜像sum)不是一个好主意
  • 变量名应具有描述性:summmass_sum
  • n = n + 1n += 1
  • 除非您不允许使用built-in functions,否则无需使用n来跟踪值的数量。使用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})

使用list comprehension

  • 列表理解是pythonic for-loop
  • sum上使用lenmass_values
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)})