你能帮我弄清楚代码中的反模式和问题吗?我似乎无法弄清楚这个代码的反模式和解决方案。我修正了一些错误,但我相信还有很多错误:
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)
答案 0 :(得分:2)
您的代码有几个语法问题和一些逻辑问题。此外,您没有正确使用class constructor
,只是给它一个pass
不是一个好习惯。另一件事是使用list comprehension
作为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
答案 1 :(得分:1)
错误:
self
作为check_pass
result
(如果没有失败,将不会返回result
;如果在成功之前发生失败,result
将不会拥有所有数据) return result
应与for k in ...
反模式:
class
只有一个非__init__
方法(只使用一个函数)else
分支代替pass
) - 无用的else
分支