Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Data Science by (18.4k points)

I am working on IDLE when I run the code, I am getting an error:

Traceback (most recent call last):   File "C:/Python34/inversion3.py",

line 44, in <module>

    nInversions.inversionMergeSort(m)   File "C:/Python34/inversion3.py", line 16, in inversionMergeSort

     left = m[0:half] TypeError: slice indices must be integers or None or have an _index_ method

This is the code:

from collections import deque

m = []

f = open("IntegerArray.txt")

for line in f:

    m.append(int(line))

class InversionCount:

    def __init__(self, n):

        self.n = n

    def inversionMergeSort(self, m):

        if len(m) <= 1:

            return m

        half = len(m)/2

        left = m[0:half]

        right = m[half

        left = self.inversionMergeSort(left)

        right = self.inversionMergeSort(right)

        return self.inversionSort(left, right)

    def inversionSort(self, left, right):

        leftQueue = deque(i for i in left)

        rightQueue = deque(j for j in right)

        orderedList = []

        while len(leftQueue) > 0 or len(rightQueue) > 0:

            if len(leftQueue) > 0 and len(rightQueue) > 0:

                if leftQueue[0] <= rightQueue[0]:

                    orderedList.append(leftQueue[0])

                    leftQueue.popleft()

                else:

                    orderedList.append(rightQueue[0])

                    self.n += len(leftQueue)

                    rightQueue.popleft()

            elif len(leftQueue) > 0:

                orderedList.append(leftQueue[0])

                leftQueue.popleft()

            elif len(rightQueue) > 0:

                orderedList.append(rightQueue[0])

                rightQueue.popleft()

        return orderedList

nInversions = InversionCount(0)

nInversions.inversionMergeSort(m)

print (nInversions.n)

1 Answer

0 votes
by (36.8k points)

If you see you are getting flot as output but not int

>>> 3/2

1.5

In you line number 15

 half = len(m)/2

To make it double, you need to give one more slash to the code:

 half = len(m)//2

 If you are a beginner and want to know more about Data Science the do check out the Data Science course

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...