pytho****@googl*****
pytho****@googl*****
2011年 2月 26日 (土) 00:49:25 JST
2 new revisions: Revision: bbb7e99bf9 Author: MATSUI Tetsushi <matsu****@gmail*****> Date: Fri Feb 25 07:47:48 2011 Log: 2.6.6 update: itertools http://code.google.com/p/python-doc-ja/source/detail?r=bbb7e99bf9 Revision: 6e696cb089 Author: MATSUI Tetsushi <matsu****@gmail*****> Date: Fri Feb 25 07:48:12 2011 Log: 2.6.6 update: turtle http://code.google.com/p/python-doc-ja/source/detail?r=6e696cb089 ============================================================================== Revision: bbb7e99bf9 Author: MATSUI Tetsushi <matsu****@gmail*****> Date: Fri Feb 25 07:47:48 2011 Log: 2.6.6 update: itertools http://code.google.com/p/python-doc-ja/source/detail?r=bbb7e99bf9 Modified: /library/itertools.rst ======================================= --- /library/itertools.rst Mon Feb 14 19:27:41 2011 +++ /library/itertools.rst Fri Feb 25 07:47:48 2011 @@ -24,8 +24,8 @@ 例えば、SML の作表ツール ``tabulate(f)`` は ``f(0), f(1), ...`` のシーケンスを作成します。 -このツールボックスでは :func:`imap` と :func:`count` を用意しており、 -この二つを組み合わせて ``imap(f, count())`` とすれば同じ結果を得る事ができ ます。 +同じことを Python では :func:`imap` と :func:`count` を組み合わせて +``imap(f, count())`` という形で実現できます。 これらのツールと、対をなすビルトインの組み合わせは、 :mod:`operator` モジ ュール\ にある高速な関数を使うことでうまく実現できます。 @@ -68,7 +68,7 @@ ============================================== ==================== ============================================================= :func:`product` p, q, ... [repeat=1] デカルト積、ネストしたforループと等価 :func:`permutations` p[, r] 長さrのタプル列, 全ての順列. -:func:`combinations` p[, r] 長さrのタプル列, 全ての組み合わせ. +:func:`combinations` p, r 長さrのタプル列, 全ての組み合わせ. | ``product('ABCD', repeat=2)`` ``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD`` ``permutations('ABCD', 2)`` ``AB AC AD BA BC BD CA CB CD DA DB DC`` @@ -100,7 +100,7 @@ yield element -.. function:: itertools.chain.from_iterable(iterable) +.. classmethod:: chain.from_iterable(iterable) もう一つの :func:`chain` のためのコンストラクタです。 遅延評価される唯一のイテラブル引数から連鎖した入力を受け取ります。 @@ -637,7 +637,7 @@ レシピ ------ -この節では、既存の itertools をビルディングブロックとしてツールセットを拡張 するためのレシピを示します。 +この節では、既存の itertools を素材としてツールセットを拡張するためのレシピ を示します。 iterable 全体を一度にメモリ上に置くよりも、 要素を一つづつ処理する方がメモリ効率上の有利さを保てます。 @@ -652,16 +652,19 @@ "Return first n items of the iterable as a list" return list(islice(iterable, n)) - def enumerate(iterable, start=0): - return izip(count(start), iterable) - def tabulate(function, start=0): "Return function(0), function(1), ..." return imap(function, count(start)) def consume(iterator, n): "Advance the iterator n-steps ahead. If n is none, consume entirely." - collections.deque(islice(iterator, n), maxlen=0) + # The technique uses objects that consume iterators at C speed. + if n is None: + # feed the entire iterator into a zero-length deque + collections.deque(iterator, maxlen=0) + else: + # advance to the emtpy slice starting at position n + next(islice(iterator, n, n), None) def nth(iterable, n, default=None): "Returns the nth item or a default value" @@ -680,13 +683,14 @@ def ncycles(iterable, n): "Returns the sequence elements n times" - return chain.from_iterable(repeat(iterable, n)) + return chain.from_iterable(repeat(tuple(iterable), n)) def dotproduct(vec1, vec2): return sum(imap(operator.mul, vec1, vec2)) def flatten(listOfLists): - return list(chain.from_iterable(listOfLists)) + "Flatten one level of nesting" + return chain.from_iterable(listOfLists) def repeatfunc(func, times=None, *args): """Repeat calls to func with specified arguments. @@ -721,11 +725,6 @@ pending -= 1 nexts = cycle(islice(nexts, pending)) - def powerset(iterable): - "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" - s = list(iterable) - return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) - def compress(data, selectors): "compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F" return (d for d, s in izip(data, selectors) if s) @@ -748,6 +747,11 @@ indices[i:] = [indices[i] + 1] * (r - i) yield tuple(pool[i] for i in indices) + def powerset(iterable): + "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" + s = list(iterable) + return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) + def unique_everseen(iterable, key=None): "List unique elements, preserving order. Remember all elements ever seen." # unique_everseen('AAAABBBCCDAABBB') --> A B C D @@ -755,10 +759,9 @@ seen = set() seen_add = seen.add if key is None: - for element in iterable: - if element not in seen: - seen_add(element) - yield element + for element in ifilterfalse(seen.__contains__, iterable): + seen_add(element) + yield element else: for element in iterable: k = key(element) @@ -771,3 +774,59 @@ # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B # unique_justseen('ABBCcAD', str.lower) --> A B C A D return imap(next, imap(itemgetter(1), groupby(iterable, key))) + + def iter_except(func, exception, first=None): + """ Call a function repeatedly until an exception is raised. + + Converts a call-until-exception interface to an iterator interface. + Like __builtin__.iter(func, sentinel) but uses an exception instead + of a sentinel to end the loop. + + Examples: + bsddbiter = iter_except(db.next, bsddb.error, db.first) + heapiter = iter_except(functools.partial(heappop, h), IndexError) + dictiter = iter_except(d.popitem, KeyError) + dequeiter = iter_except(d.popleft, IndexError) + queueiter = iter_except(q.get_nowait, Queue.Empty) + setiter = iter_except(s.pop, KeyError) + + """ + try: + if first is not None: + yield first() + while 1: + yield func() + except exception: + pass + + def random_product(*args, **kwds): + "Random selection from itertools.product(*args, **kwds)" + pools = map(tuple, args) * kwds.get('repeat', 1) + return tuple(random.choice(pool) for pool in pools) + + def random_permutation(iterable, r=None): + "Random selection from itertools.permutations(iterable, r)" + pool = tuple(iterable) + r = len(pool) if r is None else r + return tuple(random.sample(pool, r)) + + def random_combination(iterable, r): + "Random selection from itertools.combinations(iterable, r)" + pool = tuple(iterable) + n = len(pool) + indices = sorted(random.sample(xrange(n), r)) + return tuple(pool[i] for i in indices) + + def random_combination_with_replacement(iterable, r): + "Random selection from itertools.combinations_with_replacement(iterable, r)" + pool = tuple(iterable) + n = len(pool) + indices = sorted(random.randrange(n) for i in xrange(r)) + return tuple(pool[i] for i in indices) + +上記のレシピはデフォルト値を指定してグローバルな名前検索をローカル変数の\ +検索に変えることで、より効率を上げることができます。 +例えば、 *dotproduct* のレシピを書き換えるとすればこんな具合です:: + + def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul): + return sum(imap(mul, vec1, vec2)) ============================================================================== Revision: 6e696cb089 Author: MATSUI Tetsushi <matsu****@gmail*****> Date: Fri Feb 25 07:48:12 2011 Log: 2.6.6 update: turtle http://code.google.com/p/python-doc-ja/source/detail?r=6e696cb089 Modified: /library/turtle.rst ======================================= --- /library/turtle.rst Sat Nov 27 10:59:46 2010 +++ /library/turtle.rst Fri Feb 25 07:48:12 2011 @@ -6,6 +6,11 @@ :synopsis: Tkのためのタートルグラフィックス .. sectionauthor:: Gregor Lingl <grego****@aon*****> +.. testsetup:: default + + from turtle import * + turtle = Turtle() + はじめに ======== @@ -28,7 +33,7 @@ すなわち、まず第一に、学習中のプログラマがモジュールを ``-n`` スイッチを付 けて走らせている IDLE の中から全てのコマンド、クラス、メソッドを対話的に使えるようにしまし た。 -turtle モジュールはオブジェクト指向と手続き指向の両方の方法でタートルグラフ ィックス・プリミティブを提供します。グラフィックスの基礎とし て :mod:`Tkinter` を使っているために、TkをサポートしたPythonのバージョンが必 要です。 +turtle モジュールはオブジェクト指向と手続き指向の両方の方法でタートルグラフ ィックス・プリミティブを提供します。グラフィックスの基礎とし て :mod:`Tkinter` を使っているために、Tk をサポートした Python のバージョン が必要です。 オブジェクト指向インターフェイスでは、本質的に 2+2 のクラスを使います: @@ -216,14 +221,16 @@ タートルが頭を向けている方へ、タートルを距離 *distance* だけ前進させま す。 - >>> turtle.position() - (0.00, 0.00) - >>> turtle.forward(25) - >>> turtle.position() - (25.00,0.00) - >>> turtle.forward(-75) - >>> turtle.position() - (-50.00,0.00) + .. doctest:: + + >>> turtle.position() + (0.00, 0.00) + >>> turtle.forward(25) + >>> turtle.position() + (25.00,0.00) + >>> turtle.forward(-75) + >>> turtle.position() + (-50.00,0.00) .. function:: back(distance) bk(distance) @@ -234,11 +241,18 @@ タートルが頭を向けている方と反対方向へ、タートルを距離 *distance* だけ後 退させます。 タートルの向きは変えません。 - >>> turtle.position() - (0.00, 0.00) - >>> turtle.backward(30) - >>> turtle.position() - (-30.00, 0.00) + .. doctest:: + :hide: + + >>> turtle.goto(0, 0) + + .. doctest:: + + >>> turtle.position() + (0.00,0.00) + >>> turtle.backward(30) + >>> turtle.position() + (-30.00,0.00) .. function:: right(angle) @@ -251,11 +265,18 @@ 角度の向きはタートルのモードによって意味が変わります。 :func:`mode` を参照してください。 - >>> turtle.heading() - 22.0 - >>> turtle.right(45) - >>> turtle.heading() - 337.0 + .. doctest:: + :hide: + + >>> turtle.setheading(22) + + .. doctest:: + + >>> turtle.heading() + 22.0 + >>> turtle.right(45) + >>> turtle.heading() + 337.0 .. function:: left(angle) @@ -268,39 +289,54 @@ 角度の向きはタートルのモードによって意味が変わります。 :func:`mode` を参照してください。 - >>> turtle.heading() - 22.0 - >>> turtle.left(45) - >>> turtle.heading() - 67.0 + .. doctest:: + :hide: + + >>> turtle.setheading(22) + + .. doctest:: + + >>> turtle.heading() + 22.0 + >>> turtle.left(45) + >>> turtle.heading() + 67.0 + .. function:: goto(x, y=None) setpos(x, y=None) setposition(x, y=None) - :param x: 数または数のペア/ベクトル - :param y: 数または ``None`` - - *y* が ``None`` の場合、 - *x* は座標のペアかまたは :class:`Vec2D` (たとえば :func:`pos` で返され ます) - でなければなりません。 - - タートルを指定された絶対位置に移動します。 - ペンが下りていれば線を引きます。 - タートルの向きは変わりません。 - - >>> tp = turtle.pos() - >>> tp - (0.00, 0.00) - >>> turtle.setpos(60,30) - >>> turtle.pos() - (60.00,30.00) - >>> turtle.setpos((20,80)) - >>> turtle.pos() - (20.00,80.00) - >>> turtle.setpos(tp) - >>> turtle.pos() - (0.00,0.00) + :param x: 数または数のペア/ベクトル + :param y: 数または ``None`` + + *y* が ``None`` の場合、 + *x* は座標のペアかまたは :class:`Vec2D` (たとえば :func:`pos` で返されま す) + でなければなりません。 + + タートルを指定された絶対位置に移動します。 + ペンが下りていれば線を引きます。 + タートルの向きは変わりません。 + + .. doctest:: + :hide: + + >>> turtle.goto(0, 0) + + .. doctest:: + + >>> tp = turtle.pos() + >>> tp + (0.00,0.00) + >>> turtle.setpos(60,30) + >>> turtle.pos() + (60.00,30.00) + >>> turtle.setpos((20,80)) + >>> turtle.pos() + (20.00,80.00) + >>> turtle.setpos(tp) + >>> turtle.pos() + (0.00,0.00) .. function:: setx(x) @@ -310,11 +346,18 @@ タートルの第一座標を *x* にします。 第二座標は変わりません。 - >>> turtle.position() - (0.00, 240.00) - >>> turtle.setx(10) - >>> turtle.position() - (10.00, 240.00) + .. doctest:: + :hide: + + >>> turtle.goto(0, 240) + + .. doctest:: + + >>> turtle.position() + (0.00,240.00) + >>> turtle.setx(10) + >>> turtle.position() + (10.00,240.00) .. function:: sety(y) @@ -324,11 +367,18 @@ タートルの第二座標を *y* にします。 第一座標は変わりません。 - >>> turtle.position() - (0.00, 40.00) - >>> turtle.sety(-10) - >>> turtle.position() - (0.00, -10.00) + .. doctest:: + :hide: + + >>> turtle.goto(0, 40) + + .. doctest:: + + >>> turtle.position() + (0.00,40.00) + >>> turtle.sety(-10) + >>> turtle.position() + (0.00,-10.00) .. function:: setheading(to_angle) @@ -348,15 +398,35 @@ 270 - 南 270 - 西 =================== ==================== - >>> turtle.setheading(90) - >>> turtle.heading() - 90 + .. doctest:: + + >>> turtle.setheading(90) + >>> turtle.heading() + 90.0 .. function:: home() タートルを原点 -- 座標 (0, 0) -- に移動し、向きを開始方向に設定します (開始方向はモードに依って違います。 :func:`mode` を参照してください)。 + .. doctest:: + :hide: + + >>> turtle.setheading(90) + >>> turtle.goto(0, -10) + + .. doctest:: + + >>> turtle.heading() + 90.0 + >>> turtle.position() + (0.00,-10.00) + >>> turtle.home() + >>> turtle.position() + (0.00,0.00) + >>> turtle.heading() + 0.0 + .. function:: circle(radius, extent=None, steps=None) @@ -378,8 +448,23 @@ この値は与えられなければ自動的に計算されます。 また、これを正多角形の描画に利用することもできます。 - >>> turtle.circle(50) - >>> turtle.circle(120, 180) # 半円を描きます + .. doctest:: + + >>> turtle.home() + >>> turtle.position() + (0.00,0.00) + >>> turtle.heading() + 0.0 + >>> turtle.circle(50) + >>> turtle.position() + (-0.00,0.00) + >>> turtle.heading() + 0.0 + >>> turtle.circle(120, 180) # 半円を描きます + >>> turtle.position() + (0.00,240.00) + >>> turtle.heading() + 180.0 .. function:: dot(size=None, *color) @@ -391,8 +476,15 @@ *size* が与えられなかった場合、pensize+4 と 2*pensize の大きい方が使われます。 - >>> turtle.dot() - >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) + .. doctest:: + + >>> turtle.home() + >>> turtle.dot() + >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) + >>> turtle.position() + (100.00,-0.00) + >>> turtle.heading() + 0.0 .. function:: stamp() @@ -401,10 +493,12 @@ そのハンコに対して stamp_id が返されますが、 これを使うと後で ``clearstamp(stamp_id)`` のように呼び出して消すことがで きます。 - >>> turtle.color("blue") - >>> turtle.stamp() - 13 - >>> turtle.fd(50) + .. doctest:: + + >>> turtle.color("blue") + >>> turtle.stamp() + 11 + >>> turtle.fd(50) .. function:: clearstamp(stampid) @@ -413,10 +507,18 @@ *stampid* に対応するハンコを消します。 - >>> turtle.color("blue") - >>> astamp = turtle.stamp() - >>> turtle.fd(50) - >>> turtle.clearstamp(astamp) + .. doctest:: + + >>> turtle.position() + (150.00,-0.00) + >>> turtle.color("blue") + >>> astamp = turtle.stamp() + >>> turtle.fd(50) + >>> turtle.position() + (200.00,-0.00) + >>> turtle.clearstamp(astamp) + >>> turtle.position() + (200.00,-0.00) .. function:: clearstamps(n=None) @@ -428,11 +530,21 @@ *n* が正の場合には最初の *n* 個、 *n* が負の場合には最後の *n* 個を消します。 - >>> for i in range(8): - ... turtle.stamp(); turtle.fd(30) - >>> turtle.clearstamps(2) - >>> turtle.clearstamps(-2) - >>> turtle.clearstamps() + .. doctest:: + + >>> for i in range(8): + ... turtle.stamp(); turtle.fd(30) + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + >>> turtle.clearstamps(2) + >>> turtle.clearstamps(-2) + >>> turtle.clearstamps() .. function:: undo() @@ -440,11 +552,13 @@ 最後の(繰り返すことにより複数の)タートルの動きを取り消します。 取り消しできる動きの最大数は undobuffer のサイズによって決まります。 - >>> for i in range(4): - ... turtle.fd(50); turtle.lt(80) - ... - >>> for i in range(8): - ... turtle.undo() + .. doctest:: + + >>> for i in range(4): + ... turtle.fd(50); turtle.lt(80) + ... + >>> for i in range(8): + ... turtle.undo() .. function:: speed(speed=None) @@ -469,7 +583,17 @@ 注意: *speed* = 0 はアニメーションを無くします。 forward/backward ではタートルがジャンプし、left/right では瞬時に方向を変 えます。 - >>> turtle.speed(3) + .. doctest:: + + >>> turtle.speed() + 3 + >>> turtle.speed('normal') + >>> turtle.speed() + 6 + >>> turtle.speed(9) + >>> turtle.speed() + 9 + Turtle の状態を知る ------------------- @@ -479,8 +603,10 @@ タートルの現在位置を (:class:`Vec2D` のベクトルとして) 返します。 - >>> turtle.pos() - (0.00, 240.00) + .. doctest:: + + >>> turtle.pos() + (440.00,-0.00) .. function:: towards(x, y=None) @@ -493,32 +619,41 @@ ("standard"/"world" または "logo") に依存します。 - >>> turtle.pos() - (10.00, 10.00) - >>> turtle.towards(0,0) - 225.0 + .. doctest:: + + >>> turtle.goto(10, 10) + >>> turtle.towards(0,0) + 225.0 .. function:: xcor() タートルの x 座標を返します。 - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.xcor() - 50.0 + .. doctest:: + + >>> turtle.home() + >>> turtle.left(50) + >>> turtle.forward(100) + >>> turtle.pos() + (64.28,76.60) + >>> print turtle.xcor() + 64.2787609687 .. function:: ycor() タートルの y 座標を返します。 - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.ycor() - 86.6025403784 + .. doctest:: + + >>> turtle.home() + >>> turtle.left(60) + >>> turtle.forward(100) + >>> print turtle.pos() + (50.00,86.60) + >>> print turtle.ycor() + 86.6025403784 .. function:: heading() @@ -526,9 +661,12 @@ タートルの現在の向きを返します (返される値はタートルのモードに依存しま す。 :func:`mode` を参照してください)。 - >>> turtle.left(67) - >>> turtle.heading() - 67.0 + .. doctest:: + + >>> turtle.home() + >>> turtle.left(67) + >>> turtle.heading() + 67.0 .. function:: distance(x, y=None) @@ -539,14 +677,18 @@ タートルから与えられた (x,y) あるいはベクトルあるいは渡されたタートルへ の距離を、 タートルのステップを単位として測った値を返します。 - >>> turtle.pos() - (0.00, 0.00) - >>> turtle.distance(30,40) - 50.0 - >>> joe = Turtle() - >>> joe.forward(77) - >>> turtle.distance(joe) - 77.0 + .. doctest:: + + >>> turtle.home() + >>> turtle.distance(30,40) + 50.0 + >>> turtle.distance((30,40)) + 50.0 + >>> joe = Turtle() + >>> joe.forward(77) + >>> turtle.distance(joe) + 77.0 + 設定と計測 ---------- @@ -558,12 +700,18 @@ 角度を計る単位「度」を、円周を何等分するかという値に指定します。 デフォルトは360等分で通常の意味での度です。 - >>> turtle.left(90) - >>> turtle.heading() - 90 - >>> turtle.degrees(400.0) # 単位 gon による角度 - >>> turtle.heading() - 100 + .. doctest:: + + >>> turtle.home() + >>> turtle.left(90) + >>> turtle.heading() + 90.0 + >>> turtle.degrees(400.0) # 単位 gon による角度 + >>> turtle.heading() + 100.0 + >>> turtle.degrees(360) + >>> turtle.heading() + 90.0 .. function:: radians() @@ -571,12 +719,21 @@ 角度を計る単位をラジアンにします。 ``degrees(2*math.pi)`` と同じ意味です。 - - >>> turtle.heading() - 90 - >>> turtle.radians() - >>> turtle.heading() - 1.5707963267948966 + .. doctest:: + + >>> turtle.home() + >>> turtle.left(90) + >>> turtle.heading() + 90.0 + >>> turtle.radians() + >>> turtle.heading() + 1.5707963267948966 + + .. doctest:: + :hide: + + >>> turtle.degrees(360) + Pen の制御 ----------- @@ -606,9 +763,11 @@ その多角形も同じ太さで描画されます。 引数が渡されなければ、現在の pensize が返されます。 - >>> turtle.pensize() - 1 - >>> turtle.pensize(10) # これ以降幅 10 の線が描かれます + .. doctest:: + + >>> turtle.pensize() + 1 + >>> turtle.pensize(10) # これ以降幅 10 の線が描かれます .. function:: pen(pen=None, **pendict) @@ -633,34 +792,40 @@ さらに一つ以上の属性をキーワード引数として渡すこともできます。 一つの文で幾つものペンの属性を設定するのに使えます。 - >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'black', - 'stretchfactor': (1,1), 'speed': 3} - >>> penstate=turtle.pen() - >>> turtle.color("yellow","") - >>> turtle.penup() - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'yellow', 'pendown': False, 'fillcolor': '', - 'stretchfactor': (1,1), 'speed': 3} - >>> p.pen(penstate, fillcolor="green") - >>> p.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'green', - 'stretchfactor': (1,1), 'speed': 3} + .. doctest:: + :options: +NORMALIZE_WHITESPACE + + >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) + >>> sorted(turtle.pen().items()) + [('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'), + ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'), + ('shown', True), ('speed', 9), ('stretchfactor', (1, 1)), ('tilt', 0)] + >>> penstate=turtle.pen() + >>> turtle.color("yellow", "") + >>> turtle.penup() + >>> sorted(turtle.pen().items()) + [('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow'), + ('pendown', False), ('pensize', 10), ('resizemode', 'noresize'), + ('shown', True), ('speed', 9), ('stretchfactor', (1, 1)), ('tilt', 0)] + >>> turtle.pen(penstate, fillcolor="green") + >>> sorted(turtle.pen().items()) + [('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red'), + ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'), + ('shown', True), ('speed', 9), ('stretchfactor', (1, 1)), ('tilt', 0)] + .. function:: isdown() もしペンが下りていれば ``True`` を、上がっていれば ``False`` を返しま す。 - >>> turtle.penup() - >>> turtle.isdown() - False - >>> turtle.pendown() - >>> turtle.isdown() - True + .. doctest:: + + >>> turtle.penup() + >>> turtle.isdown() + False + >>> turtle.pendown() + >>> turtle.isdown() + True 色の制御 @@ -673,7 +838,7 @@ 4種類の入力形式が受け入れ可能です: ``pencolor()`` - 現在のペンの色を色指定文字列で返します。16進形式になる可能性もありま す + 現在のペンの色を色指定文字列またはタプルで返します (例を見て下さい)。 次の color/pencolor/fillcolor の呼び出しへの入力に使うこともあるでし ょう。 @@ -693,11 +858,25 @@ タートルの形(turtleshape)が多角形の場合、多角形の外側が新しく設定された 色で描かれます。 - >>> turtle.pencolor("brown") - >>> tup = (0.2, 0.8, 0.55) - >>> turtle.pencolor(tup) - >>> turtle.pencolor() - "#33cc8c" + .. doctest:: + + >>> colormode() + 1.0 + >>> turtle.pencolor() + 'red' + >>> turtle.pencolor("brown") + >>> turtle.pencolor() + 'brown' + >>> tup = (0.2, 0.8, 0.55) + >>> turtle.pencolor(tup) + >>> turtle.pencolor() + (0.20000000000000001, 0.80000000000000004, 0.5490196078431373) + >>> colormode(255) + >>> turtle.pencolor() + (51, 204, 140) + >>> turtle.pencolor('#32c18f') + >>> turtle.pencolor() + (50, 193, 143) .. function:: fillcolor(*args) @@ -707,7 +886,7 @@ 4種類の入力形式が受け入れ可能です: ``fillcolor()`` - 現在の塗りつぶしの色を色指定文字列で返します。16進形式になる可能性も あります + 現在の塗りつぶしの色を色指定文字列またはタプルで返します (例を見て下さい)。 次の color/pencolor/fillcolor の呼び出しへの入力に使うこともあるでし ょう。 @@ -727,10 +906,20 @@ タートルの形(turtleshape)が多角形の場合、多角形の内側が新しく設定された 色で描かれます。 - >>> turtle.fillcolor("violet") - >>> col = turtle.pencolor() - >>> turtle.fillcolor(col) - >>> turtle.fillcolor(0, .5, 0) + .. doctest:: + + >>> turtle.fillcolor("violet") + >>> turtle.fillcolor() + 'violet' + >>> col = turtle.pencolor() + >>> col + (50, 193, 143) + >>> turtle.fillcolor(col) + >>> turtle.fillcolor() + (50, 193, 143) + >>> turtle.fillcolor('#ffffff') + >>> turtle.fillcolor() + (255, 255, 255) .. function:: color(*args) @@ -742,7 +931,7 @@ ``color()`` 現在のペンの色と塗りつぶしの色を :func:`pencolor` および - :func:`fillcolor` で返される色指定文字列のペアで返します。 + :func:`fillcolor` で返される色指定文字列またはタプルのペアで返しま す。 ``color(colorstring)``, ``color((r,g,b))``, ``color(r,g,b)`` :func:`pencolor` の入力と同じですが、塗りつぶしの色とペンの色、 @@ -755,13 +944,14 @@ タートルの形(turtleshape)が多角形の場合、多角形の内側も外側も新しく設定 された色で描かれます。 - >>> turtle.color("red", "green") - >>> turtle.color() - ("red", "green") - >>> colormode(255) - >>> color((40, 80, 120), (160, 200, 240)) - >>> color() - ("#285078", "#a0c8f0") + .. doctest:: + + >>> turtle.color("red", "green") + >>> turtle.color() + ('red', 'green') + >>> color("#285078", "#a0c8f0") + >>> color() + ((40, 80, 120), (160, 200, 240)) こちらも参照: スクリーンのメソッド :func:`colormode` 。 @@ -770,6 +960,11 @@ 塗りつぶし ~~~~~~~~~~ +.. doctest:: + :hide: + + >>> turtle.home() + .. function:: fill(flag) :param flag: True/False (またはそれぞれ 1/0) @@ -779,12 +974,14 @@ 引数なしで呼び出されたときは、塗りつぶしの状態(fillstate)の値 (``True`` なら塗りつぶす、 ``False`` なら塗りつぶさない)を返します。 - >>> turtle.fill(True) - >>> for _ in range(3): - ... turtle.forward(100) - ... turtle.left(120) - ... - >>> turtle.fill(False) + .. doctest:: + + >>> turtle.fill(True) + >>> for _ in range(3): + ... turtle.forward(100) + ... turtle.left(120) + ... + >>> turtle.fill(False) .. function:: begin_fill() @@ -792,17 +989,19 @@ 塗りつぶしたい図形を描く直前に呼び出します。 ``fill(True)`` と等価です。 - >>> turtle.color("black", "red") - >>> turtle.begin_fill() - >>> turtle.circle(60) - >>> turtle.end_fill() - .. function:: end_fill() 最後に呼び出された :func:`begin_fill` の後に描かれた図形を塗りつぶしま す。 ``fill(False)`` と等価です。 + .. doctest:: + + >>> turtle.color("black", "red") + >>> turtle.begin_fill() + >>> turtle.circle(80) + >>> turtle.end_fill() + さらなる描画の制御 ~~~~~~~~~~~~~~~~~~~~ @@ -812,15 +1011,19 @@ タートルの描いたものをスクリーンから消し、タートルを中心に戻して、 全ての変数をデフォルト値に設定し直します。 - >>> turtle.position() - (0.00,-22.00) - >>> turtle.heading() - 100.0 - >>> turtle.reset() - >>> turtle.position() - (0.00,0.00) - >>> turtle.heading() - 0.0 + .. doctest:: + + >>> turtle.goto(0,-22) + >>> turtle.left(100) + >>> turtle.position() + (0.00,-22.00) + >>> turtle.heading() + 100.0 + >>> turtle.reset() + >>> turtle.position() + (0.00,0.00) + >>> turtle.heading() + 0.0 .. function:: clear() @@ -853,15 +1056,6 @@ 可視性 ~~~~~~~~~~ -.. function:: showturtle() - st() - - タートルが見えるようにします。 - - >>> turtle.hideturtle() - >>> turtle.showturtle() - - .. function:: hideturtle() ht() @@ -869,7 +1063,19 @@ 複雑な図を描いている途中、タートルが見えないようにするのは良い考えです。 というのもタートルを隠すことで描画が目に見えて速くなるからです。 - >>> turtle.hideturtle() + .. doctest:: + + >>> turtle.hideturtle() + + +.. function:: showturtle() + st() + + タートルが見えるようにします。 + + .. doctest:: + + >>> turtle.showturtle() .. function:: isvisible() @@ -877,8 +1083,11 @@ タートルが見えている状態ならば True を、隠されていれば False を返しま す。 >>> turtle.hideturtle() - >>> print turtle.isvisible(): + >>> turtle.isvisible() False + >>> turtle.showturtle() + >>> turtle.isvisible() + True 見た目 @@ -896,11 +1105,13 @@ 形についての扱いを学ぶには Screen のメソッド :func:`register_shape` を参照して下さい。 - >>> turtle.shape() - "arrow" - >>> turtle.shape("turtle") - >>> turtle.shape() - "turtle" + .. doctest:: + + >>> turtle.shape() + 'classic' + >>> turtle.shape("turtle") + >>> turtle.shape() + 'turtle' .. function:: resizemode(rmode=None) @@ -918,9 +1129,13 @@ resizemode("user") は :func:`shapesize` に引数を渡したときに呼び出されま す。 - >>> turtle.resizemode("noresize") - >>> turtle.resizemode() - "noresize" + .. doctest:: + + >>> turtle.resizemode() + 'noresize' + >>> turtle.resizemode("auto") + >>> turtle.resizemode() + 'auto' .. function:: shapesize(stretch_wid=None, stretch_len=None, outline=None) @@ -938,9 +1153,17 @@ *stretch_len* は進行方向に沿ったの伸長係数、 *outline* はアウトラインの幅を決めるものです。 - >>> turtle.resizemode("user") - >>> turtle.shapesize(5, 5, 12) - >>> turtle.shapesize(outline=8) + .. doctest:: + + >>> turtle.shapesize() + (1, 1, 1) + >>> turtle.resizemode("user") + >>> turtle.shapesize(5, 5, 12) + >>> turtle.shapesize() + (5, 5, 12) + >>> turtle.shapesize(outline=8) + >>> turtle.shapesize() + (5, 5, 8) .. function:: tilt(angle) @@ -950,12 +1173,15 @@ タートルの形(turtleshape)を現在の傾斜角から角度(*angle*)だけ回転します。 このときタートルの進む方向は *変わりません* 。 - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.tilt(30) - >>> turtle.fd(50) - >>> turtle.tilt(30) - >>> turtle.fd(50) + .. doctest:: + + >>> turtle.reset() + >>> turtle.shape("circle") + >>> turtle.shapesize(5,2) + >>> turtle.tilt(30) + >>> turtle.fd(50) + >>> turtle.tilt(30) + >>> turtle.fd(50) .. function:: settiltangle(angle) @@ -966,14 +1192,15 @@ 指定された角度(*angle*)の向きに回転します。 タートルの進む方向は *変わりません* 。 - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.settiltangle(45) - >>> stamp() - >>> turtle.fd(50) - >>> turtle.settiltangle(-45) - >>> stamp() - >>> turtle.fd(50) + .. doctest:: + + >>> turtle.reset() + >>> turtle.shape("circle") + >>> turtle.shapesize(5,2) + >>> turtle.settiltangle(45) + >>> turtle.fd(50) + >>> turtle.settiltangle(-45) + >>> turtle.fd(50) ***The diff for this file has been truncated for email.***