[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 02/23 23:49 / Filesize : 112 KB / Number-of Response : 432
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part 27



1 名前:デフォルトの名無しさん [2008/06/13(金) 04:22:02 ]
Python オフィシャルサイト
ttp://www.python.org/
ttp://www.python.org/doc/
日本Pythonユーザ会
ttp://www.python.jp/Zope/
ttp://www.python.jp/doc/
FrontPage - Pythonのお勉強
ttp://python.rdy.jp/
前スレ
pc11.2ch.net/test/read.cgi/tech/1209480428/
◆関連スレッド
Microsoft IronPython 1.0
pc11.2ch.net/test/read.cgi/tech/1157686822/
Python の宿題ここで答えます Part 1
pc11.2ch.net/test/read.cgi/tech/1153585095/
Python Challengeをやろう!
pc11.2ch.net/test/read.cgi/tech/1175919288/
Pythonについて(アンチ専用)
pc11.2ch.net/test/read.cgi/tech/1203557046/
Pythonに見られるインデントによる制御構造の是非
pc11.2ch.net/test/read.cgi/tech/1169473442/
pythonがこの先生きのこるには
pc11.2ch.net/test/read.cgi/tech/1167996371/
Eclipse統合M25【Java/C/PHP/Ruby/Python/Perl】(PyDev)
pc11.2ch.net/test/read.cgi/tech/1211505494/
【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】
pc11.2ch.net/test/read.cgi/tech/1209289408/
デザパタ + Python/Ruby/Smalltalk part2
pc11.2ch.net/test/read.cgi/tech/1175959706/
2ch検索: [python]
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python

175 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:45:06 ]
自己解決しました

176 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:40:43 ]
自己挿入しました。

177 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 01:19:24 ]
^ ~ ってなんの演算子?

178 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 01:32:38 ]
>>177
ttp://www.python.jp/doc/release/lib/bitstring-ops.html

179 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:42:07 ]
ttp://d.hatena.ne.jp/odz/20061119/1163971267#20061119fn1

いい加減なんだってさ

180 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 02:01:32 ]
そもそも比較なんていい加減なもんだろ
微妙に方向違うんだから完璧に正しく比較なんてむりだ

181 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 02:08:27 ]
変数名の面白さを比較するんですね わかります


182 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:25:22 ]
>>179
内容は、揚げ足とるだけで終わっているね

183 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:56:23 ]
ちょっとききたいんですが。
Python2.5ライセンスのBの3を見ると、
>Python2.5を改変して使う場合は変更点の要約を配布物に含めよ
みたいなことがかいてあるけど、たとえばPythonのソースに手を加えて
改造版Python25.dllをつくってアプリに組み込んだとすると、
具体的にどこを改造したのかドキュメント化(もしくはソース添付)しないといけないってこと?





184 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:33:29 ]
うん

185 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:53:26 ]
>>179
「はじめてのPython」の著者じゃん(wwww
糞本の作者だけあって、便所の落書きも糞だな(wwwwwwwwww

186 名前:デフォルトの名無しさん mailto:age [2008/06/20(金) 10:17:51 ]
2.6b1 & 3.0b1 release age

3.0はモジュール名の大改修が行われてて、2.xからの移行が大変そうだ……

187 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:24:00 ]
それは、オリジナルの Python25.dll をつかってさえいれば、
なにも書く必要は無いってこと?

188 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:58:10 ]
>>186
っ2to3

189 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:35:10 ]
>>188
構文はそれでだいたいいけるとして、
ライブラリの再編まで追従してくれるのん?

つか初βだし、そろそろ2to3使ってみるかな

190 名前:デフォルトの名無しさん [2008/06/20(金) 13:19:10 ]
関数(メソッドじゃなくてインデント0のdef)が、頭大文字の名前で定義されてるのを見たんだけど、
これは慣習的にどういう意味を持つの?
ついでに、メソッドの場合は?

191 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:48:34 ]
関数名が大文字で始まるのはMicrosoftのAPIなんかがそうだな

192 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:55:28 ]
wxPythonなんか使ってる場合もそうだな

193 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:36:43 ]
functional
でいろいろ楽ができそうなんだけど
検索してもあんまり情報でてこない

ひょっとして3.0で大幅に変わったりするの?



194 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:59:15 ]
なんのこと?

195 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:26:11 ]
www.ibm.com/developerworks/jp/linux/library/l-prog3/

196 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:36:19 ]
3.0との接点がなさそうだが

197 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:05:53 ]
for i in range(1, len(ss)):

range()は数列の配列を返すんだからfor文中でssをいじってもループ回数は変わらない・・・
で合ってますか?

198 名前:190 mailto:sage [2008/06/21(土) 01:13:28 ]
>>191,>>192
つまり、関数やメソッドの名前をCamelCaseにするかsnake_caseにするかは、
定着した慣習はなく、書く人の好みと言うこと?

俺が見たCamelCaseの名前で関数を定義してるソースは、
Guido本人が書いた可能性もあるソースなんだけど、本人すらカオスってるって事か。

199 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 01:43:18 ]
>>198
具体的にどのソースのことを言っているの?
サンプル数が少ないようならそもそも慣習とは言えないし。

200 名前:190 mailto:sage [2008/06/21(土) 02:07:49 ]
rietveld.googlecode.com/svn/trunk/codereview/engine.py

これっす。
def ParsePatchSet(patchset):とか
def FetchBase(base, patch):とか。

201 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 02:08:14 ]
>>198
PEP 8 -- Style Guide for Python Code
www.python.org/dev/peps/pep-0008/
PEP 7 -- Style Guide for C Code
www.python.org/dev/peps/pep-0007/

202 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 06:55:30 ]
pygletスゲーーーー
SDLいらねーーーー

203 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 08:16:19 ]
pygameの翻訳しろよカス共
neet山もpygame講座の続き書けよ、何年経ってると思ってるんだクソが



204 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 08:45:58 ]
>> 197
range()の引数はすぐに評価されるから、range(1, len(ss))とした時点で 1, 2, ..., len(ss)の配列か、イテレータができちゃう。だからループ内でssを変更しても、forループの対象になってるイテレータは影響を受けないよ。

ssが動的に変わるなら、例えばこうだ。

i = 0
while i<len(ss):
 i+=1
 ...


205 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:14:50 ]
197を見てふと次の2つのコードを試してみた

a = 'aaa'
for e in a:
 a += 'b'

a = list('aaa')
for e in a:
 a += 'b'

また1つ賢くなった。

206 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:37:11 ]
CraftLaunchのように自作ソフトウェアのマクロとしてPythonを組み込みたいのですがどうすればよいのでしょうか?

207 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:44:30 ]
>>206
ttp://www.python.jp/doc/release/ext/embedding.html

208 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:33:17 ]
少々スレ違いかもしれませんが。
C++でpython拡張を作成し、setup.pyでビルドしたのですが。

$ cat setup.py
#!/usr/bin/env python
# setup.py
from distutils.core import setup, Extension

module = Extension(
'foo',
sources = ['foo.cpp'],
include_dirs = ['/usr/local/include/'],
library_dirs = ['/usr/local/lib'],
libraries = ['boost_python-mt', 'boost_filesystem-mt']
)

setup(
name = 'Foo',
version = '1.0',
ext_modules = [module],
)

$ ./setup.py build
running build
running build_ext
building 'Foo' extension
creating build
creating build/temp.macosx-10.3-fat-2.5
gcc -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing
-Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic
以下略


209 名前:208 mailto:sage [2008/06/21(土) 13:34:01 ]
最後の行を見てもらうとわかる通り、librariesで指定したライブラリを動的リンクしているのです。
これを静的リンクにするにはどのようにすれば良いのでしょう?
というか、setup.pyでGCCのオプションを設定するにはどのようにすれば良いのでしょうか?

210 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:43:05 ]
>>207
ありがとうございます。もう少し調べるべきでした...

211 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 14:41:20 ]
プロンプトのコマンドを2つ同時に行う方法について聞きたいです

サブプロセスでプロンプトを用いてファイルのコピーを行いたいです。
os.systemを用いて行うには、
1、cd "保存先"
2、copy "コピー元のファイル" "コピー先でのファイル"
以上の二つを宣言しなくてはいけないため、実際に自分が考えた方法では
os.system("cd "保存先"")
os.system("copy "コピー元のファイル" "コピー先でのファイル"")
としてしまうと、別々にプロンプトを開いてしまい機能しません。
何か対処法は無いでしょうか?

212 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 14:44:56 ]
os.system("copy "コピー元のフルパス" "コピー先でのフルパス"")

213 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 14:58:37 ]
>>212ありがとうございます。助かります。
pythonではない質問で申し訳ありません。



214 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 17:06:13 ]
>>211
os.system("cd 保存先") ではカレントディレクトリは変わらないみたいだよ。
os.chdir() を使う必要があると思う。

215 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 17:44:37 ]
>>214
みたいだよ、というか、変わらない。
子プロセスのCWDが変わって終わり。

自プロセスのCWDを変えるには自プロセスが chdir(2) を
実行しないとダメ。

216 名前:デフォルトの名無しさん [2008/06/21(土) 21:40:12 ]
>>> eval("1")
1
>>> eval("print 1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
print 1
^
SyntaxError: invalid syntax
>>>


なんで?

217 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 21:41:13 ]
つ exec

218 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 21:46:17 ]
>>211
os.system("cd hoge && copy from to")
とかやってもよい
&&は、一般的なUnixの/bin/shでもWindowsのcmd.exeでも使えるはず

219 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 21:51:30 ]
>>216
入門書嫁
そして式と文の違いを知れ


220 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:58:42 ]
>>218
そしてcdに失敗したときに変なところにごみファイルが出来る訳ですね

221 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:59:55 ]
>>220
&&の意味分かってる?
python の andと同じでショートサーキットで動く
前のコマンド(cd)が成功しないと、次のコピーは実行されないよ

222 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 01:25:58 ]
set と frozenset の違いって何?
list と tuple みたいなもん?

そういればフローズンバイナリもよくわからないんだけど、これってなんなの?

223 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 02:38:09 ]
>>222
www.google.co.jp/search?q=python+set+frozenset



224 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 02:43:14 ]
setの使い方というか意義自体よう分からん、java知ってる人には便利らしいんだけど

>>222
setとfrozensetの違いは思ったとおりみたい
不可変だとハッシュに使えるの良いんだよ、ってチュートリアルにあった

225 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 06:23:14 ]
>>> L = [1, 2, 3, 1]
>>> list(set(L))
[1, 2, 3]

なんかはたまにする。けどそれ留まり
tupleはデータベースなんかだとlistよりしっくり来る気もする

226 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 08:02:19 ]
たまーに値がダミーでキー・添え字が主体な辞書・配列って見ない?
(たぶん書いてる本人もアホっぽいと自覚してるようなコード)
そういうのはsetで明示的にシンプルに書ける。
まー値の更新なんかタダみたいなもんだから実行コストは変わんないだろうけど。

SQLでいうSELECT DISTINCTだから用途は多いとおもう。

227 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 10:54:34 ]
htmlからリンクを検索するとき、検索済みのURIをsetに入れておいたりするな。

228 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 10:57:58 ]
>>226
setの方が遅いからじゃない?

229 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:17:22 ]
>>228
そんなのは初耳だ
setの実装はハッシュテーブルだからlookupはO(1)のはずだが

勿論重複除去にも使えるが、
if x in foo:
みたいなテストを頻繁にやりたいのなら、setがいいよ
fooがtupleやlistなら、リニアサーチだからO(n)になる
>>227はいい例だな

230 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:48:40 ]
>>226
昔はsetがなかったからだろ

231 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 12:03:16 ]
fooが辞書ならsetと同じですか

232 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 12:33:50 ]
>>231
そうだけど、setでいいところにdict使うのは無駄だろ
setならlist, tupleのようなシークエンスやiteratorから直接構築できるしな

233 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 14:46:23 ]
「任意の文字列」を2文字区切りのデータとして
set に切り出すのは無理ぽ?

>>> C=[u"中華人民共和国"]
>>> def indexing(str):
... S.add(e)
... S.add(e[:2])
... S.add(e[1:3])
... S.add(e[2:4])
... S.add(e[3:5])
... S.add(e[4:6])
... S.add(e[5:7])
...
>>> S.clear()
>>>
>>> for e in C:
... indexing(e)
...
>>> for e in S:
... print e,
...
民共 中華人民共和国 共和 華人 和国 人民 中華



234 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 14:58:41 ]
こんなのか

def pairs(iterable):
    it = iter(iterable)
    last = it.next()
    for item in it:
        yield last, item
        last = item

print list(''.join(p) for p in pairs("foobar"))

235 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:26:37 ]
ある文字列 'saieunak' を並べ替えて出来る組み合わせを全て挙げるには?

236 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:42:39 ]
def permutation_string(s):
    if len(s) == 1:
        yield s
    for i in range(len(s)):
        for j in permutation_string(s[:i] + s[i+1:]):
            yield s[i] + j

def iset(iterable):
    S = set()
    for i in iterable:
        if i not in S:
            S.add(i)
            yield i

for i in iset(permutation_string("saieunak")):
    print i

237 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:50:49 ]
このほうがいいな。str, list, tuple対応
def permutation(seq):
    if len(seq) == 1:
        yield seq
    for i in range(len(seq)):
        for j in permutation(seq[:i] + seq[i+1:]):
            yield seq[i:i+1] + j

238 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:35:37 ]
喜 = ['glad','happy','enjoy']
^
SyntaxError: invalid syntax

python って2バイト文字を識別子に使えない?

239 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:51:13 ]
>>238
Python3.0ならできるらしい

240 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:55:00 ]
>>238
そんなにスイーツ()関数が作りたいのか

241 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 20:53:01 ]
>>238
www.python.jp/doc/nightly/ref/identifiers.html

242 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 21:37:16 ]
ついでとして3.0
docs.python.org/dev/3.0/reference/lexical_analysis.html#identifiers-and-keywords

243 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 08:28:49 ]
pythonからシステムのクリップボードにアクセスしたり、文字列を代入したりすることは出来ますか?
OSはubuntu8.04です。よろしくお願いします。



244 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 10:10:09 ]
はい

245 名前:デフォルトの名無しさん [2008/06/23(月) 11:26:46 ]
>>> a = [ "apple" ]
>>> print a
['apple']

これ,["apple"] みたいに文字列の引用符を
二重引用符にすることってできませんか?
できれば __builtins__.str() にそういう機能があればいいんだけど.

246 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 12:20:31 ]
>>245
できない気がするけどなぜそんなことがしたいの?

247 名前:デフォルトの名無しさん [2008/06/23(月) 13:01:28 ]
>>246
simplejson とかインスコするのが面倒な場面で
JSON を楽に吐きたかった.

Windows で simplejson インスコするの面倒だから.
でも MinGW つかってバイナリパッケージ作った.
だれか必要?

248 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:14:21 ]
>>247
docs.python.org/dev/3.0/library/json.html

あ、jsって文字列リテラルが""なのね・・・

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

いつの間にか標準ライブラリの Internet Data Handling の所に
追加されてるのな。PEPとかないのか。なんじゃこりゃ

docs.python.org/dev/3.0/whatsnew/3.0.html

249 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:15:03 ]
>>244
携帯から失礼
時刻(2008/06/23 12:00のようなフォーマット)をクリップボードにコピーするスクリプトを書こうと思ったのですが、クリップボードにアクセスする方法がわからずになやんでいました。
出来るとのことですが、どのような方法でしょうか?

250 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:47:02 ]
>>249こんなんでいいだろ。てかxselでおk

#!/usr/bin/python
import gtk, gobject, sys
if len(sys.argv) == 1 or sys.argv[1] not in ('-i', '-o'):
    print "Usage: clip.py [-i|-o]"
    sys.exit(1)
def f():
    clip = gtk.Clipboard()
    if sys.argv[1] == '-i':
        clip.set_text(sys.stdin.read())
    if sys.argv[1] == '-o':
        sys.stdout.write(clip.wait_for_text())
    gtk.main_quit()
gobject.idle_add(f)
gtk.main()

251 名前:デフォルトの名無しさん [2008/06/23(月) 13:56:05 ]
>>248
標準ライブラリで JSON を扱えるようにするにあたって
現在いろいろ乱立しているJSONライブラリのどれを
ベースにするかでひともめ有った気がする。
最終的にどうなったかは知らないけど、
simplejson のインターフェイスに似せるってのが
多くの支持を得てたような。

自分は 2.5.2 しか使ってないから 2.6/3.0 の動きシラネ

252 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 14:31:32 ]
Issue 2750: Add simplejson to Python 2.6/3.0 standard library
bugs.python.org/issue2750

253 名前:デフォルトの名無しさん [2008/06/23(月) 14:50:55 ]
2.5.x にもバックポートされないかなぁ。



254 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 15:24:04 ]
>>251
2.5系と3.0b1の文字列メソッドを dir('') して比べてみた。

3.0b1で新規追加される
__format__, __sizeof__, __subclasshook__
_formatter_field_name_spilt, _formatter_parser

'format' <= printの変更に伴って導入された感のあるformat系のメソッド

2.5.2
'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper'

3.0b1
'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower',
'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper'

>>> 喜 = ['glad','happy','enjoy']
>>> '喜'.isidentifier()
True

decimal, numeric, printable がいまいちよくわからなかた…

255 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 15:45:23 ]
docs.python.org/dev/3.0/library/stdtypes.html#id4

256 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:00:17 ]
既約分数クイズ
www.hyuki.com/dig/fracans.html

Pythonで解く場合、どんなかんじになりますか?
リンク先が切れてて答えがわか欄です

257 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:17:38 ]
>>256
internet archive

258 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 02:12:04 ]
RE_なんとかは正規表現オブジェクトとして
if RE_FOO.match(s): ...
elif RE_BAR.match(s): ...
else: ...
みたいに書きたいとき、この書き方だとMatchObjectとれないから困るんだけど
どうするのがPython的に正しいの

259 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 08:17:13 ]
>>256
書いてみたが、リンクリストかQueueの方がスマートかも。
def kiyaku_bunsu(n):
if n == 1:
return [0, n], [1, n]
else:
a, b = kiyaku_bunsu(n - 1)
while a[0] != b[0]:
a, b = rotates(a, b)
if b[0] + b[-1] == n:
apps(a,b)
return rotates(a, b)

def rotates(*x):
return map(lambda a:a[1:]+[a[0]], x)

def apps(*x):
return map(lambda a:a.append(a[0] + a[-1]), x)

n = input("denominator:")
for i in zip(*kiyaku_bunsu(n)):
print "%d/%d %f\n" % (i[0], i[1], 1.0*i[0]/i[1]),

260 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 08:30:57 ]
>>250
xselで出来ることのようで、シェルスクリプト総合スレで解決させていただきました。
Pythonのコードも勉強になりました。ありがとうございます。(報告遅れてすいません。)

261 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 11:48:10 ]
>>256 載ってるアルゴリズムをpythonで書き下しただけだぜ

def liter(l):
    while len(l):
        yield l[0]
        l = l[1]

def make_farray(n):
    farray = [(0,1), [(1,1), []]]
    done = False
    while not done:
        car, cdr = farray[0], farray[1]
        done = True
        while cdr:
            cadr = cdr[0]
            mid = (car[0] + cadr[0], car[1] + cadr[1])
            if mid[1] <= n:
                cdr[:] = [mid, [cdr[0], cdr[1]]]
                done = False
            car, cdr = cdr[0], cdr[1]
    return farray

if __name__ == '__main__':
    for n in range(2,10):
        fa = make_farray(n)
        print " ".join("%d/%d" % x for x in liter(fa))

262 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:02:59 ]
6.2. match() vs search()
match() 関数は、正規表現が先頭でマッチするかを調べるだけで、
search() は文字列の先へ進みながら、マッチする部分を探します。
この違いを覚えておくことは重要です。
match() は位置 0 でマッチした場合のみ報告してくれます。
もしマッチが位置 0 以外ならmatch() は報告 しません。

>>> print re.match('super', 'superstition').span()
(0, 5)
>>> print re.match('super', 'insuperable')
None

反対に、search() は文字列を先へと探していき、最初に見付けたマッチを返します。

>>> print re.search('super', 'superstition').span()
(0, 5)
>>> print re.search('super', 'insuperable').span()
(2, 7)

ときどき、あなたは re.match() のみを使って、正規表現の前に .* を付けておくという誘惑にかられるかも知れません。
この誘惑に打ち勝って、re.search() を使いましょう。
正規表現のコンパイラは、マッチ部分の探索を高速に行うために、正規表現をそれなりに解析します。
そのような解析のひとつが、最初のマッチ文字が何であるか見付けることです。
たとえば Crow で始まるパターンは "C" で始まる文字列とマッチしなければいけません。
この解析により、マッチングエンジンは、文字列の中から最初の文字を素早く探索し、
見付かった場合だけ全体のマッチを試みるのです。

.* を付け加えると、この最適化ができないため、文字列の最後まで探索してから、
残りの正規表現のマッチ部分を探しに逆戻りすることが必要になるのです。


263 名前:261 mailto:sage [2008/06/24(火) 14:21:39 ]
これでいいな。二重ループいらんわ。

def liter(l):
    while len(l):
        yield l[0]
        l = l[1]

def make_farray(n):
    farray = [(0,1), [(1,1), []]]
    car, cdr = farray[0], farray[1]
    while cdr:
        cadr = cdr[0]
        mid = (car[0] + cadr[0], car[1] + cadr[1])
        if mid[1] <= n:
            cdr[:] = [mid, [cdr[0], cdr[1]]]
        else:
            car, cdr = cdr[0], cdr[1]
    return liter(farray)

if __name__ == '__main__':
    for n in range(2,100):
        print " ".join("%d/%d" % x for x in make_farray(n))



264 名前:261 mailto:sage [2008/06/24(火) 18:53:02 ]
アレ過ぎるのでPythonらしくした
つか、この手のリスト処理って、Pythonでどう書くのが定石なのか
さっぱりわからん

from itertools import chain

def make_farray(n):
    head = (0,1)
    tail = iter([(1,1)])
    yield head
    while True:
        try:
            next = tail.next()
            mid = (head[0] + next[0], head[1] + next[1])
            if mid[1] <= n:
                tail = chain((mid, next), tail)
            else:
                head = next
                yield head
        except StopIteration:
            break

265 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 18:56:40 ]
無限数列を返すジェネレータ2つを zip でまとめて for で回すと止まっちゃうんだけど、
そういうもんですか?
固定長のイテレータじゃないと zip できないのかな。

266 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:02:26 ]
izip使え

267 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:06:36 ]
>>266
WAO! ありがとうございました!

268 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:29:30 ]
>>258
「Python的に正しい」かどうかは知らんけど、こういうのはどう?
分かりにくくなるだけのような気がするが

class Delegator:
    def __init__(self):
        self.__dict__ = { 'object': None }
    def set(self, obj):
        self.__init__()
        self.object = obj
        for attr in dir(obj):
            if attr != '__class__':
                setattr(self, attr, getattr(obj, attr))

def re_search_x(regexp, s, delegator):
    m = regexp.search(s)
    if not m: return False
    delegator.set(m)
    return True

if __name__ == '__main__':
    import sys, re
    re_a = re.compile('a')
    re_b = re.compile('b')
    m = Delegator()
    for s in iter(sys.stdin.readline, ""):
        if re_search_x(re_a, s, m):
            print "a: matched at %d" % m.start()
        elif re_search_x(re_b, s, m):
            print "b: matched at %d" % m.start()

269 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:29:00 ]
>>258>>268
こういうのはどうだろう。

class Pattern:
    def __init__(self, pattern, flag=0):
        self.pattern = re.compile(pattern, flag)
    def match(self, string, flag=0):
        self.last_match = self.pattern.match(string, flag)
        return self.last_match

RE_FOO = Pattern("...")
RE_BAR = Pattern("...")
...

if RE_FOO.match(s):
    do something using RE_FOO.last_match
elif RE_BAR.match(s):
    do something using RE_BAR.last_match
elif ...

270 名前:268 mailto:sage [2008/06/24(火) 23:38:09 ]
>>269
そっちのが分かりやすいね
参照渡しが無いから替わりにdelegator使うとか流石にアホみたいだし

271 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:45:58 ]
def foobar(s):
  m = RE_FOO.match(s)
  if m:
    do something with m
    return nanika
  m = RE_BAR.match(s)
  if m:
    do something with m
    return nanika

272 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:57:07 ]
aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66061 とか
aspn.activestate.com/ASPN/Cookbook/Python/Recipe/456151 の一番下のValue
自分は単純にwhile 1:とbreakで書くか>>271みたいに関数書くけど

273 名前:272 mailto:sage [2008/06/24(火) 23:59:02 ]
2行目終わりに「みたいに方法もある」が抜けた



274 名前:デフォルトの名無しさん [2008/06/25(水) 07:40:03 ]
GUI が使えるときは Tkinter 使った GUI で,
使えないときはコマンドラインインターフェイスで,
っていう切り替えをしたいんだけど,何を見て判断すればいいんだろうか.

UNIX でも Windows でもそういうことをしたいんだけど,
UNIX だと制御端末に関連付けられているかどうか,
Windows だと cmd.exe から起動されたか explorer.exe から
起動されたかで判断するのがいいのかな?
とはいえそれを Python でどうやって判定するのかが分からない.

Emacs なんかは X があってもなくても自動的に判定して
うまくやってくれてるみたいなんだけど,そういうことを
Python でできますか?

275 名前:デフォルトの名無しさん [2008/06/25(水) 07:45:46 ]
termios モジュールとか関係あるのかなぁ.
実は恥ずかしながらプロセスグループ,セッション,制御端末
そのあたりについてちゃんと勉強したことがなかった.
screen コマンドとか,「すげぇなぁ,どうやってんだ?」って
感心するばかり.






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<112KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef