这段代码中的反模式和错误是什么?

2024-09-27 21:32:15 发布

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

你能帮我找出代码中的反模式和问题吗。我似乎不知道这段代码的反模式和解决方案。我已经纠正了一些错误,但我相信还有很多错误:

class Stringchecker():
    def __init__(self):
        pass
    def check_pass(people_text):
        result = []
        for k in people_text:
            if people_text[k] =="pass":
                result.append(k)
            else:
                return result


if __name__== "__main__":
    people_text = {'Mia': 'pass', 'Mike': 'fail', 'Jack': 'pass')
    sc = StringChecker()
    print sc.check_pass(people_text)

Tags: 代码textifinitdefcheck错误模式
2条回答

错误:

  • 不使用self作为check_pass的第一个参数
  • 在第一次失败后返回result(如果没有失败,result将不会返回;如果失败发生在成功之前,result将不会拥有所有数据)
  • return result应该与for k in ...处于相同的缩进级别

反模式:

  • 只有一个非class方法的__init__(只需使用函数)
  • (假设else分支有一个pass)-无用的else分支

您的代码有几个语法问题和一些逻辑问题。另外,您没有正确地使用^{},仅仅给它一个pass不是一个好的做法。另一件事是使用^{}作为check_pass方法。我对你的代码做了一些修改:

class StringChecker(object):

    def __init__(self, people_text):
        self.people_text = people_text

    def check_pass(self):
        return [k for k, v in self.people_text.items() if v == "pass"]

if __name__ == "__main__":
    sc = StringChecker({'Mia': 'pass', 'Mike': 'fail', 'Jack': 'pass'})
    print sc.check_pass()

输出:

['Mia', 'Jack']

:更新了列表理解,并提供了来自JLPeyret的建议

相关问题 更多 >

    热门问题