Category:Home/tutorial/data (Total 3 items)
Categories - tutorial/data
Lists
- 2008-05-30 (金)
- tutorial/data
fromhttp://nodebox.net/code/index.php/Lists
変数はデータの全体のリストを保持できる。
リストはスクリプトが複雑さを増大させた時、不可欠になる。:
リストは所属を同じにする情報のbitsやpiecesをグループ化すつ方法である。
例えば、スクリーンに描画するための全てのword、スクリプトが選択できる全ての色やフォント等である。
NodeBoxでのリストは実生活においてのものとそう変わらない。:
することの概要や、買い物リスト、名前と住所表、を保持出来る。
実生活との主な違いは、たいていリストは1から始めるが、プログラミングのLISTはゼロか始まるということです。
Creating a list
このコードは何に見えますか?
以下のコードはNodeBoxで定義された、買い物リストである。
リストはsquare brackets[]で囲まれて定義されている。
リスト内のどのアイテムもテキスト(string)である。したがって、クォートで埋め込まれている。
リストはgroceriesという変数名で割り当てられている。しかし、変数名は好きなように変えられる。gとかstufftodoといったように。
groceries = ["apples", "pears", "carrots", "cucumber", "yoghurt", "milk"]
print len(groceries)
>>> 6
listは、strings、numbers listsどんな種類でも含めることが出来る。
len(list)コマンドはリスト内のアイテムの数を返す。
Retrieving and editing items in a list
変数名の後に、欲しいアイテムのインデックスを角括弧[]内に入れることで、直接リスト内のアイテムを参照出来る。
print groceries[0]
>>> apples
groceries[3] = "banana"
print groceries
>>> ["apples", "pears", "carrots", "banana", "yoghurt", "milk"]
リストのスタートは0からだということを忘れないで下さい。
上の例で、何故、4番目のエレメントが置き換えられたのか?
4番目のエレメントのインデックスは3だからです。
Adding items to the list
リスト内のデータは時間の流れる過程で変えることが出来る。
新しいアイテムを足すことも、古いアイテムを消すことも出来る。
これは丁度、買い物リストのメモ書きに書き加えたり、消したりするようなものです。
リストの終りにアイテムを追加する為に:
groceries.append("eggs")
print groceries
>>> ["apples", "pears",
>>> "carrots", "banana",
>>> "yoghurt", "milk",
>>> "eggs"]
リストから取り除くには:
del groceries[6]
アイテムは list.insert(i, item) コマンドを使えば、リストの途中に挿入出来る。
iパラメータはエレメントを入れたいポジションである。
Looping through the list
リストをルーピングすることは、モールへ行って、買い物リストを上から下へ解消していくのと似ている。:
最初のアイテムはリンゴで、それを持ったら、次は梨を取って…というように。
リストの中の全アイテムを回ることはデータを取り扱う時、最も不可欠な要素の一つである。
少量の時は、あなたは手動でアイテムを検索できた、しかし、例えば、スクリーンに文章をを描画したい時等、リストが数百、数千のアイテムを持つ場合は無理。
for文によるループ:
for item in groceries:
print "buy some " + item
>>> buy some apples
>>> buy some pears
>>> buy some carrots
>>> buy some banana
>>> buy some yoghurt
>>> buy some milk
>>> buy some eggs
上の例では、for文以下のインデントされたコマンドが、リストの各アイテムに対して実行される。
item変数は、リスト内の各アイテムに連続して含まれる。
その後、ループは終る。
Random items from the list
choice()コマンドを使って、コード自身に、リストからアイテム決めさせることが出来る。
Example
これは、コンポジションを作成するために小さいリストを使うことに関して、とてもbraindeadだという例です。
このスクリプトは、wordに使われるリストがあり、色に使われるリストがある。
その後スクリプトは自身で自由に動き出す。:
2つのリストからランダムに単語と色を選び、ランダムなサイズと角度でスクリーンに描画する。
異なる実行においても、単語と色が限定されているため、ある一貫性を持つ。
コード
words = ["Lists", "are", "fun"]
colors = [color(1,0,0), color(1,1,1), color(0,0,0)]
for i in range(40):
x = random(WIDTH)
y = random(HEIGHT)
rotate(random(360))
fontsize(random(10,100))
fill(choice(colors))
text(choice(words), x, y)
Dictionaries
Dictionaries(辞書) は、文字列のインデックスリスト、キーを持っている非常に役立つ種類のリストで、キーはあなた自身で定義する。
それぞれのキーは単一であり、リスト内のアイテムが参照する。
辞書は[]の代りにcurly braces{}を使って作成される。
heading = {}
heading["font"] = "ConduitITC-Medium"
heading["size"] = 18
heading["fill"] = color(1,0,0)
print heading.keys()
>>> ["font", "fill", "size"]
print heading["size"]
>>> 18
if heading.has_key("fill"): print "found!"
>>> found!
More on lists
リストに関して、あなたが出来ることはもっとたくさんある、ソートや反転、リストの為のフィルタ機能の記述。
フルドキュメントはここ
http://docs.python.org/tut/node7.html#SECTION007100000000000000000
Pythonのドキュメントの中にある。
- Comments (Close): 0
- TrackBack (Close): 0
Variables
- 2008-05-26 (月)
- tutorial/data
fromhttp://nodebox.net/code/index.php/Variables
Variables(変数)はコンピュータのメモリに値を格納する場所である。
変数をダンボール箱のように考えることが出来る。
箱の中に何か入れたり、ストレージの為に片付けたり、箱からアイテムを検索したり出来る。
通常、何が入っているかを覚えておく為に、ラベルや、ある種のコードを箱の中に置く。
それは変数と同じである。
どのような変数も名前と値を持つ。
名前は箱のラベルのようである。
それは、アイテムや値が変数の中に何があるかを素早く思い出させる。
ちょうど箱のように、変数はNodeboxで役に立ついろいろな物、テキストの断片、重要数値、フォントの名前色のリストなど、を保持することが出来る。
変数を考えるもう一つの方法はこれらをスティッキーズのように考えることである。
Why use variables
値の再利用を考えるなら、変数に格納する。
もし、描画しようとしているそれぞれの矩形が100ピクセル幅だとしたら、数値100を格納した変数を格納し、それぞれの矩形に何が幅の変数なのかを見に行くように呼ぶことは良いアイデアである。
この方法だと、気が変わって矩形の幅を変える時、それぞれの矩形が変数を見ているので、幅の変数を変更するだけです。
心配は無用です。いくつかのサンプルに挑戦すれば解決するだろう。
Declaring variables
スクリプト上の任意のポイントで変数を宣言でき、NodeBoxが既に要求した名前(rectやfor等)以外なら好きな名前を付けられる。
通常、変数がどのような情報を入れているかわかる何かで、名前を選ぶ。
適切で短い名前を選びましょう。
theWidthOfAllRectanglesと12回もタイプするのが好きな人はいません。
我々が良い変数名だと考え、どんな値も割り当てるに好ましい変数は、このように簡単です。
NodeBoxが変数がどんな値を入れてあるか分かるような、小さなメモ用紙であり続けるようにする。
width = 100
rect(10, 10, width, 30)
変数はパラメータとして使用される。
NodeBoxはそれが含む全ての値をルックアップする。
このサンプルでは、矩形は座標(10,10)、幅100高さ30で描画される。
Changing variables
スクリプトの途中で変数の値を変更できる。
変更すると、古い値は破棄され、それから先変数は新しい値を含む。
最初の矩形の幅は100、変数の値が20に変更されると、続く二つの矩形では、新しい値を使用し、幅20になる。
width = 100
rect(10, 10, width, 30 )
width = 20
rect(120, 10, width, 30)
rect(330, 10, width, 30)
NodeBoxの出力結果(画像のため略)
Calculations with variables
変数に数字を入れると、乗算、加算といった数学的なオペレーションを行える。
例えば、それぞれのテキストの位置について計算したがっていない時、テキストの位置を決めるのにこれは不可欠です。
むしろ、パラグラフテキストはタイトルをきちんと下げるべきで、タイトル字体サイズが変化すると、パラグラフテキストはそれ自体で移動すべきである。(意味不明になっちった)
従って、パラグラフの垂直位置はタイトルの垂直位置に従属であるべきです。
count = 10
print count
>>> 1
count += 5
print count
>>> 15
x = 30
y = 30
quote = "Nicely on the left"
text(quote, x, y)
y += textheight(quote)
quote = "Nicely below each other"
text(quote, x, y)
Where do variables live?
どのスクリプトも自身のメモリーストレージを持つ。それは箱やノートパッドの倉庫である。
従って、変数の特定の値は、(他のスクリプト内ではなく)、利用しているスクリプト内だけで知られている。
Predefined variables
NodeBoxはスクリプトの状態についての情報を含む、あらかじめ定義された変数を持つ。
これらの変数は見られるだけで、変更できない。
WIDTH: the width of the drawing area HEIGHT: the height of the drawing area PAGENUM: the current page being exported in a multi-page export. FRAME: the current frame in an animation.
いくつかの変数はインタラクティブアニメーションの作るために使うことが出来る。
MOUSEX: the horizontal location of the mouse cursor MOUSEY: the vertical location of the mouse cursor mousedown: is True when the mouse button is pressed, False otherwise keydown: is True when a key is being pressed, False otherwise key: the last key pressed keycode: the integer keycode of the last key pressed KEY_UP, KEY_DOWN_ KEY_LEFT, KEY_RIGHT, KEY_BACKSPACE contain the keycodes for the arrow keys and the backspace key.
The variable panel
変数パネルはスライダ、テキストフィールド、チェックボックスといったヴィジュアルをスクリプトに表示する。
変数スライダーをドラッグすると、オンザフライで値が変化し、描画エリアの出力が変化する。
スクリプトを再度Runしない限り、スクリプト上でのどのようなrandom()も保有される。
言い換えると、数値を変更した時や、スライダーを動かした時ではなく、スクリプトが走らせた時、randomの値が変化する。
変数パネルに変数を加えるためのコマンドはvar()コマンドである。
var(name, NUMBER, default, min, max)
var(name, TEXT, default="hello")
var(name, BOOLEAN)
var(command, BUTTON)
他の変数と同じようにスクリプト内で、name変数を使うことが出来る。
数値はスライダー、テキストは入力フィールド、真偽値はチェックボックスを作る。
ボタン用のcommandパラメータは、ボタンが押された時にコールされる為の、スクリプト内のコマンド名である。
The variable panel is inspired on Bob Ippolito's widget drawer in the original DrawBot.
- Comments (Close): 0
- TrackBack (Close): 0
Strings
- 2008-05-23 (金)
- tutorial/data
fromhttp://nodebox.net/code/index.php/Strings
適当な日本語訳
変数はしばし、スクリーンに描画されるかもしれないstrings(文字列)と呼ばれるテキストの断片を保持する。
テキスト片-文字列-が、変数に代入される場合、"クォート"で囲む必要がある。
そうしないと、Nodeboxはテキストをが変数名か何かと考えるかもしれない。
以下の例を考えよ。
hello = 20
str = hello
print str
>>> 20
str = "hello"
print str
>>> hello
文字列はキャラクタのリストである
文字列は個別の文字、記号のlistのようである。
この方法で、あなたは他のさまざまなリストのように文字列の各キャラクタにアクセスが出来た。
以下の例で、choice()コマンドによってchars stringからランダムな文字列を選択し、Joshua Davis-styleで描画するという、便利な使い方をします。
画像の為、略。
Manipulating strings
Stringsにはとても有用なメソッドが多くある。
- string.upper(): 文字列を大文字で返す。
- string.lower(): 文字列を小文字で返す。
- string.capitalize: 最初の文字を大文字にして文字列を返す。
- string.find(text, start=0): 文字列のtextのインデックスポジションを返す。
- string.replace(old, new): 文字列中全てのold textをnew textに置き換える。
- string.split(): 文字列をwordのリストとして返す。
- string.join(list): wordリストを結合する。
文字列はupper() and lower()メソッドで大文字、小文字に変換できる。
captalizeで最初の一文字を大文字に出来る。
これらはメソッドであり、str = upper(str)とする代りに、str = str.upper()とする必要があることを覚えておくこと。
str = "Kumquats, Kumquats! I must have my Kumquats! - Oscar Wilde"
str = str.upper()
print str
>>> KUMQUATS, KUMQUATS! I MUST HAVE MY KUMQUATS! - OSCAR WILDE
replace()メソッドは文字列から間違いをフィルタリングしたい時、コンテンツから一部を変更したい時、大変有効である。
str = "Something's rotten in the state of Denmark."
str = str.replace("in", "in, like, ")
str = str.replace(".", " dude.")
str = str.replace("rotten", "way uncool")
print str
>>> Something's way uncool in, like, the state of Denmark dude.
Quotes in quotes
テキストデータはしばしば自身にクォートを含む。特にテキストがダイアログを含む時に。
NodeBoxが文字列を調査し、クォートに遭遇した時、文字列がここで終ると論理的に仮定するであろう。
次の例は動作しない。
NodeBoxは(On his death bed)をstrに代入する必要があると考え、続くゴミステートメントは理解しない。
str = "(On his death bed): "Those curtains are hideous." - Oscar Wilde"
代りに、文字列は三重クォートで囲む必要がある。
str = """(On his death bed): "Those curtains are hideous." - Oscar Wilde"""
print str
>>> (On his death bed): "Those curtains are hideous." - Oscar Wilde
File input
もし長いパラグラフのテキストを利用するなら、別のテキストファイルに保存し、変数にアサインするのが良いだろう。
(これはスクリプトを綺麗に保つし、スクリプトから分離してテキストを編集することが出来るから)。
(画像略)
単純にテキストエディットでプレーンテキストで作って、スクリプトにopen()コマンドでインポートする。
Unicode characters
Unicodeはコンピュータが世界中のライティングシステムからシンボルを使うためのキャラクタシステムである。
例えばフィンランド語やヘブライ語をスクリプトの出力で用いるなら、Unicodeについて知らなければならないだろう。
最初に、確実なことは、Unicode characterを持っているtypefaceを使うので、テキストはそのフォントを描画することが出来るということである。
通常、Helveticaのような大きなフォントファミリーはほとんどのユニコードキャラクタの為のユニコードを含んでいる。
次に、特殊な記号を含んだテキストのかけらをNodeBoxで呼ぶ。
これは文字列の引用符の前に"u"を付けるだけです。
str = u"?אתה מדבר אנגלית"
text(str, 50, 200)
テキストファイルからimportする場合は2つ注意することがある。
一つはテキストファイルはUnicodeで保存すること。
テキストエディットでは、プレーンテキストを開いて保存するときに、エンコードリストから"Unicode (UTF-8)"を選択する。
それで、そのファイルをNodeBoxにimportする際、テキストをdecodeする。
str = open("hebrew.txt").read()
str = str.decode("utf-8")
align(RIGHT)
text(str, 100, 200)
- Comments (Close): 0
- TrackBack (Close): 0