Reputation: 21
as part of the Chapter 3 exercise for Automate the Boring Stuff, I need to write a short program that mimics the Collatz sequence, where:
Below is my code so far, which seems to work but I would appreciate any advice/best practice for improving it.
My main question is, after the program prints 'Enter integers only', is there any short and simple way to loop back to the 'Enter any number: ' line? I can't think of anything atm besides complicated if loops. Thanks.
def collatz(number):
if number % 2 == 0 :
results = number // 2
print(results)
if results != 1:
collatz(results)
elif number % 2 == 1 :
results = 3 * number + 1
print(results)
if results != 1:
collatz(results)
try:
entry = input('Enter any number : ')
number = int(entry)
print(number)
collatz(number)
except ValueError:
print('Enter integers only.')
except KeyboardInterrupt:
sys.end()
Upvotes: 1
Views: 48
Reputation: 66
You can define an iteration to make sure the input is integer type.
while True: # executes the loop body indefinitely
try:
entry = input('Enter any number : ')
number = int(entry)
print(number)
collatz(number)
break # immediately terminates the loop entirely
except ValueError:
print('Enter integers only.')
except KeyboardInterrupt:
sys.end()
Upvotes: 0
Reputation: 414
As you want to keep prompting the same, until the program exits. I'd suggest just encapsulating the program code in a while(true) loop:
while True:
try:
entry = input('Enter any number : ')
number = int(entry)
print(number)
collatz(number)
except ValueError:
print('Enter integers only.')
except KeyboardInterrupt:
sys.end()
Upvotes: 0
Reputation: 127
You can try using a while loop
. The below code will be helpful for you.
def collatz(number):
if number % 2 == 0 :
results = number // 2
print(results)
if results != 1:
collatz(results)
elif number % 2 == 1 :
results = 3 * number + 1
print(results)
if results != 1:
collatz(results)
while True:
try:
entry = input('Enter any number : ')
number = int(entry)
print(number)
collatz(number)
except ValueError:
print('Enter integers only.')
except KeyboardInterrupt:
break # Stop the while loop.
sys.end()
Upvotes: 1