While loop one-liner

后端 未结 3 1688
星月不相逢
星月不相逢 2020-12-10 16:14

Is it possible for to have a python while loop purely on one line, I\'ve tried this:

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

But it produ

相关标签:
3条回答
  • 2020-12-10 16:42

    When using a compound statement in python (statements that need a suite, an indented block), and that block contains only simple statements, you can remove the newline, and separate the simple statements with semicolons.

    However, that does not support compound statements.

    So:

    if expression: print "something"
    

    works, but

    while expression: if expression: print "something"
    

    does not because both the while and if statements are compound.

    For your specific example, you can replace the if expression: assignment part with a conditional expression, so by using an expression instead of a complex statement:

    while expression: target = true_expression if test_expression else false_expression
    

    in general, or while n<1000: rn += n if not (n % 3 and n % 5) else 0 specifically.

    From a style perspective, you generally want to leave that one line on it's own, though.

    0 讨论(0)
  • 2020-12-10 16:45

    In your example, you try to collapse two levels of blocks / indentation into a single line, which is not allowed. You can only do this with simple statements, not loops, if statements, function definitions etc. That said, for your example there is a workaround using the ternary operator:

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

    which reads as 'add n to rn if the condition holds, else add 0'.

    0 讨论(0)
  • 2020-12-10 16:49

    It is posible to do something similar:

    rn = 100
    for n in range(10): rn += n if (n%3==0 or n%5==0) else 0
    
    0 讨论(0)
自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题