在CodeSkulptor上得到错误的答案

2024-04-29 21:57:34 发布

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

在一个在线课程中,我的一个同事在python中的dictionary相关的作业中遇到了一个输出错误,但奇怪的是,同样的代码在IDLE上可以正常工作并打印出正确的代码。。autograger软件支持Python2.7,并且基于Skulpt和CodeMirror,所以为了测试这段代码,我使用了CodeSkulptor Viz模式,它打印了错误的答案。为什么会这样?在

handle = [ "From stephen.marquard@uct.ac.za",
"From louis@media.berkeley.edu",
"From zqian@umich.edu",
"From rjlowe@iupui.edu",
"From zqian@umich.edu",
"From rjlowe@iupui.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
"From gsilver@umich.edu",
"From gsilver@umich.edu",
"From zqian@umich.edu",
"From gsilver@umich.edu",
"From wagnermr@iupui.edu",
"From zqian@umich.edu",
"From antranig@caret.cam.ac.uk",
"From gopal.ramasammycook@gmail.com",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From stephen.marquard@uct.ac.za",
"From louis@media.berkeley.edu",
"From louis@media.berkeley.edu",
"From ray@media.berkeley.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
    ]

answer_key = 0

dct = dict()
for line in handle:
    if line.startswith('From '):
        email = line.strip().split()[1]
        if not email in dct:
            dct[email] = 1
        else:
            dct[email] += 1

answer_key = max(dct, key=dct.get)
print answer_key, dct[answer_key]  

正确的输出是 cwen@iupui.edu五

但codeculptor打印:
zqian@umich.edu四


Tags: keyfrommediaacdctdavideduuct
1条回答
网友
1楼 · 发布于 2024-04-29 21:57:34

问题是Skulpt并不是Python的完整实现,而且您使用了它不支持的特性:key上的key参数,或者,实际上,任何函数上的任何关键字参数(请参见the docs)。在

如果针对稳定版本进行尝试,则会出现一个错误:

Line 41: ValueError: Keyword arguments are not supported by this function

beta版显然增加了对这个特性的支持,但它显然仍然有缺陷,这可能就是为什么你得到了错误的答案。我假设他们有一个bug报告系统,所以你应该提交一个关于这个的bug。在

但是,除非您想等到Skulpt的下一个版本完成,并推出新版本的CodeSkulptor,否则这对您没有任何帮助;您需要解决缺少的/有缺陷的特性。(请务必留下评论,提醒您自己或其他读者,为什么您需要解决方法。)

正如Sorting HOWTO所解释的那样,在排序相关函数(包括max,即使这并不明显)之前,Python程序员必须执行一个称为“decorate sort(or search)-uncorate”的操作:创建一个新的序列,您已经修改(以某种可逆的方式)以按所需的顺序排序,然后调用您的函数,然后反转修改。在

在您的例子中,您希望按值顺序对字典进行排序。可逆修饰的最简单方法是创建(value, key)对的列表。其中的max将是最大值的value和{},然后您需要使用key。所以:

^{pr2}$

相关问题 更多 >