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
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.
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'.
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