2014-11-07 3 views
0

파이썬의 기본적인 컴퓨터 과학 수업에서는 파일을 읽고, 파일을 돼지 라틴어로 번역하고, 번역을 새 파일에 쓰고, 번역 된 줄 수와 단어 수를 계산하는 프로그램을 작성 중입니다.두 가지 기능으로 나누는 방법은 무엇입니까?

file_path = raw_input("Enter a file pathway: ") 
f_input = file(file_path, "r") 
f_output = file("pig_output.txt","w") 

vowels = ("a","e","i","o","u","A","E","I","O","U") 


def piglat_trans(): 
    line_count = 0 
    word_count = 0 
    for line in f_input: 
     words = line.split(" ") 
     pig_line = "" 
     line_count += 1 
     for word in words: 
      word = word.strip("\n") 
      word_count += 1 
      if word[0] in vowels: 
       pig_word = word + "way" 
      elif word[0] not in vowels and word[1] not in vowels and len(word)>1: 
       pig_word = word [2:len(word)] + word[0] + word[1] + "ay" 
      else: 
       pig_word = word[1:len(word)] + word[0] + "ay" 
      pig_line += pig_word + " " 
     f_output.write(pig_line + "\n") 
    print "Translation finished and written pig_output.txt" 
    print "A total of " + str(line_count) + " lines were translated successfully." 
    print "A total of " + str(word_count) + " words were translated successfully." 


piglat_trans() 

f_input.close() 
f_output.close() 

프로그램은 잘 작동하지만 번역기 자체에서 줄/단어 개수와 인쇄 부분을 구분해야합니다. 어떻게하면 좋을까요?

도움 주셔서 감사합니다. ** 편집 : 또한 내가 번역에 공백과 탭에 문제가있다 그리고 그것을 반환

line 25, in piglat_trans if word[0] in vowels: 
IndexError: string index out of range 
+0

을 마지막 오류의 경우, 고려' '는 b'.split ("")''[돌아갑니다', '', 'A'를 B가 ']'; 당신은 아마도'.split()'그냥 인자가 필요 없을 것이다. – o11c

답변

0

글쎄,이 숙제이기 때문에, 내가 코드를 작성하지 않습니다.

핵심 논리가 가장 바쁜 for-loop에있는 것처럼 보입니다. 여기서 당신은 단어를 가져 와서 그것을 돼지 화시킵니다.

그리고 그 후에는 원본의 모든 단어를 피그 라틴 버전의 텍스트에 매핑하기위한 매퍼 (mapper) 기능이 필요합니다. 이 함수는 또한 줄 수를 계산할 수 있습니다.

그리고 파일 핸들러를 오래 사용하지 말고 컨텍스트 관리자 (파이썬에서 with 문)를 사용하십시오. 여기

내가 할 줄 것입니다 :

def pigify(word): 
    .... 
    return pig 

def pigify_text(text): 
    ... 
    pig_words = map(pigify, words) 
    ... 
    return (pig_text, word_count, line_count) 

with open(infile) as f: 
    text = f.read() 

pig, wc, lc = pigify_text(text) 

with open(outfield, "w") as f: 
    f.write(pig) 

print wc 
print lc 
관련 문제