Thanks so much everyone, I appreciate it! Ming, your solution is awesome. More importantly, very clear explanations on how and why. So, I appreciate that.
Thanks again, cheers! Mike On Sun, Feb 21, 2021 at 12:08 AM <2qdxy4rzwzuui...@potatochowder.com> wrote: > On 2021-02-20 at 20:49:15 -0800, > Dan Stromberg <drsali...@gmail.com> wrote: > > > On Sat, Feb 20, 2021 at 7:13 PM Ming <m...@pgp.cool> wrote: > > > > > I just wrote a very short code can fulfill your needs: > > > > > > a = 2342 > > > b = int("".join(map(lambda x: str((int(x)-3)%10) ,list(str(a))))) > > > > > I tend to favor plenty of temporary variables with descriptive names, but > > this is indeed short. > > > > Apart from that, you may find that using a generator expression is > shorter > > and clearer than map+lambda. It should allow to additionally eliminate > the > > list conversion. > > > > So in the terse form you've got there, it'd be more like: > > b = int(''.join(str((int(x) - 3) % 10) for x in str(a)) > > > > But in real life, I'd try to use descriptive variable names for some of > the > > subexpressions in that. This makes reading and debugging simpler, which > is > > important because the maintenance phase of software is almost always much > > longer and costly than the development phase. And although you could do > a > > generator expression for each of the different parts of (int(x) - 3) % > 10, > > I kinda like having a named function for just that piece. > > > > So maybe: > > def rot_3(character): > > """Convert to int, subtract 3 and mod 10.""" > > digit = int(character) > > assert 0 <= digit <= 9 > > return (digit - 3) % 10 > > > > > > def descriptive_minus_three_caesar(input_number): > > """Convert to a -3 caesar cypher on an integer.""" > > string_number = str(input_number) > > rotated_digits = (rot_3(character) for character in string_number) > > output_string = ''.join(str(digit) for digit in rotated_digits) > > output_number = int(output_string) > > return output_number > > >>> descriptive_minus_three_caesar('38') > 5 > > The problem is underspecified, and the examples are lacking, but based > on the phrase "each digit" and the examples that contain a 3, I'd prefer > to see "38" become "05." > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list