2017-12-30 11 views
-4

아무도 다음 문제를 해결할 수 있습니까? 사전을 반환하는 이전 함수가 있습니다. 이제이 함수를 새로 만들려면 함수가 필요하지만 사전으로 뭔가를해야합니다. 내가하려는 일을 보여주기 위해 dictionary(fasta_filename)이 나의 이전 기능이다. 함수의 출력으로 사전을 만드는 방법은 무엇입니까?

def test(fasta_filename, minMW, maxMW): 
    interval = minMW, maxMW 
    for key, value in dictionary(fasta_filename).items(): 
     if value in interval: 
      print(key) 
     else: 
      print('intervals do not match') 

은 내가하고 싶은 것을 시도하기 시작하지만, 내가 가지고있는 가장 큰 문제는 당신이 그것을 수행하려고 할 경우 .items() 같은 당신이 사전에 할 수있는 일이, 작동하지 않는 것입니다 함수. 오류 : 'NoneType' object has no attribute 'items'. function.items()을 사용하면 사전에 IS라는 함수가 있다고 가정하기 때문에이 오류를 이해합니다. 나는 아직도이 모든 것에 대해 새롭고, 아마도 당신은 말할 수 있지만, 누군가가 나에게 힌트를 줄 수 있다면 그것을 고맙게 여길 것이다. :)

+0

여기에 몇 가지 문제가 있습니다 : (a)'value in interval'에 의해 간격에 대해 값을 검사하지 않고, 값이'minMW' 또는'maxMW'인지 확인하십시오. 게다가이 함수는 출력을 제공하지 않고 I/O 인'print'를합니다. 'return' 키워드로 물건을 돌려줍니다. –

+0

당신의'dictionary' 함수는 적어도'None'을 몇 번이나 리턴합니다.이 경우'dictionary (fasta_filename) .items()'는 작동하지 않지만 함수가 실제로'dict' 객체를 리턴하면 * 작동합니다 . 'dictionary' 함수를 보지 않고서는 추측 만 할 수 있습니다. –

+0

'function.items()'는'dictionary.items()'를 사용하지 않고 에러가 약간 다를 것입니다.'AttributeError : 'function'객체에 'items'속성이 없습니다. ',하지만 당신의 경우에는 '' ''NoneType ''객체에는 'items' "'속성이 없습니다. 'dictionary (...)'<- 함수를 호출하면'.items()'메소드 호출이 함수 호출의 * 반환 값 *에서 작동하고 있기 때문에, 이 경우 오류 메시지가 당신에게'NoneType'을 말하고 있습니다. 즉, *는'None' *입니다. –

답변

0

테스트를 수정할 수 있지만 여전히 인쇄 만합니다.

def dictionary(fn) 함수의 return 문을 수정하여 None -dict와 데이터가있는 dict에 대한 다른 출력을 확인하고 확인합니다.

def dictionary(fn): 
    # you do stuff here with your file, make sure to NOT return None but 
    # always retunr at least an empty dict if your actions on your file 
    # do not result in a filled dictionary 
    return {"dummy1" : 55, "dummy2" : 97, "dummy3" : 12345} 
    # return None # uncomment this and comment the one above for a None-Dict 

def test(fasta_filename, minMW, maxMW): 
    interval = range(minMW, maxMW+1) # this is the interval [minMW..maxMW] including both 
    dic = dictionary(fasta_filename) 
    if not dic: 
     print('dictionary is None') 
     return None # leave test method 

    for key, value in dic.items(): 
     if value in interval: 
      print(key) 
     else: 
      print('intervals do not match for', key) 

test("does not matter, dummy data provided internally",60,120) 

출력 (파이썬 3.6) :

intervals do not match for dummy1 
dummy2 
intervals do not match for dummy3 

또는

dictionary is None 

은 무엇 def dictionary(fn) 수익률에 따라 달라집니다.

+0

감사합니다. 반환과 인쇄의 차이점을 이해했습니다. 나는 어떻게 기능이 있고 작동하지만, 일치하지 않는 간격에 대해서만 작동합니다. 그 이유는 다음과 같은 사전의 출력 때문이라고 생각했습니다. { 'seq_7009': (6236.9764, 6367.049999999999), 'seq_418': (3716.3642000000004, 3796.4124000000006), ...}} 부동 소수점 숫자. 'interval = range (minMW, maxMW + 1, 0.00000000001)'와 같은 단계를 추가하려고했지만 'TypeError :'float '객체를 정수로 해석 할 수 없습니다.'라고 말합니다. –

관련 문제