Pythonのお勉強 Part15
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/12(日) 22:51:44http://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/
Python 2.5
http://www.python.org/download/releases/2.5/
IronPython
http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
まとめ wiki
http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/
Pythonの入門書「みんなの Python」
http://www.amazon.co.jp/gp/product/479733665X/
Pythonのお勉強 Part14
http://pc8.2ch.net/test/read.cgi/tech/1161272096/
0412デフォルトの名無しさん
2006/11/26(日) 03:58:31dictを継承したクラスを作って使うことはできる。
分かりやすく書くなら、
class MyDict(dict):
def __getitem__(self, k):
return self.get(k)
もしくは、↓でも同様。
class MyDict2(dict):
__getitem__ = dict.get
dictのデフォルトの動作そのものを変えられるわけではないので、
ご期待には添えないかもしれませんが、
使うときは、こんな感じになるでしょう。
>>> MyDict({'x':2})
{'x': 2}
>>> x = MyDict(a=1, b=2)
>>> x
{'a': 1, 'b': 2}
>>> print x["a"], x["b"], x["c"]
1 2 None
こんなんでどうでしょうか。
0413デフォルトの名無しさん
2006/11/26(日) 07:10:59のでしょうか?
https://www.livly.com/login.php
http://d.hatena.ne.jp/kenkitii/20060216/p1 を見ながら色々試して
みたのですがうまくいきません。ご教示お願いできないでしょうか。
よろしくお願いします。
0414デフォルトの名無しさん
2006/11/26(日) 09:45:500415デフォルトの名無しさん
2006/11/26(日) 09:50:04data = urlencode((("nname","名前"),("password","パスワード"),("login","true")))
print urlopen("https://www.livly.com/login.php",data).read()
*名前を全角で登録してる場合文字コード注意
0416デフォルトの名無しさん
2006/11/26(日) 10:06:41この手のビジネスとしては極端に成功した例らしいと言う記事をどこかで読んだ・・・
0417デフォルトの名無しさん
2006/11/26(日) 17:26:58ttp://okwave.jp/qa2201618.html
このページの通り設定したのですがプロントが
C:\DOCUME~1\USER\MYDOCU~1>
見たいな感じでおかしなままです。
対話形式(>>>ってでるやつ)にもなりません
pythonのフルパスから実行すると普通に実行できるのですが
直せるものなら直したいです ><
0418デフォルトの名無しさん
2006/11/26(日) 17:40:10edlinを起動しても、そうなるな。
0419デフォルトの名無しさん
2006/11/26(日) 18:52:42command.com じゃなくて cmd.exe 使えば?
98とかそれ以前はシラネ
0421デフォルトの名無しさん
2006/11/26(日) 20:10:400422417
2006/11/26(日) 21:12:07しかもexeなのに24バイトでブツブツ.......
お騒がせしました(^ ^;)ゞ
0423413
2006/11/26(日) 23:05:33ありがとうございました。ただ、教えて頂いた方法でPythonからログインする
事はできたのですが、根本的な問題は解決できませんでした(泣 もしよろし
ければなのですが、ソースをアップしたら、見ていただけますでしょうか?
48KB・2000行弱なんですけど・・・どうかお願いしますです。
0424デフォルトの名無しさん
2006/11/27(月) 00:55:300425413
2006/11/27(月) 02:07:03を開くと販売しているアイテム・島が表示されたのですが、先日からログイン
していないと「ログインしてください」と表示されるようになってしまい、
パースしてアイテム・島を拾う事ができなくなってしまいました。更に、
ブラウザからlivlyにログインしても、Pythonからだと「ログインしてください」
になってしまいます。
そこで、Pythonからログインしておけば回避できるかな?と思い、こちらで
教えて頂きログインしてみたのですが結果は同じでした。cookieの管理が
云々ってサイトを見てPython2.3から2.5に変更しcookielibを操作しようと
思ったのですが、やり方がイマイチわからなくて・・・
0426デフォルトの名無しさん
2006/11/27(月) 02:26:05アカウント持ってないとテストできないようなプログラムをアップされても見てくれる
奇特な人は少ないと思う。
0427413
2006/11/27(月) 02:50:142週間程度cookieの管理と格闘していながら理解できないヘタレです。すみません。
一応、テスト用のアカウントは作成してあります。テストできる環境の準備は
整えてありますので、見て頂ける方おりますでしょうかm(_ _;)m
0428デフォルトの名無しさん
2006/11/27(月) 04:03:41氏ねばいいと思うよ
0429デフォルトの名無しさん
2006/11/27(月) 06:57:590430デフォルトの名無しさん
2006/11/27(月) 07:39:45import urllib, urllib2, cookielib
j = cookielib.CookieJar()
opener = urllib2.build_opener(HTTPCookieProcessor(j))
opener.open("https://www.livly.com/login.php",data=urllib.urlencode((("nname","名前"),("password","パスワード"),("login","true"))))
#ここでjにcookieが入る。print jで確認可能
req = urllib2.Request("http://www.livly.com/myshop?rid=3dKu")
j.add_cookie_header(req)
#これでreqのヘッダーに必要なクッキーが書き込まれる。req.header_items()で確認可能
print opener.open(req).read()
#毎回本家からクッキーを取ってくるのがアホくさいと思うなら、FileCookieJarという選択肢も可能
0431413
2006/11/27(月) 08:34:11多少書き換えてしまいましたけどできました。ありがとうございました。
これでこのまま寝ずに仕事してもへこたれません。感謝ですm(_ _)m
0432デフォルトの名無しさん
2006/11/27(月) 11:13:43どうしてここに引け目を感じているような書き方なのか理解出来ない。
0433デフォルトの名無しさん
2006/11/27(月) 11:49:31多少書き換えたものを晒しておけば、誰かの肥やしになるかもしれん。
0434デフォルトの名無しさん
2006/11/27(月) 14:10:03数値A":" リストの内容 "文字列="数値B "文字列="数値C
っていう風に出力したいんだけど、どうすればいいの?
0435デフォルトの名無しさん
2006/11/27(月) 14:36:260436434
2006/11/27(月) 14:39:40print str(strA) + ": " + str(array[0:4]) + " aaa=" + str(strB) + "ccc=" + str(strC)
としました。※len(array) = 4
0437434
2006/11/27(月) 14:41:48print str(intA) + ": " + str(array[0:4]) + " aaa=" + str(intB) + "ccc=" + str(intC)
0438デフォルトの名無しさん
2006/11/27(月) 14:42:09%s数値やリストも勝手に文字列表記に変換してくれます。
http://www.python.jp/doc/release/lib/typesseq-strings.html
0441デフォルトの名無しさん
2006/11/27(月) 15:03:050442デフォルトの名無しさん
2006/11/27(月) 15:06:59後ろの変数リストを指で数えたりすることない?
0443デフォルトの名無しさん
2006/11/27(月) 15:19:41"%(変数名)s" % locals() はどうだろう
0444デフォルトの名無しさん
2006/11/27(月) 15:21:07安すぎ。もらわない方がマシ。
>>442
そういうときは辞書を渡す。
http://www.python.jp/doc/release/lib/typesseq-strings.html
のまんなからへん。
>>> print '%(language)s has %(#)03d quote types.' % {'language': "Python", "#": 2}
Python has 002 quote types.
0445デフォルトの名無しさん
2006/11/27(月) 15:43:24つ●○○
0446デフォルトの名無しさん
2006/11/27(月) 17:04:050447デフォルトの名無しさん
2006/11/27(月) 17:30:26ドカタ価格。
0448413
2006/11/27(月) 20:10:49-中略-
urllib._urlopener = ShopURLopener()
j = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(j))
data = urllib.urlencode((("nname","名前"),("password","パス"),("login","true")))
opener.open("https://www.livly.com/login.php",data)
#リクエストurlは他defで指定
req = urllib2.Request(url)
try:
data = opener.open(req)
except:
print "失敗"
return 0
教えて頂いたソースが最初動かなくて、こんな感じで動きました。その後、
脱字に気が付いて教えて頂いたソースでもちゃんと動きました。書き換える
必要は全くなかったです。ありがとうございました。
0449デフォルトの名無しさん
2006/11/28(火) 01:26:07a=u'ちんちん'
b=u'おっき'
print a+b*2
0450デフォルトの名無しさん
2006/11/28(火) 02:19:16結果は!
0451デフォルトの名無しさん
2006/11/28(火) 02:20:500452デフォルトの名無しさん
2006/11/28(火) 02:39:390453デフォルトの名無しさん
2006/11/28(火) 02:49:270454デフォルトの名無しさん
2006/11/28(火) 04:22:120455デフォルトの名無しさん
2006/11/28(火) 04:34:52○○○さん,遅くまでご苦労なんだぜ?
0456デフォルトの名無しさん
2006/11/28(火) 13:15:42最大公約数
def gcd(a,b):
if b == 0:
return a
gcd(b,a%b)
print gcd(21,15)
---結果---
None
---------
何故?
0457デフォルトの名無しさん
2006/11/28(火) 13:19:57+ return gcd(b,a%b)
0458デフォルトの名無しさん
2006/11/28(火) 13:20:390459デフォルトの名無しさん
2006/11/28(火) 13:25:27ありがとう。なるのはなった。
でも理由がピンとこない。
0460デフォルトの名無しさん
2006/11/28(火) 13:26:340461デフォルトの名無しさん
2006/11/28(火) 13:28:170462デフォルトの名無しさん
2006/11/28(火) 13:30:100463デフォルトの名無しさん
2006/11/28(火) 13:57:55>>461
値を返すのはb == 0のときだけでいいから、gcd(b,a%b)の部分は関数呼ぶだけでいいと思ったので。
>>462
たぶんそう。rubyのスクリプト例見ながら練習してるから。
ソースはなるべく見ないようにしてるんだけど、流れが分からないときだけ見るようにしてて、
それでごっちゃになってるんだと思う。
0464デフォルトの名無しさん
2006/11/28(火) 14:14:56Perlもだっけ?<最後に評価した値を勝手にreturn
0465デフォルトの名無しさん
2006/11/28(火) 15:00:49せっかくだから非再帰版も作ってみれ。簡単だから。
0466407
2006/11/28(火) 20:54:33おくれましたが、どうもありがとうございます。
サブクラスで対応することにしました。
cgi.FieldStorageからデータをdictにコピーしてHTMLテンプレートで使っているんですが、
params.get('key')よりはparams['key']のほうが喜ばれるので。デザイナーに。
PHPもJavaもRubyもエラーにならなかったので、Pythonでエラーがでるのには驚きました。
0467デフォルトの名無しさん
2006/11/28(火) 20:57:280468デフォルトの名無しさん
2006/11/28(火) 21:02:180469デフォルトの名無しさん
2006/11/28(火) 21:31:38俺の感覚からすると信じがたいことだが、
プログラムや入力データを書き間違えていてもエラーにはならない方がよい、と考える人が結構いるみたい。
以前、某システムの互換品を作っていて、その元となるシステムが
ありえないぐらい文法エラーや実行時エラーに寛容なのに驚いた。
当然ながらそのシステム用に流通しているプログラムや入力データの中にも
大量のエラーが見つかった。システム側にエラーを指摘する機能が乏しいので
エラー入りのデータがそれと気付かれることなく出回るわけだ。
似たような事例はたぶんたくさんあると思う。ウェブブラウザはその典型ではないだろうか。
タグが閉じてなくても表示してくれる方がうれしいこともあるだろうし(俺はイヤだが)
.cssファイルや.jsファイルが見つからなくてもよきに計らってくれる方がうれしいこともあるだろう(俺はイヤだが)。
0470デフォルトの名無しさん
2006/11/28(火) 21:31:49option型のNONEを返すんだが、俺はSMLのほうが好きだなあ。
動的型付けの言語では例外出たほうがいいのかもしれない。
でもRubyでHash#fetchはあんまり使わない気がする。
0471デフォルトの名無しさん
2006/11/28(火) 21:45:58でも、>>466のケースは文章を読む限りではエラーになったほうが良さそうだよな。
0472デフォルトの名無しさん
2006/11/28(火) 22:08:24http://www.radiumsoftware.com/0608.html#060809
0473デフォルトの名無しさん
2006/11/28(火) 22:40:38業務システムだって、間違ったデータでも正しく処理できるならエラーを出す必要はない。
問題は、間違ったデータで正しい処理をする超能力がどれだけあるかだが。
0474デフォルトの名無しさん
2006/11/28(火) 22:44:050475デフォルトの名無しさん
2006/11/28(火) 22:57:25print u'てすと'
てすと
となるのですが、ipythonだと
print u'てすと'
文字化け
となっちゃいます。~/.ipython以下に設定するとことかあるのでしょうか?
0476デフォルトの名無しさん
2006/11/29(水) 00:51:17print unicode('ほげ', 'mbcs')
とやったときはどうなる?
0477デフォルトの名無しさん
2006/11/29(水) 00:59:38"".join(list)
じゃ無理だから、似たような方法ない?
0478デフォルトの名無しさん
2006/11/29(水) 01:08:02x.append(1)
print x
>>> hoge()
[1, 1]
>>> hoge()
[1, 1, 1]
はめられたああああ!
初期化してくれねぇのかよ!
0479デフォルトの名無しさん
2006/11/29(水) 01:09:29横着しないで入門書読めば?
0480デフォルトの名無しさん
2006/11/29(水) 01:14:48reduce(lambda x, y:str(x)+str(y),[1,2,3])とか?
0481デフォルトの名無しさん
2006/11/29(水) 01:20:16いや、読み返して絶叫したんだよ。
正しくは「はまった俺はアホ」でした。すみません><
0482デフォルトの名無しさん
2006/11/29(水) 01:31:00thanx
0483デフォルトの名無しさん
2006/11/29(水) 01:46:17"".join(map(str,list))
0484デフォルトの名無しさん
2006/11/29(水) 02:00:19まともな入門書なら、なぜそのようなことが起こるのか、たいてい書いてあるな。
>>477
冗長に思えるかも知れないけど、リストコンプリヘンションは表記として分かりやすいと思う。
"".join([str(x) for x in [1,2,3]])
あと、listという変数名は使わない方がいい。
0485デフォルトの名無しさん
2006/11/29(水) 02:17:23>まともな入門書なら、なぜそのようなことが起こるのか、たいてい書いてあるな。
ハマりどころだからね.
初心者がハマりやすい罠を、丁寧に解説してあるのがよい入門書の条件だと思う.
0486デフォルトの名無しさん
2006/11/29(水) 03:20:32例えばdict.has_key()はアンダーバーが入っててhasattr()は入っていないんですが、ここらへんの命名方針があれば教えてください。
0487デフォルトの名無しさん
2006/11/29(水) 07:10:49> 関数名
>
> 関数名は lowercase 方式で命名。アンダースコアで単語を区切って可
> 読性を上げてもよい。mixedCase 方式は、既に広く使われているような文
> 脈(たとえば threading.py)で、互換性を保つ場合にのみ許される。
>
> メソッド名
>
> 関数の場合とほぼ同じ。lowercase 方式で命名し、可読性を上げる目的で、
> アンダースコアで単語を区切るのは構わない。
さじ加減次第?
0488475
2006/11/29(水) 07:32:24print u
てすと
となりますた。なんでだろう。
0489デフォルトの名無しさん
2006/11/29(水) 07:35:49http://www.python.jp/doc/release/tut/node6.html#SECTION006700000000000000000
>重要な警告: デフォルト値は 1 度だけしか評価されません。デフォルト値がリストや辞書のような変更可能なオブジェクトの時にはその影響がでます。例えば以下の関数は、後に続く関数呼び出しで関数に渡されている引数を累積します:
0490デフォルトの名無しさん
2006/11/29(水) 11:12:18Python 3.0で統一されるかも根。
0491Python初心者(復活)
2006/11/29(水) 12:14:41Python2.5ではgeneratorにおいてsend()によって「値を
渡す」ことが出来るようになったとある。
例えば:
lang = ['C','Java','Perl','Lisp',
'Python','Ruby']
def conLang (maximum):
i = 0
while i < maximum:
val = (yield lang[i])
if val is not None:
i = lang.index(val)
else:
i += 1
if __name__=='__main__':
x = conLang(6)
print x.next()
print x.next()
print x.send('C')
print x.next()
print x.send('Python')
print x.next()
以上のコードから、原則的にyield文の戻り値は代入
出来ないが、send()とは結局(yield ??)の
「代入」を可能にするということですか?
0492デフォルトの名無しさん
2006/11/29(水) 12:43:190493デフォルトの名無しさん
2006/11/29(水) 13:27:20そもそも、環境を書け。
http://lowlife.jp/nobonobo/zine/5/6.html
あたりは参考にならんのか?
0494デフォルトの名無しさん
2006/11/29(水) 13:41:43... while 1:
... val = (yield 10)
>>> __import__('dis').dis(mygen)
2 0 SETUP_LOOP 10 (to 13)
3 >> 3 LOAD_CONST 1 (10)
6 YIELD_VALUE
7 STORE_FAST 0 (val)
10 JUMP_ABSOLUTE 3
>> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
(参考: ttp://www.python.jp/doc/2.4/lib/bytecodes.html)
直前のnext()やsend()が値を返した直後はYIELD_VALUEまで実行されている。
send(arg)を呼ぶとargをTOSに積んでSTORE_FAST以降を実行。
だからval=argになって次のYIELD_VALUEまで進んで値を返す...ということじゃないかな。
next()を呼んだときはTOSにNoneを積むから、next()はsend(None)と等価だと思う。
>>> def mygen2():
... while 1:
... yield 10
2 0 SETUP_LOOP 8 (to 11)
3 >> 3 LOAD_CONST 1 (10)
6 YIELD_VALUE
7 POP_TOP
8 JUMP_ABSOLUTE 3
とにかく2.5ではnext()を呼ぶとTOSに何かを積むらしい。2.4ではYIELDの前後はこうだった。
3 >> 3 LOAD_CONST 2 (10)
6 YIELD_VALUE
7 JUMP_ABSOLUTE 3
0495デフォルトの名無しさん
2006/11/29(水) 13:47:12> yield文の戻り値は代入出来ないが
してるじゃん。
0496デフォルトの名無しさん
2006/11/29(水) 14:00:52コードだけみてもの言わないでね^^
0497デフォルトの名無しさん
2006/11/29(水) 14:01:51早漏ぎみですね・・・ストレスでせうか?
0498デフォルトの名無しさん
2006/11/29(水) 14:05:380499デフォルトの名無しさん
2006/11/29(水) 14:38:11Tkinterを使おうと思っているんですけど
Microsoft Visual Studioのダイアログエディタみたいに、
GUIでボタンなどの部品を配置するソフトはありませんか?
0500デフォルトの名無しさん
2006/11/29(水) 23:32:35Pythonにはあまりいなそうだね。
需要が無いからか、色分け設定用意されてないことも多いし…。
0501デフォルトの名無しさん
2006/11/30(木) 00:19:50色分け、普通に出来てるよ。
少数派なの?
みんなはなに使ってるのよ。
0502デフォルトの名無しさん
2006/11/30(木) 00:23:02普通は、RADが裏で勝手なコードを吐くのが
イヤだから、スクリプト言語を使ってると思うんだ。
そういうのがいいなら、僕なら netBeansかなにかに
しとくなぁ。
0503デフォルトの名無しさん
2006/11/30(木) 00:30:270504デフォルトの名無しさん
2006/11/30(木) 00:34:090505デフォルトの名無しさん
2006/11/30(木) 00:54:04日本語の扱いが他のアプリと統一できないのが嫌。
0506デフォルトの名無しさん
2006/11/30(木) 01:01:37設定が悪いだけでしょ
0507デフォルトの名無しさん
2006/11/30(木) 01:04:500508デフォルトの名無しさん
2006/11/30(木) 01:34:21自動補完って、普通の入力補完と違うの?
サクラエディタで、色分けと普通の入力補完してるけど。
最初に .py の拡張子付きで保存しないと、機能が使えない
のが多少難だけど、特段不満ないなぁ。
キーワードが少し足りないと思うけど、
設定ファイルに自分で書き足せば問題なし。
ああ、自動補完て、もしかして RAD のように
コード生成してくれる機能のこと?
あったら便利かもしれないけど、
コードの雛形をコピペするので十分かも。
0509507
2006/11/30(木) 02:32:58最近調べていないから断言出来ないけど、
サクラエディタの補完機能はおそらく、マクロ実行コマンドを叩いてから実行されるが、
crescent eve の場合はうざい位に候補を自動で出してくれる。※編集中ファイル内の単語から候補を抽出。
EmEditor、秀丸とかも試しんですが、いづれもマクロを使って実現しているだけで、
必ずトリガーが必要で好きじゃない。
サクラで↑のような自動補完機能があれば即乗り換えなんですが、
どうでしょうか?
というか今から調べてみます。
0510デフォルトの名無しさん
2006/11/30(木) 02:44:31>>499
663 名前: 662 [sage] 投稿日: 2006/07/29(土) 11:50:08
SpecTIXというのがあった.
ttp://www.python.net/crew/mike/src/Spectix/Spectix.html
0511デフォルトの名無しさん
2006/11/30(木) 02:51:59TextMateというエディタがおすすめ。
たしかTurboGearのスクリーンキャストで
使われてたので見た事ある人いるかも。
■ このスレッドは過去ログ倉庫に格納されています