I was solving a programming problem in one of my books concerning the generation of a Collatz sequence (https://en.wikipedia.org/wiki/Collatz_conjecture), and started to wonder how I should separate my program's output from its logic. It seems like this should be obvious to me, but, unfortunately, it isn't. The core functions from my program are:
#---------------------------------------------------------------------------- def collatz(integer): """Returns the Collatz sequence number corresponding to integer. integer must be > 0, or the sequence will not converge to 1.""" if integer % 2 == 0: return integer // 2 else: return 3 * integer + 1 def generate_collatz_sequence(seed): """Generates a Collatz sequence starting from seed. seed must be a positive integer, or the sequence will not coverge to 1.""" counter = 0 collatz_number = seed print("Collatz seed number: ", collatz_number) while True: counter += 1 collatz_number = collatz(collatz_number) print("Collatz number", counter, ": ", collatz_number) if collatz_number == 1: print("The Collatz sequence has once again converged to 1!") break #---------------------------------------------------------------------------- My understanding of best practice here is that I should not have any print() calls inside my generate_collatz_sequence() function. I _could_ store the generated sequence in a list and return it, but that does not seem like good use of RAM if some user-supplied seed value led to kazillions of Collatz sequence numbers being generated. As it stands there will be no theoretical RAM issues as the numbers are being generated and then outputted one at a time. OTOH, if I created some kind of display messages function, I don't see how I have gained anything as these calls to a display message function would just be taking the place of the print() calls. The end result would be the same -- display code interleaved with program logic code. What am I being dense about here? -- boB _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor