codeahead
codeahead

Reputation: 133

Python loop limit error

In the following the code (from udacity course CS-101), I am trying to create a huge index on the same lines as done in the course lecture. Here, the input to the make_big_index - size limits the number of entries in the list - index. However, whenever I run the code, the while loop seems to run infinitely, without termination. The termination condition- len(index) < size, seems to pass every time, even though len(index) > size.

I have tried the pdb.settrace() option and step by step debugging shows that even though input size = 3, the loop continues and never exits.

import pdb, sys

def add_to_index(index, keyword, url):
    for entry in index:
        if entry[0]== keyword:
            entry[1].append(url)
            return
    index.append([keyword, [url]])
    return

def make_string(p):
    s=""
    for e in p:
        s=s+e
    return s


def make_big_index(size):
    index=[]
    letters = ['a','a','a','a','a','a','a','a']
    pdb.set_trace()
    while len(index) < size:
        word = make_string(letters)
        add_to_index(index, word, 'fake')
        print index
        for i in range(len(letters)-1, 0, -1):
            if letters[i] < 'z':
                letters[i] = chr(ord(letters[i])+1)
                break
            else:
                letters[i]='a'

##    return index

def main():
    size=raw_input('>size: ')
    make_big_index(size)

if __name__ == '__main__':
    main()

Upvotes: 2

Views: 277

Answers (1)

Anand S Kumar
Anand S Kumar

Reputation: 90899

size is a string, since you are taking its input as -

size=raw_input('>size: ')
make_big_index(size)

In Python 2.x, strings are always greater than int (any int) , and hence that is why the loop never ends. Example to show this -

>>> '1' > 9999999999999999999999999999999
True

Convert it to a int when taking the input , Example -

size=int(raw_input('>size: '))
make_big_index(size)

Upvotes: 3

Related Questions