Python зацикливание для короткой программы - PullRequest
0 голосов
/ 15 марта 2020

Когда я запускаю приведенную ниже программу, она правильно выполняет проверку ввода и выполняет последовательность Коллатца очень хорошо. Проблема в том, что он не вернется к началу. Я попытался удалить «разрыв» во второй части, я попытался переместить второй блок и другие мелочи, но я не могу вернуть его на go обратно на вход, чтобы начать все сначала.

#Collatz Sequence

import sys

#main part of input and processing number

print ('Collatz Sequence, Y\'all!')

try:
    while True:

        print ('Please type in an integer greater than 1. Type (q) to quit.')
        number = input()
        if number == 'q':
            print ('OK, see ya!')
            sys.exit() # quit the program

        if number.isdecimal() == True: #checks that input is a number
            number = int(number)
            break #breaks out of loop   

    print ('Please type in a number')




    while True:
        maybe = number%2
            #print ('DEBUG ' + 'maybe is ' + str (maybe) + ' number is ' + str (number))

        if number == 1:
            print (' ')
            print (' ')
            print ('Final answer is 1.')
            print (' ')
            print ('Let\'s do it again:')
            print (' ')
            break

        elif maybe == 0:
            print (' ')
            print (str(number) + ' is even.')
            number = number//2

        elif maybe == 1:
            print (' ')
            print (str(number) + ' is odd.')
            number = 3 * number + 1

        print ('Recalculating')

except KeyboardInterrupt:
    sys.exit()

1 Ответ

1 голос
/ 15 марта 2020

Попробуйте упростить логику c, и вы увидите свою проблему. Ваша текущая логика c:

try:
    while True:
        <get number>
        if <want to quit>:  sys.exit()
        if <number is good>:  break        
    while True:
        if <done>:  break
        <step>
except KeyboardInterrupt:
    sys.exit()

Звучит так, как будто вы хотите что-то более похожее на

try:
    while True:
        while True:
            <get number>
            if <want to quit>:  sys.exit()
            if <number is good>:  break
        while True:
            if <done>:  break
            <step>
except KeyboardInterrupt:
    sys.exit()

Вы путаете тот факт, что вы используете циклы для получения ввода и вычисления пути с необходимостью использовать al oop для продолжения этого процесса. Функции сделают это намного более очевидным.

...