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


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

くだすれPython(超初心者用) その12



1 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 15:22:07.02 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その11
hibari.2ch.net/test/read.cgi/tech/1301383226/
関連スレ
Pythonのお勉強 Part45
hibari.2ch.net/test/read.cgi/tech/1321189773/
◆関連リンク
Python の Home Page
ttp://www.python.org/

   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

348 名前:331 mailto:sage [2012/01/14(土) 23:22:57.11 ]
>>346 重ね重ねありがとうございます。

>NANは不定値なのでこういう振る舞いをする。当然ソート結果はおかしくなる。
n!=n(NaN!=NaN)という条件を書いているのだから気付くべきでした。

文字列のinf、NaNは下記で回避
INF = float("inf")
NAN = float("nan")←不要に気付いたので削除します。
if (n == INF) or (n == -INF) or (n!=n): raise TypeError
文字列の時に返す数値
float("inf")
で、先に進める事にします。この後もキーがタプルの場合の処理。要素が日本語の時は
文字コードではなくその文字を表示。ネストしていたらどうするか等、問題山積みです。
デバック用自家製pprintの道は険しいです。
またお世話になる事は確実です。今後もよろしくお願いします。

349 名前:デフォルトの名無しさん [2012/01/14(土) 23:28:34.42 ]
>>347
ありがとうございます。

350 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 04:49:14.94 ]
>>345
datetime.fromtimestamp

351 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 08:38:28.51 ]
floatで変換するのがダメならast.literal_eval使う手もある

352 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:20:52.01 ]
VPythonって何?

353 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:19:12.34 ]
UNIX系OSのシェルで実行するPythonスクリプトを作成しているのですが、
パイプを使った標準入力の受け取り方について良い方法を探しています

echo "hoge" | ./test.py
で、"hoge"を取得して処理をしたいという状況です

sys.stdinを使用して取得まではできたつもりなのですが、
単純に ./test.py といったパイプ無しでの実行のときに一定時間後落ちます
パイプでの標準入力が無い場合は別の処理をしたいのですが、良い方法がありますでしょうか

よろしくお願いします

354 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:32:38.64 ]
すみません、できたっぽいですorz

勘違いしてるといけないので一応、書いておきますと
sys.stdin.isatty()
を確認しました

355 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:28:29.56 ]
>>351
他の単語で不都合が出そう Trueとか

>>348
ソートに使う関数(1度のソートで複数回呼ばれる)ってことで、出来るだけシンプルにしようと思ったんだけど
他の型にも対応する&デバッグ専用であればパフォーマンスより拡張性優先にした方がいいかな。

try/except による判別では、対応する型が増えるとネストが深くなりそうなので
明示的に、型による分岐にした方が良さそうです。率直に記述するなら if isinstance の列挙。
ttp://codepad.org/E0PEyX7Q

>自家製pprint
簡単な実装方法としては、pprint.PrettyPrenter や repr(reprlib).Repr のサブクラスを作って拡張する方法があるよ。

356 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:10:16.42 ]
突然だけど、このページの文字コードの解説が分かりやすかった
lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html



357 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 10:16:41.48 ]
pc11.2ch.net/test/read.cgi/tech/1217836194/339

339 :デフォルトの名無しさん:2008/08/23(土) 08:36:00
    PythonのUnicodeEncodeErrorを知る
    lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

    よくまとまってた。あとで読む

358 名前:331(348) mailto:sage [2012/01/17(火) 21:13:41.51 ]
>>355
コードサンプルありがとうございます。参考にさせて頂きます。

359 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 23:43:18.40 ]
setdefaultencoding 禁止

360 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 21:46:40.56 ]
elementtreeに読み込まれたxmlの任意のelementを取得し、
そのelementの親となっているelementを返すコードを書きたいのですが検討が付きません。
サンプル等教えて頂けないでしょうか?

361 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:19:16.66 ]
ElementTreeの要素は親要素への参照を持たないので
ひと手間かける必要がある
effbot.org/zone/element.htm#accessing-parents

でもlxmlなら直接書ける
lxml.de/tutorial.html#the-element-class
>>> root is root[0].getparent() # lxml.etree only!
True

362 名前:360 mailto:sage [2012/01/18(水) 23:47:03.94 ]
>361
ご回答有難うございます。
ElementTree以外のxmlライブラリ利用も考えてみましたが、
なるべく標準ライブラリで済ませたいため今回はlxmlは見送ろうと思います。

363 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 00:24:47.15 ]
list = [apple1,apple3,apple4,apple2,banana2,banana1,banana5,banana3,banana4]

こんな感じで末尾に数字つきの文字列のリストがあったとして
これをapple1,apple2,apple3,apple4,banana1,banana2....という風に
リスト内の順番を数字順に並び替えるにはどうするのが1番早く出来ますでしょうか?

364 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 00:27:57.70 ]
L = ['apple1','apple3','apple4','apple2','banana2','banana1','banana5','banana3','banana4']
L.sort()

365 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 00:54:39.63 ]
>>364
なんと1瞬・・・pyてょnすげーです
ありがとうございます・・・

366 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 01:36:40.63 ]
while 文の中で、かなり時間のかかる処理を行うのですが、キーボードから入力で、breakさせ
たいと考えています。どんなやり方があるでしょうか。



367 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 01:45:09.69 ]
Ctrl+C

368 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 04:09:42.80 ]
ttp://d.hatena.ne.jp/kakurasan/20100208/p1
ttp://www.slideshare.net/atsuoishimoto/python-9707497


369 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 17:58:23.24 ]
PYTHONとC++との組み込みと使い方に詳しいページってありますかね?

370 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 18:05:31.70 ]
特定のシステム上のpythonが使えるメモリの上限値を調べる事って出来ますか?
具体的にはandroid端末のsl4a上で使えるpythonのメモリの上限値を調べたいです

371 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:29:53.24 ]
住所の文字列を渡して、google mapがブラウザに表示されるスクリプトを探しているのですが
どっかに無いでしょうか?

372 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 23:19:47.06 ]
>>371
import webbrowser, urllib
webbrowser.open('maps.google.co.jp/maps?q=' + urllib.quote(u'東京都千代田区永田町1丁目7番1号'.encode('utf-8')))

373 名前:デフォルトの名無しさん [2012/01/31(火) 23:48:02.65 ]
www.nslabs.jp/monkey-python-02.rhtml#s3

このサイトを見て次のようにプログラムを組んだのですが、うまくいきません。

# -*- coding:utf-8 -*-
import Tkinter

def on_clicked():
print "ボタンが押された!"

window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
button.pack()
window.mainloop()

本当だったら、端末からスクリプトを実行したら、ウィンドウが出て、ボタンを押すと”ボタンが押された!”と表示されるはずなのですが…

374 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:53:05.34 ]
失礼。どうなるか書くのを忘れてました。
実行したら何も出ずに終了してしまいます。
あまりにもくだらない質問かもしれませんが、ご教授おねがいします。

375 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:59:43.70 ]
>>373
端末って本当に端末?アイコンをダブルクリックで実行とかしてない?
とりあえずOSとPythonのバージョンを

376 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 00:05:07.20 ]
>>375
あぁ…。ほんと色々書くの忘れてますね…。申し訳ない。

Ubuntu Linux 11.10
Python 2.7

です。

端末から実行してます。
対話モードで四則演算とか
簡単なスクリプト

print "hoge"

とかならできるので、端末の使い方を誤っているわけではないと思います。



377 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 00:22:10.65 ]
ああ、そういうことか。インデントするのはprint文だけでいいよ
>>373だとon_clicked関数を定義するだけで呼びださないスクリプトになってる

def on_clicked():
    print "ボタンが押された!"

window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
[...]


378 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 00:42:14.08 ]
>>377
できました!
ありがとうございます。

今回の失敗は、

def on_clicked():
print "ボタンが押された!"

で関数を定義して、その続きもインデントしたままだと、その内容もon_clicked関数の中身として処理されてしまう。
という解釈でいいでしょうか。

379 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 00:55:18.69 ]
>>378
です。
> 字下げするのを止めたところがその関数の終わりになります。

380 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:01:07.43 ]
>>379
ありがとうございます。
少しかじった程度のC言語のノリで字下げしまくってたら、Pythonでそれは命取りでした。
字下げを使うというのがPythonの大きな特徴だと言うのに…。

助かりました。ありがとうございます。

381 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:42:02.28 ]
>>380
できたならいいけど。
C言語のノリで字下げって、Cでも普通はそんな字下げはしないよ……

Cでは`}'を入力したらエディタが勝手に字下げを1段戻してくれたけど、
Pythonでは`}'を入力するかわりに字下げを戻すんだ。

382 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 16:44:39.87 ]
Pythonの書きやすさは、エディタの能力によって大きく左右される。

383 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 17:02:38.15 ]
>>373の行頭からの連続した半角空白がインデントされて見えてる人いる?
いたら環境教えてほしい

384 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 17:22:13.92 ]
v2cだと半角spcすら見えない
2ch mateで1個分

385 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 17:34:17.52 ]
>>383
dat を直接見ればよかろう。
Jane Style なら >>373 にカーソルを合わせれば見えるし。

386 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 18:18:10.45 ]
>>384
> 2ch mateで1個分
ああやっぱりそういうブラウザあるのか。どうもありがとう

興味ある人向け
www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/struct/text.html#h-9.1



387 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 04:19:08.62 ]
インデントなら navi2ch 最強。


388 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 18:15:56.95 ]
Dive into Python を読んでいますが、
>>> by = b'd'
をそのままコピペすると
>>> >>> by = b'd'
File "<stdin>", line 1
>>> by = b'd'
^
SyntaxError: invalid syntax
というエラーが出てしまいます
by = b'd'
だけコピペするのが面倒なのですが何か良い方法はありませんか?
>>> sys.ps2
'... '
>>> sys.ps1
'>>> '
というので設定すればいけるのかな?と思いましたがよく分かりませんでした。

389 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 18:32:01.75 ]
www.diveintopython.net/download/diveintopython-examples-5.4.zip

390 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 18:33:04.82 ]
そのくらいコピペじゃなくて自分で入力しよう

391 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 18:33:33.83 ]
>>389
PCが物故割れた

392 名前:デフォルトの名無しさん [2012/02/02(木) 21:55:31.54 ]
Tkinter の raise と lower の使い方がよくわかりません。
下のTcl/Tkスクリプトと同じ動作をTkinterで実現するにはどうしたら良いでしょうか?

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

set flag 0
canvas .c0 -bg "white"
canvas .c1 -bg "green"
pack .c0
pack .c1 -in .c0

bind . <1> {if {$flag == 0} {lower .c1; set flag 1} else {lower .c0; set flag 0}}

393 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 19:34:33.48 ]
1/6000 * 1/3000 * ... ぐらいの桁の掛け算を何度も繰り返すのですが
桁落ち、アンダーフローなどが心配で、対数か何かを使ってどうにか出来ないでしょうか?
ふざけた質問だと思いますがよろしくお願いします。

394 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 19:42:45.79 ]
有理数として表現できるなら、
fractions
一択

詳しくは、
diveintopython3-ja.rdy.jp/native-datatypes.html#fractions
ネイティブデータ型 - Dive Into Python 3 日本語版

有理数の事で悩んでいたんなら、>>393は少なくとも
diveintopython3-ja.rdy.jp/table-of-contents.html#native-datatypes
に一通り目を通さなければならない。

時間に余裕があるなら、こっちも
diveintopython3-ja.rdy.jp/index.html

395 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 19:48:41.45 ]
>>394
fractions見てみましたが使えそうです。
早い回答ありがとうございました。

また一度Dive Into Python3も熟読してみます。



396 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 19:50:16.64 ]
>>394を修正

有理数として表現できるなら、fractions 一択
2.7でも3.0でも使えるよ。

有理数の事で悩んでいたんなら、>>393は少なくとも
diveintopython3-ja.rdy.jp/table-of-contents.html#native-datatypes
に一通り目を通さなければならない。

他の便利な型について詳しくは、
diveintopython3-ja.rdy.jp/native-datatypes.html#fractions
ネイティブデータ型 - Dive Into Python 3 日本語版

時間に余裕があるなら、こっちも
diveintopython3-ja.rdy.jp/index.html



397 名前:396 mailto:sage [2012/02/03(金) 19:55:53.94 ]
>>395
実は私も最初から読んでいる所なんだ。
で、昨日ちょうど読んだ後だったから、こんなに速い回答が出来たんだ。

ああ、もうっ!

有理数として表現できるなら、fractions 一択
2.7でも3.0でも使えるよ。

有理数の事で悩んでいたんなら、>>393は少なくとも
diveintopython3-ja.rdy.jp/native-datatypes.html#fractions
に一通り目を通さなければならない。

他の便利な型について詳しくは、
diveintopython3-ja.rdy.jp/table-of-contents.html#native-datatypes
ネイティブデータ型 - Dive Into Python 3 日本語版

時間に余裕があるなら、こっちも
diveintopython3-ja.rdy.jp/index.html

398 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 20:07:13.56 ]
どんだけーw

399 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 21:02:30.45 ]
>>395
これも読もう

ユニットテスト - Dive Into Python 3 日本語版:
diveintopython3-ja.rdy.jp/unit-testing.html

400 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 21:22:29.16 ]
関数の定義の仕方によってはそうでない使い方も出来ますが、
デコレータは一般的にはクロージャみたいなものになるという解釈でいいでしょうか。

関数Aを関数Bで包んだ場合は、関数B内で定義した関数Cを返すようなので。

401 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:33:00.30 ]
以下のように、先頭に整数文字列の値を使って

25, 大阪府
2, 青森県
1, 北海道
47, 沖縄県

以下のようにソートしたいと考えています。

1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県

python でスマートにソートするにはどんな方法が考えられますかね。

402 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:51:03.67 ]
>>> L = ["25, 大阪府", "2, 青森県", "1, 北海道", "47, 沖縄県"]
>>> L.sort(key=lambda e: int(e.split(',')[0].strip()))
>>> print '\n'.join(L)
1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県


403 名前:デフォルトの名無しさん [2012/02/05(日) 15:57:36.13 ]
pythonの勉強をしようと思い
coreblog.org/ats/minpy-web-is-now-free-to-read
ここのみんなのPythonってのを呼んでサンプルを実行してるんですが

46ページの

ドキュメントルートのcgiserver.py↓
import SimpleHTTPServer
SimpleHTTPServer.test()

を実行して

cgi-bin/test.py↓
#!/usr/bin/env python
print "Content-type: text/html\n"
print "<html><body>Python is awesome !</body></html>"

にブラウザでアクセス(127.0.0.1:8000/cgi-bin/test.py)しても
test.pyの中身が表示されるだけ(つまりファイルは見えている)でpythonとして動いてくれないです。

cygwinでやってるのですが、それが駄目とかってありますか?
OS:Windows7 pythonのバージョン2.6です。

cgiserver.pyを実行しているログには↓のようなものが出ます
$ python server.py
Serving HTTP on 0.0.0.0 port 8000 ...
********** - - [05/Feb/2012 15:52:51] "GET /cgi-bin/test.py HTTP/1.1" 200 -
********** - - [05/Feb/2012 15:52:51] code 404, message File not found
********** - - [05/Feb/2012 15:52:51] "GET /favicon.ico HTTP/1.1" 404 -

何か原因が分かりましたらお願いします

404 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 16:09:00.45 ]
>>403
どこのページかくらい書けよ
SimpleHTTPServerじゃなくてCGIHTTPServer

405 名前:403 mailto:sage [2012/02/05(日) 16:15:21.51 ]
>>404
動きました。ありがとうございます。
前のページのプログラムと同じと思い込んでいました。


一応ページは書いておいたつもりでしたが↓
coreblog.org/ats/minpy-web-is-now-free-to-read
ここのみんなのPythonってのを呼んでサンプルを実行してるんですが

46ページの


406 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 16:39:17.45 ]
ローカル環境(ampps)でDjangoのお勉強したいんですがインストールの仕方がわかりません、誰かAMPPS使ってる方いませんか?



407 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 16:51:40.89 ]
>>401
L = ['25, 大阪府', '2, 青森県', '1, 北海道', '47, 沖縄県']
L.sort()

408 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:29:19.42 ]
>>401
import sys
print '\n'.join([','.join(r) for r in sorted([s.split(',') for s in sys.stdin.read().splitlines()], key=lambda x: int(x[0]))])


409 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:45:20.26 ]
repr(), str()って何が違うんでしょうか?
str()だけあればいいと思いますが。

410 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 18:15:08.39 ]
>>409
www.python.jp/doc/release/tutorial/inputoutput.html#tut-formatting

str() 関数は、値を表現するときに人間にとって読みやすい形式の文字列を返します。
一方、 repr() は、インタプリタが読めるような (あるいは、等価な値を表現するための
構文がない場合には SyntaxError を送出させる) 表現にするためのものです。
人間が利用するための特別な表現をもたないオブジェクトでは、 str() は repr() と
同じ値を返します。数値や、リストや辞書などの構造体のような多くの値は、どちらの
関数でも同じ表現になります。文字列と浮動小数点は特別で、二つの別個の表現と
なります。

411 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 18:57:56.35 ]
>>409
かなりぶっちゃけた言い方をすると
str()がユーザー向け、repr()がプログラマ向け
の文字列を得るために使う

412 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 18:59:02.60 ]
理念的にはevalしたときに元通りになるのがrepr

413 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 19:41:49.36 ]
>>412
おお、カッコいい

414 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 20:06:14.21 ]
rep = repr(obj)
ev = eval(rep)
obj == ev

さあ、結果や如何に!

415 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 20:08:19.37 ]
>>> obj = 'abc'
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True
>>> id(obj)
3075397632
>>> id(ev)
3075397632

416 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 20:15:41.41 ]
>>> import datetime
>>> obj = datetime.datetime.now()
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True



417 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 20:22:26.30 ]
repr(float('inf')) がおかしいって誰が言ってた

418 名前:392 mailto:sage [2012/02/06(月) 06:54:34.43 ]
どなたか分かる方はいらっしゃらないでしょうか?

419 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 07:21:08.82 ]
c0 = tk.Canvas(...)
c0.lower()

420 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 11:01:51.32 ]
>>417
言ったのは多分以前の自分。
nanもダメ。

421 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 11:33:24.13 ]
理念的って書いてあるじゃない

422 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 13:56:47.83 ]
'float("inf")'を返せばいいんじゃね

423 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 14:17:54.28 ]
そりゃ観念的だね

424 名前:デフォルトの名無しさん [2012/02/06(月) 14:58:32.30 ]
>>419
下のようにしたのですがダメでした。
何が悪いのでしょうか?

from Tkinter import *
root = Tk()
c0 = Canvas(root, bg = 'white')
c1 = Canvas(root, bg = 'green')
c0.pack()
c1.pack(in_ = c0)
c1.lower()
root.mainloop()

425 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 15:39:43.14 ]
お昼ごはんに理念のわかめスープ飲んだ

>>424
from Tk import *
Misc.lower(c1)

Tkinter.pyのソースコードにそれっぽいことが書いてあるから
参照したらいいかも

426 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 15:40:29.24 ]
あ、まちがえた。from Tkinter import *



427 名前:デフォルトの名無しさん [2012/02/06(月) 18:15:59.48 ]
>>425
お陰様で無事動きました。
ありがとうございました!

Tcl/Tkの経験があればTkinterも何となくわかるかと思っていたのですが、
かえって違いに戸惑ってしまってます。
そのうち慣れるでしょうけど、それまでは苦労しそうです。

428 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:32:31.34 ]
海外のアルゴリズムを教える題材にPythonを使うのが多いらしいのですがそういうサイトはあるのでしょうか
C言語のアルゴリズムの本読んでるんすけど難しいです

429 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:48:52.35 ]
海外と国内のとひとつずつ
greenteapress.com/thinkpython/thinkCSpy/html/
www.geocities.jp/m_hiroi/light/index.html

430 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:33:39.52 ]
>>429
さっそくありがとうございます。
地道にやっていこうと思います。

431 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 07:24:23.27 ]
MacでPythonをやるにはどういった開発環境が良いでしょうか?
Ankiというソフトウェアをビルドしようとしています

432 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 07:52:26.26 ]
Mac ならシステムに最初から Python がはいってるから、そのままで OK だけ
ど、特定のバージョンが必要とかの場合は MacPorts から入れるのが簡単。
PyQt4 とか Beautiful Soup とかが必要のようだけど、MacPorts だとそれもま
とめてインストールできる。



433 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:37:57.86 ]
>>432
有難うございます
難しいですが少しずつ理解して行きたいです

434 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:54:45.89 ]
外部サイトのRSSから自動でスクレイピングして画像やテキストの一部を自分のサイトの指定の場所に表示したいんですが、どういう手順でやればよろしいのでしょうか

ちなみについさっきローカルでDjangoインスコしたばかりのド素人です(^q^)
はじめてのLL言語れす(*^o^*)
教えておにーちゃん!

435 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:12:10.51 ]
そーいうの不愉快だから止めた方がいいよ

436 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:36:14.79 ]
>>434
同じようなの作ってるけどbeautifulsoupとmechanizeでやってみてるよ



437 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:42:32.20 ]
>>435
すいませんでした。反省します。

>>436
そしてありがとうございますおにーちゃん

438 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:50:57.39 ]
>>> [[10]]
[[10]]
>>> ((10))
10
なにこの違い
困るんですけどw

439 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:52:47.49 ]
釣り針でかすぎるけど、困る例を一つでも挙げれたら100万円やる

440 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:56:39.37 ]
リストのリストから最大値&最小値を見つける関数があってですな
439のタプルのケースを食わせるとあきまへんねん

441 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:59:13.44 ]
>>> ((10,),)
((10,),)

442 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:59:56.96 ]
((10,),)

443 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 21:03:53.06 ]
>>440
www.python.jp/doc/release/tutorial/datastructures.html#tut-tuples

444 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 21:05:31.30 ]
だよな、最初438がタプルを使おうとしてるとは思わなくて何がしたいのか理解不能だった

445 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 01:17:52.17 ]
((10,),)

446 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 15:50:27.48 ]
((((;゚Д゚))))



447 名前:デフォルトの名無しさん [2012/02/09(木) 16:58:22.47 ]
数字が1桁から2ケタへと移行する場合のsortがうまくいきません。
どうしたら直りますか

#1〜2ケタの数字の場合
list=["apple2","apple10","apple11","apple1","apple4","apple5","apple6","apple3","apple15","apple7","apple8","apple12","apple13","apple9","apple14"]
list.sort()
print list

>result
>['apple1', 'apple10', 'apple11', 'apple12', 'apple13', 'apple14', 'apple15', 'apple2', 'apple3', 'apple4', 'apple5', 'apple6', 'apple7', 'apple8', 'apple9']

#1桁の数字のみの場合
list=["apple2","apple1","apple4","apple5","apple6","apple3","apple7","apple8","apple9"]
list.sort()
print list

>result
>['apple1', 'apple2', 'apple3', 'apple4', 'apple5', 'apple6', 'apple7', 'apple8', 'apple9']

#数字を全て2ケタにした場合
list=["apple02","apple10","apple11","apple01","apple04","apple05","apple06","apple03","apple15","apple07","apple08","apple12","apple13","apple09","apple14"]
list.sort()
print list

>result
>['apple01', 'apple02', 'apple03', 'apple04', 'apple05', 'apple06', 'apple07', 'apple08', 'apple09', 'apple10', 'apple11', 'apple12', 'apple13', 'apple14', 'apple15']



448 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 17:03:07.72 ]
>>447
「python 自然順ソート」でググれ

449 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 17:07:27.02 ]
>>447
L.sort(key=lambda x: int(x[5:]))

x[5:]が手抜きっぽくて嫌なら

import re
L.sort(key=int(re.match(r'apple(\d+)', x).groups(1)))

"apple01"を作るときに"apple%02d" % numとかでゼロパディングするのもいい

450 名前:449 mailto:sage [2012/02/09(木) 17:11:24.29 ]
あれなんか二番目がおかしい。ごめん
L.sort(key=lambda x: int(re.match(r'apple(\d+)', x).groups(1)))

451 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 19:16:07.76 ]
apple限定かい!

PHP の natsort って、おもしろいけど本当に役に立つのかねえ。
1.05 と 1.5 はバージョン番号なら同一視してほしいけど、
ふつうの小数では別に扱ってほしいし。




452 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 20:51:57.58 ]
>>448
ググってみます。
>>451
apple限定じゃないほうが良いです。。

453 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:19:07.74 ]
>>452
import re
L.sort(key=int(re.match(r'[^\d]*(\d+)', x).groups(1)))

454 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:31:12.60 ]
re.search(r'\d+\Z', ...)

455 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 01:13:25.90 ]
>>454
iPhoneでみるとなんかモザイクみたいだ

456 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:14:21.84 ]
test={
'a':{'j':'1'},
'b':{'i':'2'},
'c':{'k':'3'},
}
を数字の箇所の値で降順にソートしたいのです。
つまり
c k 3
b i 2
a j 1
と表示されるようにしたいのですが、
どのようにすればいいのでしょうか?




457 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:03:48.26 ]
>>456
sorted(test.items(), key=lambda item: item[1].items()[0][1], reverse=True)

458 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:16:58.83 ]
>>457
はやっ!
   。 。
  / / ポーン!
( Д )
辞書の辞書(辞書の入れ子)のsortってこうするんですね。
うまくいきました。ホントに助かりましたm(_ _)m


459 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 00:35:41.47 ]
python3だと、items()はリストじゃなくてビューオブジェクトを返すから、items()[0]ができないけどね。

460 名前:デフォルトの名無しさん [2012/02/13(月) 02:10:48.93 ]
IDLEは起動しないわ
TkinterはDLLロードエラー出るわ
糞だな

461 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 02:41:49.89 ]
>>460
これ入れたら直る
www.microsoft.com/Downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=ja

462 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 03:21:26.47 ]
えすぱぁ

463 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 16:26:12.19 ]
Python3.2.2でvirtualenvで環境を作ろうとするとエラーになります。
Python3.2.2をインストールした後、distributeをインストール、easy_installでpipをインストール
pipでvirtualenvをインストールして、エラーらしいエラーは出ないで終わりましたが、
virtualenvで環境を作ろうとするとエラーになります。
環境はwin7で、virtualenvを引数無しで実行するとヘルプメッセージが表示されるので、インストールは成功しているみたいです。
どなたか解決策をご存じの方はいらっしゃいませんでしょうか?

E:\Data\Python>python -m virtualenv main
New python executable in main\Scripts\python.exe
Fatal Python error: Py_Initialize: unable to load the file system codec
LookupError: no codec search functions registered: can't find encoding

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ERROR: The executable main\Scripts\python.exe is not functioning
ERROR: It thinks sys.prefix is 'e:\\data\\python' (should be 'e:\\data\\python\\
main')
ERROR: virtualenv is not compatible with this system or executable
Note: some Windows users have reported this error when they installed Python for
"Only this user". The problem may be resolvable if you install Python "For all
users". (See https://bugs.launchpad.net/virtualenv/+bug/352844)


464 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 16:30:40.83 ]
よくこのエラーが出るけど、
「このユーザーだけ」
って選択した時なんだよね。

あなたが「全てのユーザ」を選択するとこの問題は解決するかもしれない。

465 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 16:32:25.35 ]
>>464に追加

インストール時の話です。
こっちもみてね。
https://bugs.launchpad.net/virtualenv/+bug/352844

466 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 21:22:59.58 ]
専用エディタ導入したけど使い難いな
でも関数の説明が出るのは嬉しい



467 名前:デフォルトの名無しさん [2012/02/13(月) 23:27:25.06 ]
>>466 何使ってますの?

468 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 00:51:14.93 ]
カーソルを動かしたいのですが
c言語のgotoxyに対応するような命令ってありますか?

469 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 01:44:46.17 ]
>>468
curses

470 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 16:14:51.89 ]
>>469
調べて見たけど結構複雑だな
ubuntuで動作することを祈ろう

471 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 21:20:51.09 ]
>>467
PyScripter
変数名にnとか割り当ててn = 1とかやろうとするとn<SPACE>の時に変換されてて気付いたらよく分からない文字になってたりする
今までIDE使ったことなかったから大変

472 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 23:30:20.19 ]
x打つつもりが、いきなりxrangeになったりするのは、IDEオプションの
Code CompletionのComplete as you typeのチェック外したら出なくなったよ。
俺も使い始めたばかりで、それが正しい対処かわからんけど。

473 名前:デフォルトの名無しさん [2012/02/14(火) 23:40:45.75 ]
これでいい野田

474 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 00:39:53.16 ]
反対の産生ー

475 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 15:08:11.51 ]
L = [1, 2]
T = (1, 2)

L == T
>>> False

となるのですが、一度どちらかをlist, tupleに変換しないといけないんでしょうか?
それとも良い方法があったりしますか?

476 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 16:34:42.66 ]
L === T



477 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 16:38:28.33 ]
>>475
www.python.jp/doc/2.5/tut/node7.html#SECTION007800000000000000000

478 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 16:50:43.13 ]
>>> reduce(lambda x, y: x and (y[0] == y[1]), zip([1,2,3], (1,2,3)), True)
True
>>> reduce(lambda x, y: x and (y[0] == y[1]), zip([1,2,3], (1,9,3)), True)
False

順序気にしないなら
>>> L = [1, 2]
>>> T = (2, 1)
>>> set(L) == set(T)
True


479 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 16:54:15.43 ]
>>476
死ね
>>> L = [1, 2]
>>> T = (1, 2)
>>> L == T
False
>>> L === T
File "<stdin>", line 1
L === T
^
SyntaxError: invalid syntax

>478
そこまでするくらいなら素直に、
tuple(L), list(T)やってろって話ですかね・・・
set()はちょっと検討してみます。

480 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 18:20:22.41 ]
ランバダってなんなの?

481 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 19:08:23.40 ]
ひょっとして無名関数のことかな

482 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 19:20:09.50 ]
λ...

483 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 20:50:26.76 ]
λ人λ人λ人λ人λ人入人λ人λ人λ人入人λ人λ人λ

484 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:15:43.74 ]
ランダバダバダバランダバダバダバ

485 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:21:25.72 ]
λ

って



と似てるな

486 名前:デフォルトの名無しさん [2012/02/15(水) 21:51:57.37 ]
ええ



487 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:10:53.74 ]
ソートするとき、以下のように"key=lambda"ってのが良くでてきますが、
検索しても意味がわかりません。どなたかヒントをお願いできないでしょうか。

sorted(a, key=lambda x:x[1], reverse=True)

488 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:15:59.43 ]
本当によく出てくるの?

489 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:19:04.28 ]
>>487
公式のチュートリアルにちゃんと解説があるよ
www.python.jp/doc/nightly/tutorial/controlflow.html#tut-lambda

490 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:20:24.17 ]
>>487
wiki.python.org/moin/HowTo/Sorting

491 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 23:48:43.02 ]
>>489、490

ありがとうございます。なんとなくわかってきました!



492 名前:デフォルトの名無しさん [2012/02/16(木) 00:06:26.59 ]
Matplotlibを使ってみたくて、fonnesbeck.github.com/ScipySuperpack/から、
インストールしました。
動くかどうかのtestとして、
>>> import matplotlib.pyplot as plt
を入力したところ
No module named dateutil.rrule
というエラーがでてきてしまいます。

解決方法がわかる方、教えてください。

493 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:09:01.75 ]
>>492
マルチ

494 名前:デフォルトの名無しさん [2012/02/16(木) 00:11:03.46 ]
>>492
マルチって何ですか?

495 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:12:13.60 ]
>>494
www.ippo.ne.jp/g/70.html

496 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:13:33.76 ]
複数のスレで質問してるってこと
分からなければ
googleにマルチってなんですか?って聞いてみて



497 名前:デフォルトの名無しさん [2012/02/16(木) 00:19:42.05 ]
申し訳ありません。
数週間このエラーから抜け出せずにいたので、
焦ってしまいました。
気を悪くした方、ごめんなさい。

498 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:21:44.27 ]
すすすすすすすすすすす数週間!

499 名前:デフォルトの名無しさん [2012/02/16(木) 00:36:55.74 ]
>>498
そうなんです。プログラミングをはじめようと思い、PythonでMatplotlibを使って
グラフなど描いていろいろやろうと思ったのですが、全然うまく行かず…
Google先生に聞いて、いろいろ試したのですが、うまく行かず今日に至った次第です。

500 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 04:33:51.52 ]
必要なモジュールが足りないんだろ
入れて来い

501 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 10:03:06.61 ]
>>499
何だ、君マルチだったのか。

Mac使いだったらMacPortsであっさり
インスコできるはずだから、一旦
Superpack消して入れ直してみなよ。

502 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:01:19.00 ]
unicodeのテキストの文字列を
一行づつ画像化して出力したいのですが
文字列を画像化するにはどうしたらいいですか?

PIL画像を作ったり編集したりは出来るのですが
文字を入れる方法が分かりません

503 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:21:34.23 ]
ImageMagickを使うとか

504 名前:デフォルトの名無しさん [2012/02/17(金) 14:44:10.88 ]
超初歩的な質問で申し訳ないのですが、
テキストの読み込みに関してどう書いていいのかわかりません。
テキストには名前、打数、安打数、本塁打数、と1行毎に書いてありそれが9人分続いているとします。
最終的にoutputは名前、打率、本塁打数と1人1行ずつprintします。

txtの読み込みとループに関して簡単にでいいので解説お願いします。

505 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:50:06.34 ]
>>503
なんか
以下のサイト見つけたけどPILのバージョンが宜しく無いみたいなんで
インスコし直してきます
ttp://www.geocities.jp/showa_yojyo/note/python-pil.html#id13

506 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:11:50.08 ]
Python3.2

with open('tech504.txt') as f:
for line in f.readlines():
line = line.rstrip()
sp = line.split('、')
out = sp[:2] + sp[3:]
print('、'.join(out))

tech504.txt
名前1、打数1、安打数1、本塁打数1
名前2、打数2、安打数2、本塁打数2
名前3、打数3、安打数3、本塁打数3
名前4、打数4、安打数4、本塁打数4
名前5、打数5、安打数5、本塁打数5
名前6、打数6、安打数6、本塁打数6
名前7、打数7、安打数7、本塁打数7
名前8、打数8、安打数8、本塁打数8
名前9、打数9、安打数9、本塁打数9



507 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:14:26.17 ]
>>506
以下の行は
for line in f.readlines():

以下の行に修正
for line in f:


508 名前:502 mailto:sage [2012/02/17(金) 16:29:13.54 ]
すいません、どうも
t.txtのunicodeの日本語の文字列が文字化けしてしまいます
どうしたら文字化けせずに画像に出来るのでしょうか?
import Image
import ImageDraw
import ImageFont

# 大きめのキャンヴァスを用意しておく。
img = Image.new('RGB', (600, 400), 'white')
dr = ImageDraw.Draw(img)
# HG 明朝体を使ってみる。
fnt = ImageFont.truetype('hgrme.ttc', 24, encoding='utf-8')

# 長めのテキストを用意する。
f = file("t.txt","r")
text = f.read()

f.close()

width = 0
height = 0

for line in text.splitlines():
ext = dr.textsize(line, fnt)
dr.text((100, height+(400/2)), line, font=fnt, fill='red')
width = max(ext[0], width)
height += ext[1]

# 余白をトリムする。
#img = img.crop((0, 0, width, height))
img.save("test.png")

509 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:41:29.00 ]
text = f.read().encode('utf-8')

510 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:41:29.23 ]
hgrme.ttcは存在するのか?

511 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:43:37.54 ]
普通にunicodeでやったらうまくいったが

512 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:50:51.46 ]
>>509
encodeじゃなくてdecodeだろ

>>510
存在しないとIOErrorになる

513 名前:502 mailto:sage [2012/02/17(金) 16:57:45.39 ]
>>509
駄目でしたOTL
Message File Name Line Position
Traceback
<module> C:\Users\***\desktop\1.py 27
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

>>510
確認しましたがありました

>>511
テキストファイルがおかしいのでしょうか?
Upします。
パスはpです
出力画像
www.dotup.org/uploda/www.dotup.org2650080.png.html
www.dotup.org/uploda/www.dotup.org2650085.txt.html

514 名前:502 mailto:sage [2012/02/17(金) 17:01:03.50 ]
>>512
decodeにしてみたけど駄目でした
Message File Name Line Position
Traceback
<module> C:\Users\***\desktop\1.py 27
decode C:\Python26\Lib\encodings\utf_8.py 16
exceptions.UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte

515 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:02:15.39 ]
'utf-16'

516 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:05:48.23 ]
f.read().decode('utf-16')



517 名前:502 mailto:sage [2012/02/17(金) 17:06:27.46 ]
>>515
うおおおおお
できましたあああ!!!
有難うございます!!!

518 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:14:31.91 ]
ユニコード色々有り過ぎでヤだお

519 名前:504 [2012/02/17(金) 17:26:40.15 ]
>>506
素早い回答ありがとうございました。
ですが求めている物とは少し違いました。

fileが以下のように各行に1つずつのときに
"名前 打率: .nnn 本塁打: aa"と表示されるようにしたいのです。

tech504.txt
長野
578
164
17
マートン
579
180
13
宮本
474
143
2

説明が悪く大変申し訳ありません。

520 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:38:24.07 ]
'\n'.join(out)

521 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:10:46.33 ]
この本読んだひといますか?
感想聞かせてください

WSGIウェブプログラミング
ttp://www.amazon.co.jp/dp/4877832882/

書評悪すぎてわろす

522 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:15:51.52 ]
じょ、情報を小出しにするなとあれほど。。。
単に興味で聞くだけなんだけど、これなんのために必要だったの?

n = 4
with open('tech504.txt.1') as f:
out = []
for i, line in enumerate(f):
line = line.rstrip()
if i % n == 2:
continue
out.append(line)
if i % n == n - 1:
print("名前: {}, 打率: .{} 本塁打: {}".
format(out[0], out[1], out[2]))
out = []

523 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:22:06.70 ]
せめて回答する側はインデントしようよ

524 名前:デフォルトの名無しさん [2012/02/17(金) 18:39:44.52 ]
datではインデントされてるよ

525 名前:デフォルトの名無しさん [2012/02/17(金) 18:48:18.29 ]
>>522
申し訳ありません。
目的は課題です。求める打者数も項目もずっと多いですが。

526 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:23:38.99 ]
for 名前, 打数, 安打数, 本塁打数 in zip(*[iter(open('tech504.txt'))]*4):
 print(名前, 打数/安打数, 本塁打数)




527 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:39:02.38 ]
どっちもひどい

528 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 05:52:36.14 ]
酔った勢いでかいてみた
# -*- coding: utf-8 -*-

file = "tech504.txt"
person = []
pgroup = []
cnt = 0
# こんなくそデータを処理する仕様はks
# 出題者よデータの変更を求む!
with open(file) as f:
for line in f:
line = line.rstrip()
if cnt <= 3:
person.append(line)
cnt +=1
else:
pgroup.append(person[:])
del person[:]
person.append(line)
cnt = 1
pgroup.append(person[:])

for line in pgroup:
print line[0], " 打率:", float(int(line[1]) / int(line[2])), "本塁打:", line[3]



529 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 06:09:44.37 ]
# coding: utf-8
rec = [] # 名前、打数、安打数、本塁打数
f = open('2ch.txt')
while 1:
    line = f.readline().rstrip()
    if not line: break
    rec.append(line)
    if len(rec) == 4:
        name = rec[0].decode('utf-8')
        ba = round(float(rec[2]) / float(rec[1]), 3)
        ba = str(ba)[2:5]
        hr = int(rec[3])
        print u"名前: %s 打率: .%s 本塁打数: %s" % (name, ba, hr)
        rec = []
f.close()

530 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:03:46.86 ]
文字列の2次元リストを、x[1]を昇順に、x[2]も昇順なら以下のソースでうまくいくのですが、
x[2]のみ降順ソートする方法がわかりません。

x:(x[1],-x[2])のように-をつけるエラーが出ます。
どうすれば良いでしょうか。

#!/usr/bin/python
# coding: UTF-8

l = [['D', '100', '3000'],
['B', '100', '2000'],
['A', '500', '4000'],
['C', '200', '5000'],
['C', '200', '3000'],
['C', '200', '2000'],
['E', '400', '1000']]

for e in sorted(l, key=lambda x:(x[1],x[2])):
print e[0], e[1], e[2]


531 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:19:56.27 ]
-int(x[2])

532 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:20:59.63 ]
むやみやたらにキャストすると遅くなるけどね

533 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 20:03:07.97 ]
>>531
ありがとうございました。うまくいきまいした。

もうひとつだけ質問させてほしいのですが、
以下のようなリストがあって、1番目の要素を固定して、2番目の要素だけでソートする
ことは出来るでしょうか。

(元のとおりにきりん、ぞう、ぱんだの順番で並べたい)

ソート前
['きりん', '300', '3000'],
['きりん', '100', '2000'],
['きりん', '500', '4000'],
['ぞう', '400', '5000'],
['ぞう', '200', '3000'],
['ぱんだ', '400', '1000']
['ぱんだ', '200', '2000'],

ソート後
['きりん', '100', '2000'],
['きりん', '300', '3000'],
['きりん', '500', '4000'],
['ぞう', '200', '3000'],
['ぞう', '400', '5000'],
['ぱんだ', '200', '2000'],
['ぱんだ', '400', '1000']


534 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:03:04.52 ]
なんか松本引越センターを思い出したw

535 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:24:54.63 ]
a0 = [x[0] for x in a]
a.sort(key=lambda x: x[1])
for x0, x in zip(a0, a):
 x[0] = x0
自分の頭をひねらない人はプログラムやめたほうがいいよ。


536 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:27:56.12 ]
安定ソートの出番ですな



537 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:29:24.87 ]
>>535
これは無知からくる悪い見本

538 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:33:06.05 ]
>>533
というか、なんでそんなデータ構造にした?

539 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:57:46.97 ]
以下の2次元リストで都道府県に対してindexメソッドを使うことはできますか?
その場合どうすればよいでしょうか。

[1,'東京',0]
[2,大阪,0]
[3,神奈川,0]



540 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:03:20.24 ]
>>539
たまには自分の頭で考えてみればいいんじゃないかな?

541 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:06:11.72 ]
賛成の反対の反対

542 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:19:22.88 ]
>>535
すいません、マジでこれ俺には理解不能です。
もうちょっとやさしく教えてもらえると助かります。
まず1行目からつまずきました。



543 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:27:09.27 ]
numpyのarray型で特定の要素だけ加算したりすることは出来ますか?
a = array([[1,2],[3,4]])
a = a[1,1] + 3

[[1,2],[3,7]
みたいにしたいのですが,これを行うには行列の大きさを同じにしないと無理でしょうか?

544 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:30:19.97 ]
最低でも一冊は、Pythonの入門書読め。
金無いなら、

diveintopython3-ja.rdy.jp/index.html
これ一通り読め。

次からは diveintopythonも>>1に入れてよ。
>>950お願い。

545 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:31:20.79 ]
>>544>>542宛て

546 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:32:45.85 ]
a[1][1] += 3



547 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:40:45.58 ]
>>544
入門書はどれがいいの?

548 名前:950 mailto:sage [2012/02/19(日) 00:57:01.58 ]
>>544
了解

549 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 02:49:46.64 ]
マトリックスみたいなコンソールにバババっとコードみたいなのが流れる奴って何分で作れますか?

550 名前:Python不慣れだが30分くらいで書いてみた mailto:sage [2012/02/19(日) 03:44:16.69 ]
from sys import stdout
from random import shuffle
chrs = '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 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 0 1 2 3 4 5 6 7 8 9 @ . < > $ # % _ , '
for i in range(1000):
    ls = [c for c in chrs]
    shuffle(ls)
    for c in ls: stdout.write(c)

551 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:02:48.43 ]
>>550を盛大にパクってrandomやstringのヘルプ見つつ10分ほど
Windowsではこれしないと動かないかも
support.microsoft.com/kb/101875/ja

import sys
from random import randint
from string import ascii_letters, digits, punctuation
chars = ascii_letters + digits + punctuation
chars = chars + ' ' * len(chars)
size = len(chars)
try:
    sys.stdout.write('\033[1;32m') # green
    while 1: sys.stdout.write(chars[randint(0, size - 1)])
finally:
    print '\033[0m' # reset

552 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:16:53.64 ]
>>534
ぱんだは同業他社だなw

553 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:19:40.32 ]
きりんにも同業他社があるしww

554 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:13:28.42 ]
>>551を盛大にパクってWin32APIのヘルプ見つつ10分ほど
cmd.exeで動くバージョン

import sys
from random import randint
from string import ascii_letters, digits, punctuation
from ctypes import *

class CONSOLE_SCREEN_BUFFER_INFO(Structure):
  _fields_ = [('w', c_short), ('h', c_short), ('x', c_short), ('y', c_short),
  ('a', c_int), ('l', c_short), ('t', c_short), ('r', c_short), ('b', c_short),
  ('maxw', c_short), ('maxh', c_short)]
b = CONSOLE_SCREEN_BUFFER_INFO()
h = windll.kernel32.GetStdHandle(-11)
c = windll.kernel32.GetConsoleScreenBufferInfo(h, byref(b))
windll.kernel32.SetConsoleTextAttribute(h, 10) # green
chars = ascii_letters + digits + punctuation
chars += ' ' * len(chars)
size = len(chars)
while True: sys.stdout.write(chars[randint(0, size - 1)])
windll.kernel32.SetConsoleTextAttribute(h, b.a) # reset


555 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:20:01.76 ]
ああ最後の二行こっちで
  try:
    while True: sys.stdout.write(chrs[random.randint(0, sz - 1)])
  finally:
    windll.kernel32.SetConsoleTextAttribute(h, b.a)


556 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 09:26:10.77 ]
できました
回答して頂いた方ありがとうございました



557 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 10:13:36.10 ]
死ね,俺死ね
下らないことで詰まってた
俺死ね

558 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:24:27.01 ]
では私は生きよう

559 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:50:29.86 ]
ではプロセスは子を含めて殺しておこう

560 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:43:41.44 ]
浮動小数の比較で

a=1.0
b=1.0
if a <= b :

みたいにするのは、やめたほうがいいですか?
a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が
うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。
Fortranやってたときは、よくこんなふうにやってました。

eps=1e-30
a=1.0-eps
b=1.0
if( a <= b) then

561 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:19:40.00 ]
>>> 1/10.
0.10000000000000001
>>> 1/10. == 0.1
True
>>> 1/10. > 0.1
False

562 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:36:56.87 ]
>>> 0.1
0.10000000000000001
>>> 0.2
0.20000000000000001
>>> 0.3
0.29999999999999999


563 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:40:51.45 ]
>>560
Pythonでも後者のようにしたほうがいいと思う
比較する値の差をとって、それが十分小さいか調べる

decimalモジュールやNumPyが使えるのかもしれないけどよく知らない

564 名前:560 mailto:sage [2012/02/21(火) 00:46:19.34 ]
>>561
確かにそうなりますね。
結局、気にしないでOKということでいいですか?

565 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:51:11.32 ]
気にしないのはダメ

566 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 01:18:42.28 ]
比較対象を有効桁で丸めて比較すれば?




567 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 01:25:35.45 ]
>>560
Python3.2では、i, jはdouble型として扱われていて、
以下のような比較をしていたので、
比較に関する問題で、Cで起き得る問題はPythonでも起き得ると考えていいと思う。

float_richcompare()
{
Compare:
PyFPE_START_PROTECT("richcompare", return NULL)
switch (op) {
case Py_EQ:
r = i == j;
break;
case Py_NE:
r = i != j;
break;
case Py_LE:
r = i <= j;
break;
case Py_GE:
r = i >= j;
break;
case Py_LT:
r = i < j;
break;
case Py_GT:
r = i > j;
break;
}
PyFPE_END_PROTECT(r)
return PyBool_FromLong(r);
}

568 名前:560 mailto:sage [2012/02/21(火) 01:36:48.21 ]
ありがとうございます。
やっぱり気にすることにします。

569 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:01:12.54 ]
実行速度より、誤差が怖いのならdecimal使った方がいいとおも。
とりあえず、1万桁ぐらいの値でも正確に判別できているみたいだから、
decimal使えば?

d1 = Decimal('0.111')
>>> d1._int, d1._exp
('111', -3)

>>> d00 = decimal.Decimal('0.' + '0' * 10000)
>>> d01 = decimal.Decimal('0.' + '0' * 9999 + '1')
>>> d00 < d01
True
>>> d00 > d01
False
>>> d00 == d01
False

>>> d88 = decimal.Decimal('0.' + '8' * 10000)
>>> d89 = decimal.Decimal('0.' + '8' * 9999 + '9')
>>> d89 - d88
Decimal('1E-10000')
>>> d89 > d88
True
>>> d89 == d88
False
>>> d89 < d88
False

570 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:20:23.44 ]
なんか、引き算すると28桁までしか精度保証してくれないみたい

>>> d1 = decimal.Decimal('1')
>>> d9 = decimal.Decimal('9')
>>> d1.as_tuple()
DecimalTuple(sign=0, digits=(1,), exponent=0)
>>> d19 = d1 / d9
>>> d19
Decimal('0.1111111111111111111111111111')
>>> d19.as_tuple()
DecimalTuple(sign=0, digits=(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), exponent=-28)

なので、こんな風にしてprecを設定しましょうって書いてあったよ。

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

571 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:56:45.20 ]
>>566
正解

572 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 03:40:43.66 ]
a=1.0
b=1.0
if round(a,1) <= round(b,1) :

573 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 04:16:43.30 ]
>>> f = 0.0
>>> for i in xrange(100):
... f += 0.001
...
>>> f
0.10000000000000007
>>> f = 0.0
>>> for i in xrange(10):
... f += 0.01
...
>>> f
0.099999999999999992


if a <= b :
これじゃだめだな

574 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 04:20:39.34 ]
>>560
Fortranならうまくいくのか?バグ増産してたんじゃね?

>>> f = 0.0
>>> for i in xrange(10):
... f += 0.01
...
>>> f
0.099999999999999992
>>> f - (1e-30)
0.099999999999999992
>>> f = 0.0
>>> for i in xrange(100):
... f += 0.001
...
>>> f
0.10000000000000007
>>> f - (1e-30)
0.10000000000000007


575 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 07:44:05.77 ]
eps=1e-30
とかじゃなく、その言語が提供している定数使おうぜ
Fortranはしらんけど、Pythonはこう、

>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024,
max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021,
min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16,
radix=2, rounds=1)
>>> sys.float_info.epsilon
2.220446049250313e-16
>>> a = 1.0 - sys.float_info.epsilon
>>> b = 1.0
>>> a <= b
True
>>> a == b
False

576 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 11:39:34.94 ]
比較の不等号を反転させて、その結果のnotをとればいいじゃない



577 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 14:00:29.66 ]
はあ?


    ,,,..-‐‐‐-..,,,
   /::::::::::::::::::::::::ヽ        _,..-‐‐-..,,,
  l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ
  l:l    ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
  ヽ   /   :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l
   ~ヽ/      ::::::::::::::::::::::::::U::ヽミ   .ll
    / / ̄^ヽ   ::::::::::::::::::::::U:::ヽ  ,.ノ ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
    /  |  ・ .|     :/ ̄^ヽ:::::::l'^~ .<
  ‐/-,, ヽ,_,,ノ      |  ・  |:::::::l  <
   l  ~^''     `‐'   ヽ.,_,,ノ  :l  <   | ヽ                     / ̄ ̄\
  '''l^^~~~    / ̄ ̄ヽ    -‐‐‐--l-  <   |  ヽ   __                  |
   ヽ、 ,,,,  | |||!|||i||!| |   ~^'‐..,,_/  <  /    \   |ノ      ――――     /
    / (:::::} | | |ll ll !!.| |    ,,,, イ~'''  < /      \ 丿 アアァァ           |
    l:  ~~  | |!! ||ll| || |   {:::::) ::l    .<                            ●
   l:      | | !   | l    ~~  l   <
   l、     ヽ`ニニ'ノ       ,l>    V V V V V V V V V V V V V V V V VV V V V V
   /^‐-,,____,,,,,,,,..................,,,,,,,__,,,.--ヽ
   ~‐‐'~             ^'‐‐~

578 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:19:08.35 ]
>>> float(numpy.finfo(numpy.float32).tiny)
1.1754943508222875e-038
>>> float(numpy.finfo(numpy.float64).tiny)
2.2250738585072014e-308
>>> float(numpy.finfo(numpy.double).tiny)
2.2250738585072014e-308

579 名前:デフォルトの名無しさん [2012/02/22(水) 01:27:16.78 ]
これで machine epsilon は求まりますか?

f = 1.0
while f != f / 2.0:
f /= 2.0
print f


580 名前:デフォルトの名無しさん [2012/02/22(水) 01:28:35.01 ]
訂正
f = 1.0
while f != f / 2.0:
  f /= 2.0
  print f

581 名前:デフォルトの名無しさん [2012/02/22(水) 05:13:48.78 ]
正規表現である文字を大文字にするとき、どう書けばいいんでしょうか
文字列'foobar'の'o'を'O'に変換

※perl
my $s = 'foobar';
$s =~ s/(o)/\u$1/g;
print $s; #=>'fOObar'

※python
s = 'foobar'
× s = re.sub(r'(o)', r'\u\1', s)
× s = re.sub(r'(o)', '\\1'.upper(), s)

582 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 05:30:31.59 ]
re.sub('o', lambda m: m.group().upper(), s)

583 名前:581 [2012/02/22(水) 05:58:51.72 ]
>>582
マッチオブジェクトを受け取る関数をsubの第2引数にできるんですね。
マニュアルを見るとsubの第2引数は文字列または関数となっていますが、実感してませんでした。
メタシンボルの\uは無理としても、式の戻り値が入らないのが不思議でならず、そこで止まってしまってたんですが
やっとクリアになりました。ありがとうございます!

584 名前:デフォルトの名無しさん [2012/02/22(水) 08:59:17.97 ]
BeautifulSoup 4.0Betaを、Python3.1にインストールしようとして、tar.gzを展開した後
$sudo python3.1 setup.py install
を実行すると次のエラーで失敗します
-------------
(略)
running install_lib
byte-compiling /usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py to conf.pyc
File "/usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py", line 43
project = u'Beautiful Soup'
                ^
SyntaxError: invalid syntax
-------------
なにか対策はあるでしょうか?
pythonはDebian Squeeze標準のpython3.1です

585 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:13:54.32 ]
2to3

586 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:38:35.52 ]
>>585
tar.gzを展開した場所で
 $ find ./ -name *.py -exec 2to3 -w {} \;
のあと
 $ sudo python3.1 setup.py install
を実行したら問題なくインストールできました!

このツールをすぐ使おうとしてpythonを始めたもので……
ありがとうございました



587 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:56:49.02 ]
2.7も入れて使い分けたらいいんじゃねーの

588 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 06:50:22.36 ]
Udacityに参加してる人いる?
俺はプログラミング自体初心者に近いからCS101に挑戦中でふ。

589 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 11:40:58.23 ]
コマンド呼び出しと関数呼び出しの両方ができるスクリプトはできないのでしょうか?
test_disp.pyは引数を表示する機能があります。

import sys
def main(argv='default'):
import sys
if len(sys.argv) == 2:
argv = sys.argv[1]
print 'called by command ', argv
else:
print 'called by module ', argv

if __name__ == '__main__':
main()

これを下記のtest_caller.pyから呼び出して、
import test_disp
test_disp.main('./test_disp.py')

called by module test_disp.py
と表示させたいのですが、'argv' is not definedとなります。
どうすればいいのでしょうか?


590 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:03:25.37 ]
馬鹿には無理

591 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:31:22.87 ]
普通にデバッグしてね

592 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:06:23.08 ]
import sys
def main(argv='default'):
if __name__ == '__main__':
# '''
# if len(sys.argv) == 2:
# '''
argv = sys.argv
print('called by command', argv)
else:
print('called by module', argv)

# if __name__ == '__main__':
# print('__main__')
main()

593 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:38:05.56 ]
>>589
インデントがおかしい

def main():
    if len(sys.argv) > 1:
        print ...
    else:
        print ...

if __name__ == '__main__': main()

とかしなきゃだめ

594 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:47:05.07 ]
>>593,592
ありがとうございました。うまくいきました。
インデントエラーが出てないので、てっきり意図通りになっていると
勘違いしてました。
それにしてもここは、本当にまともな掲示板ですね。
私がよく訪れる仕事関係の板は、ソマリアみたいなところなんで、
びっくりしました。
この板とpythonと回答者に幸あれ。

595 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:54:11.13 ]
>>594
うっさい市ね!

596 名前:デフォルトの名無しさん [2012/02/23(木) 16:52:12.56 ]
ここまで全部自演



597 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:57:16.12 ]
むかしはアンチスレが一番まともだったんだが
いまはここなのか

598 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 17:26:49.11 ]
なんか殺伐として来たな。

599 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:27:11.59 ]
対象をよく知ってるアンチほど怖いものはない

600 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:27:42.66 ]
ソマリアの比喩がなんなのか分からん
悪い意味で言ってるんだろうなーくらいは検討つくけど

601 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:06:39.95 ]
>>600
ソマリアつったら海賊問題だろ
海賊仕事関係の板
つまり594は海賊

602 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:47:59.69 ]
糞詰まらんし

603 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:52:14.18 ]
ストッパおすすめ

604 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 16:14:26.19 ]
糞が詰まった

605 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:31:02.95 ]
すみません。
質問させてください。

あるメソッドのテストを行っています。
そのメソッドは引数として整数を一個取り、その整数の範囲は1~100とします。
そのため、テストとして0や101を入れると例外が返ってくることを期待するテストを作ることを考えています。
しかし、そのときふと思ったのですが、引数の型が整数に限定されている場合、引数の型チェックも行うべきなのでしょうか?
今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。

初心者丸出しの質問かもしれませんが、よろしくお願いいたします。



606 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:36:27.55 ]
>>605
isinstanceを使うんだが、テストについてはこのリンクが極めておすすめ
Python3だけど

第9章. ユニットテスト
diveintopython3-ja.rdy.jp/unit-testing.html



607 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:08:47.13 ]
その程度だったら、
assert isinstance(a, int) and 1 <= a <= 100
って一番最初に書いといて、以降はその仕様は忘失の彼方だな・・・

608 名前:デフォルトの名無しさん [2012/02/25(土) 13:17:07.38 ]
>>606
情報ありがとうございます。
リンク先を読ませていただきましたが、一般的なTDDの説明かと思いました。
いまいち、変数に型がないことによるメリットがわかりませんでした。
その辺をわかりやすく解説してあるサイトなどありましたら、教えていただけると助かります。

よろしくお願いいたします。


609 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:27:16.06 ]
30
30
28カ所
約28カ所
約28箇所
不明

のような文字が1行づつに入力されたテキストファイルがあるのですが、
これから数字のみを抜き出したいと考えているのですが、どのようにすればよいでしょうか?
数字だけであれば全角文字をifで半角数値に置換すればいいかと思うのですが、
それ以外の文字を削除する方法が思いつきません。

610 名前:609 mailto:sage [2012/02/25(土) 13:28:55.66 ]
すみません 書き漏れがありました

40箇所か39カ所
のような2つ数字が現れる文字もあるかもしれません。
その場合は最初に出てきた数次だけ抜き出したいです

611 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:04:53.49 ]
正規表現を使って最初に出てきた数字だけをリストに放り込んでいくのはダメなん?

612 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:05:45.24 ]
import re

with open('tech509.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)', l)
if num_str:
print('num_str =', num_str.group())
print()

tech509.txt
aaaaa30お前のカーチャンでーべそw
あいうえお30お前のカーチャンでーべそw
かきくけこ28カ所お前のカーチャンでーべそw
mmmmmm約28カ所お前のカーチャンでーべそw
fed@@@@約28箇所お前のカーチャンでーべそw
mふぃfじゃいえいえいふぉえ不明お前のカーチャンでーべそw
ffieie40箇所か39カ所お前のカーチャンでーべそw

613 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:06:37.24 ]
609でしたーざんねーん
無念、無念の誤読〜

614 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:14:07.22 ]
ちゃんと仕様を確認していませんでした。
はいはい、どうもすいませんっした。

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.findall(r'((約|か)?([0-90-9]+)(箇所|カ所)?|不明)', l)
if num_str:
print('num_str[2] =', num_str[0][2])
# print('num_str =', num_str)
print()

615 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:20:54.26 ]
はいはい、これで完璧っすかね
何回もやり直してすいませんっした

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str.groups()[1]:
print('num_str.groups()[1] =', num_str.groups()[1])
# print('num_str =', num_str)
print()

616 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:31:23.89 ]
なんで最初の一個だけでいいの?
別に言わなくてもいいんだけどさ。
私の感覚的にはnumsが正解なんだけど。

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?)|不明', l)
# or
if num_str.groups()[1] or 1:
print('num_str.groups()[1] =', num_str.groups())
# print('num_str =', num_str)
num_str = re.findall(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str:
print('num_str =', num_str)
nums = [tup[1] for tup in num_str]
print('nums =', nums)
print()



617 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:38:10.70 ]
ここだけ

nums = [tup[1] for tup in num_str if tup[1]]

↑に修正だわ

618 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:36:47.47 ]
「数字だけを抜き出す」のが要望としか読めないんだけど、他の文字をマッチングさせてるのはなぜだろう

619 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:41:57.51 ]
〜カ所という形式でなく、

一、関係ない場所で20日、98度などといった形式での数値があると予想できる
二、仕様変更に対する耐性をつけておくため
三、自分でも必要とする時があるかもしれないので自分の感覚通りのものを拵えておいた

620 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:07:07.43 ]
#Python 2.7
import re, codecs

r = re.compile(u'[01234567890123456789]+')
f = codecs.open('test.txt', 'r', 'utf-8')
l = f.readlines()
f.close()
n = [re.search(r, s).group(0) if re.search(r, s) else '' for s in l]

for s in n:
print s

621 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:22:35.78 ]
そういえば、スタックとヒープを可視化しながらPythonコードを1行ずつ実行してくれる、初心者向け素敵Web実行環境は既出ですか?
ttp://people.csail.mit.edu/pgbovine/python/tutor.html#mode=edit

622 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:42:50.00 ]
pdb使ったらいいんちゃうん?
あと、>>621のいうスタックは、localsのことだろうと思う。

623 名前:デフォルトの名無しさん [2012/02/25(土) 21:36:24.88 ]
pythonでクラス作っていますが、インスタンス変数、クラス変数へのアクセス制御(private,publicなど)はどうすればいいのですか?


624 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 22:16:26.99 ]
property
_underscore_name

625 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 23:02:08.02 ]
>>624
ありがとうございます。
命名規則で対処できたんですね


626 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:12:10.81 ]
そういうお約束にしましょうよって話。
まあ、これくらいは読んでおいてね。

Python のコーディングガイド PEP8 - 日本語訳
www.oldriver.org/python/pep-0008j.html

メソッド名とインスタンス変数

関数の場合と同じルールを使う。lowercase 方式で命名し、可読性を上げ
るためにアンダースコアで単語を区切る。

非公開なメソッドとインスタンス変数にのみ、先頭にアンダースコアを1
つ使って命名する。

   ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。

継承のための設計

クラスのメソッドやインスタンス変数(つまり「属性」)を公開すること
の是非を、常に考慮する。どちらがいいか分からないときには、非公開に
する。公開属性を非公開にするよりも、非公開属性を公開にするほうが容
易である。

公開属性にするということは、あなたのクラスを他人が使うことを想定し、
将来の非互換性を避けることを約束したということだ。非公開属性にする
ということは、他人が使うことを想定しておらず、変更したり削除したり
するかも知れないということだ。

   ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。

あと、最低でもこれ一通り読め。
diveintopython3-ja.rdy.jp/index.html



627 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:57:11.94 ]
>>622
グローバルなのも表示されとるよ。

デバッガ使えば似たようなことできるのは知ってるが、
初心者でも手軽に使えそうだし、特にmutable, immutable関連での頻出の質問に対する
かなり明確な答えになると思われるし、初心者向きスレには需要あるかと思って貼ってみた。

628 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 03:21:30.42 ]
>>623
アクセス制御なんてない

629 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 09:58:23.94 ]
>>626
了解。
まずは、勉強させてもらいます。

>>628
pythonにカプセル化とかの概念はないのですか?

630 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 10:02:01.50 ]
概念はあるでしょ。

言語仕様で縛るか、お約束でやるかの違い。

631 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:10:45.72 ]
透明どころか手を中に突っ込めるカプセル

632 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:55:27.36 ]
こういうシンプルな書き方ってできないのですか?
for x in a_list if a_condition(x):
 do_something(x)

こう書けるのはわかりますが、filter とか lambda とか面倒で気に入らない
for x in filter(lambda x: a_condition(x), a_list):
 do_something(x)

こう書けるのもわかりますが、無駄に冗長でウンコ臭い
for x in [x for x in a_list if a_condition(x)]:
 do_something(x)

633 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:03:43.20 ]
for x in a_list:
    if a_condition(x): do_something(x)

634 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:06:25.76 ]
def is_odd(n):
return n % 2

a_list = [i for i in range(10)]

for x in filter(is_odd, a_list):
print(x, 'is odd.')

635 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:14:31.83 ]
>>633-634
やっぱりそういう書き方しかないですか?

>>633
それ do_something(x) が複数の文になるとインデント2段になりますよね

>>634
a_condition(x) をいちいち関数定義するのは面倒ですね

636 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:30:07.95 ]
>>632の一番上は分かりにくくないかい?
continue使えば?ってなりそうな気がした。

def is_odd(n):
return n % 2

a_list = [i for i in range(10)]

for x in a_list:
if not is_odd(x):
continue
print(x, 'is odd.')



637 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:35:54.48 ]
>>636
うーん。もし書けるなら、これの方が
for x in a_list if is_odd(x):
 print(x, 'is odd.')

これより簡潔で分かりやすいと思うんだけど
for x in a_list:
 if not is_odd(x):
  continue
 print(x, 'is odd.')

638 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:12:04.71 ]
そうかもなあって思っちゃってる。
continueがない分いいってか。
うーん、、、

for x in a_list if is_odd(x):
for x in filter(is_odd, a_list):

上2つは等価なfor文だけど、
修正が大変とかで上の文法は採用されなかったんだろか。
上の方を満たすためにfilter()用意したんじゃないかな?
って思ってる。
ここは我慢してPythonに合わせるしかないんじゃないの?

話を元に戻して、

> こういうシンプルな書き方ってできないのですか?
> for x in a_list if a_condition(x):
>  do_something(x)

↓って言われちゃう。できないっぽいねぇ

for x in a_list if is_odd(x):
^
SyntaxError: invalid syntax

639 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:21:18.40 ]
>>638
>修正が大変とかで上の文法は採用されなかったんだろか。

SyntaxError: invalid syntax ってなることからわかるように、
文法を変えないといけないからでしょ。

特定の場合に便利だからといって、どんどん文法を増やすと
それ以外の場合に却って使いにくくなったりするからねぇ。

640 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:51:17.81 ]
書ける
for x in a_list:
 if is_odd(x):
  print x

書ける
for x in a_list:
 if is_odd(x): print x

書けない
for x in a_list: if is_odd(x): print x


641 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:15:20.82 ]
もうpythonじゃなくていいんじゃないの?
自分の好きな書き方が出来る言語を探せばいい
無ければ作ろう

642 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:55:55.38 ]
    お断りします
        お断りします
            お断りします
      ハ,,ハ ハ,,ハ ハ,,ハ ハ,,ハ
     ( ゚ω゚ )゚ω゚ )゚ω゚ )゚ω゚ )  お断りします
    /    \  \  \  \    お断りします
  ((⊂  )   ノ\つノ\つノ\つノ\つ))   お断りします
     (_⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ       お断りします
      ヽ ヘ } ヘ }  ヘ } ヘ }
  ε≡Ξ ノノ `Jノ `J ノ `J ノ `J

643 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 18:46:27.49 ]
なくなるなら宝石が先

644 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 19:03:06.98 ]
>>643
いや
641は632に対してね

645 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:15:44.71 ]
いろいろ考えたけど
内包表記やラムダなどを駆使して関数的に美しく書くなんてのは
Python では目指さない方が良さそうだというところに落ち着いた
やって出来ない事はないけど、やっぱり関数型言語ではないので
関数的なスタイルで読みやすいコードを書くのは難しい。

凝ったことはせずに
素直に手続き的に書いて関数も一つ一つ def する
というのが Python のコツっぽいかな?

646 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:39:15.16 ]
>>626
リンクのdive into python3はまとまっていてわかりやすそうかと思いました
python3を対象としていますが、今からpython勉強する場合は3がいいでしょうか?
なんか、ネット徘徊していると、2を勉強すべしとの意見も多いので困っています
よろしくお願いいたします





647 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:57:21.03 ]
どっちかで迷うくらいなら、3系がいいと思うよ。
私は3系のみ勉強している。
2系を折角勉強したのに、3系では邪魔知識になるとか嫌でしょ。
既存のPythonの資産を使いたいとかなら、
2系の勉強も考えた方がいいかも知れないけど、
そうじゃないなら3系からの勉強でいいと思う。

>>646が、Pythonをなぜ使いたいのかが一番大きい。

648 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 06:28:08.91 ]
Python3の現時点のデメリットは対応ライブラリが少ないくらいで至急何か作る必要がなければ困らないと思うよ
Python2は文字コードべったりなんでunicodeの暗黙の変換とかかなり分かりにくい

649 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:06:32.98 ]
勉強するだけなら Python 3 でも構わないかもね。
現実に使うのは厳しいが。


650 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:12:40.46 ]
どうしても、本人がどうしたいかになるんだよね。

651 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 11:53:03.88 ]
u"3だと日本語書くためにいちいちuつけなくていいから楽"


652 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 12:08:34.16 ]
全角だし

653 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 19:57:44.25 ]
つ[from __future__ import unicode_literals]

654 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 22:12:03.40 ]
>>649
目的が勉強だけって…
それはプログラミングやる意味ないんじゃ…

655 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:00:49.73 ]
勉強の意味が
数学や英語の学業としての勉強じゃなくて、
学んでいるという意味の勉強じゃないのかな?

656 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:04:47.16 ]
プログラム言語なんてその言語特有のお約束を覚えればいいだけじゃん
制御構文や変数はどの言語だって共通してるし

つまり



657 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:06:42.91 ]
>>647
単純に、Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです
今現在のLinuxで動いているpythonとすると2系が多いですかね
個人的には3が勉強したいですけど


658 名前:デフォルトの名無しさん [2012/02/27(月) 23:24:21.45 ]
Python製のフレームワークって今何がHOTなの?

659 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:28:07.90 ]
>>657
両方勉強するのはだめなの?

660 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:41:16.90 ]
ライブラリの多さがpythonの利点なんだし
Python3なんて選択肢に入らない

661 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:47:18.01 ]
最初はどっちかに絞った方がいいと思ます。
二兎追うものは一兎も得ず
っていうじゃないですか。
どちらも理解できれば一番いいけど、そう上手くいくかな?

> Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです

今度は、どんな目的で調べているかによる。なんつって。
範囲が広いんだよねー。

中身を読んでるってことですよね。
ふむ。
改良や開発目的で調べてるの?
そのソフトウェアの開発者達が、
後継の開発を2で行うって言ってるんなら、2の勉強だろうし、
3で行うってのが多勢なら3だろうし。

662 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:07:28.87 ]
smtplibについて質問させてください。

会社のメールサーバーに対して

> telnet XXX.XXX.XXX.XXX 25
を実行するとうまくつながるのですが、

以下のように実行するとエラーが発生します。
原因が何かヒントをいただけないでしょうか。
import smtplib
s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)


c:\test\python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>

663 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:09:29.04 ]
>>661
中身は読んでいますけど、ほとんど趣味ですね
会社から要求されているのは単純な使い方と性能のみ
でも、個人的に興味持って色々と調べています

ま、趣味なんで、3勉強してみます


664 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:28:07.37 ]
こちらからもちょっと質問させて下さい。

> telnet
>>> import smtplib

って同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?

まあ、これが答えのような気もするけど。
socket.error: [Errno 10061] 対象のコンピュータによって拒
否されたため、接続できませんでした。

665 名前:デフォルトの名無しさん [2012/02/28(火) 01:20:53.58 ]
scipyとmatplotlibが移植されたんで、自分的には3でも結構逝ける。

666 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 01:46:09.75 ]
俺はいつも逝ってる
むしろ吊ってるし詰んでる



667 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 05:58:14.65 ]
>605
>今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。

>608
>いまいち、変数に型がないことによるメリットがわかりませんでした。

型はある
型宣言が無いだけ

668 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:05:53.88 ]
>632
for x in filter(a_condition, a_list):
 do_something(x)

669 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:14:14.91 ]
ワッフル ワッフル

670 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:31:08.22 ]
>>662
telnetでサーバからのリプライは確認した?
220 <ホスト名> ESMTP Sendmail ... とか返ってくるはずだけど

671 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:43:35.75 ]
>>670
はい、返ってきました。
これがうまくいっているので、どうしてエラーが起こるのかわからないんです…

672 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:13:17.56 ]
>>671
となるとちょっとわからない。ごめん
wiresharkでも使ってtelnetとsmtplibの通信内容を比べてみては

673 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:17:43.69 ]
wiresharkじゃなくてdebug設定では

674 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:30:31.34 ]
-v
-vvv

675 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:37:01.98 ]
>>667
メリット教えてやれよ


676 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 09:38:41.68 ]
>>675
ダックタイピングができる



677 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:14:31.80 ]
>>667
値に型があるんであって、変数に型はないでしょ

678 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:31:13.65 ]
変数はオブジェクト型またはプリミティブ型もしくはNoneです

679 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 17:53:02.28 ]
Pythonにはプリミティブ型なんて無い。
Noneもただのオブジェクト。

680 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 18:15:00.11 ]
pythonにはオブジェクトしかない

お前もオブジェクトにしてやろうか

681 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:05:46.33 ]
ひぃいぃ

682 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:27:45.80 ]
ジェクジェクにしてやろう

683 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:29:29.76 ]
壊れてすっかり職場のオブジェ

684 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:04:10.42 ]
>>671
[Errno 10061] は、WSAECONNREFUSED のことだろうから、
接続先のサーバーで smtp サーバーが動作していない (正確には、
該当のポートをリッスンしている奴がいない) ことを示している。

本当に、telnet と同じサーバーに繋ぎにいこうとしてる?

もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?

685 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:16:28.49 ]
>>684

> もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?

これはどうしてダメなんですか?
025のゼロがダメなんでしょうか。すいません。

686 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:57:53.76 ]
>>685
8進数だから



687 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:25:20.84 ]
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
...

から見るにそんなことはしていなそうでしたが。

同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?

とりあえず、pingは通りましたが送信できずに困ってますとかって言って欲しい。

688 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:55:30.51 ]
良心的に見て
>>> s = smtplib.SMTP('192.168.080.025', 25)
とかがアウトっていう意味か

ping が通ったからと言って telnet (IP) 25 が通る保障はどこにもない

689 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:58:36.06 ]
そしてpingが通らなくてもSMTP接続出来ることなんていくらでもある

690 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 05:48:42.36 ]
そして>662を読めといいたい

691 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 07:00:15.35 ]
こういう話だったらいいなあ
ja.wikipedia.org/wiki/Outbound_Port_25_Blocking

以下smtplib.SMTPでもdebuglevelが使えるようなので
今回の件には役に立ちそうにないけど一応

import smtplib
smtplib.SMTP.debuglevel = 1
con = smtplib.SMTP(hostname, 25)
... debug情報がずらずら ...

692 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:21:38.30 ]
クライアントの PC は同じ環境からアクセスしてんのかな
あと telnet するときの IP と smtplib.SMTP するときの IP
( XXX.XXX.XXX.XXX の部分 ) は本当に同じなのかな


693 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:21:00.17 ]
pythonでインスタンスのアドレスを知る方法ってないんでしょうか?
ずっと勘違いしてて id でアドレス表示してるのかと思ったら
全然そんなことないですよね
id の仕様を見ても「識別子」としか明言してなくてアドレスだとは一言も言ってないし

694 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:38:44.02 ]
help(id)

695 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:35:05.47 ]
あってるよ

Python/bltinmodule.c [926/2392行][38%]
static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
return PyLong_FromVoidPtr(v);
}

PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");

696 名前:デフォルトの名無しさん [2012/03/01(木) 15:22:17.92 ]
あってるね



697 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:48:39.27 ]
(1) (2) (3) を同じPC(Windows XP)で実行しました。
スクリプトからの接続を拒否する仕組みってあるのでしょうか?

-----------------------------------------------
(1) pingを実行した場合、以下のように成功します。

c:\test>ping 100.100.100.100

Pinging 100.100.100.100 with 32 bytes of data:

Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63

Ping statistics for 100.100.100.100:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms











698 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:49:08.93 ]
-----------------------------------------------
(2) telnet を実行した場合、以下のように成功します。

c:\test>telnet 100.100.100.100 25

220 xxx.xxx.co.jp ESMTP Postfix




699 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:50:13.53 ]
-----------------------------------------------
(3) pythonを以下のように実行するとエラーが出ます。

c:\test>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> smtplib.SMTP.debuglevel=1
>>> con = smtplib.SMTP('100.100.100.100', 25)
connect: ('100.100.100.100', 25)
connect: (25, '100.100.100.100')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>


700 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:52:26.58 ]
単にファイアウォールにひっかかってるだけじゃないの?

701 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:54:28.83 ]
>>698
この先に進もうとしようとすると同じように失敗しない?
telnetでどうやってメール送れたの?
受信確認はどうやったの?

702 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:42:02.63 ]
>>700
例えばノートンなんかに
(telnet.exeの通信は止められていないけど)
python.exeの通信が止められてる可能性があるってことか

703 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:22:05.12 ]
ファイアウォールというかセキュリティソフトのチェックかもな
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけだろ


704 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:39:38.90 ]
かもとだろって、両立するの?

705 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:54:24.88 ]
自然言語では両立するでしょ。

706 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:24:24.48 ]
嘉本さんのこと言うなー



707 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:31:16.20 ]
(馬)鹿本だろう

708 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:36:14.76 ]
ぶるるるぁ

709 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:51:13.63 ]
webページをダウンロードして内容をファイルに書くところで詰まってるんだけど、

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open('D:\P/output.txt', 'w').write(mainline)
TypeError: expected a character buffer object

と出るんだけどどうしたらいいの書き込もうとする文字列が一定以上の量だとエラー出る感じだけど

710 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:21:04.13 ]
type(mainline)
確認してみたら?
文字数が変わると内部でmainlineのtype変えてるんじゃないの?

711 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:40:50.14 ]
import StringIO
open('D:\P/output.txt', 'w').write(StringIO.StringIO(mainline).getvalue())

712 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 23:37:00.57 ]
>>699
>connect: ('100.100.100.100', 25)
>connect: (25, '100.100.100.100')

なんで二行でるんだ?

とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。

>>700
多分、それはない。
もし、そうなら、10060 (WSAETIMEOUT) になるはず。

713 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:34:59.65 ]
>>701

今日試しました。
telnetでメールが送信できました。
以下のサイトを参考にました。
www.nurs.or.jp/~telnet/smtp.html

受信はメールソフトを使いました。

なんでだめなのか、さっぱりわかりません。

714 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:38:30.40 ]
>>712

何度かためしましたが、確かに二行が表示されます。

> とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。

やりましたが、結果は全く同じです。
ひとつわかったことがあります。

IPアドレスを100.100.100.100じゃなくて、でたらめな値に変えても全く同じエラーが発生します。
telnetを使って100.100.100.100 でメール送信できたので、ipアドレスが間違っていることはありません。
smtplib のソースにデバッグコードを埋め込んでどこまでうまく動いているか、切り分けするしかないんでしょうか。



715 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:44:54.17 ]
ファイアウォールというかセキュリティソフトのチェック
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけ

716 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:54:29.66 ]
多分PCから出れてないわ
みんながいうようにファイア・ウォールが原因だと思うぞなもし
一度ファイア・ウォール、セキュリティ関係諸々を停止させてから試してみなよ
そしたら上手くいくと思う



717 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:57:53.99 ]
localhost, 127.0.0.1だったらうまくいくんだっけか?

718 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:58:29.82 ]
職業別の人気順位
      (an・an調べ)
xbrand.yahoo.co.jp/category/lifestyle/7380/1.html
1位 システムエンジニア
2位 公務員
3位 銀行&商社マン
4位 警察・消防・自衛官
5位 マスコミ・営業マン・広告マン
6位 企業経営者
7位 医師
8位 弁護士、公認会計士

719 名前:デフォルトの名無しさん [2012/03/03(土) 00:59:02.50 ]
馬鹿には無理






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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