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

时间:2015-04-05 17:32:27

标签: python windows-7 primes divide

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

  

追踪(最近一次通话):    文件" C:\ Users \ Archie \ Desktop \ maths python \ prime \ prime v1.3.py",第51行,in      primeCheck(NUM)    文件" C:\ Users \ Archie \ Desktop \ maths python \ prime \ prime v1.3.py",第8行,在primeCheck中      check = int(num)/ listImport   TypeError:/:' int'不支持的操作数类型和'列出'

您能否建议我如何解决此问题或建议采用不同的方法解决问题。

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()

区域双重削减是我尝试的先前方法,但是这种方式更有效。

3 个答案:

答案 0 :(得分:0)

您好像正在使用firstPointsecondPoint来尝试和索引primeList的特定元素。根据您当前的代码,如果primeList = [2,3,5,7]firstPoint, secondPoint = 0, 1,那么您有listImport = primeList[0:1] = [2] - 您最终会得到一个包含您想要的元素的列表,这就是为什么它说您可以&#39} ; t除以int和列表。

相反,您希望索引到列表中。所以primeList[0]=2primeList[1]=3等等。这样你就可以得到实际的元素,而不是列表的一部分,除此之外你只需要跟踪一个索引。

您可以阅读有关Python列表操作的更多信息here - 他们的文档是全面而直观的。

答案 1 :(得分:0)

在第8行中,您尝试按列表划分整数。这没有定义。你想要的是将整数除以另一个整数。请注意,alist[i:i+1]仍然是一个列表。您希望alist[i],或者更好,使用for item in list:迭代列表。

答案 2 :(得分:0)

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

关于这个主题的更多内容在SO问题中得到了很好的解释:Explain Python's slice notation

当您只想索引列表中的单个项目时,可以使用my_list[idx](注意:来自0的Python索引)来执行此操作,该项目返回列表idx处的项目{ {1}}。

在我看来,my_listfirstPoint之间的差异总是等于1(如果我理解你的代码那么好)。所以你根本不必使用secondPoint。 只需撰写secondPoint即可获得与使用primeList[firstPoint]时相同的结果。

该行还有一个错误

primeList[firstPoint:secondPoint]

哪个是函数而不是函数调用。你可能想这样做:

primeList.append

另一个棘手的部分可能是,如果你使用Python2.x而不是Python 3.0,则两个整数的除法也是一个整数(例如primeList.append(num))。 所以我建议稍作修改:

4/3 = 0

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

示例(Python 2.7):

int