我有这段代码,目前还没有优化过:
def capture_inputs(cleaner):
return cleaner(input("What are valid programming paradigms?").split(","))
def clean_input(user_input):
result = []
for paradigm in user_input:
result.append(paradigm.strip())
return result
def count_valid_programming_paradigms(paradigms):
valid_paradigms = {"imperative","functional","object-oriented","logical","declarative"}
given_paradigms = set(paradigms)
return len(valid_paradigms & given_paradigms)
def report_result(user_input, counter):
valid_paradigms_count = counter(user_input)
if counter(user_input) > 0:
print("You found {} valid paradigms".format(valid_paradigms_count))
else:
print("You did not find any valid paradigm")
report_result(capture_inputs(clean_input),count_valid_programming_paradigms)我的目标是使这个功能达到完美,所以它遵循完美的范式。我如何优化它,使它尽可能完美。我非常感谢你们的每一个回答!
发布于 2022-08-28 15:19:13
“完美”在某种程度上是主观的,但这里有一些简化。
我不认为像您这样传递函数引用有多大的价值;复杂性并不值得这么做。它也不特别需要一个与输入函数分离的“清洁器”。
你使用集文字和集合交集是合理的。
report_result可以成为你的main。添加__main__守卫对它的调用。
比.format()更喜欢字符串插值。
考虑调用.lower()以获得更多的原谅字符串匹配。
from typing import Iterator, Iterable
def capture_inputs() -> Iterator[str]:
line = input("What are valid programming paradigms? ")
for answer in line.split(","):
yield answer.strip().lower()
def count_valid(paradigms: Iterable[str]) -> int:
valid_paradigms = {"imperative", "functional", "object-oriented", "logical", "declarative"}
given_paradigms = set(paradigms)
return len(valid_paradigms & given_paradigms)
def main() -> None:
inputs = capture_inputs()
n_valid = count_valid(inputs)
if n_valid > 0:
print(f"You found {n_valid} valid paradigms")
else:
print("You did not find any valid paradigm")
if __name__ == '__main__':
main()一个不需要构造第二个集合的替代计数表达式可能如下所示
return sum(1 for paradigm in paradigms if paradigm in valid_paradigms)我对第一种形式的偏爱弱于这一种。
https://codereview.stackexchange.com/questions/279231
复制相似问题