下面的工作原理:我无法使genPrim功能正常工作,因为我得到了" TypeError:' int'对象不是可订阅的"。
一些观察: 1.我的程序应该首先在列表中输入一个数字,然后在该数字上应用其他函数。 问题是我似乎无法从列表中使用该数字来执行此操作。我该怎么做?我第一次考虑要求它的位置,但是当选择genPrim时,genPrim和Prim都工作,因为它们是相互依赖的,但是它们也要求同样的事情。
def Adauga(L):
n = int(input("Give number:"))
L = L + [n]
return L
#Verify if number is prime
def Prim(L):
poz = int(input("Position of number: "))
n = L[poz]
if n<2 :
return False
NrDiv=0
for a in range (2,int(n/2+1)):
if n%a==0:
NrDiv=NrDiv+1
if (NrDiv==0):
return True
else:
return False
#Generate prime number
def genPrim(L):
poz = int(input("Give number: "))
a = L[poz]
b=a+1
while Prim(b)==False:
b=b+1
return b
#Display menu
def AfisMeniu():
print()
print("1.Add number")
print("2.Check if number is prime")
print("3.Generate prime number")
print("0.End of program")
i = int(input("Your option: "))
return i
def Main():
"""
Start the program
"""
L = []
Opt = AfisMeniu()
while (Opt != 0):
if Opt == 1:
L=Adauga(L)
elif Opt ==2:
L=Prim(L)
print (L)
elif Opt ==3:
L=genPrim(L)
print (L)
else:
print ("Wrong!")
Opt = AfisMeniu()
print()
print("End of program")
Main()
答案 0 :(得分:1)
您收到该错误是因为genPrim
返回int
,但Main()
将结果分配给L
,因此L
不再包含数字,只有那个int
。
同样,Prim()
会返回一个布尔值(True
或False
),但Main()
也会将其分配给L
。
FWIW,Prim()
函数的基本逻辑是正确的,但它是非常低效的方法来测试数字是否为素数。一旦找到一个除数,即False
时,你应该至少改变它以返回n%a==0
。
答案 1 :(得分:0)
我设法使第三个选项工作,就像生成素数一样。但是,我还想要使第二个选项也能正常运行,即主要验证。
我的想法是修改Main()函数中的代码,取得位置的len,但是我无法真正使它工作。
elif Opt ==2:
L=Prim(L)
poz1=int(len(L))
print (L[poz1])
或许,我应该尝试不同的方法吗?