Python 错误消息:不支持的操作数类型___
这个程序用来计算素数并将它们保存到一个文件中。保存功能尚未正确编程,请忽略。该程序的工作原理是将奇数与以前的素数进行比较。如果它不是这些数字的倍数,那么它就是素数。理论上,它应该可以工作,但是当我尝试将数字除以列表中的素数时,它会返回错误消息: 回溯最近一次呼叫上次: 文件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”的操作数类型不受支持 你能不能建议我如何解决这个问题,或者建议一种不同的方法来解决这个问题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
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