我正在尝试制作一个非常基本的脚本,该脚本利用 TkInter 根据用户输入绘制线条。用户将通过命令行执行脚本,使用参数来确定绘制的线条。
可能的命令是:
(# 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']
所以我的问题是:如何创建一个有效的方法字典,与上述数组一起工作并根据数组元素一个一个地执行方法?我什至开始怀疑这是否可能,因为有些方法需要传递属性(数字),而有些则不需要。任何人都可以对此事有所了解吗?
请记住,我对 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)