【问题标题】:While loop one-linerWhile 循环单行
【发布时间】:2013-02-17 14:35:12
【问题描述】:

是否有可能只在一行上有一个 python while 循环,我试过这个:

while n<1000:if n%3==0 or n%5==0:rn+=n

但它会在if 语句中产生错误消息:Invalid Syntax

【问题讨论】:

  • 你为什么不试试呢?这是一个无限循环,但就 Python 而言它会起作用。
  • @MartijnPieters 我有,它不起作用
  • “它不起作用”不是问题描述。 什么不起作用?你期望会发生什么,但实际上发生了什么?你得到了什么错误?
  • 你不能在一行上有嵌套的控制结构。
  • 对,那个不起作用。复杂的语句需要换行。

标签: python while-loop


【解决方案1】:

当在 python 中使用compound statement 时(需要套件的语句,缩进块),并且该块仅包含simple statements,您可以删除换行符,并将简单语句分开用分号。

但是,支持复合语句。

所以:

if expression: print "something"

有效,但是

while expression: if expression: print "something"

不是因为whileif 语句都是复合的。

对于您的特定示例,您可以将if expression: assignment 部分替换为conditional expression,因此使用表达式而不是复杂语句:

while expression: target = true_expression if test_expression else false_expression

一般来说,或具体来说是while n&lt;1000: rn += n if not (n % 3 and n % 5) else 0

不过,从风格的角度来看,您通常希望保留那一行。

【讨论】:

  • 有点相关,Python中有没有等价于?:C语句的语句?如果有,它应该可以完成这项工作。
  • @AshRj 有,看我的回答。
  • @AshRj:是的,条件表达式true_expression if expression else false_expression
【解决方案2】:

在您的示例中,您尝试将两级块/缩进折叠成一行,这是不允许的。您只能使用简单的语句来执行此操作,而不是循环、if 语句、函数定义等。也就是说,对于您的示例,有一个使用三元运算符的解决方法:

while n < 1000: rn += n if (n % 3 == 0 or n % 5 == 0) else 0

读作“如果条件成立,则将 n 添加到 rn,否则添加 0”。

【讨论】:

    【解决方案3】:

    可以做类似的事情:

    rn = 100
    for n in range(10): rn += n if (n%3==0 or n%5==0) else 0
    

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2017-06-22
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多