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']
だから私の質問はこれです:上記の配列で動作し、配列要素に基づいてメソッドを1つずつ実行するメソッドの効率的な辞書を作成するにはどうすればよいですか?一部のメソッドはプロパティ(数)を渡す必要があり、一部は渡さないという事実のために、それが可能かどうかさえ疑問に思い始めています。この問題に光を当てることができる人はいますか?
また、私はPythonを初めて使用することを忘れないでください。
編集:私は1つの重要な情報を忘れました。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)