Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

While loop one-liner

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 produces an error message: Invalid Syntax at the if statement

like image 308
user2128561 Avatar asked Mar 03 '13 12:03

user2128561


People also ask

How do you echo a new line?

There are a couple of different ways we can print a newline character. The most common way is to use the echo command. However, the printf command also works fine. Using the backslash character for newline “\n” is the conventional way.

Do while loops in bash?

How to do a do-while loop in bash? There is no do-while loop in bash. To execute a command first then run the loop, you must either execute the command once before the loop or use an infinite loop with a break condition.


2 Answers

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.

like image 123
Martijn Pieters Avatar answered Sep 22 '22 19:09

Martijn Pieters


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

like image 21
l4mpi Avatar answered Sep 25 '22 19:09

l4mpi