1 :
デフォルトの名無しさん :
2008/04/11(金) 10:55:10 このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Python 使いが優しくコメントを返しますが、 お礼は Python の布教と初心者の救済をお願いします。
2 :
デフォルトの名無しさん :2008/04/11(金) 10:56:08
3 :
デフォルトの名無しさん :2008/04/11(金) 10:59:49
おー、Pythonにも初心者スレができたか。
Windows だとエディタは何がお勧め? IDLE ? それとも IronPython の Visual Studio 拡張? しかし実行はドトネトのじゃなくて普通の Python で実行したい。
7 :
デフォルトの名無しさん :2008/04/15(火) 10:02:11
pyscripter。 たまに落ちるけど
IDLE と python-mode.el を気分で使い分けてる。両方ともオヌヌメ
大規模な開発とかしないならIDLEで充分だと思う
適当なエディタとPython(CommandLine)とコマンドプロンプトを画面に広げて作業してる。
Iron Python+VSってもう使い物になってるの? 現在PowerShellがどうも馴染めなくて.NETなスクリプト探索中なんだけど。
F#も試してみる価値あり
14 :
デフォルトの名無しさん :2008/04/23(水) 18:54:10
コマンドプロンプトの代わりにIPythonを導入したんだけど、 起動時のカレントディレクトリを指定するにはどうしたらいいの? 作業フォルダに指定しても無視される(コマンドプロンプトならこれでいけた)。
>>1 よ
Python使い ×
へび使い ○
個人的には面白いと思うし、便利なライブラリがたくさんあるし、
でも、うまく説明できないが、何かしっくり来ない部分があるのです。
何だろう・・・・・こう、のどに魚の骨がひっかかってるようなもどかしさ。
無意識のうちに、ライトウエイトなJavaを期待しているのだろうか・・・。
16 :
デフォルトの名無しさん :2008/04/24(木) 20:49:21
書いて書いて書きまくるしかないよね
>>8-9 おれもIDLEなんだけど、あれって行番号出なくない?
どうもそれだけが不便で・・・
おれが気づかないだけで、表示できるのかなあ
とりあえず貼っておきますね。 <わからない9つの理由> 1. 読まない ・・・説明書などを読まない。読む気などさらさらない。 2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。 3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。 4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。 5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする 6. 感謝しない …教えてもらって当たり前。事がすんだらさようなら。 7. 逆切れする …自分の思うようにならないと逆切れする。 8. 他人を見下す …自分が最も偉いのだ、故に全員自分に優しく答えてくれる!と勘違いしている。 9. 初心を盾にする …だから何?「初心者です」は免罪符やいい訳にはなら無い。
19 :
デフォルトの名無しさん :2008/04/25(金) 02:00:14
また香ばしいのが出てきたなw
20 :
デフォルトの名無しさん :2008/04/25(金) 02:07:44
本スレはいつも質問しづらい雰囲気だから、初心者スレはありがたい。 もっとのびるといいな。
21 :
デフォルトの名無しさん :2008/04/25(金) 02:37:23
スーパー初心者ですが質問させてください。 PythonのPyは、おっぱいのパイのパイパイパイですか?
22 :
デフォルトの名無しさん :2008/04/25(金) 07:34:03
ウルトラ初心者ですが質問させてください。 PythonのPyは、おっぱいのパイのパイパイパイパイパイパイパイパイパイパイパイパイパイパイパイパイですか?
P: Perl y: よりも th: ぜんぜん o: おすすめ言語だよ n: ん!
24 :
デフォルトの名無しさん :2008/04/25(金) 09:06:35
P: PerlやPHPやRubyよりも、 y: よりも th: ぜんぜんつかえない o: おまえらがつかってるPythonというものはどうしようもないぐらい使えない言語だ n: 何かにつけてPythonを勧めるキチガイ信者はどうにかしていただきたいものだ。それが総意である
P: Pythonは y: やりがいのある th: 人生を o: お楽しみいただける n: 内容となっています
26 :
デフォルトの名無しさん :2008/04/25(金) 22:56:12
pythonとpaygameの違いがわかりません。 プログラム初心者の俺にわかりやすく、 また詳細に答えて頂けると嬉しいです。
Python: 日本語 Pygame: 日本語で書かれた何か
28 :
デフォルトの名無しさん :2008/04/25(金) 23:13:39
Unicodeの文字列が入ってる辞書を、 Shift_JISに変換してファイルに書き出したいんだけど、どうもうまくいかない。 文字列の文字コード変換はできるけど、リストに入ってるとやり方わからん。 どんな感じにコード書けばいいかちょっと教えてください。
>28 辞書だかリストだかはっきりしてほしいけど まあこんな感じでいいのだろうか # coding: utf-8 D = {u'犬': u'わんわん', u'猫': u'にゃーにゃー' } F = open('test.txt', 'w') for k, v in D.iteritems(): F.write((u'%s「%s」\n' % (k, v)).encode('shift_jis')) F.close()
codecsモジュールを使ってunicodeオブジェクトのまま書き込む方法もある import codecs f = codecs.open("test.txt", "w", "shift_jis") for i in [u"あ", u"い", u"う"]: f.write(i)
>>29-30 なるほどー。すごく参考になります。
リストと書いたのは、僕の用意した辞書の値がリスト型で格納されてるからです。言葉足らずでスマソ。
今もまだUnicodeEncodeErrorとこんにちわしてる最中だけど、もうしばらくねばってみる。
お二人方(一人?)どうもありがとう。
>>26 python < これは、プログラム言語をさす。Guido(オランダ語読みだとホイドー)が作った言語
pygame < これは、pythonを使ってゲームを作る為のラパッパ。SDLラッパー。
pygameって、ライブラリに名前がついちゃってるけど、やってることはSDL。
rubySDL使って開発をしたくなった時でも、pygame使って開発した経験がとても役に立つという
どうしようもないもの。日本語記事は限りなく少ないので、pygameのdocumentを参考にしていくしかない。
33 :
デフォルトの名無しさん :2008/04/26(土) 06:00:11
>>32 解答、ありがとうございます。
ラパッパってなんでしょうか?
あと、説明を受けて思ったんですが、
python言語だけではゲームを作れないのでしょうか?
だとすれば、それはなぜですか?
不覚にも「ラパッパ」で吹いてしまった
ラパッパはラッパのタイプミスでしょう。 python言語だけではゲームを作る事はできないかも知れませんが、 標準の付属のライブラリを使えば充分ゲームを作成する事は可能です。 しかし恐らくですがあなたが望むようなゲームを作るにはpygame等のライブラリが必要になると思います。
pythonのみであれば、 ライフゲーム作れるよ
roguelikeも作れるよ
標準(?)のTkinterさえあればかなりのゲームが作れる希ガス。
ホイドって読んでたが、伸ばすのか
40 :
デフォルトの名無しさん :2008/04/26(土) 17:51:23
>>35 ファミコンちっくな容量少ないゲームなら作れるってことですか?
それとも、ゲームのジャンルによって可能だということですか?
>>39 ファーストネームだけだったらのばす、
後ろの名前がつく場合は短く切る。
ドイツ語の発音での話だけどね。
オランダ語も北部ドイツ語方言の一種だから似たようなものかな
>>40 ほぼ全てのゲームが作れるんじゃないかな。
ネットワーク対戦も、socketモジュール使えば通信できるから
可能だろうし。
ctypesもあるしな
質問です。 pyscripterを入れてみました。 ひとまず初めてということで、 print "hello" とテキストで書いたtest.pyという名前をつけ import test とやったのですが何も起きませんでした。 test.pyの保存場所を変えて toolのタブにpathの設定らしきものがあったので いじってみたのですが、やはり出来ないです。 importを行ったときは、 いったいどこを見に行っているのでしょうか?
pyscripterのシェルに import os os.getcwd() これを実行しろ
>>46 返答ありがとうございます。
実行してみましたが、何も起きませんでした。
import os
os.getcwd()
は、何を意味してるのでしょうか?
import os
print os
として見たところ、osには↓が入っていました。
<module 'os' from 'c:\Python23\Lib\os.pyc'>
無知で申し訳ありませんが宜しくお願いします。
>>47 なんでまた python 2.3 みたいな古いバージョン使ってるんだ?
>>51 インストラーは英語だが、ガンガンNextで
次ページに送って適当にApplyしてOKしてしまえばいい
54 :
デフォルトの名無しさん :2008/04/26(土) 21:25:06
>>42 すみません、自分が
>>40 で尋ねたかったのは
pygameでは無く、pythonだけでゲームを作ろうとした
場合の話です。
>>54 Pythonだけだと
コマンドラインで実現するしかないんじゃない。
強制的に改行繰り返して
オブジェクトの動きを再現するというのもありかもしれんがな
PygameとかのPythonモジュールって、Pythonで書かれてないの?
うん。Cだよ
そうなのか、じゃあPythonでPygameのようなモジュールを作るのは可能?
ctypesでがんばればできる
質問ばっかでスマソ。 Pythonの標準モジュールもC/C++で書かれてるの? 高度なことをしようとすると、Cで書く必要が出てくるって事か。それともC/C++を使って書くのは速度を追求するためで、 やろうと思えばpythonだけで実装可能なのか。
速度が20倍くらい違うから。標準モジュールもPythonとCが混在してる。 また以前はctypesがなかったからC言語のライブラリのラッパを作るときは C言語で書かなきゃならなかった。
なるほど、さんくす。 いろいろググって見たけど、やっぱ難解だなあ…。 まあ、俺が他の言語と連携したコードを書くのは随分先のことになりそうだから、 今は気にしなくてもいいか。ラッパとかどういう風に書くのか想像すらできないし。
cが解るなら公式マニュアル見ればすぐ使えるようになるし、 c++わかるならboost::pythonが使いやすい
64 :
デフォルトの名無しさん :2008/04/27(日) 10:47:50
なんか早速スレ内にいろんなpython名が出てるけど なんでしょう?pythonっていろんな種類があるの?
処理系はいくつかある
初心者にわかるように 説明してほしいな
日本語の処理系は1億2千万個ある
処理「系」ってなに? ○○系というのはほかにもありますか?
前者はさすがにぐぐれw 後者は少々ぐぐりにくかろうが幾らでもあるぞ 複雑系生態系理系文系etc 系ってのがシステムの訳語なわけで
情報弱者がプログラミングを独習しようなどとは笑止千万
暇なんですね。わかります。
言葉の基本的な意味ぐらい自分で調べろよ。
真用語辞典かw 良く暇潰しでお世話になってます
褒めてくれるコンパイラがあったらいいのに $ xcc test.c test.c:10:17: good job test.c:17:4: great! test.c:23:10: exellent! test.c:120:40: oh, my god! $
最後は致命的エラーじゃねえの?w
77 :
デフォルトの名無しさん :2008/04/27(日) 20:46:33
初心者にも優しくしてくださいまし
むしろキーボードでクソ垂れる前と後に{}を付けろ! とか言って欲しい
>>68 系というのは英語で言うとシステム(system)だよ。
太陽系は the solar system、生態系は an ecosystem だね。
○○系とは訳されないけど OS は operating system だ。
考えてみると、日本語では「処理系」ってことばを割とよく使うけど
英語では少なくともプログラミングの文脈ではあんまり system とは
言わない気がするなあ。もちろん使っても意味は通じると思うけど。
81 :
デフォルトの名無しさん :2008/04/27(日) 23:08:53
M.Hiroiさんのお気楽Pythonで、順列の生成(繰り返し版)の pop()が連続するところが分かりません。1文字pop()して、 1文字末尾にappendする一番内側の部分は分かるのですが、 1文字消去から2文字消去になる部分が分かりません。 どうして、すでに出た並びが繰り返されずに外側の ループに渡っていくのかが分からないです。 教えてくれますか?
どこをどう立て読みするのだね
>>81 http://www.geocities.jp/m_hiroi/light/python03.html#chap07 これか。
最内側ループの
for d in range(1, 5):
if d in perm: continue
perm.append(d)
print perm
perm.pop()
は perm の末尾に d を追加、perm を印字、perm の末尾の要素を削除、という処理の繰り返しだ。
(ただし d が perm の要素のときはこれらの処理は行なわれない。)
結果として、このループに入る前と後では perm の内容に変化はない。
その外側のループまで含めて考えると、次のようになっている。
for c in range(1, 5):
if c in perm: continue
perm.append(c)
# 4 番目の数字を選ぶ
for d in range(1, 5):
(省略)
perm.pop()
これは perm の末尾に c を追加、「4番目の数字を選ぶ」ループを実行、perm の末尾から c を削除、という処理の繰り返しだ。
(ただし c が perm の要素のときはこれらの処理は行なわれない。)
結果として、やはりループに入る前と後では perm の内容に変化はない。
さらにループが深くなっているけれどもあとの要領は同じだ。
>1文字pop()して、 >1文字末尾にappendする一番内側の部分は分かるのですが、 >1文字消去から2文字消去になる部分が分かりません。 いちばん内側も1文字appendしてから、1文字popしてる。 その後も、各ループの先頭で1文字appendしたものを各ループの最後で1文字popしてる ひとつのループ内で2文字消去してるところはない
85 :
81 :2008/04/28(月) 12:05:36
最も内側の for d in range(1, 5) .... pop() で、最後のpop()が4回呼ばれたら、次のループ for c in range(1, 5) .... pop() の最後のpop()が最内のpop()に引き続き呼ばれるところが 分かっていませんでした。for d in range(1, 5)で ループの繰り返しが4回に制限されているのが 分かっていなかったようです。pop()が連続して呼ばれるところで 一時的にリストから2文字消去されることを指して 2文字消去と呼んでいました。ループ単位で見れば 確かに1文字ずつしか消去されていませんね。納得。 ありがとうございます。
86 :
デフォルトの名無しさん :2008/04/28(月) 18:04:58
パイソン勉強する前に C言語やっとくといいよ、って言われました パイソンはCに似てるのですか?
pythonからでいいよ
似てるといえば似てるし、 似てないといえば似てない。 if ( hoge = mage()): print 'a' のようなことができない
まぁ、手続き型言語なんてどれも似たようなもんだ
>>86 本スレで言われたのなら俺が言ったやつなんだろうけど
Cなら文法そのものよりも周辺の知識が役に立つって意味で言った
91 :
デフォルトの名無しさん :2008/04/29(火) 12:22:55
プログラム経験0からpythonやる人なんかいるか?
いないとも言い切れん
93 :
81 :2008/04/29(火) 13:10:05
一旦納得したつもりが、誤解でした。紙の上で自分の理解が間違っていることに 気づき、問題のプログラムを実行したら、予想外の順序だったので、 abcdに具体的に何が入っているか 考えて初めて24通り最後まで紙の上と実行結果が一致しました。 一番内側のpop()が呼ばれるときはdに4が入っているので、そのループは 一旦終了して、その外側のpop()が呼ばれるので、僕の言い方だと、いきなり 2文字消去になるようです。皆さんのレスを僕が読み違えていたところは pop()が末尾の要素を取り上げると読みながら、先頭から取り上げると 勝手に誤解していました。お騒がせしました。
自力で解決して、
そして結果を貼付ける。
>>81 は伸びるね。
95 :
デフォルトの名無しさん :2008/04/29(火) 16:24:22
>>94 あなたに言われる筋合いはありません
実力を示してから上からものを言ってください
学校でプログラム経験0からbasicやってただろ。 今はそれがpythonに置き換わっただけ。
>>97 ベーシックと違って、pythonは
教えてくれる学校が無いじゃないか!
せめて、当時のベーマガみたいな
情報誌でもあれば救われるのに
>>98 わからなかったら、ここで質問なげればいいよ。
教科書より良いと思うよ。
皆自分が苦労した点をふまえて、
困ってることを解決する手段について教えてくれるからね。
当時のベーマガとか言ってる時点で素人ではない件
ベーマガは素人向けの雑誌だったが‥ 載ってる内容が分からない、及び ゲームのコード内容にそそられないというのは適正がない証拠だと 思ってた。
百万出すからpygame修得させてくれ
>>102 すまん、なにを言いたいのかがわからん
講義がてら読めと言いたいのかな
確かに一部分pythonを利用する場面があるが、
そこは基本、python専門では無いようだよ?
105 :
デフォルトの名無しさん :2008/04/30(水) 19:36:43
なぜ、Pysonで無く Pythonって書くのかな 英語の理屈ってわからないや
発音できないからだろう
107 :
デフォルトの名無しさん :2008/04/30(水) 19:47:39
Pythonで行列の計算をしたいんですがどうやればいいんですか?
>>105 日本語だって「わ」の音を「は」と書くじゃん。
110 :
デフォルトの名無しさん :2008/04/30(水) 20:05:05
日本語は最近綴り方を改定したから大概発音と一致するけど、 英語は大母音推移以来ほとんど改定らしい改定をしてないからバラバラ。
113 :
デフォルトの名無しさん :2008/04/30(水) 20:14:41
>>111 まずなぜかインポートができない(たぶんバージョンが違うから)
それに多分arrayが認識されない
>>113 何をインポートしようとしたんだ?
どういうエラーが出たんだ?
「それに多分arrayが認識されない」とかの自分の印象はいいから
まず、客観的な事実を書いてくれ。
115 :
デフォルトの名無しさん :2008/04/30(水) 20:22:58
from Numeric import * をインポートしようとしました。
116 :
デフォルトの名無しさん :2008/04/30(水) 20:26:00
それと >>> A=array([1,2,3]) Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> A=array([1,2,3]) NameError: name 'array' is not defined
easy_install入れろ
ここは親切な人が多くて良いな。
119 :
デフォルトの名無しさん :2008/04/30(水) 20:57:07
ごめんわかんない
NumPyはインストールしたの?
NumPy落として、 python setup.py install とやれ。 もしWindowsだったら、 環境変数PATHに、c:\python25\bin とか追加しとけ
122 :
デフォルトの名無しさん :2008/04/30(水) 21:45:22
どうかこの優しい方々が居続けてくださいますように どうかこの優しい方々が、今後も湧き出るどうしようも無い初心者達の救済となって、 ルーキーズの川籐のごとくアドバイスし続けてくださいますように ひいては、このpyuhonが、pygameが、どうか日本で流行りますように うぃーあーぱいそん!!恋愛
123 :
デフォルトの名無しさん :2008/04/30(水) 21:52:01
>>123 「環境変数 PATH」でぐぐるよろし。
設定しとけば毎回c:\python25\bin\Python.exeなんて長ったらしいパスを打ち込まなくて済む。
C:\Python25\bin なんてねえぞ C:\Python25;C:\Python25\Scripts にしとけ
export PATH= $PATH:/usr/binでok
何のことだかさっぱりわかりません
自己解決しました
このたびMacos10.5.2を買ったのです レオパルドです これにはpythonもろもろが常設されてるみたいですが pythonをやる上でインストールしとくべきものってありますか?
2chブラウザ
レパードと発音するらしいよ。 イタリア語読みならレオパルドでいいらしいが。 と、さておいて。 MacOSだと、使えるIDEが少ない。 標準で入ってるIDLEや、 wxPython製のIDEだと、日本語入力ができないwので、 Xcodeを使うこと。でもXcodeは使いづらいので、 miなどのエディタでしこしこと打ち込んで、 ターミナル立ち上げて、Pythonのソースが保存されている場所まで ディレクトリ移動して、python hoge.py などとやって実行していく。 一番使いやすいのはCarbonEmacsだけど、 UNIX系OS使ったこと無い人、及びWindows上でMeadowやxyzzy使うなどの奇特な人 出ない限り、操作を覚えないとストレスが溜まる。 慣れれば、いいんだけどね。 MacOS向けのpyscripterみたいなのないのかね。 入力補完してくれる奴が欲しいわ。
なんでこんな面倒なんだww
datといっても、 名前<>メール<>日付+ID<>レス<>スレッド 名前<>メール<>日付+ID<>レス という形式のファイルを一行ずつ読んで、 セパレータ<>で区切って、 string.Templateあたり使って生成すりゃいいのかな。 なんでそんなに面倒なんだ? zipFileライブラリ使ってるから?
136 :
133 :2008/05/02(金) 20:56:41
自己解決します
ここは低レベルな糞人間が集まる最低なスレですね
>>133 を投稿した者です
>>134 コマンドライン(Macではターミナルというそうですが)の使い方から書いたので面倒そうに見えますが
もっと簡単な方法がありましたら御教示下さいです
>>135 ごめんなさい
datをhtml化するのではなく
htmlをdat化したいのです
>>136 Macを持っていないので自己解決のしようがありません。
Windows版pythonでは問題なくdat化出来ていますが
Mac環境で出来ているかどうかなのですが。
それと 数字を騙っておられるようなのでbeをつけて投稿してみるです
失礼しました
>>137 自己紹介ですか?
>>138 Mac板で聞けばいいんじゃね?
なんでMacを持ってない(使える環境がない)人が
検証を必要としてるのか興味あるけどね。
「問題なくできましたよ」ってレスがあれば、それを信じちゃうわけ?
「わからなかったらわかるまで考えなさい」 「わからなかったら自分で調べるという努力をしなさい」 「わからなかったら前に習ったことを忘れていないか、復習してみなさい」
htmlから元のdatは完璧に復元できそうにないと思うが
Beとか、株主優待とかそういった物を取り除いていけばいいのかなあ 今datファイルの文字コードをShift-JISからUTF-8に変えようって動きがあるよね。
あれは read.js の設計上そうすると便利だから変えようって話で、 別に方法が見つかったから無くなったんじゃないの?
145 :
デフォルトの名無しさん :2008/05/06(火) 14:36:00
自己解決しました
147 :
プー :2008/05/06(火) 17:30:26
指定された引数分で作った数字のリストをローマ字のリストに変換する プログラムの作り方についてお聞きしたいです。 私が作りたいと思っているプログラムの内容、例えば引数が30だった場合以下のよう に変換することが目的です。引数が大きくなった場合はExcelの行番号のような表示 したいと考えています。 ●数字リスト [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] ↓ ●英語リスト [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad] 数字から英語に変換する、もしくは、はじめから英語のリストを作成する方法は無いでしょうか? よろしくお願いいします。
26進数にすりゃいいんじゃないでしょうか
↑でも出来てるけど、もう少し分かりやすいやつ 分かんないところあったら聞いてくれ def countup(s): if s == '': return 'a' elif s[-1] == 'z': return countup(s[:-1]) + 'a' else: return s[:-1] + chr(ord(s[-1])+1) def generator(): s = '' while 1: s = countup(s) yield s
使い方の一例 >>> zip(range(100),generator()) [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p'), (16, 'q'), (17, 'r'), (18, 's'), (19, 't'), (20, 'u'), (21, 'v'), (22, 'w'), (23, 'x'), (24, 'y'), (25, 'z'), (26, 'aa'), (27, 'ab'), (28, 'ac'), (29, 'ad'), (30, 'ae'), (31, 'af'), (32, 'ag'), (33, 'ah'), (34, 'ai'), (35, 'aj'), (36 , 'ak'), (37, 'al'), (38, 'am'), (39, 'an'), (40, 'ao'), (41, 'ap'), (42, 'aq'), (43, 'ar'), (44, 'a s'), (45, 'at'), (46, 'au'), (47, 'av'), (48, 'aw'), (49, 'ax'), (50, 'ay'), (51, 'az'), (52, 'ba'), (53, 'bb'), (54, 'bc'), (55, 'bd'), (56, 'be'), (57, 'bf'), (58, 'bg'), (59, 'bh'), (60, 'bi'), (61 , 'bj'), (62, 'bk'), (63, 'bl'), (64, 'bm'), (65, 'bn'), (66, 'bo'), (67, 'bp'), (68, 'bq'), (69, 'b r'), (70, 'bs'), (71, 'bt'), (72, 'bu'), (73, 'bv'), (74, 'bw'), (75, 'bx'), (76, 'by'), (77, 'bz'), (78, 'ca'), (79, 'cb'), (80, 'cc'), (81, 'cd'), (82, 'ce'), (83, 'cf'), (84, 'cg'), (85, 'ch'), (86 , 'ci'), (87, 'cj'), (88, 'ck'), (89, 'cl'), (90, 'cm'), (91, 'cn'), (92, 'co'), (93, 'cp'), (94, 'c q'), (95, 'cr'), (96, 'cs'), (97, 'ct'), (98, 'cu'), (99, 'cv')]
152 :
デフォルトの名無しさん :2008/05/06(火) 18:34:12
日本語によるpygame入門サイト、ソース公開サイトが無いね pygameを極めた、ないしは極めようとしている日本人は居ない ということでよろしいですか?
はい
話としては聞いたこと無いね、 やろうとしてる人はたくさんいる気がするけど
きわめてしまう人だと ドキュメントの言語が英語でもなんでも かまわないから作られないんじゃないの? 本家のドキュメントの内容をしっかりするほうが いいと思う。
156 :
プー :2008/05/06(火) 19:13:11
お休み中申し訳ありません。 早速試してみます。 ありがとうございました。
GUI ライブラリの説明で分かりやすいのって見たこと無いから、・・・
160 :
デフォルトの名無しさん :2008/05/07(水) 11:25:39
>>158 当たり判定とかさ、COMの動きとか
そーゆーのは一切解説無しなのね
>>160 そこと公式ドキュメントを見て行けば分かると思うよ
162 :
デフォルトの名無しさん :2008/05/07(水) 14:17:44
その公式の英文をなんとかしてほしいんだよね 英文を読んでまでのヤル気が必須になってるから 興味もった素人達にとっては敷居が高すぎる。 ただでさえわからないプログラム解説を、わからない英語で解説されるわけだから。 誰か、日本語翻訳サイトつくってよ 翻訳だけの協力でもいいよ、 俺がサーバー借りてサイト作ってもかまわない サイト作りは出来るから。 なんなら、このスレのみんなでpygame公式サイトの日本語解説版作っていかないかな?
163 :
デフォルトの名無しさん :2008/05/07(水) 15:52:34
誰か、早く日本語翻訳サイトつくってよ
>>162 英文読むのにやる気がいるの?
なんで?
英語が母語じゃないからだろ
Python本家の翻訳も、やる人いないようだしね
ああ、君たち英語読めないんだったね。ごめん。
170 :
デフォルトの名無しさん :2008/05/07(水) 19:11:02
皆が英語出来ると思うなよ プログラムの勉強と英語の勉強はベクトルも違うんだよ
英語の勉強を兼ねて英文のマニュアルを読めばいいんじゃね?
半年周期でpygameコンテストでもやったら? 英語が苦手という人がいるけど 少女漫画を読み慣れていなくて、少女漫画を敬遠するようなものだと思うけどね ようは慣れ問題だと思う reading(脳みそへの入力)とtyping(脳みそからの出力)をしていれば、頻出単語も覚えられるし 英語も身に付くし、英語という言葉に対する興味も沸くと思うよ 教祖様がコードのコメントは、英語で書けって書いていなかったか? とりあえず、その教祖様の教えを守ろうよ あと英語で書けと言っている意味をもっともっと考えてみてもいいと思う
173 :
45 :2008/05/07(水) 21:47:18
かなり返事が遅くなってしまいましたが・・・。
>>51 新しいverを入れてみました。
しかし、
>>45 の質問の解決には至っていません。
import先がいまだによくわかりません。
1行1行実行するのではなくソースをまとめておいて
実行したいのですが…。
>>173 ケチらないで、本を買いなよ
それか、図書館で借りるか
話は、それからだ
>>173 test.pyではなく他の名前で試したらどうなる?
あとpyscripter, python.exe両方で試したほうがいい
英語の出来ない開発者なんてうんちだよ。 どうやって最新情報を仕入れるんだ?
>>174 本買うのは構いませんので
初心者におすすめの書籍はありますか?
言語はCOBOLのみ多少知識があるだけです。
>>175 両方でとりあえず試してみました。
見に行っているimport先がそれぞれ違うのでしょうか。
IDLE(<module 'test' from 'C:\Python23\Lib\idlelib\test.pyc'>)はうまくいきましたが
pyscripter(<module 'test' from 'C:\Python25\Lib\test\__init__.py'>)は×です。
また、importというのは一度実行後に再度実行すると何も起きないのですが
どういうことなんでしょうか??
一応大卒なら英語を10年間勉強してるんことになるんだから 遅くても読むことぐらいはできるだろ、常識的に考えて
>>171 かなりの根気がないと続けるのは難しいよ。
自分で考えて訳しても合ってるかどうかわからないし。
それでもやるだけ上達するだろうけど。
このスレはウンチばっかりだよ。
この板自体……
技術用語をわかっていたら、技術英語なんて全然難しくないぞ 凝った言い回しなんて全然ないし 少なくとも高校出ていればあとはやる気の問題だろう
中学生並みのゆるゆるウンチってことだね。
>>177 どうしても、もう一度importしたい時はreload関数かシステムを再起動する
>>177 ググるところから勉強だよ
まあ、初めてのPythonを興味のあるところからでも読みつぶせば、スラスラ書けるようになるよ
あとPythonの英字サイトを読む気があるなら、良書と言われているPythonの洋書を一冊でも
手元に置いておくと読解しやすいね
>>179 183さんが言っているように凝った言い回しなんて基本的にないから、頻出単語だけ調べれば、どうにかなるって
あとネットに繋げれば、情報があふれている昨今で「できません><」と言っていたら、
自分は「無能で童貞です」と言っているようなもんだぞ
やると決めたら、一ヶ月は全力でやってみろよ
Pythonに関しても、英語に関しても何かを掴むから
とりあえず、今のググり方より5倍ググれ
Perlに比べたらPython界隈の英語はかなり易しいと思う
189 :
デフォルトの名無しさん :2008/05/08(木) 05:09:50
中卒はお払い箱か?
英語は学問じゃなくて慣れの問題
つまりpython.comで英語漬けになれ、ということですね。わかります。
python.orgだろ
>>192 アダルトサイトじゃねーかゴルァ!www
勉強になりそうだ(w
pygameで制作されたフリーゲームを見てみたいのですが、 リンク貼って頂けませんか? あと、日本人がpygameで作ったゲームって無いのかな? あったら教えてください
198 :
デフォルトの名無しさん :2008/05/10(土) 01:18:48
どうやってプレイするのかわかりません、、、 クリックだけじゃ立ち上がらない?
方法はゲームによって違うだろうし どこの段階で出来ていないか書いてもらわないと答えようがない
200 :
デフォルトの名無しさん :2008/05/10(土) 07:50:54
ゲームによって違うの?
どれをダウンロードしたんだ? pythonやpygameはインストールしてるのか?
202 :
デフォルトの名無しさん :2008/05/11(日) 05:51:19
外人が作った質の良いpygameのゲームをやっている人に質問 前にどっかのサイトかブログで目にしたけど pygame、っつかpythonはBGMを流すのにかなり苦労するみたいやね 途中からリピートさせられないから前奏とファイルを分けなければならないとか リピートする概念が無く、無理矢理リピートさせると間に一瞬空白が出来るとか 解説されてたけど、その辺どうなの?外人らは完璧に対処してる?
俺の母親は実の親じゃなくて父親の再婚相手だから普通にセックスとかしてる 父親は再婚してすぐ死んだから、母親も寂しかったみたいで父親の面影のある俺を求めたのかもしれない 妹と姉もいるがこれも母親の連れ子で血が繋がってないから普通にセックスしてる 今日は母の日だから家族みんなで4Pする予定 こういうエロゲをpythonで作りたいのですが、 作り方の指南書ありませんか?
マジレスすると、その企画書を持っていってエロゲ屋の門を叩けば 嫌と言うほどエロゲの作り方を叩き込まれるとオモ。
>>204 Pythonやpygameは使えないと思うけどな。
ところで早くpygame翻訳しろよクソどもが。
>>202 MCI使ってたらそりゃそうなるだろ
ちゃんとwaveoutを使え
知らないならレスしないでください
A君は中間テストで80点を取り、期末テストでは85点を取りました。 先生は言いました。 「たった5点しかアップしてないとは。努力が足りないな」 B君は中間テストで50点を取り、期末テストでは70点を取りました。 先生は言いました。 「20点もアップするとは。よくがんばったな」 C君は中間テストで10点を取り、期末テストでは5点を取りました。 先生は言いました。 「まあCだから仕方ない」
pythonで書いたPGMを
exe形式にしてWINDOWSで実行出来るというのが調べてわかったのですが
ttp://www.xucker.jpn.org/pc/pythonexec.html 『実行』
python setup.py py2exe
とMS-DOSで実行と書いてあるのですが
コマンドプロンプトで試しましたがエラーになります。
エラーは
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。と出ます
ディレクトリの位置が悪いのか、
何が悪いのかよくわかりません。
わかる方いましたらお願いします。
>>210 環境変数でPATHにPythonのディレクトリを追加する。
python のソースを読みたいんだが ダウンロードしてもどこから読んでいいかわからない README からか?
まずはソースコードを読むための技術 でぐぐる あと公式リファレンスにPython/C APIが載ってるので 参考にしながら読むといいだろう いうまでも無いがgrepぐらいは使えなきゃ話にならんぞ などと一行も読んだことの無い俺が知ったかレス
>>212 何か知りたいことがあってソースを読むんじゃないの?
知りたいことが決まっていればどこから読むかは自ずと明らかなはずだけども。
215 :
デフォルトの名無しさん :2008/05/11(日) 20:06:14
以前2chでハッカーになりたいとカキコしたら インタープリタを書けと言われたから
216 :
デフォルトの名無しさん :2008/05/11(日) 20:07:13
何をしていいやら 何をしたいのかで もう何年も経ってしまった…
217 :
デフォルトの名無しさん :2008/05/11(日) 20:09:25
作れたものは本立程度のものばかり バグの発見もほんのわずかしか貢献していない 先が見えんよ
218 :
デフォルトの名無しさん :2008/05/11(日) 20:10:41
自主と継続力が足りないのは理解できるが 意欲は、得られる利益が生み出すものでもある。 なんか、道を指し示してくれよ
究極のエロゲーを作れよ
>>215 PythonでPythonのインタプリタの挙動を
再現するものを書けば良いじゃない
>>220 おもしろいアイデアだね。それPyPyって名前つけて発表してみれば?
それと命名するときは他のプロジェクトと名前が被ってないか気をつけろよ。
>>221 日本国内ではないようだから、
pYpYって名称で作ってみようかな
名前はPyMankoにしようぜ。 これならかぶらないし、人気が出ること間違いなしだ。
OhPyに決まりました
Pythonに心をわしずかみにされました。 なにかにつけPyばっかりなので、それだけで幸せな気分になります。
幸せいっぱい
hard life. but happy life.
Py乙
>>218 オライリーの洋書をコンプリートする勢いで関心のある分野のものを買い漁れ
そうすれば、おのずと道は、開ける
自己判断で邦訳本も+αで買っていいものとする
オライリーファンだがそれは無いわ
231 :
202 :2008/05/12(月) 00:23:11
レスがおもっきり進んでるから期待して覗くも まともな解答どころか、レスすらついてない始末 だから終わってんだよ
>>231 pygame.orgでゲームのソースコードが入手できるURLが
晒されてるんだから、自分で気になったゲームのソース見りゃいいんじゃねえの?
終わってるとか挑発すれば誰かが答えてくれるとでも思ってるんだろ 問題の起こるコードの提示も無いし放置でいいじゃん
>>231 >外人が作った質の良いpygameのゲームをやっている人
が少ないんじゃない?
まあ気長にいこうや。
>>231 環境を書いて、ちゃんと質問したほうがいいんじゃない?
ペンディングしておいて、誰か、答えてくれるんじゃない?
24時間以内に答えが返ってくるような内容じゃないようなあ
>>235 今回の症例は、5と7が顕著ですね
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする
7. 逆切れする …自分の思うようにならないと逆切れする。
逆切れって切れる人間とその対象が逆転するって文脈で使われると思うから、 この場合、 7. 切れる … 自分の思うようにならないと切れる。 でいいんじゃないかな? それとも、通常切れないような状況で切れるという意味で使われてる?
239 :
202 :2008/05/12(月) 08:46:20
ほんとおまえら馬鹿ですね。 ここってくだすれでしょ? 質問スレッドでしょ?質問には回答を返すのがマナーってもんでしょ?
while 1: print u"無限ループって怖くね?"
while 1: <- オッサン認定(www
自己解決しました
水洗便所がつまるとかなりやばい
>>247 ナウなヤングは while True: と書くってことでは。
while 1: の方がwhile True: よりバイトコード短いし Trueは上書きの可能性があるしなぁ
while 1: と while 2: は どうちがいますか?
下の方はコードを読んだ人を無駄に困惑させる
Trueは1に置き換えられるから バイトコードの容量について心配する意味ないんじゃないの?
import dis def view(src): return dis.dis(compile(src, "", "exec")) print view('while 1: pass') print view('while True: pass')
オッサンはガミラス帝国の侵略に備えて空間磁力メッキを密かに作っておくほど臆病なんだな
"foo", 1.2, 3j等の文字列、数値リテラルで真になるものも whileの最適化されるんだね。1だけかと思ってた。
じゃあwhile "True":でいいじゃん。
勉強になったわ
つまらないよ。
269 :
デフォルトの名無しさん :2008/05/13(火) 13:50:55
pythonはカスな人間ばかりが使ってる言語みたいですね
while not False: u'無限ループって怖くね?'
False = u'怖くない'
つまらないよ
自己解決しました
毎回同じような荒れ方してるけど、 きっと同じ人がやってるんだろね。
unixuserは休刊したよ。
毎年同じような荒れ方してるけど、 きっと同じ人がやってるんだろね
毎世界同じような荒れ方してるけど、 きっと同じ神がやってるんだろね
前世と同じような荒れ方してるけど、 きっと同じ人がやってるんだろね
while "0": pass これって無限ループなんだな
つまらないよ
平行宇宙と同じ荒れ方してるけど、 きっと同じ人がやってるんだね
288 :
デフォルトの名無しさん :2008/05/14(水) 12:47:34
うざいなあ 同じ書き込みばかりして荒らしてる このくだらん暇人を誰かプロファイルしてくれ そのうち現実で犯罪犯しそうだな 今流行の女子高生殺害とか
289 :
288 :2008/05/14(水) 12:51:56
ほんとうざいなあ 何がやりたいのかさっぱりわからん 俺はpygameのことについて知りたいんだよ
ここはくだらないスレッドで、 本スレは別にあるんだから本スレ行ったら? 本スレは荒れてないよ?
pygameの翻訳はやくやれよクソが。
人の足を引っ張るしか能がないんだね。
__、 ,r´⌒ヽ,⌒ヽ,ヽ (⌒)、 .人 λ\、 ._____ \. \ 、 ヽ./ ー ー\ |\ \ ヽ./ ( ●) ( ●) | \ \ / (__人__) \ はいはい、どーもすみませんでしたw |. \ | ` ⌒´ | . |. |.\_ノ\ / . |. | | \______/ . | ) .| . . ̄ ̄ . | | .| . | | .| .| / / / ヽ, (__ノ ヽ、__つ
>>288 Pygame本スレはIDでるから多少荒れにくいかと
ここもID表示制にしてほしいね。
新しく生まれる板は軒並みID制なのに 古い板のID変更は認めないって不公平だよな。
296につまんない of The Year 2008を授与するよ。
301は本当につまらないと思いました。 もうPythonをやめようと思うくらいくだらないです。
この流れなんとかならんかな…
>306-308 イケメンハッカー
流れ変えたいってか? みんながあまり知らないけど 開発が比較的活発なPythonモジュールって 何かある?
自己解決しました。
うぜー
ネタ的な流れに乗ろうとする奴が3人くらいいて 止めようとしている奴が1人くらいいる そんな気がする
>>311 知らないけど、Googleの中の人たち専用ツールとかは活発だろうな。
pyjs
python-announceで定期的に報告が来るもの
荒れ方がなんとなくWin32APIスレと似てる。
ここは「Pythonをネタにくだらないレスをする」スレですね。くだスレだけに。
初心者はここで練習して池
もういいや、みんなこの調子でこれからもがんばろう。
334 :
デフォルトの名無しさん :2008/05/17(土) 18:42:44
pythonで htmlとかに使われる実体参照になっているを文字列に戻したいんですが なんかいい方法はありませんか?そういう機能のあるライブラリとか
>>> import xml.sax.saxutils >>> xml.sax.saxutils.escape('&') '&' >>> xml.sax.saxutils.unescape('&') '&'
それって"&"、"<"、">" をエスケープするだけじゃないんですか?
htmlentitydefs
自己解決しました
やめてください!
htmlentitydefs.entitydefs これ使い物にならないので、もっといいもの教えてください
自己解決しましたのでやっぱりいいです
やめてください
はやくしてください
ウホッ
はやく!!!!!!!!!!
ほんと勘弁して欲しいよ……
347 :
デフォルトの名無しさん :2008/05/17(土) 23:13:26
自演で書いてて楽しいか? さもしい人間だな
ということにしたいのですね
はやくpygameの翻訳してください。
質問者はトリップつけた方がいいかもな…。
トリップとかどうでもいいけどよ さっさとPyGameドキュメントの翻訳しろよボケ
pygameの翻訳こそがこのスレッドの至上命題だろうが
憑かれてるなぁ
憑かれてるってよ
>>334 普通は実体参照だけを文字に戻すことはしないからそういう機能はないんじゃないかな。
334さんの用途に合うなら以下のように安直に実装するのが手っ取り早いかと。
.subn() の代わりに .sub() を使うのも可。
# -*- coding: sjis -*-
import re, htmlentitydefs
re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);")
def replace(match):
t = match.group(1)
if t[:2] == "#x":
return chr(int(t[2:], 16))
elif t[0] == "#":
return chr(int(t[1:]))
try:
t = htmlentitydefs.entitydefs[t]
except KeyError:
raise ValueError, "unknown entity: " + match.group()
if t[:2] == "#x":
return chr(int(t[2:], 16))
return t
# 正常終了するテスト
print re_ref.subn(replace, "Onde a terra acaba e o mar começa.")
# 異常終了するテスト
try:
re_ref.subn(replace, "&foo;")
except ValueError, e:
print e
# -*- coding: sjis -*- import re, htmlentitydefs re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);") def replace(match): t = match.group(1) if t[:2] == "#x": return chr(int(t[2:], 16)) elif t[0] == "#": return chr(int(t[1:])) try: t = htmlentitydefs.entitydefs[t] except KeyError: raise ValueError, "unknown entity: " + match.group() if t[:2] == "#x": return chr(int(t[2:], 16)) return t # 正常終了するテスト print re_ref.subn(replace, "Onde a terra acaba e o mar começa.") # 異常終了するテスト try: re_ref.subn(replace, "&foo;") except ValueError, e: print e
# -*- coding: sjis -*- import re, htmlentitydefs re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);") def replace(match): t = match.group(1) if t[:2] == "#x": return chr(int(t[2:], 16)) elif t[0] == "#": return chr(int(t[1:])) try: t = htmlentitydefs.entitydefs[t] except KeyError: raise ValueError, "unknown entity: " + match.group() if t[:2] == "#x": return chr(int(t[2:], 16)) return t # 正常終了するテスト print re_ref.subn(replace, "Onde a terra acaba e o mar começa.") # 異常終了するテスト try: re_ref.subn(replace, "&foo;") except ValueError, e: print e
# -*- coding: sjis -*- import re, htmlentitydefs re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);") def replace(match): t = match.group(1) if t[:2] == "#x": return chr(int(t[2:], 16)) elif t[0] == "#": return chr(int(t[1:])) try: t = htmlentitydefs.entitydefs[t] except KeyError: raise ValueError, "unknown entity: " + match.group() if t[:2] == "#x": return chr(int(t[2:], 16)) return t # 正常終了するテスト print re_ref.subn(replace, "Onde a terra acaba e f; mar come?a.") # 異常終了するテスト try: re_ref.subn(replace, "&foo;") except ValueError, e: print e
# -*- coding: sjis -*- import re, htmlentitydefs re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);") def replace(match): t = match.group(1) if t[:2] == "#x": return chr(int(t[2:], 16)) elif t[0] == "#": return chr(int(t[1:])) try: t = htmlentitydefs.entitydefs[t] except KeyError: raise ValueError, "unknown entity: " + match.group() if t[:2] == "#x": return chr(int(t[2:], 16)) return t # 早くpygameドキュメント翻訳しろよ
もうやだこのスレ
361 :
デフォルトの名無しさん :2008/05/21(水) 03:06:16
そう思わそうと、わざと荒らしてるんだよ 荒らしの思惑にのるな
>361 ageてるあなたも荒らしですね
板としてもスレとしてもsage推奨とすら書かれていない現状でその断定w
朝っぱらから荒れてるなあ
>>355 ありがとうございます
参考になりました
なんか変なことになったのでもう諦めて見てませんでした
レス遅れてすいません
自己解決しました。
367 :
デフォルトの名無しさん :2008/05/22(木) 03:11:59
ソートについてお聞きしたいことあります。 以下のようなトランプがあります。 A、2、3、4、5、6、7、8、9、T、J、Q、K それをもとにポーカー役判定のプログラムを作成しており、ストレートの判定を改良したいと思います。 実際にすべての値をソートし順番を並び替え、findでソートしたものが階段状になっているか判定し(表現が悪いかもしれませんが)、 ストレートかどうか決めています。 しかし、findで参照する先のリストを作るとなると、数字のみであらわせるリストと英語が混じった場合のリストの二つを組み合わせた ものになるため、文章が長く見づらいリストになってしまいます。 そこで、ソートする順番をあらかじめ決められれば、参照先のリストを縮小できるし見やすくできるのでは ないかと思います。 ソートする方法任意で決める関数はあるのでしょうか?
ありますよ
>>365 どういたしまして。
>>367 リストの sort メソッドには自前の比較関数が渡せるので、
数字カードと文字カードを比較できる比較関数を作ればいいと思われ。
安直な例:
letter = {"A": 1, "T": 10, "J": 11, "Q": 12, "K": 13}
def compare_cards(x, y):
if letter.has_key(x):
x = letter[x]
else:
x = int(x)
if letter.has_key(y):
y = letter[y]
else:
y = int(y)
return cmp(x, y)
t = list("6T934A57JK28Q")
t.sort(compare_cards)
print t
>>367 俺はPythonの勉強始めて3日目なんでPythonの流儀は知らんが、
C++とかなら普通は内部表現にA23456789TJQKなんて使わないよ。
普通は1〜13の数値で持っておいて、出力するときに変換する。
スートも含めて考えるとタプルかその他のオブジェクトになるだろうか
>>367 A K Q J 10 なんかもストレートになるから注意
>>369 比較関数方式よりdecorate-sort-undecorate方式の方がいいよ
こんばんは。 PythonのCGIでファイルをダウンロードさせたく思い、以下のように書いたのですがバイナリファイルの場合、途中で切れてしまうようなのです。 助言等戴ければ幸いです。 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os import cgi import cgitb; cgitb.enable() filepath = r'ぱす' filename = os.path.split(filepath) filename = filename[1] filesize = os.path.getsize(filepath) print '''Content-Disposition: attachment; filename="%(filename)s" Content-Length: %(filesize)s Content-Type: application/octet-stream ''' %(locals()) f = open(filepath, "r") print f.read(),
ofp = open(u'%s/%s' % (savedir, file), 'wb', 0) ifp = urllib.urlopen(url) siz = int(ifp.info().getheader('Content-Length')) print siz cnt = 0 while True: buf = ifp.read(4096000) if len(buf) > 0: ofp.write(buf) ofp.flush() cnt += len(buf) if cnt >= siz: break ifp.close() ofp.close()
import msvcrt msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) sys.stdout.write(hoge) sys.stdout.flush()
自己解決しました。
分からないなら答えなくていいのに
いつもの阿呆です。
お願いします。回答ください。
自己回答してください。
>>373-374 使用環境をまったく書いてないのは質問として NG だと思う。
サーバがWindows環境だとバイナリファイルの扱いに注意が必要だから。
CGI 作成の注意としては、ヘッダの行末は \n ではなく \r\n でないといけないはず。
> print f.read(),
ここも1バイト余計にデータを送っていることになるのでよくない。
手元の Windows マシンでは Python 付属の CGIHTTPServer を使って以下のコードで動いた。
import sys, os
import cgi
import cgitb; cgitb.enable()
if sys.platform == "win32":
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
filepath = "test.jpg"
filename = os.path.split(filepath)
filename = filename[1]
filesize = os.path.getsize(filepath)
sys.stdout.write('Content-Type: application/octet-stream\r\n')
sys.stdout.write('Content-Disposition: attachment; filename="%s"\r\n' % filename)
sys.stdout.write('Content-Length: %d\r\n' % filesize)
sys.stdout.write('\r\n')
f = open(filepath, "rb")
sys.stdout.write(f.read())
sys.stdout.flush()
f.close()
382 :
381 :2008/05/23(金) 15:22:29
CGI プログラムの実行時にエラーが起こっていないか常にチェックするようにして。 エラーメッセージの出力先やエラー時のサーバの挙動はサーバソフトごとに異なる。 CGIHTTPServer だと正常終了なら localhost - - [23/May/2008 15:10:05] CGI script exited OK のようなログが標準出力にプリントされる。エラーの場合は localhost - - [23/May/2008 15:07:40] CGI script exit status 0x1 のようになる。後者の場合、クライアントがダウンロードした内容は CGIHTTPServer が吐いた エラーメッセージを含む HTML ファイルだから、必要なら拡張子を変えてブラウザで開いてみて。
>>381-382 どうもありがとうございました。
お蔭様で解決致しました。
度々の質問で申し訳ありませんが遅延評価勉強法は性にあわないようなので
本でしっかりと勉強しようと思うので
>>381 のような基本的なことが
載っている本を教え戴きたいです。
384 :
381 :2008/05/23(金) 20:33:27
>>383 恐らく「これを読めば Web アプリの基礎から実装上の詳細まで全部分かる」という都合のいい本はないと思う。
すくなくとも俺が勉強したときにはそういうものはなかった。
たぶん今も HTTP の仕様書(RFC 2616)のたぐいを読むしかないと思う。
RFC 2616 はオンラインで読める。今は和訳もあると思う。
でもちょっと読んでみたら分かると思うけど、とても通読できるような代物じゃないよ。
何か問題が起こったときに関連がありそうなところを拾い読みするぐらいがちょうどいいと思う。
実際にコーディングしながらでないと理解できないことが多いように思う(俺はそうだった)。
ちなみに、RFC や W3C が出している文書には URL とか MIME とか HTML とか XML とか XSL とか
いろんな要素技術の仕様書がたくさんある。そういうものをどんどん読むといい。きっと力がつくよ。
これらの文献のいいところは、それが原典という点だ。世界がそれに基づいて動いているという迫力がある。
英語で読まないといけないことが多いかもだけど、そうする価値はあるよ。
385 :
デフォルトの名無しさん :2008/05/23(金) 22:18:26
助けて java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkExit(Unknown Source) at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.python.core.PyReflectedFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyInstance.invoke(Unknown Source) at applet$_PyInner.init$1(applet.java:61) at applet$_PyInner.call_function(applet.java:47) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyObject._jcallexc(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at applet$MyApplet.init(applet.java:139) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
刑務所 さらりいまん ---------------------------------------------------- 労働時間 8時間厳守 大体10時間以上 ---------------------------------------------------- 始業時間 7時50分 8時30分〜9時 ---------------------------------------------------- 終業時間 16時30分 21時〜24時 ---------------------------------------------------- 通勤手段 徒歩数分 満員電車1時間 ---------------------------------------------------- 昼食 食う 食えない日がある ---------------------------------------------------- 夕食 食う 食えない日がある ---------------------------------------------------- 夕食後 テレビや読書など自由 仕事 ---------------------------------------------------- 残業 全くない ない日がない ---------------------------------------------------- 残業代 残業がないから無い 残業あっても無い場合がある ---------------------------------------------------- 休憩 午前午後それぞれ15分 上司次第 ---------------------------------------------------- 土日祝 確実に休み 出勤する日もある ---------------------------------------------------- 年数 刑罰に応じる 自動的に40年
387 :
デフォルトの名無しさん :2008/05/23(金) 22:46:07
刑務所 さらりいまん ---------------------------------------------------- 労働時間 7時50分〜16時30分 フレックスタイム ---------------------------------------------------- 通勤手段 徒歩数分 都心回帰で30分強 ---------------------------------------------------- 食事 食べたいものが食べられない 食べたいものが食べられる ---------------------------------------------------- トイレ 監視付き 自由 ---------------------------------------------------- 夕食後 テレビや読書など自由 自分の裁量で自由 ---------------------------------------------------- 残業 全くない 自分の裁量で自由 ---------------------------------------------------- 給与 涙金 年収700万円弱 ---------------------------------------------------- 休憩 午前午後それぞれ15分 自分の裁量で自由 ---------------------------------------------------- 休暇 なし 家族旅行、趣味 ---------------------------------------------------- 性生活 オナニーか同性愛 妻または愛人 ---------------------------------------------------- 老後 孤独で悲惨 家族に囲まれて退職金・年金生活 ----------------------------------------------------
>>384 やっぱり、そうやって勉強するしかないんですね
英語ってコードを読む延長で読んでいるのか、英語の延長にコードがあるのか、わからないけど
プログラム言語を読み解くみたいに読んでいるなあ
英語が苦手な私でも読もうと思えば、読めるものだね
6年間、一応英語の授業を受けてきた甲斐があったのかなと思う
意味だけ拾っているから、よくわからないけど
仕様書関係で関係代名詞って出ないよね?
中学英語ができれば、辞書片手にだいたいの意味は、わかるのかな
httpのプロトコルやcgiの基本的なことならPythonの本に限定する必要はない
うちの先生は 読むべきページ1ページにつき100円で考えて 10ページあったら1000円 30ページだったら3000円 それでコストに合わなかったら買えと言っていました
HTTPやCGIでこれがオススメって本ある? 自分はStudyingHTTPやプログラミングCGI第二版で覚えたクチ
397 :
394 :2008/05/24(土) 16:58:46
pythonでCGIを書いても 使えるところがない
2.4系でも御の字じゃないかー
suitex
例のアフォがお勉強スレに張り付くようになったようだな
お勉強スレに元々いたような
そしてアンチスレは全然伸びない
ありがとう 乗り換え先検討中なんで参考にさせてもらいます
やっぱやめます
うはは、わかりません。
なぜだか桃太郎電鉄の貧乏神を思い出したよ。
ありがとう例のアフォが 張り付く先検討中なんで参考にわかりません。
ももたろ社長!ここはPython温せ アッー
うはは、わかりません。
>>410 Pythonでくだスレにしちゃネタがうますぎ。
おまいら温泉行く? アッーー!
PythonCEで、日本語文字列を出力するにはどうすればいいんでしょうか。 どのエンコードを試してもできません。 宜しければご教示願います。
コンソールは何使ってる?
416 :
デフォルトの名無しさん :2008/05/30(金) 02:58:05
質問です。 複数の値を返す関数を作成してそれを受け取るというのもなのですが…。 cでかくとこんな感じです。 #include <stdio.h> void Power(double x, double *sq, double *cu); void main(void); void Power(double x, double *sq, double *cu) { *sq = x * x; *cu = x * x * x; } void main(void) { double x, xx, xxx; printf("浮動小数点数を入力して下さい\t"); scanf("%lf", &x); Power(x, &xx, &xxx); printf("入力した値 = %lf その2乗 = %lf その3乗 = %lf\n", x, xx, xxx); }
その関数はタプルを*ひとつ*返してるだけ チュートリアルのどこにreturnで複数の値を返せるなんて書いてあるんだ?
419 :
デフォルトの名無しさん :2008/05/30(金) 08:23:40
チュートリアルのp.p.218読んだか?
タプルを*ひとつ*返すときは def power(x): return (x**2, x**3) だろ def power(x): return x**2, x**3 ではreturnで複数の値を返せる
421 :
デフォルトの名無しさん :2008/05/30(金) 10:03:49
プログラムを起動中に、変数に任意の内容を記入できる関数はないでしょうか? 名前を忘れてしまったんですが、たしかc言語ではこの機能を使える関数があったと思います。 今は、任意の内容を処理する場合は、引数の文字を入れているのですが、複数の処理をするには 引数に任意で入れたい内容をリストにして、引数に入れてほしい内容はリスト番号を指定する。 という方法を用いてみたのですが、賢くない上に面倒です。 対話形式で処理をするためにユーザーに記入を求める関数を再現したいのですが、パイソンでは何か良い方法はないでしょうか?
>>> def power(x): return x**2, x**3 ... >>> type(power(1)) <type 'tuple'>
input()
425 :
デフォルトの名無しさん :2008/05/30(金) 11:15:10
重複していました。 申し訳ありません
426 :
デフォルトの名無しさん :2008/05/30(金) 20:34:11
すんまそん.使わないパッケージのアンインストールってどうやるんでしょうか?
>>426 OS、アンインストールしたいパッケージ、それをどうやってインストールしたか、によって方法が違う。
OSはwindowsでコンパイル済みのexeファイルからインストールしています. プログラム追加と削除に表示されるのもあるんですが,どうもないのもあって.
>>428 プログラムの追加と削除にないものは手動で消す必要があると思う。
C:\Python○○\Lib\site-packages\ 以下に追加パッケージがまとめて置いてある。
そこから選んで削除する。
パッケージによっては他の場所にもファイルを配置していることがある。
きれいサッパリ消せるかどうかはパッケージ構成に関するあなたの知識次第。
ありがとうございました.直接消すしかないんですね.
cd パッケージインストールしたときのディレクトリ python setup remove
432 :
デフォルトの名無しさん :2008/06/02(月) 16:05:19
pythonを用いたバックアップを考えています。 バックアップ先とそれの保存先を引数として入力し、そのパスからコピーして貼り付けをすれば出きると思っていたのですが、現段階では、まだ出来ていません。 ファイルのバックアップを取りかたの概念が間違っているのでしょうか?
433 :
デフォルトの名無しさん :2008/06/02(月) 16:40:04
>>432 現段階は、ファイルのコピー方法について調べています。
xcopy使った方が早くね?
つ shutil
>そのパスからコピーして貼り付けをすれば これは可笑しい
自己解決しました
そんなスキルで作られたバックアップソフト・・・・超怖い
439 :
デフォルトの名無しさん :2008/06/02(月) 19:12:08
表現に問題があり申し訳ありませんでした。 バックアップをしたいファイルがある場所からコピーして、保存先に貼り付けを行う作業が出きる関数を調べたいと思っていました。 意見ありがとうございます。バックアップに必要な関数が見つかりましたのでやってみます。
winは害悪だな
explorerが害悪っていう意味なら gnomeもKDEも害悪だよな
世界のガイアク 1,2,3
ごめん。意味がわかんない。
>439 は発想の根っこにクリップボードがあるのがおもしろいな。普通はそうなのか? 「バックアップに必要な関数が見つかりましたの」で実装した結果がおもしろいとさらに高得点だ。
今時はあれですか やりたり処理を実現する関数を「探す」事がプログラムなんでしょうね
探して調整することがプログラミング
泥のように働くのがプログラミング。 いちいち言わせるなよ。
むかしからそうだろ
自己解決しました。
451 :
デフォルトの名無しさん :2008/06/03(火) 19:48:19
すいません質問です。 キュー構造を実現するqueクラスとその確認コードを含むque.pyを作成せよ queクラスは以下のメソッドを含む事。 def enque( data ) #値を受け取り、enque動作(待ち追加)を行う。 def deque() #deque動作(待ち解消)を行い、値を返す。 def __str__() #str()やprintで用いられる特殊メソッド。 #自分を表す文字列表現(ここでは内部値のカンマ区切りとする)を返す。 上記が課題なのですがだれか教えていただけないでしょうか。
富豪向け class Queue: def __init__(q): q.queue = [] q.next = 0 def enque(q,v): q.queue.append(v) def deque(q): v = q.queue[q.next] q.next += 1 return v def __str__(q): return str(q.queue[q.next:])
453 :
デフォルトの名無しさん :2008/06/03(火) 20:40:28
ありがとうございます。 富豪向けとはどういう意味でしょうか?
>>432 > バックアップ先とそれの保存先
って同じじゃないか?
仕事でも「仕入れ先」と使うけど、何か納得できない。
456 :
デフォルトの名無しさん :2008/06/03(火) 21:36:17
class Queue(object): class Item(object): def __init__(self, value): self.value = value self.next = None def __init__(self, *args): self.first = self.end = None for i in args: self.enqueue(i) def enqueue(self, value): if self.first is None: self.first = self.end = Queue.Item(value) else: self.end.next = Queue.Item(value) self.end = self.end.next def dequeue(self): if self.first is None: raise IndexError('queue is empty') else: value = self.first.value self.first = self.first.next return value def __repr__(self): values = [] item = self.first while item: values.append(repr(item.value)) item = item.next return 'Queue(%s)' % ', '.join(values)
import collections class Queue(object): def __init__(self, itr = ()): self.q = collections.deque(itr) def enqueue(self, v): self.q.append(v) def dequeue(self): return self.q.popleft() def __repr__(self): return self.q.__repr__().replace('deque','Queue')
from Queue import Queue Queue.enque = Queue.put Queue.deque = Queue.get Queue.__str__ = lambda self: ','.join(str(x) for x in self.queue)
>>460 そうか、期限があるんだったな…。
やっぱりここに貼った方がログが残って便利かもね。
>>414 俺も知りたい。仕方ないからファイルに出力してるよ。
465 :
デフォルトの名無しさん :2008/06/04(水) 16:47:04
Python に比べて Ruby が「純粋な」オブジェクト指向言語 であるといわれる理由を教えてください。同僚にRuby厨が いてうざいです。仕事は Java/C# なんで全然関係ないんですが。
Python初めて1日の僕が言うのもなんだけど 例えば長さを取得する場合 hoge.len() ではなく len(hoge) であるとか。 よくわかんないけど
Pythonもすべてオブジェクトだから純粋なOOPLじゃない?
そのRuby厨に聞いてみれば? どうせどっかからの受け売りだろうから ググればそれっぽい記事がでてくんじゃね
Rubyは使ったことないや。 どっちがよりオブジェクト指向なのかはどうでもいいんじゃね?
いいや。すごく重要だ。
どう重要?
どっちがよりオブジェクト指向かを決める前に オブジェクト指向の定義を明確かつ厳密に行う必要があるな
小学生のときにどれくらい飛ばせたかというくらいの重要さ。
チ○コがどれくらい大きいかくらいの重要さ。
>>474 チェコ共和国(The Czech Republic/CZE)
首都:プラハ
人口:1,022万人
言語:チェコ語
通貨:コルナ
面積/7万9千平方km(北海道とほぼ同じ)。
なんという親御さんも安心スレ ちなみにこんなのもあるよ >>> hoge = [1, 2, 3] >>> len(hoge) 3 >>> hoge.__len__() 3
hoge = {} for j in xrange(10): for i in xrange(10**j): hoge['hoge%d' % i] = 'fuga%d' print j, len(hoge)
>>465 書籍からの受け売りですが。。
ーーーーーーーここからーーーーーーーーー
速効 python プログラミングより
p188
# coding: Shift_JIS
class a:
var1 = 1
def show_class_var(self):
print 'class variable var1 = %d' % self.__class__.var1
v = a()
v.show_class_var()
a.var1 = 2
v.show_class_var()
print a.var1
a.another_var = 100
print a.another_var
クラス変数はa.var1 = 2 のように勝手に変更できてしまうだけではなく、
クラス定義ではまったく現れていないような another_var という変数を
後で外から無理やり追加することすら出来てしまいます。
ーーーーーーーーーーーーここまでーーーーーーーーーーーーーーー
「カプセル化」っていうOOPの原則の重要性が
python では、なおざり・・・という意味での指摘ぢゃないかな、と。。
>>478 そりゃ単にその本の著者が無知なだけだろ。
分かりやすさのために、わざと書いてないだけかもしれんが。
480 :
478 :2008/06/05(木) 00:11:51
>>479 これじゃないとしたら
>>465 の同僚の指摘は
ちっと分かんない☆
う〜む、ruby厨というより
アンチpythonな人なのかな?
またクソ本フラグが立ったな
Pythonはドキュメントがカプセル 漏れいいこと言ったな
いまいちわからん。説明してくり
ドキュメントにクラスのインタフェースが漏れなく記載されていれば クラスのユーザはクラス定義を読まずにクラスを利用できる 結果としてユーザに公開されるべきでない情報は隠蔽される でもドキュメントが貧弱だと、クラスの使い方を調べるために ユーザがクラス定義を読む、なんて事態が生じうる 結果としてユーザに過度の情報を公開することになってしまう つまり言語仕様だけからしかカプセル化の程度を判断するのは片手落ち
482はドキュメント的にカプセルでない説。
486 :
デフォルトの名無しさん :2008/06/05(木) 01:19:30
質問です 「Hello World!」の表示を2つ並べたウインドウを表示せよ。 複数並べるには、親となるフレームを用意し、そこに配置すれば良い。 という課題なのですがだれか教えてください
>>> from Tkinter import * >>> root = Tk() >>> frame = Frame(root) >>> frame.pack() >>> Label(frame, text="Hello, world!").pack(side=LEFT) >>> Label(frame, text="Hello, world!").pack(side=RIGHT) >>> root.mainloop() 上下に並べる場合は >>> Label(frame, text="Hello, world!").pack() >>> Label(frame, text="Hello, world!").pack() これで点くれるのかしら
>>484 じゃあPythonでオブジェクト指向なプログラミングをするなら、ドキュメント作成は必須ってこと?
#!/usr/bin/env python # -*- coding:utf-8 -*- import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((100, 100)) pygame.display.set_caption('Hello pygame') fp = open(u'みかちゃん-P.ttf', 'rb') font = pygame.font.Font(fp, 24) text = font.render(u'Hello World!', True, (255, 0, 0)) text2 = font.render(u'Hello World!', True, (0, 255, 0)) fp.close() while True: screen.blit(text, (0, 0)) screen.blit(text2, (0, 60)) pygame.display.flip() for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): break
別にオブジェクト指向する必要が無ければしなくてもいいんだよ ドキュメントはもちろん書いたほうが良い
492 :
デフォルトの名無しさん :2008/06/05(木) 03:28:31
>>479 の指摘がよく分からんのだが・・・・
てか,もうちょっと詳しく説明してくれ.
>>492 横レスだが、カプセル化は
× 外部から操作不能にすること
○ 個々のオブジェクトが、役割を果たすために必要なデータと操作をまとめること
ただし、デフォルトで外部からアクセス禁止にできる実装の言語は、初歩的ミスを
減らせる場合があるというメリットはある。
>>490 後で他人がリファクタリングする事を前提とした場合の
望ましいドキュメントの具体例をキボンヌ。
つか、「ドキュメント」って docstring 記述と
doctest での確認のセットの事だと
漏れは理解してるけど合ってる?
全然違うなら、追加解説も気盆奴
496 :
デフォルトの名無しさん :2008/06/05(木) 18:05:55
いいかんじかもしれない だがことわる!
>>479 この本持ってるけど、pythonはオブジェクト指向言語として不完全みたいなことは書いてないぞ。
じゃあ、分かっててわざと書いてないだけなんじゃね?
499 :
デフォルトの名無しさん :2008/06/05(木) 22:40:34
お疲れ様です pythonでコマンドプロンプトを操作する方法を検討しています。 これを実行するためにgetoptを用いたいと思い、この関数を用いて、 コマンドプロンプトから対象のpythonファイルを開いたときに、 コマンドプロンプトのヘルプを表示するようにhelpを命令するプログラムを 作成してみました。 import getopt, sys def helps(): getopt.getopt(sys.argv[1:], "help") 実際にコマンドプロンプトで動かしても無反応で、実際に実行しても 「GetoptError: option -n not recognized」というエラーが出てしまいます。 リファレンスで確認してみたのですが、私には何が悪いのかわかりませんでした。 本当にPythonでコマンドプロンプトの操作ができるのでしょうか? また、操作ができるとして、このプログラムがどのように表記されてればよかったか についてもお聞きしたいです。 何卒よろしくお願いします
オブジェクト指向においてカプセル化ってそんなに大事な要素だとは思えない。 スコープさえ区別してくれれば、充分だ。
>>499 >>> import getopt
>>> args = '-h -e -l -p'.split(' ')
>>> getopt.getopt(args, 'help')
([('-h', ''), ('-e', ''), ('-l', ''), ('-p', '')], [])
でもやりたいのはこっちだろう
>>> args = '-n --help kwsk --lang=ja'.split(' ')
>>> getopt.getopt(args, 'n', ['help=', 'lang='])
([('-n', ''), ('--help', 'kwsk'), ('--lang', 'ja')], [])
リファレンスもっかいよく読んでわからなかったらまたおいで
>>500 俺もそう思う
オブジェクト指向はポリモフィズムが肝だと思う
ああ、PythonがRubyに比べて云々って逝ってる香具師は
もしかしたらselfが鬱陶しいっていうだけの話鴨試練
503 :
デフォルトの名無しさん :2008/06/06(金) 11:29:42
pygame翻訳サイトさえあれば、、、俺だって、、俺だって、、、
504 :
デフォルトの名無しさん :2008/06/06(金) 12:40:04
俺、昔、「Haskellには型が無い」って主張する奴と議論したことあるよw Python の C3 MRO はそれだけ独立してでも知っておいて悪くないと思うおいら
>>504 静的型でnominal subtypingな言語だけを念頭に置いて「型」と
言ってるんだろうけど
言葉の使い方がいい加減で不正確なんだな
ま、nominal subtypingならポリモーフィズム実現するには継承するしかないが
Pythonのようなduck typingやstructural subtypingならそうではないから、
継承の意味薄いってのはその通り
self は確かにうっとうしい あれがつきまとうだけで オブジェクト指向っぽくない
むしろselfはオブジェクト指向っぽいと思う
PHPの$thisとかもうざいとか言い始めそうだな
>>509 いやselfはオブジェクト指向そのものなんだが
それをいちいち書くからおかしいっつー話だよ
>>510 いくら糞PHPでも引数に毎回書く必要はないだろ?
Rubyでもselfが必要なときは書くんだし
だけどPythonはくどいほど書くからw
オブジェクト指向っぽい考え方自体が オブジェクト指向っぽくないんだよ、俺にしてみれば。
オブジェクト指向かそうでないかの議論に熱くなる奴らは 総じてオブジェクト指向だな
さあwみなさまご一緒に レッツオブジェクト指向!
おまえらオブジェクト指向を嗜好し過ぎでオブジェクト思考になってると
誰が(ry
殺した(ry
クックロビ(ry
あ、そーれ
〜三波春夫さん江〜
も り あ が っ て る よ う だ な w
盛り上がってるところ悪いが 対話モードでの浮動小数で質問。 Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a = 4.8 >>> print a 4.8 >>> a 4.7999999999999998 aが「4.7999999999999998」になってしまう理由って何?
>>> (4.8).__str__(), (4.8).__repr__() ('4.8', '4.7999999999999998')
クッキーについて質問です
webページの自動ログインスクリプトを作ろうと思い、urllib.urlopen()を使って
あるページのフォームの情報をPOSTしてみたのですが、そのページのhtmlが
<script>
function Func(){ document.cookie = aaa }
</script>
〜
<form method="post" action="
http://bbb/ " onSubmit="javascript:Func();">
のようにクッキーを設定しており、思ったような結果が返ってきません。
この動作をpythonで代替するにはどうすればよいのでしょうか?
urllibでなんとかしたいんじゃないの?
いえ、出来るなら何でもいいです cookielibとurllib2、色々ググってみて cj = cookielib.CookieJar() cjhdr = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cjhdr) r = opener.open(url, params) のようにするのは何とかわかりましたが、クッキーをどう設定したらいいのかよくわかりません 具体的にどうすればいいのか、ご教授願えないでしょうか
JavaScriptの部分を自分で解析しないと駄目じゃない?
ググって見つかった例でうまくいかないなら 具体的なサイトを示した方が早い気が javascriptがはさんであるとうまくいかないのかな?
cookielibはレスポンスヘッダの解析のみでしょ
そもそもcookieについてよく知らないもので、この質問が適切かどうかもよくわからない状況です…
身元がばれるため具体的なサイトは示せませんが、問題と思われる部分を抜粋すると、
function idgisSetRedirectionCookie( theForm ) {
〜
{
// modify the following values for your environment
var idgisRedirectorUrl = "
https://aaaa ";
var idgisRedirectionUrlCookieDomain = "bbbb.jp";
var idgisRedirectionUrlCookiePath = "/";
// the following code should not be modified
var idgisRedirectionUrlCookie = "IdgisRedirectionUrl";
var gaRedirectionUrl = theForm.HiddenURI.value;
if( idgisRedirectorUrl != gaRedirectionUrl ) {
document.cookie = idgisRedirectionUrlCookie + '="'
+ unescape(gaRedirectionUrl) + '";' +
'path=' + idgisRedirectionUrlCookiePath + ';' +
'domain=' + idgisRedirectionUrlCookieDomain;
theForm.HiddenURI.value = idgisRedirectorUrl;
}
result = true;
return result;
}
〜〜〜
<FORM NAME="login" METHOD="POST" AUTOCOMPLETE="off" ACTION="
https://cccc " onSubmit="javascript:{ return idgisSetRedirectionCookie( this ); }">
<input type='hidden' name='HiddenURI' value="
https://dddd ">
こんな感じです(aaaa、bbbb、cccc、ddddは全部違うURL)
原理的にはそのJavaScriptを解析して動作をエミュレートすれば良いはずだけど 実際にはかなり難しいんじゃないかと思う 現実的かと思うのはwin32comを使ってWebブラウザをコントロールする方法 ExcelをPythonからいじくる例はたまに見かけるからそれらを参考にしてみては
>>534 そのスクリプトで
document.cookie = hogehoge とか設定してる値が常に固定なら、
HTTPのヘッダに
Cookie: hogehoge
という形で加えてPOSTすりゃいいだけ
urllib2のRequestクラスならheaderを好きなように設定できるはずだ
スクリプトの内容が可変なら、
>>535 が言ってるように
スクリプトを自分でパースするしかない
固定だったらそいつはわざわざ何がしたいんだって話になるがなw
可変にしても、スクリプトの内容自体はほぼ同じで、埋め込まれてる 文字列リテラルの内容が違うだけだろうから、 正規表現や何かで簡単にぶっこぬけると思うけどね
なんとなく、SPAM用のスクリプト作成の手助けをした気がしなくもないw
環境によって若干変わってくるのでなんとか正規表現とかで頑張りたいと思います
今現在の環境だけでは変わらないので、とりあえず今だけでも動かそうと思うのですが、
Requestクラスの使い方は
data = {'username':'qwerty', 'password':'asdfgh'} #等など
req = urllib2.Request('
https://cccc ', urllib.urlencode(data), {'Cookie':hogehoge})
r = urllib2.urlopen(req)
こんな感じで合ってます?
一応通報した
542 :
デフォルトの名無しさん :2008/06/09(月) 06:30:18
except Exception, inst: って書き方がなんかきもちわり. 投げられた Exception クラスのインスタンス inst を受け取るわけだけど, except (Exception1, Exception2, Exception3): みたいに複数のクラスを受け取る時にはどうやってインスタンス受け取るんだよ.
except (Exception1, Exception2, Exception3), inst:
>>542 except (Exception1, Exception2, Exception3), inst:
Python3.0では書式変わるから、それまで我慢しる
545 :
デフォルトの名無しさん :2008/06/09(月) 11:35:42
Python 3000 とかいうやつ?
>>500 ありがとうございます。
お礼が遅れてしまい申し訳ありません。
恐縮ですがもう少しお付き合いお願いします。
先日教えていただいた、
>>> args = '-n --help kwsk --lang=ja'.split(' ')
>>> getopt.getopt(args, 'n', ['help=', 'lang='])
をpythonで実行してみたところ、エラーが出ず、
([('-n', ''), ('--help', 'kwsk'), ('--lang', 'ja')], [])
と正常に表示されました。
正常に動いていると判断し、このプログラムを以下のように記述したpyファイルを
用意し、実際にコマンドプロンプトで起動したときにコマンドプロンプトのヘルプを
表示できるか確認したのですが、無反応でプログラムが終了してしまいます。
ファイル名:ex.py
# coding: utf-8
import getopt, sys
args = '-n --help kwsk --lang=ja'.split(' ')
getopt.getopt(args,'n',['help=','lang='])
考えられる引数を入力してみたのですが反応がなく、このプログラムを進めていただく前に、教えてもらった方法でもやってみたのですが
ヘルプの表示ができませんでした。
リファレンスのテストコードでgetoptの動きを確認してみたかったのですが、
こちらも起動しなかったため確認できませんでした。
コマンドプロンプトでこのファイルを起動し、コマンドプロンプトのファイルを起動するには、
プログラムのソースに何か加える必要があったのでしょうか?
それとも、コマンドプロンプトを使用するときに、何か特別な記述が必要だったのでしょうか?
アドバイスをよろしくお願いします。
「コマンドプロンプトのヘルプ」って、
C:\>cmd /?
のことだよな?普通
それに
>>500 とどう関係があるんだよ。
対話型プロンプトだと戻り値と出力の区別が付かないからね
勘違いする初学者が出てきてもおかしくない
どこかのカンファレンスか何かで問題提起されてたらしいが
>>546 レス遅そうなのであなたが本当にやりたいことを確かめずに書くけど
myhelp.py:
import os, sys
os.system('help %s' % (' '.join(sys.argv[1:])))
実行例:
C:\> myhelp.py cd
現在のディレクトリを変更したり、ディレクトリ名を変更したりします。
[以下略]
解決しました ほんとうにありがとうございました
どうみても(ry
mailto:cookiejar
あぁ俺か 時間帯でばれるもんなんだな これから気をつける
はじめまして、Pythonを勉強してみようと考えているものです。 おすすめサイト、書籍などお教えください。 ・やりたいこと TDDでWebアプリ開発 ・プログラミング暦 Delphi 3年(趣味のフリーソフト作成) Java 1年(資格取得のみ、実務経験なし) PHP 4年(Webアプリ構築) よろしくお願いします。
っamazon.com
つgoogle.com
つyahoo.com
561 :
デフォルトの名無しさん :2008/06/12(木) 05:09:29
グラフ処理をPythonでやりたいんだけど いいライブラリーありませんか? boostのBGLみたいなものを考えています。
graphviz
563 :
デフォルトの名無しさん :2008/06/12(木) 09:21:07
ちょ、それは可視化なんで。
>558-560 ありがとう、一通り目を通してみます。 ひきつづきTDDでWebアプリについて解説してるページやチュートリアルがあったら教えてください。 英語でも可。
566 :
デフォルトの名無しさん :2008/06/12(木) 19:09:52
>>564 いちいち人に聞くんじゃないよ
素人じゃあるまいし
>>567 くだすれなんだから初心者にやさしくしようぜ。
初心者になら回答者もやさしくするだろうけど
Delphi3年Java1年PHP4年でテストドリブンだぜ
>>567 がイラっとくるのもわかるわ
これからプログラミングを勉強しようと思って調べたところ、 pythonが初心者向きだと聞きました。 C言語か、Pythonかで迷っているんですが、どちらがいいでしょうか
Pythonがいいです。Cはその後でも遅くありません
C言語でプログラミングを始める人は多いから 人や資料が多いという点でCの方がいいような Pythonの対話モードはとっかかりはいいと思うけど
>>568 何か「やりたいけどわかりません。やってみたけど出来ません」みたいな質問ならわかるが、
情報欲しいだけの「ググレカス」で済む質問には冷たくてもいいんじゃないの?
>>571 >>572 わかりました。
まずPythonを触ってみることからはじめてみます。
やはり、プログラミング言語には自分に合う、合わないような相性はあるんでしょうか?
>>574 そのあたりは本当に人それぞれ
具体的な目標がなくただ漠然とプログラミングの勉強を
してみたいというのならPythonでまったく問題ない
教育用言語としても使われているぐらいだし
逆に具体的な動機があるのなら話は別
(掲示板CGIを作りたい、Windowsアプリを作りたい、etc.)
そういう動機があるのなら前もって言っておいたほうが
アドバイスする側もしやすいと思うよ
>>575 なるほど。
動機としては、Windowsアプリを作りたいが一番近いかもしれません。
ただ、今は漠然とそう考えてるだけで具体的にこういうのというのはないです。
Delphiという選択肢もあると聞いたんですが、こっちはPython以上に資料が少ないということらしいので・・・。
漠然と、ぐらいならPythonでOK 基本は他の言語でも通用するからやっといて無駄にはならないよ
WindowsのGUIならC#,Delphi,VBあたりの方が とっつきやすいと思う
初学者のとっては言語そのものよりも周辺のライブラリや開発環境が とっつきやすいかどうかが重要だよな。
ウィザードでなんでも出来てしまうと 初心者的にはすごいんだろうね
プログラミングってソースコードや環境を可能な限り把握する行為だと思うから いきなりIDE使うのはあまりオススメしたくはない
楽なほうからやらせるほうがいいに決まってんだろ。 いきなり苦行を科してどうするんだよ。
これだからゆとりは...
近寄らないでください。老臭がします。
最近はExcelで仕様書書くだけで コード吐いてプログラム完成するんですよね
これだからゆとりは...
IDE が進化して人間に敵対しはじめるとか
スカイネットですね、わかります
スカイフィッシュはどうしたんだろうね。
乱獲しすぎて……ごめん
591 :
デフォルトの名無しさん :2008/06/16(月) 15:29:19
とりあえずCでセグフォいっぱい出して、 なぜか考えるんだ。そしてメモリ管理って なんて難しいんだろうって悩むんだ。 そうすれば最近のどんな言語であっても ある機能がなぜ実装されているのか理解できるだろう。
そうかなあ・・・
「最初は楽しまくってプログラミングの楽しさを満喫しようよ」派 「コマンドラインで基礎からみっちりやれGUIデザイナとかIDEなんて十年早いんじゃ」派
python使うのに後者はないだろ・・
ここは低レベルな質問でもOKなんでしょうか? Windows環境上で、Pythonを勉強中なのですが、エディタの選択で悩んでいます a. emacs系のエディタに慣れ過ぎてしまったので、キー操作にemacs系のソレが用意されていること b. eclipseに慣れてしまったので、予約語、変数名、メソッド名、ファイル内に出現した単語を補完してくれる機能があること c. コメントを日本語で書きたいので、utf-8n でファイルを開いたり保存したりできるもの d. 起動が重いと学習意欲が削がれるので、起動が比較的早いもの e. 無料で使えること こういった条件を満たせるものを探しているのですが、これがなかなか見つかりません 「emacs慣れてるならemacs使えや」と言われそうですが、Meadowの起動は遅いですし予約語補完もいま一つですし(ファイル内に出現した単語の補完は楽なんですが…) 「eclipse+PyDevはどや」と言ってもeclipseは起動が糞重くて辟易しますしそもそもPyDevって有償じゃないのでしょうか以前入れたら広告が頻繁に出てきて以下略 何かいいエディタはないでしょうか
Meadowを自動起動にして終了させなければいいんだ。
Komodoもいいかもね。
xyzzy
スクリプト組むのにeclipseって 鶏を割くのにナパーム弾を使うみたいだな
ナパーム弾で鶏は割けないと思います!><
>>597 何も考えずに付属の IDLE (Python GUI) を使う。
ちょっと前にIDLEをエディタとして使ってみたけど、ウインドウの分割が できないのがキツかったな。 俺は次はPyPEを試してみる。 日本語の編集に難ありだけど、全体的には使いやすそう。
>>570 の便乗質問なんだけど
OSやPCの知識を深く得る意味でLinux環境でgccとpythonを勉強するのは、どうなんでしょうか?
C1本に絞ったほうがいいんですかね
勉強法のひとつとして
実装してみたい簡単なプログラムをPythonで書いて、Cでも実装してみる
こういうのってどうなんだろう
自分のイメージとしてはCはgdbとかを使いながら、ソースコードを読めるレベルになりたいですんよね
それならC一本でいい気もする そういうアプローチ(OSやPCの知識を深く得る)から書かれている本として 『ふつうのLinuxプログラミング』『Unix/Linuxプログラミング 理論と実践』などが挙げられる 読んでみるといいんじゃないだろうか まあ俺はHelloWorldしか書けないわけだが
>>598-600 アドバイス、dです
Meadowを起動したら最後、永遠に終了させない、という発想はありませんでした…
メール閲覧もWebサイト閲覧もすべてMeadow/NTEmacsでやるぜ!という人には十分アリな選択肢なのかもしれないですね…
しかしまさかPythonを勉強したいがためだけに、日常作業の全てをemacsに委ねるべく人体改造する羽目になるとは…
Komod Edit はいい感じですね。実は今現在、それで騙し騙しやってるところだったりします
emacs系のキーマップもありますし、使用中の動作も比較的軽いですし
ですが、起動がecipse並みに遅いのと、複数のファイルを共有した単語補完ができないのが厳しいところです
別ファイルのタブに移動してメソッド名をコピーして元タブに戻って貼り付け、が面倒くさい…
xyzzyは常用エディタだったりするんですが、py-mode がどうも非力な印象で…
また、新規ファイルを作成すると、SJISになってしまうあたりも、未だ自力で解決できなくてKomodoに逃げてる状態だったりします
emacs系のキーマップにこだわるから選択肢が少なくなるんですかね。XKeymacsの導入を前提にして範囲を広げたほうがいいのかな
>>603 IDLEはキーマップ?がWindowsのソレじゃないですか…?
Windowsアプリのキーマップでいいなら、PyScripterその他でええやんということにもなりそうな気がします
でもたしかに、「勉強用」と割り切るなら、最初から標準で入ってるIDLEを、というのは実に定番ですな…
>>601 非常に激しく、強く、熱く、胸を張って、声を高らかに、同意します
Lightweight Language といいながら全然Lightweightじゃねえ気がします>eclipseでLL
611 :
606 :2008/06/18(水) 14:46:29
>>607 C一本か〜
なんかやりたいくないなあ〜w
Cの基本だけなら直ぐ終わるよ
そうだね、プロテインだね。
614 :
デフォルトの名無しさん :2008/06/19(木) 07:21:08
基本、コマンドラインからつかうツールを使っているんだけど、 たとえばオプションをGUIで指定したり実行結果のテキストを スクロール可能な形で表示したいと思うこともある。 wxPython とか大げさ(というか使い方わかんね)だとおもうんだけど、 かといって curses みたいなのよりはちょっとGUIっぽくあってほしい。 やっぱりそういう用途だと Tkinter がベストな解? 1)コマンドラインオプションの代わりにGUIでオプション指定した 2)実行結果をスクロール可能な形で表示したい 3)できればオプションのデフォルト値とか保存したい (これはUIとは何の関係もない話か・・・)
615 :
デフォルトの名無しさん :2008/06/19(木) 13:30:11
集合型ってのはデータ交換ではあまり使われないんでしょうか? たとえば JSON や YAML にも集合型というのは定義されてません。 所詮順序つきのものがあれば十分だからということなんでしょうか?
んなこと言ったら、リストで十分なのにタプルがあるわけだし・・・
617 :
デフォルトの名無しさん :2008/06/19(木) 21:53:54
でもタプルは変更不可なわけで
だがそれがいい
621 :
デフォルトの名無しさん :2008/06/20(金) 07:26:04
622 :
デフォルトの名無しさん :2008/06/20(金) 07:35:54
順番に見てたら結構ウェブのインターフェイスのものが多いなぁ。 ローカルのファイルシステム上で使うCUIツール群の フロントエンドとして使えるものなのかなぁ。
623 :
デフォルトの名無しさん :2008/06/20(金) 07:41:14
1) 2) の SciTe がらみのやり方がローカル用途には何となくよさそう な気もするけど,3) 4) 5) も気になるところ.
って,GAEベースって書いてあるじゃん・・・不勉強すぐる俺
しかしさぁ,ローカルのファイルシステム上で動くアプリケーションの フロントエンド部分だけブラウザの描画エンジンを使えれば 便利だと思うのに,なかなかうまくいかないもんだね…
os.systemでコマンドプロンプトに出力される内容ををpythonで表示する方法は無いですか? ご返答をよろしくお願い致します。
popen3かな
subprocess.Popen
629 :
614 :2008/06/20(金) 10:12:24
630 :
614 :2008/06/20(金) 15:05:22
あの、Tkinter で親のウィジェットが破壊されたとき 子のウィジェットにはイベントで通知されるんでしょうか? そのイベントは bind でどうやって捕捉すればいいんでしょうか?
>>630 親は WM_DELETE_WINDOW を捕捉すればいいね。
子は destroy() を継承するしかない希ガス。
ただし※印の親の destroy() を明示的に呼ばないと子の destroy() も呼ばれないみたい。
import Tkinter as Tk
def callback():
print "root window deleted"
root.quit()
class MyLabel(Tk.Label):
def destroy(self):
Tk.Label.destroy(self)
print "label destroyed"
root = Tk.Tk()
label = MyLabel(root, text="Test")
label.pack()
root.protocol("WM_DELETE_WINDOW", callback)
root.mainloop()
root.destroy() # ※
それにしても、子ウィジェットの破壊なんてどうでもいい気がするんだけど何ゆえ通知してほしいの?
アプリ自体の後始末は終了前にやればいいし・・・。
632 :
614 :2008/06/20(金) 16:37:19
Tkinter.Entry への入力を別スレッドでの処理に 使ってるんだけど、ウィジェットがなくなっちゃうと ず〜っと待ちっぱなしでどうしようもなくなるなぁ、って
633 :
デフォルトの名無しさん :2008/06/20(金) 18:00:26
mod_pythonについて教えてください。自分なりに調べた結果 例えが悪いかもしれませんがC言語で言うと、 本体exe=mod_python ダイナミックリンクライブラリdll=pythonスクリプト という感じなのかなと思いました。 そこで、mod_python上で動かすpythonスクリプトにはエントリポイント的なモノ(関数) を記述し、その中に処理させたい内容を記述すれば良いのでしょうか?
>>632 ああ、
>>629 のコードのことね。
それは子ウィジェットの破壊とは別の問題だと思うよ。
Entry を殺してもスレッドは死なないからね。
スレッドは別スレッドから殺すのではなく自ら終了するよう仕向けるのが基本です。
629のコードでいうと、例えば何も入力せずにエンターを押したら終了ということにして、
1. GUIConsole::readline() で result が空文字列だったら self.quit() してから return result する。
2. 別スレッド側で EOFError が起こるのでそれを捕まえてループを抜ける。
3. guiconsole.start() の終わりで別スレッドを join する(別スレッド終了を待つ)。
というようなことをするのが筋。
親スレッドが終了したとき子スレッドがどうなるかは環境依存だから、
面倒だけどキチンとやるのが無難です。
629のコードでは低レベルな thread モジュールを使ってるから join が無いね。
代わりに threading モジュールを使うように直すといいと思う。
>>633 はもしかして mod_python の mod_ を python のモジュールと
勘違いしているのではないか? mod_python が apache のモジュール
のことだと認識した上での質問なんだろうか。
637 :
デフォルトの名無しさん :2008/06/21(土) 14:24:16
>>636 そのことは、わかっていると思います。いや、分かってないのか…
apacheのモジュールとしてmod_pythonを読み込むことで、
apache上にpythonインタプリタが常駐するようになる。
ということではないのですか?
>>626 です。ご無沙汰しておりました。
>>627 さん,
>>628 さんありがとうございます。
popenを用いても出来るということがわかったのですが、まだ結果の出力方法が
分かりません。恐縮ですが、もう一度助けてください。
たとえばos.popen("help help")もしくはsubprocess.Popen("help help")と入力した場合に、
以下のようなコマンドプロンプトの"help"についてのヘルプがpython上で出力されれば
望ましいと考えています。
---
Windows コマンドのヘルプ情報を提供します。
HELP [comand]
comamand - このコマンドのヘルプ情報を表示します
---
前回教えていただいた、方法で試してみたのですが表示させることができません。
何が足りないのか教えて頂ければ助かります。
>>637 いやすまん、失礼した、そのとおりです。
640 :
デフォルトの名無しさん :2008/06/21(土) 16:27:15
>>639 いや、俺もあまりドキュメントちゃんと読んでなかった。あとで読み直したら
何となくだけど使い方は分かってきた。努力不足でした。すみません
>>> import os >>> print os.popen("help help").read() Windows XP コマンドのヘルプ情報を提供します。 HELP [command] command - このコマンドのヘルプ情報を表示します。 >>>
何かをPythonで計算してる時に現在どのくらいメモリを使ってるか、 正確な値をバイト単位で知りたいんですが知る方法はないですか?
環境依存だと思います。
タスク一覧見れば分かる環境が多い
明らかにメモリ喰うだろうと思って書いたプログラムが大してメモリ使ってなくて 単純なループだけで大丈夫だと思ってた方が数百MB使っててどんどん増えてて藁
はじめてみたんですが、日本語の情報が少なくて・・・ IDLEを使って色々試しているんですが、対話モードの時って日本語が出力できないのはどうにかできるんでしょうか?
648 :
デフォルトの名無しさん :2008/06/23(月) 00:07:58
できますよ
>>649 最初から墓場にご案内ですか?(wwwwwwwwwww
C:\cgi-bin>python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
http://localhost:8000/env.py にアクセスしても
ソースコードが表示されるだけで実行できません。
#! c:\\Python25\\python.exe
import os
print 'Content-type: text/plain\n\n'
for key in os.environ:
print '%s: %s' % (key, os.environ[key])
どうして動かないのでしょうか?
C:\>python -m CGIHTTPServer Serving HTTP on 0.0.0.0 port 8000 ... ***-PC - - [23/Jun/2008 02:46:34] "GET / HTTP/1.1" 200 - ***-PC - - [23/Jun/2008 02:46:41] code 403, message CGI script is not a plain file ('/cgi-bin/') ***-PC - - [23/Jun/2008 02:46:41] "GET /cgi-bin/ HTTP/1.1" 403 - 2. cd c:\ して python -m CGIHTTPServer する 3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス 環境変数がずらっと表示されたら成功 コマンドプロンプトの起動パスを変更して立ち上げてみたところ 403 not found...とかなって何も表示されませんでした… orz
おぉ、こんな機能があるのか。恐ろしく便利だな。 でもこれ、CGIが実行されたときのカレントディレクトリが、 pythonを起動したときのディレクトリのままだね。 カレントディレクトリを変更してから呼んで欲しいな。
650じゃないけど、あまり更新がないとか、あやしいリンク貼りまくられて荒らされるとかかな?
650じゃないけど、情報がいい加減とか、 以前サンプルコードにグローバル関数と同名の変数名が使ってあって Python知らねえくせにまとめWikiかよお目出てえなとか、 リンク晒してるのはどう見ても関係者だろこれとか、 そんな暇があったら更新しろよハゲとかじゃないかな?
660 :
デフォルトの名無しさん :2008/06/24(火) 11:30:46
ぱいがめ翻訳サイトまだ? だから廃れるんだよ 広めたいって人はいないのか
>>659 wikiなんだから間違いに気付いたら、みんなで編集していけば良いだけじゃないの?
墓場に大切なものを隠せば見つかりにくいというわけですね、分かります。
663 :
デフォルトの名無しさん :2008/06/24(火) 15:33:22
Python ではファイル=モジュールという単位になっていますが, 1ファイル=1クラスというコーディングスタイルは推奨 されていないのでしょうか? a.py で class A を定義 → クラス a.A が定義される b.py で class B を定義 → クラス b.B が定義される 名前空間まで別になってしまいます. C++ でプログラムを組んでいてずっと1ファイル=1クラス のスタイルでやってきたのですが・・・・ 同じ名前空間に入れるすべてのクラスは同じファイルに 入れなくてはならないのでしょうか?
>>661 中立的な言葉で書かれていない文章をお前は編集する気になるか?
>>663 a.pyで from b import * とでもしておけばいい。
極端な例がmatplotlibのpylab.pyで、このファイルにはimportしか書いてない。
まぁ、細かいファイルは1つのファイルにまとめた方がいいと思うよ。
例外クラスまで1ファイル1クラスにしてるの?
>>663 1ファイル=1クラスは特に推奨はされていない。
Pythonコードはどのみちクラスからだけ成り立っているわけではないしな。
いくつかのモジュールをひとまとめにしたいときは、Pythonではパッケージを
使う。
パッケージの初期化ファイル__init__.pyでモジュールからエクスポートしたい
シンボルをimportしてやれば、あんたのやりたいことは実現できるはずだ。
若いのに中立ですか。
>>664 編集して普通の文章にするんだ
どうせ管理人すら放置してるんだから構わんだろ
どんどんやっちまえYO!!
翻訳は人任せとしても、wikiは自分の好きに書き換えればいいだろ
ゴミはゴミ箱に。 宝石は宝石箱に。
なんで翻訳の話がでてくるの?
672 :
デフォルトの名無しさん :2008/06/24(火) 19:53:21
__init__.py に import を書くというのは なにかまずいことを引き起こすでしょうか?
>>672 いっしょに__all__も定義すれば綺麗なPythonパッケージ
677 :
デフォルトの名無しさん :2008/06/25(水) 07:55:11
>>665 すっきりうんこでました
ありがとうございました
[1,2]の要素のそれぞれを2倍して[2,4]にする っていうのはどうやればいいんでしょうか?
>>678 [i * 2 for i in [1, 2]]
もしくは
map(lambda x: x * 2, [1, 2])
ありがとうございます。 リスト内包表記ってそうやって使うんですね。
>>679 それは
> [1,2]の要素のそれぞれを2倍して[2,4]にする
ではなく、新しいリストを生成しているのでは。
x = [1,2]
for i in range(0,len(x)):
x[i] *= 2
>>681 > ではなく、新しいリストを生成しているのでは。
だったら
x = [1, 2]
x = [i * 2 for i in x]
ってやれば同じ
>>681 はインプレースで配列を変更していて
>>682 は配列を新しく生成してその配列を参照しているように見える
これが勘違いでなければ
両者は返す結果こそ同じだが動作は別物じゃないか
>>683 それで合ってる。
inplaceにしたければ、スライス代入を使えばいい。
x[:] = (i * 2 for i in x)
685 :
683 :2008/06/29(日) 10:55:58
>>684 なるほど。ジェネレータ式も勉強になったよ
from timeit import Timer print Timer('x=[1,2]; x=[i*2 for i in x]').timeit() # py3k: 2.0419500243746063 # py25: 1.5092940583230501 print Timer('x=[1,2]; x[:]=(i*2 for i in x)').timeit() # py3k: 5.2120230364473699 # py25: 7.4014716954249735 スライス代入のほうがコストが高いんだろうか… ベンチの取り方が間違ってるだけなのかもしれんけど (汗
>>686 最終的に代入になってても途中で余分にリスト作ってない?
>>686 普通の代入 x = よりはスライス代入のほうが遅いけど
それ以上にジェネレータの実行速度が遅いんだと思うよ
ジェネレータで節約できるのはメモリが主だろうし
690 :
デフォルトの名無しさん :2008/06/29(日) 13:05:03
Python って末尾再帰の最適化はサポートされていないのでしょうか?
されてますん。
692 :
デフォルトの名無しさん :2008/06/29(日) 13:42:00
>>691 どっちなんだ〜
-------------
def rec(x = 0):
if (x<1000000000):
rec(x+1)
rec()
------------
RuntimeError: maximum recursion depth exceeded
うん、されてないと思う。 def fib(n): def fib_iter(a, b, m): return a if (m == n) else fib_iter(b, a + b, m + 1) return fib_iter(0, 1, 0) おれの環境ではfib(1000)ぐらいでコケる。 ので、Pythonではiterative processは 素直にループやiteratorで書けということだと思った。
694 :
デフォルトの名無しさん :2008/06/29(日) 13:53:36
単にトレースが取れるようにするために何か制限しているだけなのかなぁ。 わからん、わからん、わからんちん。 しかし単純にループにするだけならトレースとかそもそもいらないのに。 sys.setrecursionlimit() を勝手にいじるのもどうかと思うし・・・
695 :
デフォルトの名無しさん :2008/06/29(日) 13:56:07
ううむ、つまり、「されてない」が結論だということっすね。 C++ + Boost Graph Library で大規模なグラフ処理してたんだけど、 Python + networkx でやってみようと思ってハマってます。 末尾再帰最適化を前提としたコードかいてたから、 移植のときにアタマをきりかえるのがなんとも・・・
Stackless Pythonというのを調べてみると良いかも。 ただ、Cのハードウェアスタックを使わないというだけなので、 末尾再帰をgotoに最適化してくれるかどうかは知らない。
697 :
デフォルトの名無しさん :2008/06/29(日) 13:57:49
698 :
デフォルトの名無しさん :2008/06/29(日) 13:58:28
>>697 さすがに2003年だからな
今でもだめなのか orz
699 :
デフォルトの名無しさん :2008/06/29(日) 14:05:28
sys.setrecursionlimit(10000) でやってみたけど、7000ちょっとの再帰で今度は正真正銘の MemoryError: stack overflow が出た Python赤玉。俺涙目。
Stackless Pythonなら、setrecursionlimit()で限界増やして、メモリの限り再帰しても大丈夫だよ。
701 :
デフォルトの名無しさん :2008/06/29(日) 16:23:18
メモリの限り再帰って・・・本質的な解決じゃない気がする。 そのうち末尾再帰の最適化が入ることを祈って、 とりあえずループに書き直した。
702 :
デフォルトの名無しさん :2008/06/29(日) 18:42:53
Pythonでは定数をどのように宣言(?)すればいいのでしょうか? たとえば C++ において,クラス全体で使われる定数は static const で宣言しますが,それと同じようなことは でこれーたで可能なのでしょうか?
>>702 デコレータつかうと誤って更新すると例外が出るようのは作れるけど
クラスやパッケージ外からはアクセサつかって変数を更新するという
ルールにしとけば事故はおこんない。
そもそもPythonの変数は入れ物じゃなくて名前付けというか参照だから
そういう文化(というと大げさだけど)だと思うしかない。
まーCみたいに独自プリプロセッサとおすのはありかもね。
ここでもstackの話してるのかw
ゆとりちゃんは幼稚園からやりなおしてくだちゃいね
やりなおしても、またゆとり教育で永久ループか?
ゆとりはPython使うな。 以上。
Python3.0について質問です。 名前空間ってやつで悩んでます。 urllibモジュールについて、 import urllib.parse.urlparseとやるとimportに失敗します。 from urllib.parse import urlparseとやるとモジュールのimportに成功します。 なぜでしょうか?? なぜ下の方は成功し、上のほうは失敗するのでしょうか。
urlparseがモジュールじゃなくて関数だから (lib/urllib/parse.py)
712 :
デフォルトの名無しさん :2008/07/02(水) 09:12:25
PEPってPython Enhancement Proposals のことだって始めて知った今日。
PHPってPrintHtmlPrototyping
714 :
デフォルトの名無しさん :2008/07/03(木) 08:36:51
Pythonで簡単なウェブサーバを作成するパッケージってありますか? ローカルで実験してて計測結果を表示するウェブインターフェース付けたいんだけど
>>714 >>651 >>> python -m CGIHTTPServer
50レス程度も読めないの?馬鹿なの?死ぬの?
そういう人間のたまり場だということになぜ気付かないの?
ログを読まないより、ググらないのとリファレンスを引かない方が…
プログラム初心者がpythonでcgiやりたいとかならともかく、 実験してるような人なら、必要な情報を調べる技術は備えてるはずだと思うんだけどなあ
719 :
714 :2008/07/04(金) 07:00:11
思いついた時にケータイで取り合えず聞いておくから. 後で調べる. とにかく古い測定器で,GP-IBインターフェイスカードが そのマシンにしかついてなくって,面倒だなぁ,と.
720 :
714 :2008/07/04(金) 07:02:01
レスしてくれる人があったらラッキーだし, なくてもまぁ,なんというか,メモ代わり. 自鯖のp2経由だから自分がどこに何書き込んだかログ残るし.
721 :
714 :2008/07/04(金) 07:33:41
だから,レスは別にいらないし、回答をくれても特に感謝もしない. こっちが要求したワケじゃないから,ね.
つチラシの裏
723 :
714 :2008/07/04(金) 07:41:48
わかってると思うけど,721は別人. …まあ,言ってることは当たってるけど.
ものすごいインストーラー嫌いなんです Windows用のはインストーラーしか見当たらないのですが Pythonをインストールせずに使う方法はありますか? Portable Pythonっていうのを使えばいいんでしょうか?
726 :
デフォルトの名無しさん :2008/07/04(金) 11:51:14
>>725 ソース落としてコンパイル or msiを展開する
728 :
デフォルトの名無しさん :2008/07/04(金) 15:49:43
1バイト以下に収まる整数のでっかい配列を扱いたいと 思ったんだけど、基本型には「短」整数型ってのはないのな orz
730 :
デフォルトの名無しさん :2008/07/04(金) 16:22:22
多次元配列を扱いたいんだ・・・ できれば符号なし8ビット整数の。 NumPy ってページを見てみた。 It also adds the features introduced by Numarray and can also be used to replace Numarray. ってことらしいのだが、つーことは今は numpy.array を使えと?
731 :
デフォルトの名無しさん :2008/07/04(金) 16:29:12
A newer implementation, Numarray, is a complete rewrite of Numeric but is also deprecated. NumPy is a merge between the two that builds on the code base of Numeric and adds the features of Numarray. ---- Wikipedia にはこうかかれていました。
ありがとうございました
733 :
デフォルトの名無しさん :2008/07/04(金) 19:21:43
どう見ても精子です。 本当にありがとうございました。
734 :
デフォルトの名無しさん :2008/07/05(土) 20:03:29
自鯖クラッシュに伴い、Python ベースのブログツールに して気分一新しようと思ってるんですが、この世界は 大体 Zope ベースと TurboGears ベースに収束しつつあるんでしょうか? Apache + Pythonベースの CGI というよりは、 サーバ機能も含めて全部 Python で固めたシステムに してみたいんですが、そうなると Zope ベース一択ですか?
735 :
デフォルトの名無しさん :2008/07/05(土) 20:34:16
Debian に zope3 パッケージが見つかったんで入れちまった。
Zope3はガチで地雷。
言うな。個々のパーツは素晴らしいと思うんだが
ブログツールってのが既成のなら
何ベースというより機能で選択すればいいとおもうけど
自分で構築するならlighty+WSGIかSCGIなPythonアプリかな。
Zopeは2.6以降追っかけてないけど
当時の設計思想でコアなProductも同等以上なら
Python自体がバージョンアップしてる分そうとう楽しく書けるはず。
でも実際は
>>736 のとおりなんだろうな。
Zope3はすばらしいと思うが周りに集まってくる日本人がクソ。
740 :
デフォルトの名無しさん :2008/07/05(土) 22:26:12
え?地雷なの? なんか改造したくなったときにPythonだと普段から使っているからやりやすいかと思って。 PerlとかPHPで書かれたやついじりまくって収集つかなくなった。
舞の海
>>740 >PerlとかPHPで書かれたやついじりまくって収集つかなくなった。
センスのある奴は道具に左右されずそつなくなんでもこなすもんだがね。
クマー
ちょ PHPはセンスあっても無理な時は無理 grobal依存しまくりな著名アプリがほぼ絶滅したら認識改めてもいいが なんかSquirrelMailっての改造作業回された時にほんと死ねクズ開発者共って思った
PHPにはnamespaceすらも無いの?
ねえよンなもん
PHPは言語自体行き当たりばったりなハックで作られてる印象
>>744 >SquirrelMailっての改造作業回された時
ドカタ乙。
ワラ
750 :
デフォルトの名無しさん :2008/07/06(日) 11:23:57
Perlは綺麗なのか? かなりアドホックに建て増ししてるように見えるが。
Zope3の実装はきれいだけど、使っている日本人がババッちい。
zopeはメメタァなだけだろ
>>751 なんでZope関係の日本人は変な感じがするんだろう…
754 :
デフォルトの名無しさん :2008/07/06(日) 13:35:53
CMSでいえば俺が以前使ってた geeklog の人なんて もっと気持ち悪いよ。
CMSスレでも評判悪いなw
>>745 namespaceは5.3で導入される。6.0からunicodeのネイティブサポート。
総じてCMS開発者は気持ち悪いのか?
758 :
デフォルトの名無しさん :2008/07/06(日) 16:54:27
>>755 俺もね,いろいろと改良しようとはしたんだ.
というか,実際やった.自分のブログだけは.
でもさ,モジュール化が難しい PHP だと,
上流の変更に合わせてマージできるように確認
するだけでえらい手間がかかるんだ.
そこまでしてコントリビューとするのも面倒だったからやめた.
上流での変更範囲のどこまでが自分がコミットした
パッチに影響あるか,確信が持てないし,
退行テストするほど時間に余裕もない.
つーわけで Zope 3 だとその辺考慮されてるかな?
とか淡い期待を抱いてインスコはしてみたものの,
まだインスタンス作成すらしてないや.
Zope スレも過疎ってるみたいだしさ
全然話は変わるけど、pythonってなんで file = open('hoge.txt') for line in file : hogehoge() って書けないのよ
書けるよ
行毎なのか文字毎なのかバイト毎なのか はっきりしろ
>>759 Oh! Python勉強中なのでその話題は気になります
Perlだったらこんな感じ?
open(IN, "hoge.txt") or die "Can't open hoge.txt";
while(<IN>) {
chomp;
print $_;
}
close(IN);
Pythonなら
Pythonならこう? f = open("hoge.txt", 'r') while True: l = f.readline() if l == '': break l = l.rstrip('\n') print l f.close() …もっと上手い書き方・短くなる書き方があるのでしょうか? while True: が気になります ここに条件判断入れて短くできないのでしょうか?
というか Perlの or die "〜" に相当する部分がないのも気になるな… try: 〜 except: 使わなきゃダメなのかな
>>763 ファイルから1行ずつ読むループは
for line in file:
でいいんだよ。
759が何を駄目と言ってるのか分からない。
>>763 f = open('hoge.txt')
for line in f: print f, # 末端にカンマつき
f.close()
stdout.writeのほうが好みならそっちを
あと例外は補足しなければ大概はdieの代わりになるよ
>>765 おお…ホントだ! 試してみたら行けました
「Python ファイル読み込み」で検索すると
>>763 のような書き方しか出てこなかったので
for line in file: なんて書き方ができるとは知りませんでした
…どうして初心者向けの解説ページでは長々とした書き方を紹介してるんだろう
もしかして比較的最近の版じゃないと書けないやり方なんでしょうかね?
何にしても短く書けて嬉しい限りです
後は or die "〜" 相当の書き方を調べてこないと…
ごめん間違い for line in f: print line, で
>>766 膝を打ちました
print の最後にカンマをつけることで改行を出力しない
=読み込んだ行の改行を利用して改行してしまう、ということなのですね
上手いやり方があるなあ…
しかもたったの3行になってて感動しました
同じ処理でもこんなに短く書けるのか…
sys.stdout.writelines(open("hoge.txt")) for line in open("hoge.txt"): print line
>>772 もっと先のイテレータのところにちょろっと書いてある。
余りわかりやすく書いてしまうと本が売れなくなる
イタリックは止めて欲しいよね
776 :
770 :2008/07/09(水) 22:43:43
pythonの入門書なんか書籍数が少ない上に中途半端なのばっかじゃん python勉強しようって連中からしたらifとかforとかたらたら書いてあっても無意味なのにさあ EffectiveC++とかEffectiveJava的な本が無いのがいかん
Cookbookでもみたら。 プログラミングの初心者には、 pythonで学ぶプログラミング作法がおすすめなんだがさすがに古いんだよな。
780 :
デフォルトの名無しさん :2008/07/10(木) 12:41:34
is 演算子はオブジェクトに関するアイデンティティテストですが, 定数に対しての式 3 is 3 が True になるのはどういう理屈によるのでしょうか.
定数じゃないから >>> int(3) is 3 True
782 :
デフォルトの名無しさん :2008/07/10(木) 15:42:02
is ってオブジェクトとして同じってことであって, 値として同じってことじゃないと思うんですよ. i = int(3) j = int(3) print i is j #これは True print i == i #これは True class TestClass(): def __init(self): pass def __eq__(self, right): return True p = TestClass() q = TestClass() print p is q #これは False print p == q #これは True
Pythonの数値はimmutableだから 同じオブジェクトを使いまわしても問題ないんです
int,float,str等の場合はa==bがTrueでもa is bはFalseになる場合もあるので 使うべきではないね
785 :
デフォルトの名無しさん :2008/07/10(木) 15:50:31
変更不可能なオブジェクトの場合はそういうふるまいなのか? って思ったんだけど…タプルでやってみる x = (1,2) y = (1,2) print x is y #これは False print x == y #これは True
そこらへんは実装依存 変更不可能なオブジェクトは使いまわしてもいいし使いまわさなくてもいい
787 :
デフォルトの名無しさん :2008/07/10(木) 16:45:27
実装依存 orz 危険だなぁ
そういう比較にisは使わないから危険ではないでしょ
>>> 100+100 is 200 True >>> 100*100 is 10000 False
is をどういうときに使うのか今一つピンとこないなあ…
>>784 の事例を考えると
「最初から何でもかんでもできるだけ全部 == でいいじゃねえかそのほうがシンプルだろう」
と思うのだけど…
値としてイコールなのと、オブジェクトが等しいことは全く別の話だが ポインタがない言語だから分かりにくいのかね。
>>> x = None >>> print x == None True >>> print x is None True None との比較には is None を使うべし、と説明してる記事をよく見かけるのですが 初心者向け記事・最初のうちは x == None だけ使ったほうがいいのかな という気がしただけなんですけどね
なんで各行に改行が入るんだ… orz
794 :
デフォルトの名無しさん :2008/07/10(木) 17:53:38
>>791 でもちゃんと copy.deepcopy() とか用意されてるけどね
795 :
デフォルトの名無しさん :2008/07/10(木) 19:10:47
どのメソッド・関数でどれくらい時間がかかっているかを 測定してくれるプロファイラって Python にないですか? PyDev から容易に使うことができればベストなんですが.
796 :
デフォルトの名無しさん :2008/07/10(木) 19:53:05
import profile でおkでした
hotshotもあるよ
>>762 Python2.5以降
with open('sample.txt','r') as fp:
for line in fp:
print line
799 :
798 :2008/07/15(火) 22:47:21
ミスった。こうかな? with open('sample.txt','r') as fp: for line in fp: print line
インデントなくても分かるコードならそのままでよくね? 2chの仕様はみんなしってるし。 スレローカルで行頭のある記号(たとえば . とか)は 空白とみなすとかなら楽なんだけど。
プログラマ=アプリを使いこなす、ってイメージがあるから 2chは専用ブラウザで見てるって思ってるんだけど、そうでもないのかな。
htmlソース見たら空白復元出来るけど何が問題?
>>801 自分が使ってるアプリの独自仕様が標準だと思ってる人って痛いよね
どこにでもいるけどな
いい加減スレ違い
これでいけそうな気が $ python -c "import sys; print sys.stdin.read().replace(' ', ' ')" < test.py #! /bin/env python def main(): for i in range(10): print i if __name__ == '__main__': main()
replace(' ', ' ') -> replace(' ', ' ')
C#使いだけど今日からPython始めるよ みんなよろしく!
つ IronPython いろんな意味で逃げ出せない
それも入れたー とりあえず何か作ってみるわー
811 :
デフォルトの名無しさん :2008/07/18(金) 07:55:10
PythonはTkinterでコマンドラインアプリのラッパーづくり WebアプリはApache+PHPでお手軽に作れる規模で十分な俺が PythonでWebアプリ作ろうと思ったらどんなパッケージ使うべき? ゴツいフレームワークは無しの方向で
普通にApacheでCGIでいいんじゃね?
web.pyとか?
今日初めて生で柴田さんを見た。
受け付けの柴田さんなら毎日見てる
いくぜっ
819 :
デフォルトの名無しさん :2008/07/25(金) 01:41:29
一行めの/usr/bin/env pythonのenvって 環境変数無効にするって意味なんですか?
>>819 Unixでの常套句
この場合pythonのフルパスがわからなくても動作する。
PATHはとおっていないとだめだけど。
>>820 あー、環境変数PATHを有効にしてるってことですね。
呪文だと割り切りつつ、ずっと疑問だったのですがすっきりしました。
ありがとうございます!
正直、俺は呆れたよ…
だってwindows使いなんだもん 超初心者スレだから許してちょ!
Windowsだったらその行消しても問題ないよね?
うん
すると *NIX環境下でも Windows環境下でも Mac環境下でも どこでも動くPythonスクリプトを書こうと思ったら 1行目に必ず #!/usr/bin/env python と書いておくのが定石ということでいんでしょうか
>>819 pythonの実行ファイルが
/usr/bin/python
にあろうが、
/usr/local/bin/python
にあろうが動かそうとする場合に使うんでないかい?
ただし、欠点として2つ以上の引数(この場合envの後の python 以降)を認識しなかったはず
828 :
デフォルトの名無しさん :2008/07/25(金) 17:10:57
ちょっと質問があるのですが、 ライブラリのパスにzip付きパスがあるんですが、 これって標準ライブラリ一式を zipに固めて置いておけば動くっチューことなんでしょうか? この編の仕組みについてドキュメントに記述があればどの辺にあるか教えてください。 ライブラリパス表示例: python -c 'import sys; print sys.path;'
829 :
デフォルトの名無しさん :2008/07/25(金) 17:17:37
py2exe の _memimporter も調べた方がいいよ
M.Hiroiさんのお気楽pythonプログラミング入門で、 第4回ジェネレータのところの リスト7がどう動くのか分かりませんでした。 打ち込んで動かすと、正常に動きました。 最初空リストの意味が分かりませんでしたが、 n==len(nums)が再帰の停止条件になっていると考え、 与えられたリストが[1,2,3]なら、n=3のとき、空リストが n=2の階層に戻って、for yの繰り返しで、与えられた順序と 同じ順列のリストを作ったら、どの階層に戻っても、 if y not in xを満たさなくなり、一番外側のn=0に戻って、 一つ目の順列をプリントすると理解したつもりが 次の順列である[1,3,2]がどうして出てくるか分からなく なったので、たぶん上の理解も間違っているのではと 思いました。それでトレースする方法をweb上やマニュアルから 調べましたが、結局うまくいかず、お手上げ。どうすればいいでしょ。
どこかわからん
833 :
デフォルトの名無しさん :2008/07/29(火) 20:37:42
>>831 >M.Hiroiさんのお気楽pythonプログラミング入門で、
>第4回ジェネレータのところの
>リスト7がどう動くのか分かりませんでした
答えて欲しけりゃ引用して来い
836 :
831 :2008/07/29(火) 22:58:49
ありがとうございます。Pdb sコマンドでステップ実行できました。 今から動作を確かめます。
ファイルディスクリプタ(番号)からファイルオブジェクトを作るにはどうすればいいのでしょうか?
os.fdopen
839 :
831 :2008/07/30(水) 13:32:19
どう動くか分かりました。yieldはreturnのようなもので、 ループの途中でも中断して値を返していく。 普通のreturnとの違いはもう一度同じルーチンが 呼ばれたら、最後のyieldのところに戻って、 ループの続きを行い、最初のyieldのところに戻ったら、 全体の繰り返しが終わるようです。 デバッガの出力が少しマギらわしかったですが。
念のため聞いとくけどgen_perm(nums, n)が返すのはyieldの値じゃなくて ジェネレータオブジェクトだってわかってるよね?
841 :
831 :2008/07/31(木) 14:07:35
分かっていません。yieldの値が返っていると思っていました。
でも、呼び出しているところでfor文で受け取っているところが
言われてみれば、普通とは違う感じですかね。不意を付かれたので、
ちょっとググりましたら、イテレータに関係していそうです。
http://atkonn.blogspot.com/2008/02/python-python31.html 上記のページで変数に入れて、next()で呼ぶと、次々と
値が変わるというのがfor文において次が呼ばれるみたいな
イメージで理解しましたが、普通に呼んだだけでは何も
表示されないというのが分かりませんでした。よろしかったら
お教えください。
842 :
831 :2008/07/31(木) 14:17:44
今打ち込んでみましたら、<generator object at 0x。。。。>と 言うのが出ました。なるほど。さっきのページは画面のところが 間違っていたんですね。
844 :
837 :2008/07/31(木) 17:26:01
Pythonにおいては ジェネレータ == イテレータ
846 :
831 :2008/07/31(木) 22:32:34
2.4のほうを読みましたが、イテレータのところは 読んでいませんでした。 今読むと、__xxx__の形やselfが見たことはあるんですが、 分からないので、半分理解不能と思いましたが、 よく見ると、__init__がコンストラクタ、__iter__が オブジェクトを返す部分、nextのところがnext()の 実装部分に見えます。勉強になります。
かたっぱしからオブジェクトにたいして dir(obj)やhelp(obj)すると理解がすすむかも。
日本語はUnicode文字列で扱おうと思うんだけど、 英数だけの文字列もUnicode文字列として扱ったほうがいいかな?
不安ならUnicodeとして扱えばいいと思うよ
>>848 unicode と str を不用意に混ぜて使うと、暗黙の str ⇔ unicode 変換が起こりまくる
悪夢のようなプログラミングになると思うよ。unicode に統一するのが無難。
ありがとう。迷いが解消されたよ。 ああ、聞き忘れてたけど記号もだよね?","とか";"など…
852 :
デフォルトの名無しさん :2008/08/01(金) 20:22:59
こんにちは。
トップレベル関数以外からの(ジェネレータオブジェクト以外からの)yield相当がやりたくて、
Stackless Pythonを弄っています。
そこでちょっと困った問題があり、質問をさせていただきました。
・tasklet(Stackless pythonの軽量スレッド)で実行時エラーが起きた時に、
何も表示されずにただ落ちる(終了する?) orz
例外をトラップして、自分で例外の内容やスタックトレースなどを出すしかない?
例外をトラップすること自体はできるっぽいです。
・デバッガでtasklet内に入れない。orz
デバッガがtasklet内に
ブレークポイントをしかけても無視されました。
PyScripterで確認しました。
printデバッグしかないんでしょうか?
何かよいデバッグ手法はないでしょうか?
>>851 記号も文字列でしょw
853 :
852 :2008/08/02(土) 03:50:30
>>852 > ・tasklet(Stackless pythonの軽量スレッド)で実行時エラーが起きた時に、
> 何も表示されずにただ落ちる(終了する?) orz
こちらは、例外を受け取って
import traceback
traceback.print_exc()
でトレースバックを出力する方法でエラー内容も出力でき、解決できました。
あとは、デバッグの方法だなあ・・・
これから学ぼうとしている者です。 Pythonで市販並の3Dゲームとか作れますか?
プロ並の3Dゲーム作成技術とかあればできるんじゃね?
>>854 ゲーム製作だと言語云々よりもプログラマの能力如何にかなり左右されると思われる
線形代数とか物理シミュとか群集シミュとかAIとかどこまで理解してるかという。
そういう類の知識があって、さらにプログラムの最適化について十分な理解をしている
プログラマであればできるかもね
Python「だけ」じゃ無理じゃね? ケース倍ケースだけどC/C++の数十倍とか計算遅かったりするよ つまり一フレームで出来る仕事が数十分の一とかになるってこった C/C++と併用ならまあ普通にアリだろな
859 :
デフォルトの名無しさん :2008/08/03(日) 05:53:17
860 :
デフォルトの名無しさん :2008/08/03(日) 06:28:01
やっぱマルチスレッドへの対応が弱いのがなぁ.
ぱいがめドキュメント翻訳はやくやれよ。
> 861 まだいってるしw いいかげんあきらめて英語読む勉強しろw
162あたりから3ヶ月もあったのに
>>862 俺はお前より英語できるから安心しろ(w
俺みたいなりたいならはやく翻訳しろよ。勉強になるぞ(www
ゲームにマルチスレッドなどいらん。 昔は(ry
まあPython使って並列計算でマルチコアでの性能稼ぎとか考えるのはナンセンス だとは思うがな 所詮インタプリタであって、それ以前の問題で遅いんだから
868 :
デフォルトの名無しさん :2008/08/03(日) 16:34:35
>>861 本家ドキュメントをよべば、
・英語の勉強になる
・つねに最新情報を得られる
・他のドキュメントも見られるように・・・
いいことずくめだ
869 :
デフォルトの名無しさん :2008/08/03(日) 16:38:02
>>867 そういわれてしまえばそうなんだけどさ,
やっぱ人間少しでも楽したいとか思ってしまうわけよ.
数値計算含んだライブラリを頑張ってスレッドセーフに作ったから,
それ使ったアプリは楽に書きたいなぁ,とか.
そのライブラリとやらはCか何かで書いてるわけか ならPythonオブジェクトとは入り口でさっさと縁を切り、明示的にGILを開放して pure Cの世界でゴリゴリ計算してりゃ並列性はあげられそうに思うけど 違うの? 効率のいいjob queueや何かもCで作ればいいだけじゃね?
http://jjinux.blogspot.com/2008/08/python-intern.html >>> s1 = identity_cache.setdefault(s1, s1)
>>> s2 = identity_cache.setdefault(s2, s2)
これって辞書のキーと値をidentity_cacheセットして、それぞれの値を変数s1,s2に束縛してると
思うんだけど、辞書空間の中で文字列"foo"が、同じidentificationで
共有されてるいうようなことを示しているのかな?
記事全体はカツカツな環境下でメモリをどれだけ節約できるか
みたいなこと言ってるような…よくわからんぽ
872 :
デフォルトの名無しさん :2008/08/03(日) 18:57:26
ところでpythonのtelnetlibに入ってるtelnetクラスのexpectってメソッドってちゃんと動く? なんか下みたいに書くとexpectの引数で怒られるのはなんでなん? import telnetlib telnet = telnetlib.telnet('192.168.1.1') telnet.expect('login:')
>>872 >>> help(Telnet.expect)
Help on method expect in module telnetlib:
expect(self, list, timeout=None) unbound telnetlib.Telnet method
Read until one from a list of a regular expressions matches.
正規表現の*リスト*じゃないから。
874 :
872 :2008/08/03(日) 19:50:21
>>873 正規表現のリストでやってみたら動いたよ。教えてくれてありがとう。
でもこれ、メソッドexpectの戻り値ってマッチオブジェクトなのね。
なんか期待してたのとちょっと違うよtelnetlib
>>874 helpの続きを見るとmatchオブジェクト以外にも
何番目の正規表現にひっかかったかてのと
マッチするまでに受信した内容も一緒にタプルで返るみたい。
普通にありがちな仕様だと思うんだけどやっぱちがう?
>>868 >本家ドキュメントをよべば、
「おーい、本家ドキュメントー!」
こんな感じか?
英語より日本語やれよ。
877 :
872 :2008/08/03(日) 22:46:46
>>875 tcl拡張したexpectだと引数にただ単に正規表現を受け取るんだけど、
pythonのexpectはちょっと冗長っつーか多機能すぎない?
ただ正規表現にマッチするまで待って、単純に文字列だけ返してくれた方がプログラムがシンプルに書けると思うんだけど
>>877 いや、条件分岐がありえるケースもあるでしょ
レスポンスが200ならほがほが、400ならふがふが、みたいな
N個のリストでマッチングをかけて、マッチした結果の文字列「だけ」を
返されたら、分岐のコードで「また」文字列比較をやることになる
まあ、ぶっちゃけ
{ pattern1: lambda1, pattern2: lambda2,... }
風のdictでも食わせたほうが綺麗に書けそうだが、そういうラッパーは
べつに自分で簡単に書けるでしょ?
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
961 :
831 :2008/08/04(月) 15:52:56
>>847 発言の意味を今理解しました。ありがとう。
962 :
デフォルトの名無しさん :2008/08/04(月) 22:20:08
おまえらちゃんとあらし報告しとけよ。
おっつ〜
一番上にあげた馬鹿は誰だよ また標的にされとるがな
967 :
デフォルトの名無しさん :2008/08/05(火) 13:19:23
関数内での変数の取り扱いについて教えて下さい。 関数内で変数を参照するときは (1)ローカル変数として定義されている場合は、それを参照する (2)1が見つからない場合は、グローバル変数を参照する という風に動くと習いました。 つまり、 >>> a = 1 >>> b = 2 >>> >>> def test(): print "a=",a b = 3 print "b=",b >>> test() a= 1 b= 3 ここまでは理解できたのですが、 >>> def test(): a = a+1 print "a=",a b = 3 print "b=",b >>> test() →これだと、エラーが出てしまいます。 関数内ではグローバル変数の中身を書き換えることはできないのでしょうか?
エラーメッセージを何故貼らな(ry それはともかく def test(): global a,b a = a + 1 (略) とa、bがグローバルスコープであるよというのを明示する必要がある
もはや質問スレの基本パタンだな。 Q. 「質問です。〜〜〜〜。これだと、エラーが出てしまいます。」 A. 「エラーメッセージを何故貼らな(ry 」
これもまた一つのデザパタか……
972 :
968 :2008/08/06(水) 00:55:10
>>969 ありがとうございます。globalとして定義すれば良かったんですね。
エラーメッセージを省略してしまい失礼しましたm(_ _)m
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 >>> list1=list("ABCDE") >>> list1 ['A', 'B', 'C', 'D', 'E'] >>> list2=list(list1) >>> list2 ['A', 'B', 'C', 'D', 'E'] >>> list1 is list2 False list関数を使う以外に、リストをコピーする方法はありますか? 単純にlist2=list1と書くと、同じオブジェクトを参照するみたいなので…。 >>> list=list('12345') >>> list ['1', '2', '3', '4', '5'] >>> list3=list(list) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'list' object is not callable >>> del list >>> list3=list(list2) >>> list3 ['A', 'B', 'C', 'D', 'E'] >>> listという変数名のリストを作成すると、list関数がうまく働かないみたいですが、 変数名って組み込み関数に使われてる単語も避けたほうがいいんでしょうか?
>>973 list2=list1[:]
これでもリストのコピーができる。
組み込み関数と同じ名前の変数は、当然避けるべき。
copy.copy()やcopy.deepcopy()というのもある
そうだね
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■
だめかな?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。