2012-06-01 33 views
0

如何改變這種:交換行

fv (x,y,z) begin print x;;; print y ;;; return x + y + z end; 

x = fv(2,34,5) 

g (x) begin y = x + 45 ;;; return y end; 

z = g(23) 

r = 53 

h (x,y,z,r) begin print x;;; print y ;;; print z;;;print r;;;return x + y + z end; 

要這樣:

def fv (x,y,z) :  
    print x 
    print y 
    return x + y + z 

x = fv(2,34,5) 

def g (x) : 
    y = x + 45 
    return y 

z = g(23) 

r = 53 

def h (x,y,z,r) : 
    print x 
    print y 
    print z 
    print r 
    return x + y + z 

我不要求一個完整的代碼或做功課,我只需要和建議/或樣品或方向如何做到這一點。

+2

你只是想重新格式化你的代碼?你可能想看看'replace()','split()'和可能的正則表達式。 – Levon

+0

我從input.txt中讀取第一個代碼,第二個代碼必須是輸出到txt – wfmn17

回答

1

這可能讓你開始

for line in code: 
    line = line.replace("begin", " :\n" + " " * 4).replace(";;;", "\n" + " " * 4).replace("end;", "\n" + " " * 4) 
+1

仍然存在在函數前插入「def」的問題。我會在這裏輸出第二遍,並檢查每一行,看看它是否有':'。如果是這樣,然後在行的前面插入「def」。 – erapert

+0

@erapert是好的。它也做得不好,縮進正確。我只是想讓他開始。 – corn3lius

0

例如,查看sed命令行工具。這是一個難以知道什麼樣的工具,你預計/允許使用...

0

那麼,首先你open()該文件,使用其readlines()方法將其列入字符串列表。

從那裏你可以遍歷該列表,並使用split(";;;")方法的組合或re模塊中更復雜的字符串組合。

+0

';;;'關於周圍的空白 - 我認爲他可能需要're'才能使縮進正確(如果有的話)。 're.sub'在這裏會很有幫助。 – mgilson

3

既然你只想找一個開始暗示,這可能是功課...

做替換()上的各種線恩德斯(如「開始」,「;;;」 「end;」)將它們轉換爲「\ n」,其中一個可能包含「:」。

拆分所得的文本與.split線(「\ n」個)

走線以調節線前綴(「DEF」,壓痕)

把線回到一起使用「\ N」。加入(...)

寫輸出文本

0

這可能是矯枉過正,但看看Ply解析器項目。你將不得不學習正則表達式和Backus Naur格式。

Ply parser