TypeError:';的操作数类型不受支持;str';和';int';(Python)

TypeError:';的操作数类型不受支持;str';和';int';(Python),python,python-2.7,python-3.x,ipython,quicksort,Python,Python 2.7,Python 3.x,Ipython,Quicksort,我已经用python编写了快速排序的代码,但是这段代码抛出了一个错误 ---------- k=0 def partition(arr,low_index,high_index): key = arr[low_index] i = low_index + 1; j = high_index while True: while (i<high_index and key>=ar

我已经用python编写了快速排序的代码,但是这段代码抛出了一个错误

----------


    k=0
    def partition(arr,low_index,high_index):
        key = arr[low_index]
        i = low_index + 1;
        j = high_index

        while True:
            while (i<high_index and key>=arr[i]):
                i+=1
            while (key<arr[j]):
                j-=1
            if i<j:
                arr[i,j] = arr[j,i]
            else:
                arr[low_index,j]=arr[j,low_index]
                return j

    def quicksort(arr,low_index,high_index):
         if low_index < high_index:
            j = partition(low_index,high_index,arr)
            print("Pivot element with index "+str(j)+" has thread "+str(k))
            if left<j:
                k=k+1
                quicksort(arr,low_index, j - 1)
            if i<right:
                k=k+1
                quicksort(arr,j+1,high_index)
         return arr

    n = input("Enter the value n ")
    arr=input("Enter the "+str(n)+" no. of elements ")
    brr=quicksort(arr,0,n-1)
    print("Elements after sorting are "+str(brr))

----------
----------
k=0
def分区(arr、低索引、高索引):
key=arr[低索引]
i=低_指数+1;
j=高指数
尽管如此:
而(i=arr[i]):
i+=1

while(key您需要将n更改为整数,而不是字符串。您的错误告诉您,您正在尝试对字符串和整数执行操作(-在本例中)。将
str(n)
更改为
int(n)
,这样您的类型始终相同。

n是字符串。因此您需要将其更改为int:

如果在第37行输入[5,6,2,7],python会将其解释为类似“[5,6,2,7]”的字符串。 所以,您需要将字符串转换为列表

arr = eval(arr)

您正在代码中将“n”声明为字符串。并尝试使用字符串执行算术运算

所以它给出了这个错误。将这个
str(n)
更改为
int(n)


它将起作用!!!

可能与can u explain Please重复。Python以字符串形式接收输入。您需要使用函数int()在该输入上,将其转换为整数并捕获可能的异常。使用try和except ValueError,否则这不是一个完整的解决方案。如果将字符串赋给eval函数,则该字符串将作为Python表达式进行解析和计算。因此,如果将列表赋为类似“[5,6,2,7]”的字符串,它被解析和计算。因此,您可以得到类似[5,6,2,7]的列表对象。如果您想详细了解eval,请访问以下站点。直接从
input()
调用未过滤的值是有史以来最糟糕的想法之一。至少使用
ast
模块中的
literal\u eval
arr = eval(arr)