Edabit任务未显示正确的结果

问题描述 投票:0回答:2

我正在做一个简单的任务,需要按表达式结果对列表进行排序并运行此代码:

   def sort_by_answer(lst):
        ans = []
        dict = {}
        for i in lst:
            if 'x' in i:
                i = i.replace('x', '*')
            dict.update({i: eval(i)})
        dict = {k: v for k, v in sorted(dict.items(), key=lambda item: item[1])}
        res = list(dict.keys())
        for i in res:
            if '*' in i:
                i = i.replace('*', 'x')
                ans.append(i)
            else:
                ans.append(i)
        return ans

它签出,但是我要进行此测试的站点(这是任务的链接(https://edabit.com/challenge/9zf6scCreprSaQAPq)告诉我,我的列表未正确排序),有人可以帮我改进此代码,或者这样可以在每种情况下都可以使用吗?

P.S。

if 'x' in i:
      i = i.replace('x', '*')

这样做是为了让我可以使用eval函数,但站点输入在其列表中具有'x'而不是'*'。

python
2个回答
0
投票
您可以尝试这个。但是在不受信任的字符串上使用eval是危险的。

In [63]: a=['1 + 1', '1 + 7', '1 + 5', '1 + 4'] In [69]: def evaluate(_str): ...: if 'x' in _str: ...: _str=_str.replace('x','*') ...: return eval(_str)


0
投票
我不认为您的代码有问题,可能他们使用的是比3.6更旧的内容,并且弄乱了dict的顺序。元组会更安全。
© www.soinside.com 2019 - 2024. All rights reserved.