Lucy L
Lucy L

Reputation: 37

Python loop freezing with no error

I am trying to make a code in Python that shows the number of steps needed to reach one from any number using a simple algorithm. This is my code:

print('Enter the lowest and highest numbers to test.')
min = input('Minimum number: ')
min = int(min)
max = input('Maximum number: ')
max = int(max) + 1
print(' ')
for n in range(max - min):
    count = 0
    num = n
    while not num == 1:
        if num % 2 == 0:
            num = num / 2
        else:
            num = (num * 3) + 1
    count = count + 1
    print('Number: '+str(int(n)+min)+'   Steps needed: '+count)

It freezes up without showing an error message, and I have no clue why this happens.

Upvotes: 1

Views: 1129

Answers (2)

Robᵩ
Robᵩ

Reputation: 168616

1) You are invoking range() incorrectly.

Your code: for n in range(max - min): produces the range of numbers starting at 0 and ending at the value max-min. Rather, you want the range of numbers starting at min and ending at max.

Try this:

for n in range(min, max):

2) You are performing floating-point division, but this program should use only integer division. Try this:

num = num // 2

3) You are updating the count variable in the wrong loop context. Try indenting it one stop.

4) Your final line could be:

print('Number: '+str(n)+'   Steps needed: '+str(count))

Program:

print('Enter the lowest and highest numbers to test.')
min = input('Minimum number: ')
min = int(min)
max = input('Maximum number: ')
max = int(max) + 1
print(' ')
for n in range(min, max):
    count = 0
    num = n
    while not num == 1:
        if num % 2 == 0:
            num = num // 2
        else:
            num = (num * 3) + 1
        count = count + 1
    print('Number: '+str(n)+'   Steps needed: '+str(count))

Result:

Enter the lowest and highest numbers to test.
Minimum number: 3
Maximum number: 5

Number: 3   Steps needed: 7
Number: 4   Steps needed: 2
Number: 5   Steps needed: 5

Upvotes: 2

Clay
Clay

Reputation: 124

It looks like it's getting stuck in the while not num == 1 loop. Remember that range() starts at 0, so num is first set to 0, which is divisible by 2, and so will be reset to 0/2... which is 0 again! It will never reach 1 to break the loop.

EDIT: I earlier said that count = 0 needed to be moved. Actually, looking more carefully it seems like the line count = count + 1 line just needs to be moved under the while loop.

Upvotes: 0

Related Questions