トップページ⇒tech
1001コメント270KB

Pythonのお勉強 Part30

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/11/16(日) 19:09:55
Pythonオフィシャルサイト
http://www.python.org/
日本Pythonユーザ会
http://www.python.jp/Zope/
まとめWiki
http://python.rdy.jp/
関連スレ
http://find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1223543412/
0153デフォルトの名無しさん2008/11/23(日) 13:51:04
PythonインタプリタをPythonで作っているのですが、相談したい事があります。

現在入力中の文がコマンドとして
1 途中なのか、2 エラーなのか、3 コンプリートしたものか
判断する方法はないでしょうか?

1の例
for i in range(1, 3): ←これだけ入力されたら続きがある

2の例
j = foo() ←fooという関数はない

3の例
1+2 ←文として評価する事ができる

アドバイス頂けたら幸いですm(__)m
0154デフォルトの名無しさん2008/11/23(日) 14:10:53
Lib/code.py
01551532008/11/23(日) 15:08:54
>>154
ありがとうございます。
見てみまする。
0156デフォルトの名無しさん2008/11/23(日) 15:13:15
>>153
pypy
01571532008/11/23(日) 16:20:16
>>156

なんですか、そのいやらしい名前は。
ありがとうございます。
0158デフォルトの名無しさん2008/11/23(日) 19:59:53
>>152
scimでもscim-bridgeでもuimでも問題ないだろ。
つーかLANG=ja_JP.eucJPってどんな化石なディストリ使ってるんだよ。
0159デフォルトの名無しさん2008/11/24(月) 16:16:54
>>156
マジで有るのか。
「パイパイいれていじってみたんだけど良いなコレ。」
「パイパイちょっと触ってみたんだけど、まだ発展途上じゃね?」
みたいな会話が繰り広げられているのか。
0160デフォルトの名無しさん2008/11/24(月) 19:50:05
こんなプログラムが必要になった。
temp=lst[i]; lst[i]=-1; i=temp #(1)

pythonではこんな見苦しい一時変数は必要ないもんね。と思い次のように書いた。
i, lst[i] = lst[i], -1 #(2)

賢明な諸兄はお気づきかと思うが、このプログラムは上手くいかない。
半日悩んだ結果、次のように書けばよいことが判った。
lst[i], i = -1, lst[i] #(3)

で、教えて欲しいんだけど、(2)が駄目で、(3)なら良いというこの動作は
うちの環境ではたまたま動くだけ? それとも公式に規定された動作ですか?

### 結局、プログラムは(1)の書き方で完成しました。
0161デフォルトの名無しさん2008/11/24(月) 20:15:08
これのWARNINGのところじゃない?
http://www.python.org/doc/2.5.2/ref/assignment.html
http://www.python.jp/doc/release/ref/assignment.html
0162デフォルトの名無しさん2008/11/24(月) 20:27:12
>>160
http://www.python.org/doc/2.5.2/ref/assignment.html
> If the target is a target list enclosed in parentheses or in square brackets:
> The object must be a sequence with the same number of items as there are targets
> in the target list, and its items are assigned, from left to right, to the
> corresponding targets.

左から右の順で代入するとあるので公式に規定された動作といえそう。
0163デフォルトの名無しさん2008/11/25(火) 03:29:32
Rubyだとruby会議みたいなイベントが全国であるけど、
Pythonにもそういうイベントってある?
0164デフォルトの名無しさん2008/11/25(火) 08:34:11
>>163
PyConじゃね?
0165デフォルトの名無しさん2008/11/25(火) 08:56:23
ttp://pyspa.org
0166デフォルトの名無しさん2008/11/25(火) 09:37:52
ないわ〜
0167デフォルトの名無しさん2008/11/25(火) 11:56:27
>>163
残念ですが、なくなったようです。
0168デフォルトの名無しさん2008/11/25(火) 12:52:26
だからRubyやれって!
0169デフォルトの名無しさん2008/11/25(火) 17:18:14
>>167
PyConって無くなったの?
知らなかった...orz....Pythonもうダメだ....。
0170デフォルトの名無しさん2008/11/25(火) 17:19:02
そうだねRubyもうダメだね
0171デフォルトの名無しさん2008/11/25(火) 17:34:31

>>167=>>169
おい、デマばっか流してんじゃねーよ。

PyCon は今年もあったし、来年もちゃんとある。
http://www.python.org/community/pycon/

せいぜいお前は Python の人気を妬む Ruby使いってとこだろうが、
大人気ないぞ。
0172デフォルトの名無しさん2008/11/25(火) 17:36:51
Ruby使いがPythonの「人気」に嫉妬することはなかろ
0173デフォルトの名無しさん2008/11/25(火) 17:46:13
>>167
ダンジョー乙
0174デフォルトの名無しさん2008/11/25(火) 18:01:24
だからRubyやれって!
日本でpython使うメリットなんてないんだよ。
0175デフォルトの名無しさん2008/11/25(火) 18:27:39
rubyにnumpyに相当するものあるの?
0176デフォルトの名無しさん2008/11/25(火) 18:45:13
Ruby 使いは痛々しいな。。。
なんだ >>174 は、
恥というものを知らんのか。
0177デフォルトの名無しさん2008/11/25(火) 18:56:11
>>173
いいえ、ターボギアスR2です。
0178デフォルトの名無しさん2008/11/25(火) 19:01:46
またruby厨が荒らしてるよ
0179デフォルトの名無しさん2008/11/25(火) 19:19:21
>>174
惨めなやつ!
01801602008/11/25(火) 20:06:14
>>161,162
なるほど、ちゃんと公式ドキュメントに書かれてたんですね。
「are not safe 安全でない」の解釈が微妙ですが、
規定された動作と考えてよさそうですね。

勉強になりました。ありがとうございました。
0181デフォルトの名無しさん2008/11/25(火) 20:20:07
LinuxのX端末上で文字の色を反転させて出力する方法はありますか?

例えば、

txt="abcdefg"
5番目と7番目(インデックス4と6)の文字の表示色を反転
print txt

みたいなことを望んでいます。
01821812008/11/25(火) 20:24:00
追記
文字と文字の背景の色を反転という意味です。
0183デフォルトの名無しさん2008/11/25(火) 20:58:49
もちろんできます。
0184sage2008/11/25(火) 21:00:56
エスケープシーケンス使えば。
http://www.siafoo.net/snippet/88

もっと凝りたいなら、cursesで。
0185デフォルトの名無しさん2008/11/25(火) 21:03:19
X端末なつかしいな。
01861812008/11/25(火) 22:33:33
>>184
ありがとうございます。
エスケープシーケンスを使うことにしました。
0187デフォルトの名無しさん2008/11/26(水) 14:44:10
>「are not safe 安全でない」の解釈が微妙ですが、

「全く安全という訳ではない」

0188デフォルトの名無しさん2008/11/26(水) 19:02:41
turbogearsスレにも書いたのですが、過疎ってるようなのでこちらで質問させてください。

turbogearsを構成している各eggファイルをダウンロードして、turbogearsのインストールを行いたいのですが、
公式サイトのファイルリストのどのファイルをダウンロードすればいいのでしょうか。
ちなみにWindows環境です。
0189デフォルトの名無しさん2008/11/26(水) 19:15:30
ttp://nagosui.org/Nagosui/Misc/Turbogears/turbogears-install-on-windows
0190デフォルトの名無しさん2008/11/26(水) 19:20:15
http://docs.turbogears.org/1.0/Wiki20/Page1?action=show&redirect=1.0%2FGettingStarted
http://docs.turbogears.org/1.0/Wiki20/Page1
0191デフォルトの名無しさん2008/11/26(水) 19:27:41
>>189
ご紹介いただいたページは既に拝見しました。
プロクシ環境なのでこの方法が使えません。

そこで、上記サイトのオフラインインストールマニュアルを見たのですが、
"基本的に最新バージョンの各パッケージのeggファイルを落とせばいいけど、lightbox等の一部のパッケージは除く"みたいな表現があったので、悩んでます。
これらのファイルはダウンロードしなくていいって事なんですかね?
0192デフォルトの名無しさん2008/11/26(水) 19:35:23
いいんじゃない?
0193デフォルトの名無しさん2008/11/26(水) 19:38:57
>>192
そうですか。では、インストールしてみます。
ありがとうございました。
0194デフォルトの名無しさん2008/11/27(木) 00:00:43
質問です。
Pythonで数独を解くプログラムを書きました。
色々いじってPenIII933MHzでPsycoなしで70秒、Psycoありで
25秒くらいで回答できるようになりました。
さらに高速化しようとboost.pythonを利用してC++に
移植したのですが返って遅くなってしまいました。
何が原因でしょうか?必要であればソース出します。
0195デフォルトの名無しさん2008/11/27(木) 00:11:03
>>194
よくわかんねえな。つうかそんなの組み方次第じゃないの。

数独解くプログラムって
ttp://codepad.org/T5tQp3vL
こんなもんでいいの?
C/CLLなら瞬殺だと思うけど。
0196デフォルトの名無しさん2008/11/27(木) 00:11:58
>>194
>PenIII933MHz

ワーキングプアかよ(wwWwwwWWWwwwwWwwWwwww
0197デフォルトの名無しさん2008/11/27(木) 00:26:59
>>195
回答ありがとうございました。ほとんど同じコードをPythonで書いていました。
あまりC++が詳しくないので、おっしゃられるとおりC++での組み方が
悪いだけなのだと思います。勉強しなおしてきます。
01981952008/11/27(木) 00:44:36
CLLって何だw
C++のtypoね

>>197
ロジックが同じようなもんなら、とりあえず以下の点が疑わしいかなあ

・最適化していない(コンパイルオプションの問題)
・最近のVC++を使っているなら、vectorとかを使うと、[]演算子でもデフォルトで
 範囲チェックがなされている可能性が高い(俺も細かいことは知らん)
0199デフォルトの名無しさん2008/11/27(木) 00:57:35
>>198
Pythonでは
ttp://codepad.org/3jRpg91x
という感じでした。

C++はおっしゃられるとおりvectorを多用していました。
boost.pythonがどうこういう以前の話だったようです。
勉強になりました。
0200デフォルトの名無しさん2008/11/27(木) 01:07:40
おお、すごい2chにpostで投稿できた。
0201デフォルトの名無しさん2008/11/27(木) 01:07:55
>>199
vector<>は別に悪者じゃなくて、C++ならそれが普通なんだけどね
VC++は最近セキュリティがらみで色々やってるみたいだから

SECURE_SCLだったかな?そのへんのキーワードでぐぐってみるといい
0202デフォルトの名無しさん2008/11/27(木) 01:10:31
>>198
スレ違いだが、vectorの仕様では、
oprator[]は範囲チェックなし、
範囲チェックしたければメンバー関数at(i)を使うことになっている。
0203デフォルトの名無しさん2008/11/27(木) 01:12:55
>>202
仕様ではそうなっていてもVC8以降は_SECURE_SCLが効いてると
operator[]の範囲チェックをするようになっていた気がする

だから、[]演算子「でも」と書いたんだけどね
0204デフォルトの名無しさん2008/11/27(木) 05:32:11
vectorは要素コピーしまくり
0205デフォルトの名無しさん2008/11/27(木) 05:34:04
Dequeに置き換えるだけで速くなる
0206デフォルトの名無しさん2008/11/27(木) 06:17:44
>>196
PIII800MHz
192MB
ですがなにか?
0207デフォルトの名無しさん2008/11/27(木) 08:07:04
PenII266を現役で使用してるんだが・・・
0208デフォルトの名無しさん2008/11/27(木) 08:23:41

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
res1 = opener.open(req)
if '<!-- 2ch_X:cookie -->' in res1.read():
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
res2 = opener.open(req)
0209デフォルトの名無しさん2008/11/27(木) 08:27:50
ぱい
0210デフォルトの名無しさん2008/11/27(木) 10:41:28
質問させてください。
pythonで一番メジャーなパッケージマネージャは何ですか?

調べてもあんまり出てこないんですよね・・。
0211デフォルトの名無しさん2008/11/27(木) 10:53:26
>>210
easy_installじゃないの?
0212デフォルトの名無しさん2008/11/27(木) 12:26:52
うちのファイルサーバーはpenIII 800だ
0213デフォルトの名無しさん2008/11/27(木) 13:34:53
>>194
つか、遅すぎなんだけど。なにそれ。やる気あんの?

boost とか使う前にアルゴリズムを改良しろよ。
まずは CSP 学べ。
0214デフォルトの名無しさん2008/11/27(木) 13:43:26
産業廃棄物をサーバとして使うなよ(wwWwwWWWwwwwwWwWwwwwWwwww
0215デフォルトの名無しさん2008/11/27(木) 14:18:44
総当りでもしてるのかな?
0216デフォルトの名無しさん2008/11/27(木) 14:26:15
>>215
総当りに近いんじゃね?
25秒とか、古い Pen II でもありえんよ。
CPU が P3 933Mhz もあるんだったら、半秒以上かかる sudoku solver 書いた時点で負け。
0217デフォルトの名無しさん2008/11/27(木) 14:31:22
コードは上にあがってるじゃん
0218デフォルトの名無しさん2008/11/27(木) 14:56:20
>>199のコードに
if __name__ == '__main__':
  import sys
  main(sys.argv[1])

を付け加えて、
530070000
600195000
098000060
800060003
400803001
700020006
060000280
000419005
000080079
とかいう入力を与えてみたけど、一瞬だったけど?
time の結果が0.25秒程度
別にPsycoとか使ってねー

PentiumM 1.7GHz
Windows XP SP3
Python 2.5.2
0219デフォルトの名無しさん2008/11/27(木) 15:01:05
>>194
それって25*25でってこと?
0220デフォルトの名無しさん2008/11/27(木) 15:14:04
っと、コードが晒されているのか。
(少なくとも)3種の枝刈り手法があったと思ったが、どれもやってないの?
0221デフォルトの名無しさん2008/11/27(木) 15:16:32
81マスに9通りの数を置くだけなんだから、総当りだってゴミみたいな計算量だろ
上でやってるのはごくシンプルなバックトラックだよ

数十秒とか絶対ありえん
0222デフォルトの名無しさん2008/11/27(木) 15:17:26
いやさすがに総当りはないか、訂正するw
0223221=2222008/11/27(木) 15:18:47
「総当りがゴミ」を訂正するという意味、重ね重ねすまん
02241942008/11/27(木) 16:01:18
>215,216,220,221
221さんが指摘されているとおりシンプルなバックトラックです。
他のアルゴリズムも勉強してみます。

>213,218,221
218さんが検証してくださっているとおり簡単な問題は
1秒未満で回答できます。紛らわしくてすいません。
ttp://www.sudoku.name/index-jp.php
の問題を使用しているのですが上級++で

004000080
003007000
600800009
030002500
070080090
005000030
200001007
000400100
050000600

というような問題の回答が遅いです。
220さんがおっしゃっているようにアルゴリズムの工夫で
何とかしてみます。ありがとうございました。
0225デフォルトの名無しさん2008/11/27(木) 16:32:27
枝刈りしたら、この上級++の問題、数十倍速く解けるみたいだよ。
がんばって。
0226デフォルトの名無しさん2008/11/27(木) 17:16:13
PyQtを使ったプログラムはソースを公開しないといけないの?
0227デフォルトの名無しさん2008/11/27(木) 18:32:35
ユーザーはともかく、クリエータはGTK(GNOME)の方が多いだろう
GTKがLGPLなのに対して、QtはGPLか最近のtool kit としては高額の
有償ライセンスかのいずれか
利用できる人間は、どうしても限られてくる
0228デフォルトの名無しさん2008/11/27(木) 21:04:28
turbogearsの2.6対応まだなのー?
0229デフォルトの名無しさん2008/11/28(金) 02:59:53
おれも最近sudoku作ったよ!ナカーマ
どっかのホームページで数独の問題集があって、難易度ごとに別れているんだけど
最強難易度の一番最後の問題(たぶん94番目)を解くのに3秒くらいだったよん。

==環境==
WinXP
ActivePython 2.5.2.2くらい
Core2Duo1.7GHz
0230 2008/11/28(金) 10:47:18
foo = "hoge"
bar = "fuga"
TITLE = {"title":foo - bar}

print TITLE["title"]
これで hoge - fuga と出力したいんだけど
"foo - bar"で引用符で囲むと foo - barになる。
囲まないとエラーになる。
どうすれば hoge - fuga に出来ますか?
0231デフォルトの名無しさん2008/11/28(金) 11:00:31
なんかえらい基本的なことが抜けてる気がするぞ
ちゃんと勉強汁

foo + " - " + bar
"%s - %s" % (foo, bar)
0232デフォルトの名無しさん2008/11/28(金) 11:15:59
>>224
>>195の、単純なバックトラックのCのコードですら
その問題は(俺の環境では)0.35秒ぐらいで解けるようだよ

アルゴリズム改善がベストだが、C++で書いても
そんなに遅いのは、別の理由もありそうだな
0233デフォルトの名無しさん2008/11/28(金) 11:21:11
\x00とすると16進数で8ビット文字列を作れますよね。
16進数を作ってから、\xとつなげるにはどうすればいいですか?
"\x%x"のように文字列フォーマットを使おうとするとエラーになってしまいます。
0234デフォルトの名無しさん2008/11/28(金) 11:22:44
"\\x%x"で定義してから、置換すればいいんじゃね?
0235デフォルトの名無しさん2008/11/28(金) 11:25:31
できないじゃないですか。
0236デフォルトの名無しさん2008/11/28(金) 11:26:19
素直にchr()使いなさい。
0237デフォルトの名無しさん2008/11/28(金) 11:30:51
printf("%c", 0x25);
こんな感じ
0238デフォルトの名無しさん2008/11/28(金) 12:18:40
>>237
chr(0x25)
0239 2008/11/28(金) 12:36:35
>>231
おぉ! + を使って繋げるのか
TITLE = {"title":foo + " - " + bar}
print TITLE["title"]
hoge - fuga
と、無事にできました

でも、これが分かりません orz
> "%s - %s" % (foo, bar)

プログラム経験は昨日からです...
www.python.jpを見ながら勉強してます
02402252008/11/28(金) 12:55:52
>>229
試してみる。どんな問題?
0241デフォルトの名無しさん2008/11/28(金) 13:51:06
Pythonのオススメの統合開発環境は何ですか?(日本語化可能だと有難いです

PyScripterはバグが多く、使いにくかったです…
0242 2008/11/28(金) 15:10:40
>>241
テキストエディタでいいじゃん
0243デフォルトの名無しさん2008/11/28(金) 15:15:29
>>241
Vimを +python でコンパイルしたもの
0244デフォルトの名無しさん2008/11/28(金) 15:26:20
>>240
ttp://www.sudoku9981.com/jp/print/extreme.asp
の94番目のやつ
02452252008/11/28(金) 15:46:29
>>224
ありがと。
0.98秒くらいだった。ハードのスペック違うけど。

Vista
CPython 2.6
PentiumM 2.1GHz
02462252008/11/28(金) 16:31:33
ごめん、訂正。
3回くらい実行したら、最短で0.2秒くらいだった。
0247 2008/11/28(金) 16:47:05
チュートリアルでさえ難しいです
誰か僕に愛の手を
0248デフォルトの名無しさん2008/11/28(金) 16:51:58
どこがわからないか*具体的に*いってみ
0249デフォルトの名無しさん2008/11/28(金) 16:52:45
チュートリアル難しいよねえ。
まあ地道にコード打ってがんばろう。
てなことで今数独問題生成・解答アルゴリズムを考えてる。
0250デフォルトの名無しさん2008/11/28(金) 17:17:26
BeginnersGuide/NonProgrammers - PythonInfo Wiki
http://wiki.python.org/moin/BeginnersGuide/NonProgrammers
0251 2008/11/28(金) 17:43:16
>>248
>"python file" と "python <file" の違いに注意してください。
>後者の場合、プログラム内でinput() や raw_input() が呼び
>出され、ユーザからの入力が必要な場合、入力はファイル から
>取り込まれます。この場合、パーザはプログラムの実行を開始
>される前にファイルを終端まで読み込んでおくので、プログラム
>はすぐに入力の終わりまで到達してしまいます。前者の場合
>(大抵はこちらの方が望ましい動作です)、入力には Python
>インタプリタの標準入力に接続された何らかのファイルまたは
>デバイスが充てられます。

まず最初に意味が理解できなかった所です。
0252デフォルトの名無しさん2008/11/28(金) 18:01:08
perlの場合は両方ともfileを実行するが
pythonは違うから注意しろってことだろ
■ このスレッドは過去ログ倉庫に格納されています