2010-05-31 2 views
2

파이썬 문제가 있습니다. (전에 개인적인 감정을 줘서 죄송합니다. : P).파이썬 파일 생성

나는 txt 파일을 가지고 있으며, 사용자 정의 언어를 포함하고 있으며이를 작동하는 파이썬 코드로 변환해야합니다.

입력 :

import sys 

n = int(sys.argv[1]) ;;print "Beginning of the program!" 

LOOP i in range(1,n) {print "The number:";;print i} 

BRANCH n < 5 {print n ;;print "less than 5"} 

원하는 출력은 정확히 다음과 같습니다

import sys 

n = int(sys.argv[1]) 
print "Beginning of the program!" 

for i in range(1,n) : 
    print "The number:" 
    print i 

if n < 5 : 
    print n 
    print "less than 5"  

입력 파일의 이름은 매개 변수에서 읽습니다. out 파일은 out.py입니다. 매개 변수가 잘못된 경우 오류 메시지가 나타납니다. ;; 새 줄을 의미합니다.

내가 할려고 할 때, 나는 배열을 만들었고 모든 줄을 ""로 나눠 읽었습니다. 그런 다음 필자는 필자가 필요로하지 않는 자국에서 그것을 제거하고 싶었다. 나는 2 개의 고리를 만들었다. 하나는 줄을위한 것이고 하나는 단어를위한 것이다. 그래서 나는 그 것들을 대체하기 시작했습니다. 모든 것이 잘 돌아갈 때까지 갔다. 발견했지만 교체하거나 제거 할 수는 없습니다. 나는 무엇을해야할지 더 이상 모른다.

내 코드 (이 지저분 그리고 나는 순간에 파일에 쓰기이없는) :

f = open('test.txt', 'r') 
#g = open('out.py', 'w') 
allWords = map(lambda l: l.split(" "), f.readlines()) 
for i in range(len(allWords)): 
    vanfor = -1 
    vanif = -1 
    for j in range(len(allWords[i])): 
     a=allWords[i][j] 
     a=a.replace(";;","\n") 
     a=a.replace("CIKLUS","for") 
     a=a.replace("ELAGAZAS","if") 
     if a == "for": 
      allWords[i][j+3] = str(allWords[i][j+3])+" :\n" 
     if a == "if": 
      allWords[i][j+3] = str(allWords[i][j+3])+" :\n" 
     zarojel=a.find('}') 
     if zarojel>-1: 
      a=a.rstrip('}') 
     a=a.replace("}","") 
     a=a.replace("{","") 
     if vanfor == -1: 
      vanfor=a.find("for") 
     if vanif == -1: 
      vanif=a.find("if") 
     if (vanfor > -1) or (vanif > -1): 
      a=a.replace("print"," print") 
     if j != (len(allWords[i]))-1: 
      allWords[i][j]=a+" " 
     print allWords[i][j], 

누군가가 제발 도와 수 있습니까? 미리 감사드립니다.

# print allWords[i][j], 
    print a, 

출력이됩니다 : 당신은 당신의 프로그램의 맨 끝을 변경하는 경우

+1

1. 원하는 출력 예제 이외에 파이썬 코드를 게시하지 않았습니다. 2. 파이썬을 비난하고 싶지만 파이썬에 감사하는 사람들로부터 도움을 요청할 의향이 있습니까? 3. 아니요, 파이썬과 그 라이브러리에는} 문자에 특별한 문제가 없습니다. 잘못하고 있습니다. 4. 이것은 분명히 숙제입니다. 당신은 당신의 질문에 "과제"태그를 추가해야합니다. –

+3

제가 대학에 있었을 때, 알고리즘 교수님은 엄격한 정책을 가지고있었습니다. 당신이 그의 사무실에서 당신이 이미 시도한 것을 보여주지 않고 도움을 청하면 우리는 학생들에게 나가라고 말합니다. 같은 맥락에서 벗어나십시오. –

답변

3

import sys 

n = int(sys.argv[1]) 
print "Beginning of the program!" 

for i in range(1,n) : 
    print "The number:" 
    print i 

if n < 5 : 
    print n 
    print "less than 5" 

당신이 원하는에 아주 가까이 보인다. 열린 파일 객체 g로 출력하는 대신 표준 출력, 프로그램의 맨 마지막에 또 다른 작은 변화 ... 사람 : 당신이 숙제를 위해 그것을 사용하는 경우

# print allWords[i][j], 
    print>>g, a, 
+1

대단히 감사합니다! 는 I는 상기가 프로그램의 끝을 변경하고 처음으로 다음 추가 ('R', 이름) 수입 SYS NAME = STR (sys.argv에 [1]) F = 오픈 및 이제는 매개 변수를 사용합니다. 다시 한번 감사드립니다. –

+0

@fema, 아무쪼 락! (나는 또한 txt 파일을 편집하여 LOOP & C 대신 CICKLUS를 편집해야한다는 사실을 잊어 버렸지 만, 분명히 우연한 "반 번역"이라고 생각합니다. 즉, txt 파일의 단어를 번역 한 것입니다. 암호). –

+1

예, 텍스트를 복사 할 때 그 단어를 번역하는 것을 잊었습니다. 죄송합니다. –

1

문제에서 빠른 이동은 (당신이 이해하기 무슨 일이 벌어지고 있는지, 좋은 파이썬 언어 자습서를 따르면 도움이 될 것입니다.) :

import sys 
filename = sys.argv[1] 

replace_dict = { ";;": "\n", "LOOP": "for", "BRANCH": "if", "{": ":{" } 
indent_dict = { "{": 1, "}": -1, "\n": 0 } 

lines = open(filename).readlines() 
indent, output, pop_next_newline = 0, [], False 

for line in lines: 
    for key, value in replace_dict.iteritems(): 
     line = line.replace(key, value) 
    for char in line: 
     if char in indent_dict: 
      indent += indent_dict[char] 
      if pop_next_newline and char == "\n": 
       pop_next_newline = False 
      else: 
       output.append("\n%s" % (" " * indent)) 
      if char == "}": 
       pop_next_newline = True 
     else: 
      output.append(char) 

print ''.join(output) 
+0

감사합니다. –