2010-05-31 3 views
2

У меня проблемы с python (извините за свои личные чувства перед ..: P).Создание файла python

У меня есть txt-файл, он содержит пользовательский язык, и я должен перевести его в рабочий код на Python.

вход:

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.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], 

Может кто-нибудь помочь мне, пожалуйста? Спасибо заранее!

+1

1. Вы не разместили свой код на Python, отличный от вашего желаемого примера вывода. 2. Вы хотите обвинить Python, но попросите помощи у людей, которые ценят Python? 3. Нет, у Python и его библиотеки нет особой проблемы с символом} - вы делаете это неправильно. 4. Это, очевидно, домашнее задание; вы должны добавить тег «домашняя работа» на свой вопрос. –

+3

Когда я учился в колледже, у моего профессора алгоритмов была строгая политика: если вы пришли в свой кабинет, прося о помощи без примеров того, что вы уже пробовали, мы сказали бы студентам выйти. В том же духе: выходите. –

ответ

3

Если изменить самый конец вашей программы:

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

выход становится:

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

Большое спасибо! Я изменил конец программы, как вы сказали, и добавил следующее к началу: импорт SYS имя = ул (sys.argv [1]) F = открытое (имя, «г») и теперь он использует параметр. Еще раз спасибо. –

+0

@fema, добро пожаловать! (Я забыл, что мне также пришлось отредактировать txt-файл, чтобы сказать CICKLUS вместо LOOP & c, но я предполагаю, что это был явно случайный «половинный перевод» с вашей стороны, то есть вы только что перевели слова в txt-файле, но не в код). –

+1

да, я забыл перевести это слово, когда я скопировал текст, извините –

1

Быстрый идти на эту проблему (если вы используете его для домашней работы убедитесь, что вы понимаете, что происходит, после хорошего руководства по языку на Python может помочь):

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

Выглядит хорошо, спасибо! –

Смежные вопросы