2012-10-29 4 views
0
class anagram_generator: 
    words = "" 
    letters = [] 
    def get_words(): 
     words = raw_input("input the letters\n") 
     letters = [] 
     i = 0 

    def sort_words(): 
     for word in words: 
      letters.append(word) 
      print letters[i] 
      i = i + 1 

    get_words() 
    sort_words() 

어떻게 sort_words는 단어 문자열과 문자 배열을 인쇄하지 않습니까? 있는 "외부"에서 기능 내부왜 인쇄되지 않습니까?

def sort_words(): 
global words 
global letters 
i=0 
for word in words: 
    letters.append(word) 
    print letters[i] 
    i = i + 1 

변수에만 기능에 액세스 할 수 있습니다 변수 :

+0

사용에 도움이 될 것입니다 낱말 안에 낱말 "은 낱말 안에 단 하나 편지를 통해서 갈 것이다. 그게 니가하려는 의도 야? 빈 문자열 대신 목록을 선언하는 것이 좋습니다. –

+0

아마도 get_words()가 불완전하고 words = ""입니까? – monkut

+0

@monkut 코드를 편집했습니다. 나는 그것을 어수선하게 만들 것이라고 생각했다. –

답변

2

들여 쓰기가 참이 아니며 "방법"을 사용하는 방식이 클래스를 사용하려는 것과 같지 않기 때문에 여기에 수업을하는 이유가 확실하지 않습니다. 두 코드가 있습니다. 하나는 클래스를 사용하고 다른 하나는 none입니다.

첫째, 당신이 정말로 클래스를 사용한다고 가정 (그리고 나는 당신의 문제에 대한이 가장 좋은 생각) : 당신이 클래스를 사용할 때

class Generator: 
    words = "" # you should put words and letters here. this will be attribute and both get_words() and sort_words() can see this 
    letters = [] 
    def get_words(self): 
     words = raw_input("input the letters\n") 
     letters = [] 
     # i = 0 : no effect. it just local variable with method get_words 

    def sort_words(self): 
     i = 0 # must be assign value before use 
     for word in words: 
     letters.append(word) 
     print letters[i] 
      i = i + 1 

당신은주의해야, 각각의 방법은 키워드 self이 있어야합니다. 이것은 단지 정상적인 기능 경우

generator = Generator() 
generator.get_words() 
generator.sort_words() 

: 여기에 테스트입니다.

1) 단어 및 문자가 전체적으로으로 선언되지 않을 수 있으므로 문제가 해결되지 않습니다. 따라서 get_words()에서 변수에 값을 할당하면 sort_words()는이를 인식하지 못합니다. 컴파일하고 아무런 오류가 없다면, 어떤 이유에서 전역에 값 SOMEWHERE을 할당해야합니다 (이름을 입력하고 다른 값을 다른 함수에 할당하지 마십시오). 그러나 그 경우 get_words()를 사용할 때 전역 변수는 여전히 업데이트되지 않습니다. 그래서, 당신이 사용하는 "단어"가 아직 업데이트되지 않기 때문에, 당신이 보는 것처럼 "인쇄 단어"가 없습니다.

2) 변수 : 값 을 할당 한 후을 할당해야합니다.

그래서, 여기에 내가 해결 한 코드입니다 :

def get_words(): 
    global words 
    global letters 
    words = raw_input("input the letters\n") 
    letters = [] 
    # global i=0 : you can do that, but SHOULDN'T 

def sort_words(): 
    i = 0 # i must be assign value before use 
    for word in words: 
     letters.append(word) 
     print letters[i] 
     i = i + 1 

이 시험은 다음과 같습니다

get_words() 
sort_words() 

희망이가 "당신 :)의

+0

대단히 감사합니다! –

+0

@MattBettinson 다시 내 게시물을 참조하십시오. 나는 많은 것을 편집했다. 일부는 오타이고 어떤 것은 더 명확하게 해줍니다. – hqt

+0

예, 읽었습니다. 나는 영어가 당신의 제 2 언어가 아니라고 말할 수 있습니다. 상관없이, 그것은 매우 도움이되었다. 감사. –

2

당신은 변수 "단어"글로벌 그래서 같은 당신의 함수 내부의 "편지"를 선언해야 귀하의 경우 비어 있거나 (""또는 []), Python Doc ("글로벌"로 검색)을 참조하십시오.

또 다른 것은 초기 값으로 선언되지 않은 i 변수도 오류를 던질 것입니다.

관련 문제