【问题标题】:The efficiency of a specific while loop特定while循环的效率
【发布时间】:2015-07-08 19:18:59
【问题描述】:

我正在为一个学校项目制作一个程序,并且在该程序中,用户做出了决定。以确保用户输入有效的输入。我想知道使用这样的while循环是否有效。它包含在可以多次使用的函数中。我这样做是因为将调用此函数并将返回的值存储在变量中。这是一个命令行程序:

    def user_choice(): 
       while True:
            choice = input("choose \'a\' or '\b\':")
            if choice == "a" or choice == "b":
                return choice
            else:
                print("not a valid input")

【问题讨论】:

  • 效率很低。你为什么要等待一个非常慢的水袋来响应每个循环? (开个玩笑。似乎足够高效。)
  • 循环对于多次迭代很有用,但听起来您正在验证一个决策。如果是这样,您不需要循环;只需单独使用条件语句。
  • @AnthonyRGray,它验证单个输入,循环的目的是不断请求输入,直到它得到一个有效的输入。
  • “将焦点设置到该领域”@AnthonyRGray。呃,我怀疑这是针对命令行/IDLE/ipython 的事情,所以没有字段,这是正确的方法。
  • 它在哪里说 JavaScript?

标签: python loops python-3.x while-loop


【解决方案1】:

就原始机器效率而言,您的算法完全可以接受。瓶颈是用户的输入。每个输入它只通过循环一次,因此该代码的实际执行基本上是瞬时的。有些程序会使用循环以计算机可以管理的最快速度不断检查某些条件,这确实不是最理想的(占用 CPU 内核)。

就良好的编码风格而言,您的算法也完全可以接受。在有效输入上使用while True(或while 1)和return 非常常见,任何读者都很容易理解。

我建议进行一些细微的修改,例如if choice.lower().strip() in ('a', 'b'):,而不是评论中指出的if choice == "a" or choice == "b":,但这只是为了使它在面对混乱的用户输入时更加健壮。此外,您不需要转义引号,除非它们属于包含字符串的类型,因此您可以使用 input("choose 'a' or 'b':") 而不是 input("choose \'a\' or '\b\':")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2012-03-17
    • 1970-01-01
    • 2021-11-24
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多