首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程范式测验

编程范式测验
EN

Code Review用户
提问于 2022-08-28 14:30:33
回答 1查看 68关注 0票数 1

我有这段代码,目前还没有优化过:

代码语言:javascript
复制
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)

我的目标是使这个功能达到完美,所以它遵循完美的范式。我如何优化它,使它尽可能完美。我非常感谢你们的每一个回答!

EN

回答 1

Code Review用户

发布于 2022-08-28 15:19:13

“完美”在某种程度上是主观的,但这里有一些简化。

我不认为像您这样传递函数引用有多大的价值;复杂性并不值得这么做。它也不特别需要一个与输入函数分离的“清洁器”。

你使用集文字和集合交集是合理的。

report_result可以成为你的main。添加__main__守卫对它的调用。

.format()更喜欢字符串插值。

考虑调用.lower()以获得更多的原谅字符串匹配。

建议

代码语言:javascript
复制
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()

一个不需要构造第二个集合的替代计数表达式可能如下所示

代码语言:javascript
复制
    return sum(1 for paradigm in paradigms if paradigm in valid_paradigms)

我对第一种形式的偏爱弱于这一种。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/279231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档