我試圖製作一個非常基本的腳本,它利用TkInter根據用戶輸入繪製線條。用戶將通過命令行執行腳本,使用參數確定繪製的線條。創建解析字典以與sys.argv一起使用
可能的命令包括:
(# signifies any whole number the user chooses)
P # (selects a pen to draw with)
D (pen down/starts drawing)
N # (moves the pen north # increments)
E # (moves the pen east # increments)
S # (moves the pen south # increments)
W # (moves the pen west # increments)
U (pen up/stops drawing)
實施例:
Parser.py P 3 D N 4 E 2 S 4 W 2 U
上面的例子將以此爲高矩形。
我正在嘗試爲sys.argv創建一個基本的解析器,該解析器將通過所有參數運行,並根據所述參數及其順序從字典中執行方法。
這裏是我的代碼,通過sys.argv中運行,並創建一個基於參數數組(我會增加錯誤檢查功能,所以只是假設一個快樂的一天場景現在):
class JoshSourceReader(object):
""" responsibe for providing source text for parsing and drawing
Initiates the Draw use-case.
Links to a parser and passes the source text onwards """
def __init__(self):
self.parser = JoshParser()
self.source = []
def go(self):
i = 1
x = len(sys.argv)
while i < x:
if sys.argv[i]=="P":
self.source.append("P " + str(sys.argv[i + 1]))
i += 2
elif sys.argv[i]=="D":
self.source.append("D")
i += 1
elif sys.argv[i]=="N":
self.source.append("N " + str(sys.argv[i + 1]))
i += 2
elif sys.argv[i]=="E":
self.source.append("E " + str(sys.argv[i + 1]))
i += 2
elif sys.argv[i]=="S":
self.source.append("S " + str(sys.argv[i + 1]))
i += 2
elif sys.argv[i]=="W":
self.source.append("W " + str(sys.argv[i + 1]))
i += 2
elif sys.argv[i]=="U":
self.source.append("U")
i += 1
self.parser.parse(self.source)
因此,這將我上面的例子中產生的陣列是這樣的:
source=['P 3', 'D', 'N 4', 'E 2', 'S 4', 'W 2', 'U']
所以我的問題是這樣的:如何創建方法的有效字典,上述陣列工作和執行爲基礎的方法在ar上ray元素,一個接一個?我甚至開始懷疑是否有可能由於某些方法需要傳遞屬性(數字),而有些則不會。任何人都可以闡明這件事情?
請注意,我是非常新的Python。
編輯:我忘了一條重要的信息。 N,E,S,W都指向相同的方法,但每次都採用不同的參數。這裏的方法(還沒有得出):
def drawLine(self, direction, distance):
print("drawing line of length " + str(distance) + " at "
+ str(direction))
所以,如果我打電話使用「S 3」這個方法,我會叫它像這樣:
drawer.drawLine(180, 3)
而且如果我使用「W 1」來稱呼它,我會這樣稱呼它:
drawer.drawLine(270, 1)
絕對完美。我認爲在我完全理解代碼之前需要一段時間,但我的目標是直到我研究它爲止。我正在使用Python 3.x,但我自己可以輕鬆更改打印語句。 – Djentleman 2012-08-02 06:19:06
無論如何,我改變了它,以備將來參考。 – 2012-08-02 17:03:51