2014-11-15 3 views
1

아래에서 작동하지 않는 것 : "TypeError : 'int'객체가 subscriptable이 아니므로 genPrim 함수가 작동하지 않습니다.목록에서 찾은 숫자보다 큰 소수 생성

몇 가지 관찰 : 1. 내 프로그램에서 먼저 숫자를 목록에 입력 한 다음 해당 숫자에 다른 함수를 적용해야합니다. 2. 문제는 목록에서 해당 번호를 사용하지 않는 것입니다. 내가 어떻게 해? 처음에 그 위치를 묻는 것에 대해 생각해 보았습니다.하지만 genPrim을 사용할 때 genPrim과 Prim은 상호 의존적이기 때문에 작동하지만 동일한 것을 요구합니다. L에 결과

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

오류 메시지의 일부로 회선 번호를받지 못합니까? 여기에 포함시키지 않는 것이 좋을까요? –

답변

1
genPrimint을 반환하기 때문에 당신은 그 오류를 얻고있다

하지만 Main() 양수인, 그래서 L는 더 이상 번호 목록, 그냥 하나의 int 포함되어 있지 않습니다. 부울 (True 또는 False)하지만 Main()을 반환 Prim() 마찬가지로

역시 것과 L를 할당합니다.

FWIW의 경우 Prim() 함수의 기본 로직은 정확하지만 숫자가 소수인지 테스트하는 방법은 비효율적입니다. 최소한 n%a==0 일 때, 하나의 제수가 발견되는대로 즉시 False을 반환하도록 변경해야합니다.

+0

감사합니다. 나는 그럭저럭 해결할 수있었습니다. 방금 Prim에서 처음 두 줄을 삭제하고 매개 변수를 L에서 n으로 변경했습니다. 문제 해결됨. – Geosphere

0

소수를 생성 할 때와 마찬가지로 세 번째 옵션 작업을 관리했습니다. 그러나, 제가 좋아할만한 점은 두 번째 옵션이 주요 검증 인 것처럼 작동하도록 만드는 것입니다.

내 생각은 위치의 len을 취하여 Main() 함수의 코드를 수정하지만 실제로 작동시키지 못합니다.

elif Opt ==2: 
     L=Prim(L) 
     poz1=int(len(L)) 
     print (L[poz1]) 

아니면 다른 방법을 시도해야합니까?

관련 문제