该程序用于计算素数并将其保存到文件中。保存功能尚未正确编程,请忽略。该程序通过比较奇数和先前的素数来工作。如果它不是这些数字的倍数那么它就是素数。理论上它应该工作,但当我尝试将数字除以列表中的素数时,它返回错误消息:
追踪(最近一次通话): 文件" 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()
区域双重削减是我尝试的先前方法,但是这种方式更有效。
答案 0 :(得分:0)
您好像正在使用firstPoint
和secondPoint
来尝试和索引primeList
的特定元素。根据您当前的代码,如果primeList = [2,3,5,7]
和firstPoint, secondPoint = 0, 1
,那么您有listImport = primeList[0:1] = [2]
- 您最终会得到一个包含您想要的元素的列表,这就是为什么它说您可以&#39} ; t除以int和列表。
相反,您希望索引到列表中。所以primeList[0]=2
,primeList[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_list
和firstPoint
之间的差异总是等于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