在ctf比賽中,計算器題目是一類經典的題目,常常涉及到json格式的數據。下面我們來講一講如何使用json來實現ctf計算器。
{ "exp": ["num", "+", "num"], "num": ["digit", "digit..."], "digit": ["0", "1", "...", "9"] }
以上是一個簡單的json數據結構,其中“exp”表示表達式,由數字和加號組成,而“num”則表示多位數字,每一位數字用“digit”來表示。我們可以使用遞歸來解析這個json。
import json def evaluate(exp): if isinstance(exp, list): operator = exp[1] left = evaluate(exp[0]) right = evaluate(exp[2]) if operator == "+": return left + right else: return int(evaluate(exp)) with open("calc.json") as json_file: data = json.load(json_file) exp = data["exp"] result = evaluate(exp) print(result)
上面的代碼中,我們首先使用json.load()來讀取json文件,并將其存儲在變量data中。然后我們定義一個evaluate()函數,這個函數用來對表達式進行求值。在函數中,我們使用遞歸的方式來對表達式進行解析,并將其拆分成左右兩部分,分別遞歸調用evaluate()函數進行求值。
最后,我們將表達式傳入evaluate()函數中,并將求得的結果打印出來。這樣我們就完成了一個基于json的ctf計算器。