[Tutor] How to separate UI code from program logic?

boB Stepp robertvstepp at gmail.com
Tue May 8 14:55:34 EDT 2018


On Mon, May 7, 2018 at 12:26 AM, boB Stepp <robertvstepp at gmail.com> wrote:

> def get_collatz_number(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):
>     """Creates a generator, which will yield a Collatz sequence starting from
>     seed.  seed must be a positive integer, or the sequence will not converge to
>     1."""
>
>     collatz_number = seed
>     while True:
>         collatz_number = get_collatz_number(collatz_number)
>         yield collatz_number
>         if collatz_number == 1:
>             return
> Questions and comments:

After taking a break from this and coming at this afresh, I
immediately saw an answer to this question:

> 2)  I spent a lot of effort trying to come up with a way to combine
> the two functions, get_collatz_number() and
> generate_collatz_sequence(), into something both more compact and more
> readable, but I was unsuccessful.  I suspect there is a better way.
> Is there?  And how would I do it?

def generate_collatz_sequence(seed):
    """Creates a generator, which will yield a Collatz sequence starting from
    seed.  seed must be a positive integer, or the sequence will not converge to
    1."""

    collatz_number = seed
    while True:
        if collatz_number % 2 == 0:
            collatz_number //= 2
        else:
            collatz_number = 3 * collatz_number + 1
        yield collatz_number
        if collatz_number == 1:
            return

Judging from the lack of responses, I guess I must have been on track
on the other questions.

-- 
boB


More information about the Tutor mailing list