Skip to content
Advertisement

alternative to if else python

Ok i wrote this in python then rewrote because i don’t like if else statements. the first version worked perfectly. my second one failed and ended up taking more lines than my first version. my question is, am i just stupid? is there a better way to do this or should i just accept the need for if else statement?

sorry for the code dump, i am going mad first attempt

JavaScript

second attempt:

JavaScript

Advertisement

Answer

You can’t write this without any if/else statements (okay maybe if you really know what you’re doing you technically can by severely abusing while, but you shouldn’t), but here’s a simplified-down version that hopefully contains some useful examples of how to make your code easier to write (and read!):

JavaScript

A key thing here is that you don’t need so many variables! A single loop only needs its starting point (num) and only needs to return the list of results (from which you can get the count, since it’ll be the length of the list). Reducing the number of redundant variables eliminates a lot of unnecessary lines of code that are just copying state back and forth. Passing a value like running = True is unnecessary when it will always be True until it’s time to end the loop — instead just use while True: and return or break when you’re done.

The big takeaway is that if you have two variables that always have the same value (or even two values that are always related in exactly the same way, like a list and its length), you probably just need one of them.

You can also simplify the code by separating the two nested loops — for a given num you want to loop until the number reaches 1, so that’s one loop. You also want to loop over all the nums up to 99 (it took me a while to even figure out that that’s what the code was doing; I had to run it and look at the output to see that some of those extra pieces of state were serving to implement nested loops inside a single loop). Doing those in two different loops makes it easy, and you can put one of them in a nice neat function (I used your equation_loop name for that, although it does less work than your original version does) that takes the starting num and returns the list of results for that starting point. That simple function can then be called in an even simpler for loop that iterates through the nums and prints the results for each one.

Note that I kept everything as ints by using int division (//) — testing floats for exact equality is often dangerous because floating point numbers aren’t exactly precise! Your equation is always operating with integer values (because you only divide by two if it’s an even number) so it makes more sense to use int division and not even worry about floating point values.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement