我对python有疑问(对不起我之前的个人感受......:P)。
我有一个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文件是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],
有人可以帮帮我吗?
提前谢谢!
答案 0 :(得分: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
,而不是stdout,只是程序结束时的另一个微小变化......:
# print allWords[i][j],
print>>g, a,
答案 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)