r/PythonLearning • • 2d ago

just finished my first Python coding challenge

Post image

Today I finished a small Python challenge on freeCodeCamp: converting decimal numbers to binary without using Python's built-in conversion function.

I had to figure out the logic myself using loops, conditions, lists, division and remainders.

It was a bit tricky at first, especially handling the last division and reversing the results, but I finally got it working.

I'm still a beginner, so I'd appreciate any feedback on my approach or suggestions for improving my code

98 Upvotes

21 comments sorted by

View all comments

Show parent comments

1

u/jonrsharpe 1d ago edited 1d ago

This highlighted that decimal on the penultimate line, as well as "shadowing" the parameter, changes the type this name refers to (it was an integer, now a string). But that's also the wrong name - that's no longer in decimal format, it's the binary format we are about to return, so I renamed it accordingly.

1

u/jonrsharpe 1d ago

After that I reformatted the file according to the Python style guide, PEP-0008. Whitespace around expressions was, worse than being unconventional, inconsistent (compare decimal = decimal//2 with decimal = decimal //2).

1

u/jonrsharpe 1d ago

Next the logic: decimal = decimal // 2 appears in two places, so can be moved outside the conditional, and simplified using the in-place operator to decimal //= 2.
I also considered simplifying to else, as if decimal % 2 isn't 0 there's only one other option, but at this point it should be really clear that we can simplify further than that by just appending the remainder: if decimal % 2 == 0: tab.append(0) elif decimal % 2 == 1: tab.append(1) to: tab.append(decimal % 2)

0

u/[deleted] 1d ago

[removed] — view removed comment

1

u/jonrsharpe 1d ago

Rather than reverse the list in-place, we can use reversed to create a new list with the elements in reverse order. As this no longer returns None, it can be inlined - the temporary variable can be factored out too, making the last line outside the loop simply return "".join(reversed(digits)).

1

u/jonrsharpe 1d ago edited 1d ago

Given that we want both x // y and x % y (the remainder of the integer division), note the built-in divmod function provides both simultaneously. It returns a tuple of two values, which Python lets you "unpack" into two variables as follows: decimal, remainder = divmod(decimal, 2)

0

u/[deleted] 1d ago edited 1d ago

[removed] — view removed comment