【问题标题】:TypeError: unsupported operand type(s) for -: 'str' and 'int' (Python)TypeError: 不支持的操作数类型 -: 'str' 和 'int' (Python)
【发布时间】:2017-02-14 07:06:14
【问题描述】:

我已经在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))

----------

它抛出的错误是

输入值 n 4

输入 4 号。元素 [5,6,2,7] 回溯(最近一次通话最后): 文件“C:\Users\devendrabhat\Documents\dev\dev\quick.py”,第 38 行,在 brr=快速排序(arr,0,n-1) TypeError: 不支持的操作数类型 -: 'str' 和 'int'

【问题讨论】:

标签: python python-2.7 python-3.x ipython quicksort


【解决方案1】:

您需要将 n 更改为整数,而不是字符串。您的错误告诉您,您正在尝试对字符串和整数执行操作(在这种情况下)。将str(n) 更改为int(n),这样您就可以始终使用相同的类型。

【讨论】:

    【解决方案2】:

    n 是字符串。所以你需要把它改成int:

    n = int(n)
    

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

    arr = eval(arr)
    

    【讨论】:

    • 使用 try 和除了 ValueError,没有它不是一个完整的解决方案。
    • 如果你给 eval 函数一个字符串,这个字符串会被解析并作为 Python 表达式求值。因此,如果您将列表作为“[5,6,2,7]”之类的字符串给出,它会被解析和评估。结果,您可以获得像 [5,6,2,7] 这样的列表对象。如果您想详细了解eval,请查看以下站点。 docs.python.org/3/library/functions.html#eval
    • 直接在来自input() 的未过滤值上调用eval() 是有史以来最糟糕的想法之一。至少使用ast 模块中的literal_eval
    【解决方案3】:

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

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

    会有用的!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 2012-11-29
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多