错误消息:___ 不支持的操作数类型
Error message: unsupported operand type(s) for ___
该程序用于计算质数并将它们保存到文件中。保存功能尚未正确编程,请忽略。该程序通过将奇数与先前的质数进行比较来工作。如果它不是这些数字的倍数,那么它就是素数。理论上它应该工作但是当我尝试将数字除以列表中的素数时 returns 错误消息:
Traceback (most recent call last):
File "C:\Users\Archie\Desktop\maths python\prime\prime v1.3.py", line 51, in
primeCheck(num)
File "C:\Users\Archie\Desktop\maths python\prime\prime v1.3.py", line 8, in primeCheck
check = int(num) / listImport
TypeError: unsupported operand type(s) for /: 'int' and '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]
- 您最终会得到一个包含您想要的元素的列表,这就是为什么它说您不能划分一个整数和一个列表。
相反,您需要索引到列表中。所以 primeList[0]=2
、primeList[1]=3
,依此类推。这样你就得到了实际的元素,而不是列表的一部分,除此之外你只需要跟踪一个索引。
您可以阅读有关 Python 列表操作的更多信息 here -- 他们的文档全面而直观。
在第 8 行中,您试图将一个整数除以一个列表。这没有定义。你想要的是将一个整数除以另一个整数。请注意 alist[i:i+1]
仍然是一个列表。您想要 alist[i]
,或者更好的是,使用 for item in list:
.
遍历列表
改进代码的方法有很多。但是报错的原因是你这样做的时候得到了一个列表primeList[firstPoint:secondPoint]
.
有关此主题的更多信息在 SO 问题中得到了很好的解释:Explain Python's slice notation
当您只想索引列表中的单个项目时,可以使用 my_list[idx]
(注意:Python 从 0 开始索引),其中 returns 处的项目列表 my_list
的位置 idx
。
在我看来,firstPoint
和 secondPoint
之间的差值始终等于 1(如果我能很好地理解您的代码)。所以你根本不必使用 secondPoint 。
只需编写 primeList[firstPoint]
即可得到与使用 primeList[firstPoint:secondPoint]
.
时相同的结果
行也有错误
primeList.append
这是一个函数而不是函数调用。你可能想做:
primeList.append(num)
另一个棘手的部分可能是,如果你使用 Python2.x 而不是 Python 3.0 两个整数的除法又是一个整数(例如 4/3 = 0
)。
所以我建议稍微修改一下:
check = float(num) / listImport
比 4/3 = 1.3333333333333333
和 is_integer()
函数在调用 int 时引发错误(如果您使用 Python 2.x 然后 int/int
returns int
因此会引发错误。
示例 (Python 2.7):
>>> 1/4
0
>>> float(1)/4
1.3333333333333333
该程序用于计算质数并将它们保存到文件中。保存功能尚未正确编程,请忽略。该程序通过将奇数与先前的质数进行比较来工作。如果它不是这些数字的倍数,那么它就是素数。理论上它应该工作但是当我尝试将数字除以列表中的素数时 returns 错误消息:
Traceback (most recent call last): File "C:\Users\Archie\Desktop\maths python\prime\prime v1.3.py", line 51, in primeCheck(num) File "C:\Users\Archie\Desktop\maths python\prime\prime v1.3.py", line 8, in primeCheck check = int(num) / listImport TypeError: unsupported operand type(s) for /: 'int' and '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]
- 您最终会得到一个包含您想要的元素的列表,这就是为什么它说您不能划分一个整数和一个列表。
相反,您需要索引到列表中。所以 primeList[0]=2
、primeList[1]=3
,依此类推。这样你就得到了实际的元素,而不是列表的一部分,除此之外你只需要跟踪一个索引。
您可以阅读有关 Python 列表操作的更多信息 here -- 他们的文档全面而直观。
在第 8 行中,您试图将一个整数除以一个列表。这没有定义。你想要的是将一个整数除以另一个整数。请注意 alist[i:i+1]
仍然是一个列表。您想要 alist[i]
,或者更好的是,使用 for item in list:
.
改进代码的方法有很多。但是报错的原因是你这样做的时候得到了一个列表primeList[firstPoint:secondPoint]
.
有关此主题的更多信息在 SO 问题中得到了很好的解释:Explain Python's slice notation
当您只想索引列表中的单个项目时,可以使用 my_list[idx]
(注意:Python 从 0 开始索引),其中 returns 处的项目列表 my_list
的位置 idx
。
在我看来,firstPoint
和 secondPoint
之间的差值始终等于 1(如果我能很好地理解您的代码)。所以你根本不必使用 secondPoint 。
只需编写 primeList[firstPoint]
即可得到与使用 primeList[firstPoint:secondPoint]
.
行也有错误
primeList.append
这是一个函数而不是函数调用。你可能想做:
primeList.append(num)
另一个棘手的部分可能是,如果你使用 Python2.x 而不是 Python 3.0 两个整数的除法又是一个整数(例如 4/3 = 0
)。
所以我建议稍微修改一下:
check = float(num) / listImport
比 4/3 = 1.3333333333333333
和 is_integer()
函数在调用 int 时引发错误(如果您使用 Python 2.x 然后 int/int
returns int
因此会引发错误。
示例 (Python 2.7):
>>> 1/4
0
>>> float(1)/4
1.3333333333333333