Python 错误消息:不支持的操作数类型___

Python 错误消息:不支持的操作数类型___,python,windows-7,primes,divide,Python,Windows 7,Primes,Divide,这个程序用来计算素数并将它们保存到一个文件中。保存功能尚未正确编程,请忽略。该程序的工作原理是将奇数与以前的素数进行比较。如果它不是这些数字的倍数,那么它就是素数。理论上,它应该可以工作,但是当我尝试将数字除以列表中的素数时,它会返回错误消息: 回溯最近一次呼叫上次: 文件C:\Users\Archie\Desktop\math python\prime\prime v1.3.py,第51行,在 素数 primeCheck中的文件C:\Users\Archie\Desktop\math pyth

这个程序用来计算素数并将它们保存到一个文件中。保存功能尚未正确编程,请忽略。该程序的工作原理是将奇数与以前的素数进行比较。如果它不是这些数字的倍数,那么它就是素数。理论上,它应该可以工作,但是当我尝试将数字除以列表中的素数时,它会返回错误消息:

回溯最近一次呼叫上次: 文件C:\Users\Archie\Desktop\math python\prime\prime v1.3.py,第51行,在 素数 primeCheck中的文件C:\Users\Archie\Desktop\math python\prime\prime v1.3.py,第8行 check=intnum/listImport TypeError:/:“int”和“list”的操作数类型不受支持

你能不能建议我如何解决这个问题,或者建议一种不同的方法来解决这个问题

def primeCheck(num):
    divider = 2
    refresh = 0
    firstPoint = 0
    secondPoint = 1
    while refresh == 0:
        listImport = primeList[firstPoint:secondPoint]
        check = int(num) / listImport
        if (check.is_integer()):
            refresh = 1
        else:
            firstPoint = firstPoint + 1
            secondPoint = secondPoint + 1
        if secondPoint > len(primeList):
            file.write(str(num) + "\n")
            print(str(num))
            global x
            x = x + 1
            refresh = 1
            primeList.append


\\        if (int(num)/divider).is_integer():
\\            if divider == num:
\\                file.write(str(num) + "\n")
\\                print(str(num))
\\                global x
\\                x = x + 1
\\                refresh = 1
\\            else:
\\                refresh = 1
\\        else:
\\            divider = divider + 1

global file
repeat = input("How many numbers do you want to add to the existing file?\n")
file = open("Prime results v1.3.txt", "r")
global x
x = 1
num = file.readline()
file.close()
global file
file = open("Prime results v1.3.txt", "a")
num = int(num)

global primeList
primeList = [2]

while x <= int(repeat):
    primeCheck(num)
    num = num + 2

file.close()

双斜线区域是我以前尝试过的一种方法,它很有效,但是这种方法更有效。

看起来您正在使用firstPoint和secondPoint来尝试索引primeList的特定元素。根据您当前的代码,如果primeList=[2,3,5,7]和firstPoint,secondPoint=0,1,那么您就有了listImport=primeList[0:1]=[2]——您将得到一个包含所需元素的列表,这就是为什么它说您不能将int和列表分开

相反,您需要索引到列表中。所以素数列表[0]=2,素数列表[1]=3,依此类推。这样,您就得到了实际的元素,而不是列表的一部分,此外,您只需要跟踪一个索引


您可以阅读有关Python列表操作的更多信息—它们的文档内容全面且直观。

在第8行中,您尝试将整数除以列表。这是没有定义的。您想要的是将一个整数除以另一个整数。注意,alist[i:i+1]仍然是一个列表。您需要列表[i],或者更好的方法是,使用列表中的for item:.迭代列表。

有很多方法可以改进代码。但错误的原因是,当您执行此primeList[firstPoint:secondPoint]时,会得到一个列表

关于这一主题的更多信息,请参见下面的问题:

如果只想为列表中的单个项目编制索引,可以使用my_list[idx]实现。注意:Python从0开始编制索引,该索引返回列表my_list idx位置处的项目

在我看来,如果我很好地理解您的代码,firstPoint和secondPoint之间的差异总是等于1。所以你根本不必使用secondPoint。 只要编写primeList[firstPoint],您就会得到与使用primeList[firstPoint:secondPoint]时相同的结果

线路上还有一个错误

primeList.append

这是一个函数,而不是函数调用。您可能想做:

primeList.appendnum

另一个棘手的部分可能是,如果使用Python2.x而不是python3.0,那么两个整数的除法也是一个整数,例如4/3=0。 因此,我建议稍作修改:

check = float(num) / listImport
Than 4/3=1.3333,而且is_integer函数在int上调用时会引发错误,如果使用Python 2.x,则int/int返回int,因此会引发错误

Python 2.7示例:

>>> 1/4
0
>>> float(1)/4
1.3333333333333333