2013-01-13 1 views
2
class wordlist: 
    def is_within(word): 
     return 3 <= (len(word)) <= 5 
    def truncate_by_length(wordlist): 
     return filter(is_within, wordlist) 
    newWordlist = truncate_by_length(['mark', 'daniel', 'mateo', 'jison']) 
    print newWordList 

기본적으로 단어의 길이에 대한 최소값과 최대 값이 주어지면 (주어진 예는 각각 3과 5), 다음과 같은 새로운 목록을 인쇄해야합니다. 주어진 원래 길이에서 그 길이 내에있는 단어. 예를 들어, mark, daniel, mateo 및 jison이라는 단어가 주어지면 mark, mateo 및 jison 만 포함하는 새 목록이 인쇄되어야합니다.파이썬 프로그래밍 : 글로벌 이름 'is_within'이 정의되지 않았습니다. 목록에 필터를 사용하고 있습니다.

내가 그것을 실행할 때마다, 나는 다음을받은 :

Traceback (most recent call last): 
    File "C:/Users/Makoy/Documents/AMC 125/sample.py", line 1, in <module> 
    class wordlist: 
    File "C:/Users/Makoy/Documents/AMC 125/sample.py", line 6, in wordlist 
    newWordlist = truncate_by_length(['mark', 'daniel', 'mateo', 'jison']) 
    File "C:/Users/Makoy/Documents/AMC 125/sample.py", line 5, in truncate_by_length 
    return filter(is_within, wordlist) 
NameError: global name 'is_within' is not defined 

미안 해요 내가 그렇게 멍청한 놈 소리 경우 이러한하지만 난 한 달 전에 파이썬을 공부를 시작했고 나는 완전한 초보자 해요 그것으로. 미리 감사드립니다.

답변

4

클래스 메소드 정의 내에서 클래스 메소드를 호출하는 경우 'self'(예 : self.is_within)를 호출해야합니다. 클래스 메소드의 첫 번째 매개 변수는 클래스의이 인스턴스를 참조하는 'self'여야합니다. 좋은 설명을 보려면 Dive into Python을 확인하십시오.

class wordlist: 
    def is_within(self, word): 
     return 3 <= (len(word)) <= 5 
    def truncate_by_length(self,wordlist): 
     return filter(self.is_within, wordlist) 

wl = wordlist()  
newWordList = wl.truncate_by_length(['mark', 'daniel', 'mateo', 'jison']) 
print newWordList  
+2

'self' 다른 같은 일반 변수입니다; 메서드에 대한 첫 번째 인수의 이름이 바로 관습입니다. 그의 메소드에는'self' 매개 변수가 없으므로'self'에'NameError'를 가져옵니다. – icktoofay

+0

좋은 하루 되세요! 나는 단지 당신이 말한 것을했으나 여전히 같은 오류를 받고 있습니다. 내가 놓친 게 있니? icktoofay가 말한 것과 똑같습니다. –

+0

@ictoofay 그 해명에 감사드립니다, 당신은 완전히 정확하고 나의 대답을 수정했습니다. – timc

1

코드에 오류가있는 이유와 해결 방법이 설명되어 있지만, 현재 클래스 디자인은 다소 부족합니다. 단어 목록 클래스는 외부 데이터에서 작동하는 두 가지 메서드 만 보유합니다. 일반적으로이 클래스를 만들 필요가 없습니다. 모듈의 전역 범위에서 직접 정의 할 수 있습니다.

class wordlist(): 
    def __init__(self, wlist): 
     #save the word list as an instance variable 
     self._wlist = wlist 

    def truncate_by_length(self): 
     #truncante the word list using a list comprehension 
     self._wlist = [word for word in self._wlist if 3 <= len(word) <= 5] 

    def __str__(self): 
     #string representation of the class is the word list as a string 
     return str(self._wlist) 

이처럼 사용 : 단어 목록 클래스에 대한 더 나은 디자인은 다음과 같이 될 것이다

w = wordlist(['mark', 'daniel', 'mateo', 'jison']) 
w.truncate_by_length() 
print w