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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その14
http://toro.2ch.net/test/read.cgi/tech/1342660231/
関連スレ
Pythonのお勉強 Part47
http://toro.2ch.net/test/read.cgi/tech/1341819025/
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
http://toro.2ch.net/test/read.cgi/tech/1235050215/
◆関連リンク
Python の Home Page
ttp://www.python.org/
2デフォルトの名無しさん:2012/10/20(土) 16:35:06.20
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
3デフォルトの名無しさん:2012/10/20(土) 16:37:34.49
日本語の扱いで戸惑ったらこちらをどうぞ(バッドノウハウ集で笑える)
http://speirs.blog17.fc2.com/blog-entry-4.html
http://atomic.jpn.ph/prog/etc/encode.html
http://d.hatena.ne.jp/kakurasan/20100330/p1

http://pc11.2ch.net/test/read.cgi/tech/1217836194/339
    PythonのUnicodeEncodeErrorを知る
    http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html
    よくまとまってた。あとで読む

最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')
Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html
4デフォルトの名無しさん:2012/10/20(土) 16:38:32.40
さっき見つけたPython効率化のブログ記事。今までnamedtupleとか使ってなかったわ
http://blog.explainmydata.com/2012/07/expensive-lessons-in-python-performance.html
5デフォルトの名無しさん:2012/10/20(土) 16:41:48.39
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
6デフォルトの名無しさん:2012/10/21(日) 07:49:08.28
いちもつ
7デフォルトの名無しさん:2012/10/21(日) 07:57:12.87
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
8デフォルトの名無しさん:2012/10/21(日) 08:06:49.23
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP
9デフォルトの名無しさん:2012/10/21(日) 08:53:18.55
おまわりさんこのひとです
10デフォルトの名無しさん:2012/10/21(日) 09:36:54.04
これってまさか
BASE64でエンコードされた遠隔操作命令…?
11デフォルトの名無しさん:2012/10/21(日) 10:03:13.26
dumpしてみた。
78 da 6b 74 68 44 86 71 - fa 5c c8 bc 46 07 05 7d
08 fb d4 bd 6d eb e1 52 - 0a fa fa 8d 77 34 1b f7
37 06 02 e1 7e b8 b0 be - 5e 4d a3 83 5e 8d 42 73
2e 92 19 41 5c 30 3d 8d - 0e 40 e9 1a 05 20 67 0e
54 6e 8e 02 98 0b 86 50 - 65 fa 0a 60 65 73 92 41
1c 0d 85 f8 c6 39 f1 9a - 8d 0e cd 75 0a 53 f2 fa
d6 36 9d 6c 3a 3b 6d f3 - f4 b9 5c 30 03 c1 6a 1b
83 20 8c 7d 35 60 03 1a - 03 b9 20 34 d0 f5 2d 0b
60 ae 80 ba 29 be 31 0e - 2c ab d4 18 80 02 33 f5
f4 9a 73 15 00 51 5e 67 - 8f
なんぞこれ?
12デフォルトの名無しさん:2012/10/21(日) 12:11:50.77
zlib.decompress してみよう
13デフォルトの名無しさん:2012/10/21(日) 16:04:34.25
# CPython 3.2.3
import zlib, base64
print(zlib.decompress(base64.b64decode(b'''eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP''')).decode('cp932'))
14デフォルトの名無しさん:2012/10/22(月) 17:53:36.06
前スレ1000見て笑いが抑えられなかった、で変な目で見られた…roz
15デフォルトの名無しさん:2012/10/25(木) 21:04:21.78
質問です
あーでもないこーでもないと書いてはエラーで怒られての繰り返しする中で
IDLEで試行錯誤>使える部分をテキストエディタにコピペ>○○.pyで保存とやってます

iptyhonとかbpythonとか触ってみると色々補完してくれてとても便利なんですが
この辺のファイルに落としこむ作業は簡単なんでしょうか?
自分が見た限り%logstartとか最初から清書できる感じじゃないと無理なような。。。
16デフォルトの名無しさん:2012/10/25(木) 23:02:48.54
解読班
17デフォルトの名無しさん:2012/10/26(金) 00:11:39.57
>>15
セッションまるごと保存して後から必要な箇所だけ切り貼りするのではだめなの?

だめならemacsでM-x termからpython起動してあれこれ試して
保存したい箇所ができたら選択してwrite-regionとか
18デフォルトの名無しさん:2012/10/26(金) 00:25:56.63
試行錯誤で作られたプログラムなんて使いたくないな
19デフォルトの名無しさん:2012/10/26(金) 00:43:12.78
どなたも切り貼りしてるのですか
ありがとうございました
20デフォルトの名無しさん:2012/10/26(金) 01:25:05.26
試行錯誤して使える部分を切り貼りされたプログラムなんて使いたくないな
21デフォルトの名無しさん:2012/10/26(金) 01:59:04.12
emacs/python-mode C-c C-r で選択範囲を interactive shell に送る

切り貼りするならwxPython付属のPySlicesが便利かもしれない
インタラクティブにコードを実行できる環境で,一旦間違ったコードも編集/再評価が出来る,
コピペの際 選択範囲に>>>や...を含まない.
22デフォルトの名無しさん:2012/10/26(金) 14:10:57.29
Python3 系で CLOS の (class-direct-superclasses ...) みたいな,
動的に親クラスを調べる方法ってありませんか?
23デフォルトの名無しさん:2012/10/26(金) 14:15:57.60
super().__class__
24デフォルトの名無しさん:2012/10/26(金) 14:22:22.67
>>23 ありがと
でも, ちょっと違う.
(class-direct-superclasses (find-class <クラスネーム>))
の様な感じで, 指定したクラスの親リストが欲しいんです

# 説明不足で申し訳ない
25デフォルトの名無しさん:2012/10/26(金) 14:49:32.60
SomeClass.__bases__
26デフォルトの名無しさん:2012/10/26(金) 16:41:26.14
self.__class__.__bases__
27デフォルトの名無しさん:2012/10/27(土) 07:13:22.70
http://www.python-izm.com/contents/introduction/syntax.shtml

を参考にしてるんですが、
文字コードを「UTF-8」で作業ディレクトリへ保存するにはどうすればいいんでしょうか?
28デフォルトの名無しさん:2012/10/27(土) 09:36:01.40
>>27
使ってるテキストエディタ(メモ帳とか)の名前を言えば誰かが具体的な方法を教えてくれるかも
作業ディレクトリ(カレントディレクトリ)がよくわかってなかったら
コマンドプロンプト 作業ディレクトリ cd dir あたりについてぐぐるといい

回答とは関係ないけどWindowsのPythonスクリプトでshebang書いてあるのを
初めて見たので色々ぐぐってたら、こんなのがあるのを知った
http://www.python.org/dev/peps/pep-0397/
29デフォルトの名無しさん:2012/10/27(土) 14:37:31.82
メモ帳で SJIS で保存して
python -c "open('outfile.py', 'wb').write(open('infile.py', 'rb').read().decode('cp932').encode('utf-8'))"
を実行すればいいよ
30デフォルトの名無しさん:2012/10/27(土) 14:43:12.81
>27-28

>1行目ではPythonのインタープリタへのパスを記述します。
>今回のような、単独でのモジュール起動では記述が無くても大丈夫ですが、
>別のモジュールから今回作成したモジュールをimport(取り込み)したいというような時には、
>モジュール内部にインタープリタへのパスを記述しておきます。 必要が無くても記述する癖をつけておきましょう。

そのサイトに書いてある内容デタラメだから参考にしない方が良いよ。
31デフォルトの名無しさん:2012/10/27(土) 16:04:20.19
ありがとうございます。テキストエディタはメモ帳です。
ググってみたところカレントディレクトリはpython27みたいです。

#! c:/Python27/python.exe
# -*- coding: utf-8 -*-

print u"モジュールのロード"

def test():
print u"関数:testを呼び出しました"

if __name__ == "__main__":

print "python-izm"
# print "パイソンイズム"
test()

という例の通りやってみても

c:\python27>test02.py
File "C:\Python27\test02.py",line4
print u"モジュールのロード"
SyntaxError:(uncode error)'utf8' codec can't decode byte 0x83 inpostin 0:
invalid start byte

と言うエラーが出てしまいます。2.6系が何故かうまく起動しないので2.73でやっていますが
このサイトは2.7には適応してないのでしょうか。
32デフォルトの名無しさん:2012/10/27(土) 16:09:50.04
>>29
ありがとうございます。SJISについて調べてみます。

>>30
初心者の中の初心者ですのでサイトえり好みできないんです(泣
33デフォルトの名無しさん:2012/10/27(土) 16:14:05.60
>>32
> 初心者の中の初心者ですのでサイトえり好みできないんです(泣

んなこたないだろ。本人の気持ち次第。
Dive into python と公式ドキュメントのチュートリアル見れ。
34デフォルトの名無しさん:2012/10/27(土) 16:14:50.39
そのサイトは参考にしない方が良いよ
35デフォルトの名無しさん:2012/10/27(土) 16:17:26.39
>初心者の中の初心者ですのでサイトえり好みできないんです(泣

「選り好み出来ない」の意味を取り違えてる。
初心者が間違ったサイトを参考に勉強するとかえって悲惨な事態になるだけ。
自分で初心者だと思ってるなら素直に先輩の言うことを聞いた方が良い。
36デフォルトの名無しさん:2012/10/27(土) 16:19:43.88
始めたばかりの初心者にDive into Pythonや公式嫁ってのは頭煮えてると思うよ
37デフォルトの名無しさん:2012/10/27(土) 16:21:14.74
エディタと文字コードについて触れずに初心者向けを標榜するのも煮えてるわな
煮えてない所を頼む
38デフォルトの名無しさん:2012/10/27(土) 16:24:34.15
みんなのPython買うのが手っ取り早い
39デフォルトの名無しさん:2012/10/27(土) 16:34:57.02
最速マスター使ってわけわかなところを質問してもらうというのはどうか
http://d.hatena.ne.jp/dplusplus/20100126/p1

>>31
初心者は慣れるまで日本語使わないほうがいい
コメントに使うのはOK(coding指定してある場合に限る)
40デフォルトの名無しさん:2012/10/27(土) 16:39:53.89
とりあえず今後のことを考えるならメモ帳を止めろといえよてめーら
41デフォルトの名無しさん:2012/10/27(土) 17:07:19.14
メモ帳でも問題ない
問題になるのは能力以上のことをやろうとしたとき
4227:2012/10/27(土) 17:29:43.80
>>29
Cドライブ直下にpython27というカレントディレクトリがあって、
その中に読み込みたいファイルtest02.pyがある場合そのコードのどこを変えればいいんでしょうか?


Dive into Pythonを見てきましたが解らない言葉が多すぎて手に負えませんでした。
簡単な実践から入れるサイトがそこしかないので、上達できたら他のファイルを見て修正していきたいと思います。

>>39
そこはまず飛ばしても大丈夫ですかね?ここで詰まってばかりも入れないので次に進んでみます。
43デフォルトの名無しさん:2012/10/27(土) 17:35:18.97
なんでそんな糞サイトに固執するんだ?
ステマか?
44デフォルトの名無しさん:2012/10/27(土) 17:41:54.10
まずはコマンドプロンプトとWindowsのファイルシステムについて学んだらどうですか
45デフォルトの名無しさん:2012/10/27(土) 17:48:46.69
本当に申し訳ありません。sjisについてもう少し調べてみた所
メモ帳のテキスト文字がANSIになっていた事が解り、utfにしてみたら解決してしまいました。
回答して頂いた皆さんありがとうございました。
46デフォルトの名無しさん:2012/10/27(土) 17:51:54.49
いえいえ
47デフォルトの名無しさん:2012/10/27(土) 17:54:04.34
Windows の shebang は BOM 付いてても問題起こさないのか
すげー(棒)
48デフォルトの名無しさん:2012/10/27(土) 21:53:51.79
(あのサイトは、「初心者用じゃねぇよ」ってちゃんと書いてあるじゃん...)
49デフォルトの名無しさん:2012/10/27(土) 22:05:13.11
中級者用でも玄人用でもないぞ。間違いだらけだから
50デフォルトの名無しさん:2012/10/27(土) 22:26:57.52
具体的には?
51デフォルトの名無しさん:2012/10/27(土) 22:50:04.69
例えば>>30で指摘されてるけどshebangがなきゃだめなモジュールなんてものはない
shebang書いとくとコマンドとして実行できて便利ってだけ
単独でのモジュール起動の場合にshebangつけずに
importされるモジュールの場合はshebangつけろっていうのはどう考えても変

あと自分が見たときはstr.splitの返り値がタプルとか書いてあった
52デフォルトの名無しさん:2012/10/27(土) 22:51:30.59
一応追記。スクリプトをコマンドにするなら実行権限も必要(Linuxの場合)
53デフォルトの名無しさん:2012/10/27(土) 23:00:15.57
>>51
そんなむちゃくちゃな記述どこにもないぞ。
俺はDive Into Pythonの話だと思ってたが、違うサイトの話だったのか?
54デフォルトの名無しさん:2012/10/27(土) 23:07:54.10
ああ、Python-ismとかいうサイトの話だったんですね。
関係各位の皆様、申しわけありません。
55デフォルトの名無しさん:2012/10/27(土) 23:11:44.79
各位って誰だよ死ね
56デフォルトの名無しさん:2012/10/27(土) 23:12:45.35
角煮
57デフォルトの名無しさん:2012/10/27(土) 23:14:29.81
角電池
58デフォルトの名無しさん:2012/10/27(土) 23:17:58.49
raise StopIteration
59デフォルトの名無しさん:2012/10/27(土) 23:36:10.11
>>55
ごめん
60デフォルトの名無しさん:2012/10/27(土) 23:36:34.04
超殺伐
61デフォルトの名無しさん:2012/10/27(土) 23:41:40.07
62デフォルトの名無しさん:2012/10/28(日) 03:44:01.53
エイサーじゃねぇのか
63デフォルトの名無しさん:2012/10/28(日) 03:47:08.72
今見たら治ってた
対応早すぎわろす
絶対2ちゃん見てる
64デフォルトの名無しさん:2012/10/28(日) 04:34:18.53
なおってねぇぞ
65デフォルトの名無しさん:2012/10/28(日) 04:43:43.44
影でこそこそ言うのも陰湿だから、
気付いた問題点をまとめて、お問い合わせフォームに送りつけとくわ。
66デフォルトの名無しさん:2012/10/28(日) 04:57:16.19
と思ったけど、問題点が多すぎるな...
67デフォルトの名無しさん:2012/10/28(日) 05:00:59.90
20分も待たずに挫折するとは
6865:2012/10/28(日) 05:45:46.52
とりあえず、shebangについてのデタラメと、文字列の項の問題点は指摘しておいた。
あとは知らん。
69デフォルトの名無しさん:2012/10/28(日) 19:31:44.42
or: N
70デフォルトの名無しさん:2012/10/29(月) 00:43:14.90
頑張ってチュートリアルサイト作ろうかな
71デフォルトの名無しさん:2012/10/29(月) 01:07:12.37
飽きるで
72デフォルトの名無しさん:2012/10/29(月) 17:55:57.33
みんなのパイチンくんとチンパイくん
73デフォルトの名無しさん:2012/10/29(月) 19:39:53.22
チュートリアルは有難い

そして俺はどのGUIを選べばいいんだー
やっぱTKINTERすか?
色々あってわけわかめ
74デフォルトの名無しさん:2012/10/29(月) 20:58:09.78
>>73
ttp://www.zetcode.com/ に一通りチュートリアル揃ってる

random.choice(["tkinter","PyQt4","PySide","wxPython","pyGTK"])
75デフォルトの名無しさん:2012/10/29(月) 21:37:45.74
>>74
あらあらどもです・・・ってどんだけあんだーw
76デフォルトの名無しさん:2012/10/29(月) 22:03:32.89
>>75
Python3に対応してるとなると選択肢が狭まる。
77デフォルトの名無しさん:2012/10/29(月) 22:52:47.85
>>76
あ、2でアップアップしてます
78デフォルトの名無しさん:2012/10/30(火) 00:16:01.46
"tkinter" -> 標準ライブラリ。手軽だが貧弱。
"PyQt4" -> Qtは商用アプリでもよく使われている。機能も豪華。(ただしGPL)
"PySide" -> PyQt4互換のLGPL版バインディング(新参なので若干バグあり)
"wxPython" -> 知らん
"pyGTK" -> 事実上Linux専用。GTKアプリを作りたいなら。
79デフォルトの名無しさん:2012/10/30(火) 00:43:52.00
wxPythonはそれなりにサンプルが揃ってたんで
やりやすかったが、未だにPython3未対応だな。
80デフォルトの名無しさん:2012/10/30(火) 01:02:53.89
78がすげー分かりやすい…
79の補足で埋まったし
しかし一長一短激しいのなー
81デフォルトの名無しさん:2012/10/30(火) 10:25:54.75
>79
Py3にこだわらなければwx最強だよ
pyQt4/PySideもありだけど将来不安でいまいち没頭しにくい
その他は糞
82デフォルトの名無しさん:2012/10/30(火) 10:41:32.69
wxしかやってないけどめちゃ簡単だったよ
マウス操作で配置出来るエディタがあるし、xrc書き出しでGUIとスクリプトを分離して使い回しも便利
flashのUIコンポーネント並みにお手軽だった
83デフォルトの名無しさん:2012/10/30(火) 11:26:35.63
個人的な感想。
UIデザイナに関しては、QtもwxWidgetsも同じ。
APIの設計とイベントハンドリングはQtのほうが綺麗な印象。
あとWebKitが標準で使えるのが便利だった。
PyQt/PySideの将来については確かに不安。
84デフォルトの名無しさん:2012/10/30(火) 12:19:36.37
PyQtはQtがLGPLになっても依然としてGPLなのでライセンスが売れて欲しいだけである
見限ってよい
85デフォルトの名無しさん:2012/10/30(火) 12:52:40.63
そりゃライセンスで飯食ってる会社だからなー。
86デフォルトの名無しさん:2012/10/30(火) 13:41:12.91
>>83-84
まさにこの思考プロセスでpysideがベターという結論に到達した
87デフォルトの名無しさん:2012/10/30(火) 14:40:22.35
> wxPythonのPython3対応
http://wiki.wxpython.org/ProjectPhoenix
安定版のリリースは、まだ予定なし
88デフォルトの名無しさん:2012/10/30(火) 15:12:57.51
An investigation about Python 3 support has been made. According to the investigation,
there are no insurmountable obstacles for Python 3 support.
http://www.pyside.org/roadmap/
http://qt-project.org/wiki/PySide_Python_3_Issues
- answered Jul 6 at 17:54
89デフォルトの名無しさん:2012/10/30(火) 15:29:23.17
I have seen that but if you go to the link in my OP you will see that the first sentence says
PySide has included support for Python 3.2 since version 1.0.8.
If this is true where can I get those binaries? – edhedges Jul 6 at 18:06

@edhedges I think you have to build it by yourself – Maksym Polshcha Jul 6 at 19:01
90デフォルトの名無しさん:2012/10/30(火) 16:27:33.51
>>89
ビルド環境がない場合は、インストーラの有無も評価項目になるのかな

Downloads -> Binaries 各プラットフォームにリンクがあるけど
osx は 3対応バイナリ見当たらない
win は 3対応はあるものの、64bits版が not available といった状況
91デフォルトの名無しさん:2012/10/30(火) 17:38:40.76
そもそもQtが64bitに正式対応してないと思う
92デフォルトの名無しさん:2012/10/30(火) 20:30:40.11
俺PyQt派だけど、自力でビルドしようとすると
Qtのビルドが超面倒臭くて心折れる。
93デフォルトの名無しさん:2012/10/31(水) 00:27:10.64
PySide はバグ落ち着いてるよー いいよいいよー
ただ RPC 周りが PyQt に比べてちっと遅い
他はなんの問題もない

Qt5 対応どうなんだろうなー
Nokia 売っぱらっちまったから PySide に今までみたいに力入れてくれるかなー
94デフォルトの名無しさん:2012/10/31(水) 06:25:32.98
みんなのPythonの次のレベルの本がほしいのですが、
日本語の教科書でこの本と同等レベルのものってないでしょうか?

The Practice of Computing Using Python (2nd Edition)
http://www.amazon.co.jp/dp/0132992833
95デフォルトの名無しさん:2012/10/31(水) 06:55:18.81
>>94
そもそも日本語の本自体が少ないんだけど、この本はどうだろう?
http://www.amazon.co.jp/dp/4894714019

ある程度基礎が分かったら、さっさと自分の興味のある方面で、何かを作ったり、
優秀な人が書いたコードをパクったり(参考にしたり)するのが
一番勉強になると思う。

自分は何をしてみたいのか。Web開発、GUIアプリ、自動化スクリプト、
アルゴリズムの勉強、ネットワーク、数値計算、etc.

あとできれば英語を読んだほうがいいです。無理のない範囲で。
96デフォルトの名無しさん:2012/10/31(水) 07:08:57.54
>>94
正直その本はじめて見たんだけどCSよりのPython本ってことなら
初めてのコンピュータサイエンス
http://www.amazon.co.jp/dp/4873114632

ただこの本は大学で使うならともかく一人で読んで面白い本ではないと思う
またみんなのPythonを読んだ人には重複が多いから
CやJavaで書かれたアルゴリズムとデータ構造の本でも読んだほうがいいのでは

時間のありあまってる人向け
http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books
97デフォルトの名無しさん:2012/10/31(水) 07:25:16.81
アルゴリズムとかをちゃんと勉強すると、日本のIT業界に耐えられなくなりますよ(意味深)
98デフォルトの名無しさん:2012/10/31(水) 07:28:33.46
かの有名な Introduction to Algorithms は、いまPythonでやってるらしい。
http://courses.csail.mit.edu/6.006/spring11/notes.shtml
99デフォルトの名無しさん:2012/10/31(水) 07:54:03.45
>94
あなたが買って読めない場所を質問してくれれば
翻訳してあげてもいいですよ
100デフォルトの名無しさん:2012/10/31(水) 07:56:19.61
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |
|  ,,ノ(、_, )ヽ、,,   |
|   ,;‐=‐ヽ   .:::::|
\  `ニニ´  .:::/      NO THANK YOU
/`ー‐--‐‐―´´\
       .n:n    nn
      nf|||    | | |^!n
      f|.| | ∩  ∩|..| |.|
      |: ::  ! }  {! ::: :|
      ヽ  ,イ   ヽ  :イ  
101デフォルトの名無しさん:2012/10/31(水) 08:03:54.96
>>98
そこのコルメン本の副読本に挙がってるたんだけどこれはいいかも
http://interactivepython.org/courselib/static/pythonds/index.html
102デフォルトの名無しさん:2012/10/31(水) 08:22:18.33
うちのブラちゃんでは
>94 と >100 は同一人物と判定されているんだが
頼んでおいて断るとはこれ如何に
103デフォルトの名無しさん:2012/10/31(水) 08:25:17.03
いや、誰も頼んでないだろ。w
104デフォルトの名無しさん:2012/10/31(水) 09:43:20.99
セクションだけ立てて飽きた。

(Python2.x)

* 文字コードとは
...

* ソースコードの文字コードを伝える
# -*- codecs: utf-8 -*-

* str型とunicode型
str型 => バイトの並び
unicode型 => 文字の並び

* encode/decode

* テキストファイルを扱う
(Python3のopen(..., encoding='***')にあわせて、codecs.open()で説明するとよさそう)
- 読む: codecs.open('a.txt', encoding="utf-8")
- 書く: codecs.open('a.txt', 'w', encoding="utf-8")

* 標準出力
- print u"あいう" はどのように動作するのか
sys.stdout.encoding
- print u"あいう".encoding('euc-jp')
- リダイレクトした時の動作
sys.stdout.encoding => None
sys.getdefaultencoding() => ascii
対処法 sys.stdout.encoding = codecs.getwriter(locale.getpreferredencoding())(sys.stdout) とか?
105デフォルトの名無しさん:2012/10/31(水) 10:03:39.59
> # -*- codecs: utf-8 -*-
いきなり間違えてるYO
106デフォルトの名無しさん:2012/10/31(水) 10:24:46.81
みんな日本語で苦労してるんですね。わかります。
107デフォルトの名無しさん:2012/10/31(水) 10:36:48.27
# coding: rot13
108デフォルトの名無しさん:2012/10/31(水) 10:39:53.99
Rubyのほうが世界的に使われてる。
109デフォルトの名無しさん:2012/10/31(水) 10:49:11.25
つれますか
110デフォルトの名無しさん:2012/10/31(水) 12:13:07.07
正しい日本語の扱い方

1. Python2.xのアンインストール
2. Python3.xのインストール
111デフォルトの名無しさん:2012/10/31(水) 13:05:52.04
python3は文字コード周りがまだ枯れてないから却下
112デフォルトの名無しさん:2012/10/31(水) 13:21:04.81
str と u"" の違いさえきっちり判ってれば py2 でほとんど問題無いんですが
113デフォルトの名無しさん:2012/10/31(水) 14:30:27.05
tkinterとpython3で自分のタブレットPC用に
タッチパネルキーボードを作りたくて勉強を始めたんですが
キーの配置を設定する際に
from tkinter import *

layout = (
( ('~\n`', 1), ('!\n1', 1), ('@\n2', 1), ('#\n3', 1), ('$\n4', 1),
('%\n5', 1), ('^\n6', 1), ('&\n7', 1), ('*\n8', 1), ('(\n9', 1),
(')\n0', 1), ('_\n-', 1), ('+\n=', 1), ('Backspace', 2),
  )
# 中略
( ('Ctrl', 2), ('Alt', 2), ('Space', 7), ('Alt', 2), ('Ctrl', 2),
),
)

def press():
print("pressed")
root = Tk()

root.title("keyboard")

for i in range(len(layout)):
for j in range(len(layout[i]):
key = layout[i][j][0]
k_len = layout[i][j][1]
button = Button(root, height=2,
width=k_len, text=key,command=press).grid(row=i, column=j)
root.mainloop()

とすると、各行番号と列番号に異なったサイズのキーが配置されて
キーとキーの間に隙間が出来てしまうため、実際のキーボードのようなレイアウトになりません
現実のキーボードのようにキーを隙間なく配置したいのですが、何か良い方法はないでしょうか
114デフォルトの名無しさん:2012/10/31(水) 15:57:25.41
>>113

.grid(sticky="news", ...でとりあえず隙間は埋められます

但し、gridだと格子状になるので、実際のキーボードのような行毎にずらすレイアウトにするなら
gridに 例えばcolumspan=k_lenと指定したり、gridではなく pack を入子にする等もう一工夫必要です
115デフォルトの名無しさん:2012/10/31(水) 16:02:42.50
>>114
columnspan=k_lenを指定したところ、最後の行以外は現実のキーボードと同じレイアウトになりました
なんとか後は工夫してどうにかできそうです、本当にありがとうございました
116デフォルトの名無しさん:2012/10/31(水) 16:28:54.77
>>114,115
横槍ですが、
先生、ちょっと待って下さい。
僕まだできていません。

for i in range(len(layout)):
for j in range(len(layout[i])):
key = layout[i][j][0]
k_len = layout[i][j][1]
button = Button(root, height=2, width=k_len, text=key,command=press,
)
# anchor='w')
# 分けの分からんことになる。[space]が馬鹿でかい。
# button.grid(row=i, column=j, columnspan=k_len, sticky='news')
# [space] と [2] が 大きさ2になる。
button.grid(row=i, column=j, sticky='news')

どうしたらいいんでしょうか?
>>115さんにも試したこと書いて欲しい。。。
117デフォルトの名無しさん:2012/10/31(水) 17:02:51.18
>>116
>>115です

最後の行以外は現実の同じキーボードとレイアウトになったと書きましたが
よく見たら一列目のTab,CapsLock,Shiftが二列目以降のキーに重なって半分見えない状態になっていました
隙間がなくなっていることに感動して見落としていたようです

なので自分もまだ工夫する方法を考えている状態です
118デフォルトの名無しさん:2012/10/31(水) 18:29:49.31
columnspan=k_len とする場合は column を前のspanの分進めないといけないです

ついでに、gridで実際のキーボードみたいに半分ずらすなら、
通常のキーはcolumspan=2にして columnは各行で奇数,偶数,奇数となるように配置します
119デフォルトの名無しさん:2012/10/31(水) 18:39:20.21
>>118
先生っ、出来ました!

for i in range(len(layout)):
column_index = 0
for j in range(len(layout[i])):
key = layout[i][j][0]
k_len = layout[i][j][1]
button = Button(root, height=2, width=k_len, text=key,command=press,
)
# anchor='w')
button.grid(row=i, column=column_index, columnspan=k_len, sticky='news')
column_index += k_len
120デフォルトの名無しさん:2012/10/31(水) 18:48:30.02
ちょっと改造した。私的には満足できたので消えます。
アリガトウ ( ´∀`)ノ>>117,118)Д`)ブニュ

def press(key):
return lambda : print('{} pressed'.format(key))

root = Tk()
root.title("keyboard")

for i in range(len(layout)):
column_index = 0
for j in range(len(layout[i])):
key = layout[i][j][0]
k_len = layout[i][j][1]
button = Button(root, height=2, width=k_len,
text=key, command=press(key))
button.grid(row=i, column=column_index, columnspan=k_len, sticky='news')
column_index += k_len
121デフォルトの名無しさん:2012/10/31(水) 18:58:26.89
row,columnの繰り返しは、ジェネレータにしておくと保守しやすいよ

ttp://ideone.com/KII4ja
122デフォルトの名無しさん:2012/11/01(木) 02:07:14.82
みんなのみんなのパイチンくんですよ〜
123デフォルトの名無しさん:2012/11/01(木) 09:51:47.02
おっぱいそーん
124デフォルトの名無しさん:2012/11/01(木) 09:58:10.73
pass
125デフォルトの名無しさん:2012/11/01(木) 10:05:39.02
馬鹿には無理
126デフォルトの名無しさん:2012/11/04(日) 09:19:51.07
初めてPythonでオブジェクト指向をやってみたのですが
これを実行したところ、メッセージが表示されてしまいました。
クラスをどこからも継承したり呼んだりしていないのに
単体で動いてしまうのって正常ですか?

class Fuga():
print("Fuga submitted!")
127デフォルトの名無しさん:2012/11/04(日) 10:02:28.70
128デフォルトの名無しさん:2012/11/04(日) 10:24:06.63
>>126
それがないとデコレータも出来ない
129デフォルトの名無しさん:2012/11/04(日) 11:03:22.84
>>126
そこで実行されないとメンバ変数宣言出来ないじゃん
130デフォルトの名無しさん:2012/11/04(日) 12:56:42.29
他の言語だとその位置には宣言しか置けなくなってるから意識したことないんだろう
でも副作用のある宣言をすればちゃんと実行されているはずだぜ
131デフォルトの名無しさん:2012/11/04(日) 13:15:22.84
PILを使って半透過PNGをTkinterのウィジェットに貼り付け
Topとウィジェットの背景色を指定しその色を透過するようにしました
Topの背景は透過されたのですが
画像の半透過の部分が透けません どうしたらよいでしょうか?
132デフォルトの名無しさん:2012/11/04(日) 14:55:54.65
>>131
>Topとウィジェットの背景色を指定し

背景色を指定ってのがよくわからない。これはどうやってる?

色指定なくても top.wm_attributes("-alpha", 0.8) で全部透過になるよ
もしかして RGBA 形式でない透過のpng だったりしないかな?
133デフォルトの名無しさん:2012/11/04(日) 15:56:22.63
>>132
背景色はconfigure(bg="color")で指定してます

RGBA形式の透過PNGであるのは確認しました

完全な透過指定の部分は透過されてるんですが
半透過の部分は半透過されてるようなんですがどうも透過されてるはずの
ウィジェットの背景色が画像の色に加算されたままになってるようです
134デフォルトの名無しさん:2012/11/04(日) 16:01:24.23
>>132
あとalphaで指定すると透過でないところが透過されるので使えないです
135デフォルトの名無しさん:2012/11/04(日) 16:02:48.68
>半透過の部分は半透過されてるようなんですがどうも透過されてるはずの
>ウィジェットの背景色が画像の色に加算されたままになってるようです

半透過ならそれで正常
136デフォルトの名無しさん:2012/11/04(日) 16:27:44.37
そうですか・・・ありがとうございました
137126:2012/11/04(日) 22:10:27.39
ありがとうございました。

もう一つ質問ですが、Pythonのクラスが
メンバに対する明示的なアクセス制御機構
(Javaで言うprivate指定など)を持たず、結果として
オブジェクト指向の三大要素の一つである隠蔽が欠けているのは
型のない言語であるがゆえのやむを得ない仕様でしょうか?
それとも別の意図がある?
138デフォルトの名無しさん:2012/11/04(日) 22:51:15.63
underscore で十分だよね。みんなちゃんと守ってくれるよね。
っていう紳士協定を導入してるから。

実際には綺麗なC言語実装になるからじゃないの?
139デフォルトの名無しさん:2012/11/05(月) 01:35:59.60
>>137
class Class(object):#2系でobject継承すると新スタイルクラス(3と同じ挙動)
#ここも普通に実行されるがクラススコープ
_member = 1#非公開メンバ(列挙されないだけでアクセスは出来る)
__member = 2#非公開+難読化(外部からは_Class__memberという名前になる)

基本的にはこんな感じであとはデスクリプタとかでC#のようなプロパティも出来る
詳細は言語リファレンスのデータモデルなんかを読んでください

スタンスについては

デバックの際にはアクセスできることが有効であるし
自由にアクセスできるからといって
アクセスするプログラムを作らなければならないわけではない
アクセスしないようにプログラムを作ればいい
みんな大人なんだから

とかなんとか
140デフォルトの名無しさん:2012/11/05(月) 01:41:27.19
l = [(1,2),(3,4),(5,6),...]というリストから
[1,3,5...]と[2,4,6...]というリストを作りたいのですが
a = [i[0] for i in l]
b = [i[1] for i in l]
より早い方法ってあります?
なんども呼ぶのでなるべく早くしたいのですが
141デフォルトの名無しさん:2012/11/05(月) 01:46:16.18
>>140
a,b = zip(*l)
142デフォルトの名無しさん:2012/11/05(月) 01:47:47.36
import numpy
l = numpy.array([(1,2),(3,4),(5,6)])
a = l[:,0]
b = l[:,1]
143デフォルトの名無しさん:2012/11/05(月) 03:01:46.74
実際privateでもリフレクションやvtblを弄くってアクセスすることが可能なので
確実なメリットって言うと、間違って呼び出した時にエラーにしてくれるくらいしかないのよね
144デフォルトの名無しさん:2012/11/05(月) 08:30:15.25
l[0::2]
l[1::2]
145デフォルトの名無しさん:2012/11/05(月) 17:32:16.42
146デフォルトの名無しさん:2012/11/05(月) 17:56:45.82
>>145
>「PTVS」v1.5では「Python 3.3」へ対応したほか
>「Python 3.3」
はい解散
147デフォルトの名無しさん:2012/11/05(月) 18:05:20.44
> CPython support is new and you can choose any version from 2.4 to 3.x.
http://pytools.codeplex.com/wikipage?title=Getting%20interpreters%20%26%20libraries%20-%20details

VSでPython入門して面倒くさくなって飽きる人が増えたりして
148デフォルトの名無しさん:2012/11/05(月) 18:09:17.90
どういう意味やねん
149デフォルトの名無しさん:2012/11/05(月) 18:10:58.15
>>146
くやしいのうくやしいのうwww
150デフォルトの名無しさん:2012/11/05(月) 18:13:09.82
馬鹿には無理
151デフォルトの名無しさん:2012/11/05(月) 18:21:08.36
pass
152デフォルトの名無しさん:2012/11/05(月) 19:09:03.74
PythonをVisual Studioで書こうとは思えんわ
153デフォルトの名無しさん:2012/11/05(月) 19:14:11.38
あんまり使ったことないけど、コード保管がとてもいい感じだよVS
重いイメージあって敬遠してたけど、VS2012入れてみたらそうでもなさそう。
結局その前に評価したPyCharmに落ち着いたけど。
PyCharm試す前にに触っていたらVSにしてたかもしれない
それ以外はわからない
154デフォルトの名無しさん:2012/11/05(月) 19:23:52.43
UTF-8がBOM付しか扱えない問題は解決されてるんだろうか
そもそも解決する気があるんだろうか
SJISまたはBOM付でしか書けないなら
それだけでVSは失格
155デフォルトの名無しさん:2012/11/05(月) 19:28:46.69
なんで SJIS じゃだめなん?
156 忍法帖【Lv=40,xxxPT】(1+0:5) :2012/11/05(月) 19:34:05.02
PythonでLISTだけを含むファイルを外部に作って、メインのプログラムから
そのリストを参照したいんですが、どうやれば出来ますか?

親切な方、教えてくださいm(_ _)m
157デフォルトの名無しさん:2012/11/05(月) 19:55:22.88
import external
external.L
if __name__ == '__main__':
print('external.L =', external.L)
~/main.py [utf-8][unix][4/4行,27文字目]

L = [1, 2, 3, 4]
~/external.py [utf-8][unix][1/1行,16文字目]

p3 main.py
external.L = [1, 2, 3, 4]
158 忍法帖【Lv=40,xxxPT】(1+0:5) :2012/11/05(月) 20:11:54.37
>>157済みません。まだ意味が分かりません。ちょっと考えてみます。
159 忍法帖【Lv=40,xxxPT】(2+0:5) :2012/11/05(月) 20:16:49.15
あ、なんだか出来たみたいです。ありがとうございます!
160157:2012/11/05(月) 20:19:41.82
本当に、「参照」だけ目的なら、listではなく、
tup = (1, 2, 3, 4)
とした方が良いかもね。
161デフォルトの名無しさん:2012/11/06(火) 22:16:33.64
実対称行列Aの固有値と固有ベクトルを numpy.linalg.eig(A)で求めているのですが、型が複素数になってしまいます。
固有値と固有ベクトルをfloatにたもつことはできないのでしょうか?
162デフォルトの名無しさん:2012/11/07(水) 01:19:48.64
Python 3.3.0のインストールに関する質問
Customize Python 3.3.0の画面で、「Add python.exe to Path」というものがあるけどこれ何?
初期状態では無効になっているみたい
163デフォルトの名無しさん:2012/11/07(水) 01:25:28.89
馬鹿には無理
164デフォルトの名無しさん:2012/11/07(水) 01:31:43.65
Vapoursynthの話題ってここでいいのかな? の人か
165デフォルトの名無しさん:2012/11/07(水) 01:47:43.91
>>162
環境変数PATHにpython.exeへのパスを追加する
追加しとくとコマンドプロンプトからpython.exeを起動するときに
C:\からのフルパスで入力せずにpython.exeだけで起動できるようになる
よくわかんなかったら有効にしておいてもたぶん大丈夫
166デフォルトの名無しさん:2012/11/07(水) 07:38:07.14
Pythonより英語やれよ
167デフォルトの名無しさん:2012/11/07(水) 08:16:20.49
Python 3.3.0のせいで前に入れていたpython2が動かなくなりました><
168デフォルトの名無しさん:2012/11/07(水) 09:50:59.93
>>167
windows?

バージョン番号付きでshebang 書いてれば、py (windows板のランチャ) が振り分けてくれるよ

#!/usr/bin/env python <- これだとバージョンが曖昧になるので
#!/usr/bin/env python2.7
169デフォルトの名無しさん:2012/11/07(水) 09:57:02.42
ありがとうございます!
170デフォルトの名無しさん:2012/11/07(水) 14:22:29.78
>>161
結果が複素数になるようなデータを与えたからではないのかな?って疑問なのだけど
具体的なコードと期待する結果を提示してみては?
171デフォルトの名無しさん:2012/11/07(水) 16:35:51.92
windowsでおすすめのpythonエディタを教えてください

小規模なwindowsアプリぐらいしか作らないのであまり複雑じゃないものがいいです
python2.7とwxpythonを使う予定です
172デフォルトの名無しさん:2012/11/07(水) 17:39:26.18
IDLE
EMACS
VisualStudio
Eclipse
netbeans
pycharm
windows上で作るなら↑が代表的
これ以外は微妙。

簡単なのはテキストエディタでがんばる
173デフォルトの名無しさん:2012/11/07(水) 19:15:14.37
>>171
wxPythonに付いてくるEditra

日本語入力がインラインじゃないのと,エディタにしては起動が遅い(IDEよりは手軽感ある)
補完時に時々クラッシュする点がマイナス評価だけど、pluginで簡単なIDE並の機能を追加できる
同じwxPythonでpluginを作れるのが利点
174デフォルトの名無しさん:2012/11/07(水) 21:21:23.23
>>172-173
レスありがとうございます
以前はpyscripterを使っていました
おすすめしていただいたものを一通り使ってみて決めたいと思います
ありがとうございました
175デフォルトの名無しさん:2012/11/08(木) 11:07:38.47
みんなのみんなのパイチンくんですよ〜
176デフォルトの名無しさん:2012/11/08(木) 12:36:35.01
おっぱい
177デフォルトの名無しさん:2012/11/09(金) 08:41:07.89
yabaiyo
&nbsp;indent
&nbsp;&nbsp;source
貼れないよ
178デフォルトの名無しさん:2012/11/09(金) 12:32:18.78
ideoneとか使いたまえ
正直ここに貼られても邪魔
179デフォルトの名無しさん:2012/11/09(金) 20:34:27.04
お前らPythonで学ぶプログラム作法ちゃんと読んだの?
180デフォルトの名無しさん:2012/11/09(金) 20:47:33.89
いいえ全く
181デフォルトの名無しさん:2012/11/10(土) 11:59:39.72
少しだけ…
182デフォルトの名無しさん:2012/11/10(土) 12:24:49.53
pycharmいい感じだけどマウスホイールが効かないっす
183デフォルトの名無しさん:2012/11/11(日) 05:33:20.76


184デフォルトの名無しさん:2012/11/11(日) 16:52:02.70
みんなのみんなのパイチンくんとチンパイくんですよ〜
185デフォルトの名無しさん:2012/11/11(日) 17:02:47.22
その手のレス削除依頼出されてるよ
186デフォルトの名無しさん:2012/11/11(日) 23:19:33.77
環境変数の設定でつまずいてる
C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\
AMD APP\bin\x86;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32
\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)
\ATI Technologies\ATI.ACE\Core-Static;;C:\Program Files (x86)\QuickTime\QTSystem\;c:\Python27

と入力してもうまくいかない どなたかわかりますか
187デフォルトの名無しさん:2012/11/11(日) 23:27:07.58
馬鹿には無理
188デフォルトの名無しさん:2012/11/12(月) 01:38:36.62
>>186
インストーラを使おう
189デフォルトの名無しさん:2012/11/12(月) 01:46:37.67
環境変数の設定壊しそうで危なっかしいなw
190デフォルトの名無しさん:2012/11/12(月) 01:56:06.30
セミコロン2つ並んでてその間には何があったのだろうと気になってる
191デフォルトの名無しさん:2012/11/12(月) 09:24:10.05
>>186
気になったところ
尻に \ がついてるけど、意図して付けてる?
;; が連続しているけど、意図しているもの?

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
C:\Program Files (x86)\QuickTime\QTSystem\

Python2.7を以下にinstallしてるんだろうけど、きちんと存在している?
c:\Python27
↑のbin以下にpython.exeが存在するんじゃない?
python.exeのプロパティからpathをきちんと調べてみて。

; で改行して調べてみると以下の通り。

C:\Program Files (x86)\AMD APP\bin\x86_64
C:\Program Files (x86)\AMD APP\bin\x86
%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static

C:\Program Files (x86)\QuickTime\QTSystem\
c:\Python27
192デフォルトの名無しさん:2012/11/12(月) 09:27:32.32
python.exe は c:\python27\ 直下にあると考えるのが普通じゃないかな
そもそも c:\python27\ がある場合の話だけど
あと >>186 は「うまくいかない」とだけ言っているので
何がどううまくいっていないのかが全く伝わらない
釣り認定されるレベル
193デフォルトの名無しさん:2012/11/12(月) 13:58:23.27
mecabのpythonバインディングって3.2以降には対応していないのでしょうか?
内部で使ってるSWIGというのが3.2以降では動かなくなったとかいう情報があるのですが
194デフォルトの名無しさん:2012/11/12(月) 18:12:20.99
>>191,>>192
ある事情で、pythonを自分一人で一から勉強することになりました。
何がわかっていないのか、自分でもわからないレベルです

気になったところ
尻に \ がついてるけど、意図して付けてる?
;; が連続しているけど、意図しているもの?

これについて、PCは自作のwindows7 64bitでpythonをインストールする前にリカバリーをしています

最後のc:\Python27以外は何もいじってません

なんとかインストールまでこぎつけないかと思ってます
195デフォルトの名無しさん:2012/11/12(月) 18:22:40.47
- セミコロンは通常パスの区切りごとに1つ
- c:\Python27 は存在するか?
- 存在したとして c:\Python27\python.exe は存在するか?
196デフォルトの名無しさん:2012/11/12(月) 18:22:55.64
>>194
何がうまくいかないのか具体的にどうぞ
197デフォルトの名無しさん:2012/11/12(月) 18:30:53.01
Pythonの質問というより
コマンド・プロンプトの質問ですね。
198デフォルトの名無しさん:2012/11/12(月) 18:54:54.55
>>194
そっちはどうでも良くて、こっちの方が重要でした

Python2.7を以下にinstallしてるんだろうけど、きちんと存在している?
c:\Python27
↑のbin以下にpython.exeが存在するんじゃない?
python.exeのプロパティからpathをきちんと調べてみて。
199デフォルトの名無しさん:2012/11/12(月) 18:58:48.83
最初は付属のIDLE使えばいいからパスの設定なんてイラン。
200デフォルトの名無しさん:2012/11/12(月) 20:15:31.14
>>198
ありがとうございます

インストールされている場所は
C:\Python27になってます
一度削除してからインストしたほうがいいでしょうか?
201デフォルトの名無しさん:2012/11/12(月) 20:22:18.26
\
202デフォルトの名無しさん:2012/11/12(月) 20:27:15.74
pass
203デフォルトの名無しさん:2012/11/12(月) 20:28:21.21
C:\Python27\python.exe
って打って実行できるか試してみたら?
多分出来ないと思う

python.exeをdrag & dropでprompt上に持っていけば、
画面にpathを表示してくれたように思う。

PATH\python.exe
最後にpython.exeって付けても実行できるpathを
prompt上で頑張って見つけるんだ。
それが環境変数の値だ。健闘を祈る。
204デフォルトの名無しさん:2012/11/12(月) 20:33:21.11
質問者がコマンドプロンプト使ってるかも怪しいんだが
いたずらに回答する前に>>196から確認すべきだと思うわ
205デフォルトの名無しさん:2012/11/12(月) 20:39:16.17
>なんとかインストールまでこぎつけないかと思ってます
って書いてるし、何でつまってるか分からないよね
206デフォルトの名無しさん:2012/11/12(月) 21:37:33.65
>尻に \ がついてるけど、意図して付けてる?
>;; が連続しているけど、意図しているもの?
これについては質問者も回答者も既に解決済み?
207デフォルトの名無しさん:2012/11/12(月) 21:52:41.51
>>206
質問者としては、ただ気になっただけ。
別に答えてもらわなくても問題解決に支障はないと思っておりますが。

;; は影響あったりするんでしょうか?
一応、;;は直しておいて試してよ>>200

後、削除せずに試して欲しいな。
208デフォルトの名無しさん:2012/11/12(月) 22:23:37.33
便乗で、windowsの人に質問 c:\Windows\py.exe ってない?

PythonにPATH通ってなくても、pyコマンド使えないかな?

win32/vistaで、PATH設定なしで py コマンドが使えてた記憶があるのだけど
Python 26,27,32,33 で 自前ビルド/公式/ActivePython 混在環境で
pipで入れたのかどうか、インストール経路が思い出せない。
209デフォルトの名無しさん:2012/11/12(月) 22:38:59.19
210デフォルトの名無しさん:2012/11/12(月) 23:22:38.06
馬鹿には無理
211デフォルトの名無しさん:2012/11/13(火) 05:27:35.74
>インストール経路が思い出せない

Vista以降で何がどのファイルをインストールしたか常時監視&管理するツール無かったっけ?
212デフォルトの名無しさん:2012/11/13(火) 11:12:08.53
C の printf("%s\n", __func__) 相当のことってどうやったらできる?
213デフォルトの名無しさん:2012/11/13(火) 11:27:20.96
logging で吐くなら
%(funcName)s

ttp://toro.2ch.net/test/read.cgi/tech/1328714043/592-
sys._getframe(0).f_code.co_name
sys._getframe(1).f_code.co_name

ttp://toro.2ch.net/test/read.cgi/tech/1342660231/396-
self.__class__.__name__,traceback.extract_stack()[-1][2]
traceback.extract_stack()[-1][2]
traceback.extract_stack()[-2][2]
...
traceback.extract_stack()[1][2]
traceback.extract_stack()[0][2]
214デフォルトの名無しさん:2012/11/13(火) 11:45:12.83
>>213 ありがとう
215デフォルトの名無しさん:2012/11/13(火) 11:57:41.25
tracebackは色々判って便利だね
216デフォルトの名無しさん:2012/11/13(火) 14:07:47.78
ちょっちゅね
217デフォルトの名無しさん:2012/11/13(火) 16:57:31.92
>>209,211

OS標準でなかったらその手のツールは使ってないので解らない

とりあえず、ファイルのタイムスタンプから3.3と判断出来ました
もしかしてpipで入れたかな?と思ってたのは、思い違いだったようです

レスthx
218デフォルトの名無しさん:2012/11/13(火) 22:25:26.09
219デフォルトの名無しさん:2012/11/14(水) 22:10:49.14
pyscripterが起動できないのです
osはwindows7で pythonは3.3の32bit版を使用
pyscripterは64bit版ですとpython could not be properly initializedで動かず、
32bit版でも access violation error, no python engine errorで動きませんでした
他にCなどをインストールする必要があるのでしょうか
ランタイムなどは一切入れていませんが…
220デフォルトの名無しさん:2012/11/14(水) 22:21:20.04
python2.7を入れて上手く動作するか試してみたらどうだろう?
動くんなら、python3.3が悪いんだし、動かないんならwindows版に問題ありそうだし。
221デフォルトの名無しさん:2012/11/14(水) 23:36:32.96
うちは動いてる
manifestじゃ無かろうもん
222デフォルトの名無しさん:2012/11/15(木) 07:22:18.39
標準マニュアルにあるnamedtupleの説明で
「typename という名前の tuple の新しいサブクラスを返します」
ってあるんですが、
そもそもクラスを返すっていう概念がよくわかりません。
値やインスタンスを返すというのなら何となくわかるのですが。
簡単なコードなんか示してもらえると助かります。
223デフォルトの名無しさん:2012/11/15(木) 07:31:31.09
レスありがとうございます
3対応の参考書を買ってきて始めてしまったので、出来れば3以降でやりたいのです

今試しにvirtualPCに入れたXPに32bit版を入れたらpyscriptが動きました…
これだけの為にわざわざvirtualPCを立ち上げるのも面倒だし、どうしようか迷っています…
224デフォルトの名無しさん:2012/11/15(木) 08:17:39.61
>>222
クラスもメタクラスtypeのインスタンスであり、
class以外にもtypeやexecで動的に生成できる

namedtupleは自身にインデックスアクセスする
デスクリプタを与えられた名前で定義してる

operatorを使わず通常定義風なら
class typename(tuple):
@property
def id(self):return self[0]

実際書くなら
type('typename',(tuple,),{'id':property(operator.itemgetter(0))})

collectionsモジュールは大半がPythonコードなのでソースを見ると良い
225デフォルトの名無しさん:2012/11/15(木) 08:19:46.64
クラス自体を理解出来てないと見た。

class Foo(object):
def name(self):
return 'Foo'

class Baa(object):
def name(self):
return 'Baa'

def return_class(name):
dic_classes = {}
dic_classes['Foo'] = Foo
dic_classes['Baa'] = Baa
return dic_classes[name]

foo_class = return_class('Foo')
obj = foo_class()
print('id(Foo) = 0x{:08x}'.format(id(Foo)))
print('id(foo_class) = 0x{:08x}'.format(id(foo_class)))
print('obj.name =', obj.name())
226デフォルトの名無しさん:2012/11/15(木) 23:17:10.74
class Foo(object):
    def name(self):
        return 'Foo'

class Baa(object):
    def name(self):
        return 'Baa'

def return_class(name):
    dic_classes = {}
    dic_classes['Foo'] = Foo
    dic_classes['Baa'] = Baa
    return dic_classes[name]

foo_class = return_class('Foo')
obj = foo_class()
print('id(Foo)       = 0x{:08x}'.format(id(Foo)))
print('id(foo_class) = 0x{:08x}'.format(id(foo_class)))
print('obj.name =', obj.name())
227デフォルトの名無しさん:2012/11/15(木) 23:24:05.34
>>225
>>226
シェー!!
      ∧_⊂ヽ
  ∧⊂ヽ (´∀`)ノ
 (゚Д゚)ノ (⊃  ノ
 (⊃ ノ  ヽ__二)
 ヽニ⊃   (_)
  ∪
228デフォルトの名無しさん:2012/11/16(金) 17:59:28.55
>>224
ありがとうございます。ソースを見てみました。
tupleを継承したサブクラスを生成するコードを
文字列として定義し、それをexecといふ関数にぶち込んで
その結果をreturn文で返している、というふうに理解しました。

>>225
おっしゃるとおり、あんまりわかっていません。
クラスに限らず、オブジェクトをreturnで返すということは
内部的にはオブジェクトの種類とアドレス(ポインタ?)を返すという
ことなんでしょうか。だからメモリに作るものなら何でも返せると。
229デフォルトの名無しさん:2012/11/16(金) 20:51:33.72
 フ゜ッ ∩ ∧_∧  あっそ
  ℃ゞノ ヽ(・ω・ )  
  ⊂´_____∩
230デフォルトの名無しさん:2012/11/16(金) 22:19:00.21
内部的にはObjectのaddressのみ返しています。
Objectの種類(ob_type)は返しません。
Objectにはob_typeがありますので、
そこからどんなObjectか分かります。

Include/object.h 108/925行
/* Nothing is actually declared to be a PyObject, but every pointer to
* a Python object can be cast to a PyObject*. This is inheritance built
* by hand. Similarly every pointer to a variable-size Python object can,
* in addition, be cast to PyVarObject*.
*/
typedef struct _object {
_PyObject_HEAD_EXTRA
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
} PyObject;

...
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) ←これ

Include/object.h 332/925行
typedef struct _typeobject {
PyObject_VAR_HEAD
const char *tp_name; /* For printing, in format "<module>.<name>" */
Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
...
} PyTypeObject;
231デフォルトの名無しさん:2012/11/16(金) 22:27:05.84
Object生成時にObjectが呼び出す、
PyObject_Init()にてtpを設定しているのが分かりますね。
PythonのC拡張を作ると実態を把握しやすいのですが、、、
PyTypeObject構造体でObjectのtype(ob_type)を定義するのです。

Objects/object.c 222/1915行
PyObject *
PyObject_Init(PyObject *op, PyTypeObject *tp)
{
if (op == NULL)
return PyErr_NoMemory();
/* Any changes should be reflected in PyObject_INIT (objimpl.h) */
Py_TYPE(op) = tp;
_Py_NewReference(op);
return op;
}
232デフォルトの名無しさん:2012/11/17(土) 00:15:59.26
>>230
ヒントありがとうございます。
オブジェクトの構造に種類も入っているので
アドレスのみ返せば足りるということですね。
Pythonの中で、クラスはオブジェクトの一種に過ぎない
というのがよくわかりました。
233デフォルトの名無しさん:2012/11/17(土) 15:02:47.67
tkinter canvasでライフゲーム(http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)を作ろうとしているのですが、いきなり躓きました。
基盤をクリックしたときに■が基盤上のクリックしたセルにきちんと配置されるようにしたいのですが、セルの配置方法がわからない為、クリックしても■の場所にズレが生じてしまいます。

from tkinter import *

root = Tk()
# セルの数は 20 X 20
n_row=20
n_col=20
objs = []
# ここにセルの生死状態を格納 0 -> 死亡 1-> 生存
cell=[[0 for row in range(n_row)] for col in range(n_cols)]

def step():
print("step buton pressed")
def clear():
for obj in objs:
game.delete(obj)
def click(evt):
objs.append(game.create_rectangle(evt.x, evt.y, evt.x+10, evt.y+10, fill="black"))

game = Canvas(root, width=200, height=200, background="white")
game.pack()
game.bind('<ButtonPress-1>', click)
Button(root, command=root.quit, text="Quit").pack(side=RIGHT)
Button(root, command=clear, text="Clear").pack(side=RIGHT)
Button(root, command=step, text="Step").pack(side=RIGHT)
root.mainloop()
どうすれば■をずらすことなく、20×20の基盤上にきちんと配置することができるでしょうか。
234デフォルトの名無しさん:2012/11/17(土) 15:06:04.13
すみません、上記のコードの変数名に一部間違いがありました
☓ n_cols
◯n_col
235デフォルトの名無しさん:2012/11/17(土) 16:22:18.55
>> n_cols
(#^ω^)ビキビキ
236デフォルトの名無しさん:2012/11/17(土) 17:01:45.32
win7 python3.3の環境で

bb = open("bb.jpg", "rb")
b = open("b.jpg", "wb")
b.write(bb.read())
bb.close()
b.close()

というコードでbb.jpgからb.jpgをつくると、
bb.jpgの作成日時が?2012?年?11?月?17?日、??16:47:44
b.jpgの作成日時が?2012?年?11?月?17?日、??16:43:28
になります。なぜ、複製先の日時の方がふるいんでしょうか?
b.jpgを消してもう一度実行しても同じ日時のファイルができあがります。
237デフォルトの名無しさん:2012/11/17(土) 17:02:04.65
思ったよりむずかった。
(#^ω^)ビキビキ

from tkinter import *

root = Tk()
# cellの数は 20 x 20
n_row=20
n_col=20
# cellの縦の長さは10pixels
w = 10
# cellの横の長さは10pixels
h = 10
objs = []
# cellsにcellの生死状態を格納 0 -> 死亡 1-> 生存
cells=[None] * n_col
for col in range(n_col):
row = [0] * n_row
cells[col] = row

def step():
print("step buton pressed")
def clear():
global objs
print("clear buton pressed")
for obj in objs:
game.delete(obj)
objs = []
print('len(objs)={}'.format(len(objs)))
print()
238デフォルトの名無しさん:2012/11/17(土) 17:03:27.01
続き
(#^ω^)ビキビキ

def click(evt):
# ここで正規化
print('clicked x={}, y={}'.format(evt.x, evt.y))
index_x = (evt.x // w)
index_y = (evt.y // h)
board_x = index_x * w
board_y = index_y * h
print('index_x={}, index_y={}'.format(index_x, index_y))
print('board_x={}, board_y={}'.format(board_x, board_y))
print('board_x+w={}, board_y+h={}'.format(board_x+w, board_y+h))
if cells[index_y][index_x] == 0:
print('set 1 to cells[{}][{}]'.format(index_x, index_y))
cells[index_y][index_x] = 1
obj = game.create_rectangle(board_x, board_y,
board_x+w, board_y+h, fill="black")
objs.append(obj)
else:
print('ignored click cells[{}][{}]'.format(index_x, index_y))
print('len(objs)={}'.format(len(objs)))
print()

game = Canvas(root, width=n_row*w, height=n_col*h, background="white")
game.pack()
game.bind('<ButtonPress-1>', click)
Button(root, command=root.quit, text="Quit").pack(side=RIGHT)
Button(root, command=clear, text="Clear").pack(side=RIGHT)
Button(root, command=step, text="Step").pack(side=RIGHT)
root.mainloop()
239デフォルトの名無しさん:2012/11/17(土) 17:16:36.16
bugってた
(#^ω^)ビキビキ

--- tech233.py(リビジョン 50)
+++ tech233.py(作業コピー)
@@ -60,6 +60,9 @@
print("clear buton pressed")
for obj in objs:
game.delete(obj)
+ for col in range(n_col):
+ row = [0] * n_row
+ cells[col] = row
objs = []
print('len(objs)={}'.format(len(objs)))
print()
240デフォルトの名無しさん:2012/11/17(土) 17:21:59.09
>>237-239
まさか、こんな短時間で解いていただけるとは・・・
これでようやくゲームパートの作成に取り掛かれます

本当にありがとうございました
241デフォルトの名無しさん:2012/11/17(土) 17:47:27.06
「# ここで正規化」
↑より下の部分は丁寧に書いたつもりなので、
きちんと意味を理解してね。
242デフォルトの名無しさん:2012/11/17(土) 17:50:05.59
(#^ω^)ビキビキ
色々、間違ってるお。。。

○ print('set 1 to cells[{}][{}]'.format(index_y, index_x))
× print('set 1 to cells[{}][{}]'.format(index_x, index_y))

○print('ignored click cells[{}][{}]'.format(index_y, index_x))
×print('ignored click cells[{}][{}]'.format(index_x, index_y))
243236:2012/11/17(土) 19:35:25.32
こんにちわ
244デフォルトの名無しさん:2012/11/17(土) 19:41:16.26
はいこんにちは
245デフォルトの名無しさん:2012/11/17(土) 20:10:25.71
winは使わないよ。ごめんね。
もう夜遅いから寝なさい。
明日win7があれば試してみるよ。
ごめんね。ごめんね。
246236:2012/11/17(土) 20:13:15.98
はい
247デフォルトの名無しさん:2012/11/17(土) 20:22:49.92
いいえこんにちは
248デフォルトの名無しさん:2012/11/17(土) 21:29:47.39
開発環境はPyScripterとPycharmはどちらが使いやすいでしょうか?
249デフォルトの名無しさん:2012/11/17(土) 21:39:24.77
>>248
あまり高度なことをしてない俺の意見で良ければ
pycharmは機能が豊富でコード補完も便利で使いやすい、ただしマウスホイールでスクロールが出来ない
pyscripterはシンプルでプロジェクト管理やコードの色分けが出来ればいいな、ぐらいの機能
250デフォルトの名無しさん:2012/11/18(日) 04:50:41.59
eric4
251デフォルトの名無しさん:2012/11/18(日) 13:11:13.12
printにくっつけて使うことの多いformat関数だけど
formatと毎回6文字もタイプするのが面倒だし
インデントの深いところで使うと行末が右奥まで行くか
次行に折り返しとなって見苦しい。
Cみたいにtypedefでftとかに短縮して使う方法はありませんか?
割と使用頻度の高いものだけに切実です。
252デフォルトの名無しさん:2012/11/18(日) 14:04:14.18
関数をオーバーライドすればいいじゃない
253デフォルトの名無しさん:2012/11/18(日) 14:04:37.33
つ >>> ft = str.format
>>> ft('{} {:.3f}', 1, 1.2345)
'1 1.234'
>>> ''.ft()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ft'

--- Objects/unicodeobject.c.orig>---2012-11-18 14:00:42.640574634 +0900
+++ Objects/unicodeobject.c>2012-11-18 14:00:55.480574640 +0900
@@ -9212,6 +9212,7 @@
{"isprintable", (PyCFunction) unicode_isprintable, METH_NOARGS, isprintable__doc__},
{"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
{"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
+ {"ft", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
{"format_map", (PyCFunction) do_string_format_map, METH_O, format_map__doc__},
{"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
{"maketrans", (PyCFunction) unicode_maketrans,
254デフォルトの名無しさん:2012/11/18(日) 14:35:39.69
ありがとうございます。感動しました!
これがオブジェクト指向言語の
真骨頂ってヤツですかね。
自分で自分を改造・拡張できる。
255デフォルトの名無しさん:2012/11/18(日) 14:57:41.21
えっ、もしかして下の方でやっちゃった?
makeしたの?からかってやるつもりでpatch貼ったのに・・・
ナンカ、マケタキブン(#^ω^)ビキビキ
256デフォルトの名無しさん:2012/11/18(日) 15:01:51.66
>>255
PythonのCソースコードを検索して
formatという文字を片っ端からftに修正・コンパイル
しなければならないのかと覚悟していました。
こんな簡単にできるとは…
聞くは一時の恥聞かぬは一生の恥とはこのこと。
257236:2012/11/18(日) 15:16:26.52
おはようございます。
258デフォルトの名無しさん:2012/11/18(日) 17:00:07.76
わっわわわわわ

多分Pythonとは関係ない。
win7のファイルの取り扱いが関係していると思った。

で、「ファイルの作成日時」「ファイルの更新日時」
それぞれを調べてみてごらん。

@orig.txt を作成
A10分ほど待つ
B>>236の方法でcopied.txtを作成する。
Corig.txt, copied.txtの作成日時、更新日時を確認する。

多分、Cの時にcopied.txtの作成日時が、
@の時間と一致するんではないかと。

自由に出来るwin環境がないから試せなかった。
259デフォルトの名無しさん:2012/11/18(日) 17:04:08.90
>>258
ABの間に
orig.txtの中身を適当に修正。
を追加して。
260デフォルトの名無しさん:2012/11/18(日) 17:14:30.89
>>236
今ちゃんと読んで気づいたんだけど、
>>236の状態で、

bb = open("bb.jpg", "rb")
b = open("b.jpg", "wb")
b.write(bb.read())
b.close() ←入れ替え
bb.close() ←入れ替え

↑の順序でも試してみてよ。
open(), close()の対称性が、ふと気になった。
261デフォルトの名無しさん:2012/11/18(日) 17:26:35.83
>>254
>>253の上段はオブジェクト指向言語とは関係ないと思う。

あなたが欲していた情報の下段は、
掻きたいところに手が届く、オープンソースの醍醐味かな?
262デフォルトの名無しさん:2012/11/18(日) 17:51:04.35
西新宿のバスターミナルでバスから降りつつ
「駅どこ?」と言い始めた若い女性グループに
ここから一番近いのは営団丸の内線の西新宿駅だけど
次に近いのは都営大江戸線都庁前駅で
あと西武線新宿駅とか都営新宿線新宿駅もあるし
京王線新宿駅小田急線新宿駅
最近出来た副都心線新宿三丁目駅
と話してる間に
相手が居なくなってしまっていたときの敗北感
263デフォルトの名無しさん:2012/11/18(日) 19:56:40.58
>>261
str.formatが変数に代入できるというだけで
私にとってはオブジェクト指向なのです。
あと、下段は何をしているのか意味がわかりませんでした。
264デフォルトの名無しさん:2012/11/18(日) 20:00:11.58
満足してるなら良かろう
265デフォルトの名無しさん:2012/11/18(日) 20:25:04.63
>>263
よく分からんけど、上段があなたにとってのオブジェクト指向なら、
世間のオブジェクト指向とあなたのオブジェクト指向は異なるってこった。

下段についてはpatch, diffで検索するよろし
266デフォルトの名無しさん:2012/11/18(日) 20:35:12.33
pass
267デフォルトの名無しさん:2012/11/18(日) 22:30:32.13
>>263
関数を変数に代入してるから、関数型になるね。
ただオブジェクト指向とは矛盾しない。
268デフォルトの名無しさん:2012/11/18(日) 22:32:46.39
>>str.formatが変数に代入できるというだけで
>>私にとってはオブジェクト指向なのです。







ぷっ
269デフォルトの名無しさん:2012/11/19(月) 03:20:31.47
関数が第一級オブジェクト と言った方が適切かも

ビルトイン関数のformatじゃなくて、文字列のformatメソッド使うようにすれば
.f で補完候補出してくれないかな?
270デフォルトの名無しさん:2012/11/19(月) 05:24:09.79
>>262
あのあたり確かに良く分からん
271デフォルトの名無しさん:2012/11/19(月) 11:28:13.47
doctestを使ってみているのですが、doctestの途中にデバッグプリントのようなものを出力することはできないでしょうか?

printを使ってデバッグプリントを吐き出していると、その出力までdoctestの比較値にされてしまうため、doctestに比較されない出力方法はないかと思っております。
272デフォルトの名無しさん:2012/11/19(月) 11:36:09.63
stderrに吐けばキャプチャされないとか書いてあるけど、それで足りる?
273デフォルトの名無しさん:2012/11/19(月) 11:42:02.19
>>262
コピペかと思ったらオリジナル?
しかし営団とは古い!
274デフォルトの名無しさん:2012/11/19(月) 18:09:12.13
しょうもない質問かと思いますが、どうしてdict.update()の戻り値はnoneになるのでしょうか?
結合したディクショナリを返したほうが使い勝手がいいかと思うのですが。
275デフォルトの名無しさん:2012/11/19(月) 18:17:50.00
>>274
listのsortやreverseと一緒でしょ
>副作用があることをユーザに思い出させるために、これらの操作は並べ替えまたは反転されたリストを返しません。
276デフォルトの名無しさん:2012/11/19(月) 18:34:39.73
listのsort()の戻り値もNoneです
277デフォルトの名無しさん:2012/11/19(月) 19:04:13.60
>>275
実際にはそういうのって副作用があることを想起させるやり方としてはいまさんくらいだと
思うんだよね。
そういうの忘れがちな初心者(俺)がガーッとコード書いて動かしてみて、「あれ?」ってデバッグ
すると、「あーこれか、めんどくさ」っていうくらいの印象しか無い。
278デフォルトの名無しさん:2012/11/19(月) 21:49:14.91
いまさんだと言うならいまいちいまにを挙げるべきだろう
個人的にはL.sorted()って書いてあれーってなったりする
279デフォルトの名無しさん:2012/11/19(月) 21:54:46.76
> ガーッとコード書いて動かしてみて

初心者を免罪符にやることではありません。
初心者であれば小さな単位で書いて動かしましょう。
280デフォルトの名無しさん:2012/11/19(月) 22:06:13.77
Pythonを勉強しているのですがわからないことがあり、教えていただければと思います。

def foo( rlist, rdict):
new = []
for i in range( 4):
tmp = rdict
tmp.update( { "baz": str( rlist[i])})
new.append( [ i, { "bam": tmp}])
print new
foo( [ 0, 1, 2, 3], { "foo": "bar"})

このコードについてなのですが、実行するとbazの値がすべて3になってしまいます。
ミュータブルな値の関係かと思うのですが、そのあたりがよくわかっていないためか悩んでおります。
281280:2012/11/19(月) 22:08:40.90
本文が長いと言われたので分割になります。

>>> l = [0, 1, 2]; d = { "a": {"foo": l[2]}}; l[2] = 3
>>> d
{'a': {'foo': 2}}
上のコードが3になるのに、これが3にならずに2になる理由もわかりません。

どうか解説いただけないでしょうか?
282デフォルトの名無しさん:2012/11/19(月) 22:34:25.30
new.append( [ i, { "bam": tmp[:]}])
283デフォルトの名無しさん:2012/11/19(月) 22:35:47.16
教えて欲しかったらインデント直せ
284デフォルトの名無しさん:2012/11/19(月) 23:00:34.70
280 リストに追加してるのは辞書(mutable)
281 l[2] は数値(immutable)

>>> a = []
>>> b = a # list は mutable なので参照。値は共有される
>>> a.append(1)
>>> b
[1]

>>> a = 1
>>> b = a # int は immurable なので値はコピー
>>> a = 2
>>> b
1
285デフォルトの名無しさん:2012/11/19(月) 23:17:19.68
プログラミング未経験でも学べるPythonサイト教えてください
286デフォルトの名無しさん:2012/11/19(月) 23:52:43.56
>>285
Dive Into Python 3 日本語版
http://diveintopython3-ja.rdy.jp/index.html
287デフォルトの名無しさん:2012/11/20(火) 00:04:29.17
>>281
読みにくいから「;」は使わずに改行しようぜ。
>>> d = {}
>>> L = [0, 1, 2]
>>> tup = (3, 4, 5)
>>> d['L'] = L # @
>>> d['tup'] = tup # A
>>> L[2] = 2222222222222 # B
>>> tup[2] = 55555555555 # C
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> d
{'tup': (3, 4, 5), 'L': [0, 1, 2222222222222]}
>>> d[L] = 'L' # D
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> d[tup] = 'tup' # E

@ABCDEと注目しよう。
@Aはlist, tupleをdictionaryのvalueとして設定。
BCはlist, tupleに値を再度設定。
DEはdictionaryのkeyとしてlist, tupleを設定。

>>> print(L.__hash__) # F
None
>>> print(tup.__hash__) # G
<method-wrapper '__hash__' of tuple object at 0xa020a2c>

immutable, mutableはdictionaryのkeyと出来るか出来ないかが違う。
ここまで書いてめんどくさくなったので今日はここまでで寝る。詳しくは明日書く。
288デフォルトの名無しさん:2012/11/20(火) 00:07:54.20
>>286
ありがとうございます
つまり3がおすすめということでしょうか?
2.7をダウンロードしたばっかりなんですが
今どっちが人口多いですか?そしてこれから
289デフォルトの名無しさん:2012/11/20(火) 00:44:14.91
XPに3.3をインストールしてパイソンシェルのウィンドウを動かすとカクカクするんだけどおれだけ?
290デフォルトの名無しさん:2012/11/20(火) 03:03:00.07
>>280
tmp = rdict は辞書のコピーではなく参照なので、
tmpへの変更がrdictにも反映されます。

期待通りのbazの値を得るには、コピーする
tmp = rdict.copy()
291デフォルトの名無しさん:2012/11/20(火) 05:59:36.78
>>288
2.7でいいよ
2から3にコンバートも出来るし基本は変わらない
292デフォルトの名無しさん:2012/11/20(火) 07:16:11.37
>>280
a = ["foo", [1,2,3]]
x = a[1]
b = a
とした状況で
@ a = ["bar"]
A a[1] = [4,5,6]
B a[1][0] = 4
のどれかを実行することを考える

@は「変数aがどこを指し示すか」を変更する処理
Aは「変数aが指しているリスト」を変更して「その1番目がどこを指し示すか」を変更する処理
Bは「a[1]が指しているリスト」を変更して「その0番目がどこを指し示すか」を変更する処理

図にするとこんな感じ。
ttp://www.dotup.org/uploda/www.dotup.org3642272.png
ttp://www.dotup.org/uploda/www.dotup.org3642275.png
ttp://www.dotup.org/uploda/www.dotup.org3642276.png

こうすると一目瞭然だけど
@の場合はaを変更してもb,xは変わらない。
Bの場合はa[1]とb[1]とxは同一のリストを指していて、そのリストを変更するから
        aの変更の影響でbもxも変わる。
Aの場合はaとbは同一のリストを指していて、そのリストを変更するから
        aの変更の影響でbも変わる。けどxは直接的には関係ないのでそのまま
293デフォルトの名無しさん:2012/11/20(火) 19:32:25.50
多分プログラミング以前の問題だと思いますが、ここで質問させてください

pythonを勉強中なのですが、実行の仕方で躓きました
d:\python33\python.exe
d:\pythonProject\test.py
にファイルがあるとして
xpのコマンドプロンプト上で
d:\python33>python test.py
とすると実行できるようにしたいのですがうまくいきません
pythonのエラー no such file or directoryとなります
システム環境変数
には両方共パスを通しています
sys.path.appendで追加してsys.pathにも表示されています
それでもできません
どこが間違っているんでしょうか?

d:\python33>test.py

これだとちゃんとエディタが起動してくれます
294デフォルトの名無しさん:2012/11/20(火) 19:49:18.48
>>293
d:\python33\にはパスを通してあるけど
d:\pythonProject\にはパスを通してないんでしょ?
295デフォルトの名無しさん:2012/11/20(火) 19:51:44.39
>>293
pythonはwindowsのパスなんて理解しないよ
296デフォルトの名無しさん:2012/11/20(火) 19:52:36.60
>>293
3.3なら py test.py ではどう?
自分のとこではc:\Windowsに入ってたので環境変数設定は不要だった

複数のバージョンが入ってる場合は、shbangを一行目に書くか
py -3.3 test.py で実行

>sys.path.appendで追加してsys.pathにも表示されています
環境変数の設定方法に疑問が。これはライブラリを探す場所のpath設定だよ
297デフォルトの名無しさん:2012/11/20(火) 20:05:06.52
>>294
システム環境変数に両方共パスは通しています
それでうまくいかなかったので
sys.pathでも通しました

>>296
だめでした no such fileとなります
pythonは33しかいれていません

できるかだけでも教えて欲しいんですが
みなさんの環境だと
test.pyをスクリプト専用のフォルダ(python.exeの配下じゃないフォルダ)において
>py test.py
というやり方で実行できますか?
298デフォルトの名無しさん:2012/11/20(火) 20:17:03.86
>>297
cd d:\pythonProject
してから
python test.py
299デフォルトの名無しさん:2012/11/20(火) 20:22:04.98
sitecustomize.py
usercustomize.py
どっちかを編集してみるとか
普通は君みたいなことするひとは居ないけど
300デフォルトの名無しさん:2012/11/20(火) 21:07:52.91
>>297
コマンドプロンプトからpathって打ってEnterしたらどうなる?
差し支えのある箇所があったら伏せ字にしたうえで結果を貼ってみて
301デフォルトの名無しさん:2012/11/20(火) 21:22:15.20
この手のは長引くよな
302デフォルトの名無しさん:2012/11/20(火) 21:29:05.37
コマンドプロンプトを理解してないだけじゃねえか
303デフォルトの名無しさん:2012/11/20(火) 21:30:21.44
>>300
PATH=D:\Python33\;D:\Python33\Lib\site-packages;D:\PythonProject;

>>299
検索しましたがそういったファイルはありませんでした
ぜひ普通のやり方を教えて下さい

>>298
それで一応できたのですが
それだと毎回指定しないといけないですよね?
ジャンルごとにフォルダ分けしてその中のpyを実行させたいので
予め環境変数など指定しておけばいいという状態にしたいんです。
importでのモジュールのパスは検索することはできるけど
python test.pyなどの実行時の引数のパスは各ディレクトリから検索しないってことなんでしょうか?
304デフォルトの名無しさん:2012/11/20(火) 21:33:35.47
どっから環境変数設定してんの?
プロンプトでやってんなら実は揮発してましたとか言わない?
305デフォルトの名無しさん:2012/11/20(火) 21:36:04.93
>>304
ちゃんとコントロールパネルのシステムで設定しています
プロンプトで設定した場合、閉じるとパスが消えることは知っています
306デフォルトの名無しさん:2012/11/20(火) 21:36:36.00
shebang書けって言ってるんだから書けよ
1行目に
#!python
307デフォルトの名無しさん:2012/11/20(火) 21:39:20.31
Cygwin
308デフォルトの名無しさん:2012/11/20(火) 21:42:04.09
私はshebang書けとは言われたことがないですが
それは何ですか?
pythonは今日はじめたばかりなのでどこにどのように書くのかわかりません
309デフォルトの名無しさん:2012/11/20(火) 22:15:08.82
PYTHONPATH指定してこれぐらいしかないな
http://www.python.jp/doc/release/using/cmdline.html#cmdoption-m
310デフォルトの名無しさん:2012/11/20(火) 22:42:55.65
>>309
いい忘れてましたが
それも既にやってました

どうも皆様ありがとうございました
pythonは諦めます
スレ汚し失礼しました
311デフォルトの名無しさん:2012/11/20(火) 23:07:09.12
python -m test
312デフォルトの名無しさん:2012/11/20(火) 23:08:50.44
パスに日本語混じってたりとか?
313デフォルトの名無しさん:2012/11/20(火) 23:11:03.14
>>293
xpのコマンドプロンプト上で
d:\python33\python
d:\python33\python.exe
d:/python33/python
d:/python33/python.exe
と実行して、↓みたいな表示出てくる?

Python 3.2.2 (default, Sep 16 2012, 00:38:58)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
314デフォルトの名無しさん:2012/11/20(火) 23:14:38.28
>>293
書いた直後に気づいたんだけど、
d:\python33\python.exe # basedir1=d:\python33
d:\pythonProject\test.py # basedir2=d:\pythonProject
にファイルがあるとして
xpのコマンドプロンプト上で
d:\python33>python test.py # basedir1=d:\python33

test.pyはbasedir2にあるものじゃない?
basedir1以下にもtest.pyって同名な奴がいるんじゃない?
d:\pythonProject\test.py

d:\pythonProject\test_otameshi.py
に名前変えてみて、もう一度挑戦してみたら?
315デフォルトの名無しさん:2012/11/20(火) 23:18:04.08
カレントが d:\python33 なのに d:\pythonProject\test.py をファイル名のみで実行しようとしてるとこが問題

309,311の方法で探してくれそうだけど、パスの順序と名前重複に注意(testって名前は標準にある)
316デフォルトの名無しさん:2012/11/20(火) 23:24:10.64
スレ違い
317デフォルトの名無しさん:2012/11/20(火) 23:31:58.68
318デフォルトの名無しさん:2012/11/21(水) 00:01:28.67
アンインストールして寝ようと思ってましたが
レス頂いたのでインストールし直しました

>>311のやり方で行けました!
これはimport testということですよね
わけも分からず、PYTHONPATHの設定しかしていませんでした

>>313
プロンプトに対しては設定したすべてのパスが通ってます
それぞれのパスにあるファイルをプロンプトでは正常に実行してくれました
ただ
>python test.pyが機能しないだけです
test.pyと書きましたが、実際はhumansize.pyです
長いのでtest.pyと2ちゃんねるでは書いていただけです

>>315
>カレントが d:\python33 なのに d:\pythonProject\test.py をファイル名のみで実行しようとしてるとこが問題?
そうです。でもそうしないと何度もデバッグ作業をするのに
毎回フルパス入力をしなくちゃならないのはさすがに面倒なので
短い記述で実行できるようにしたかったんです

※py拡張子はエディタに関連付けているので直接実行は避けたいです

初めてのPythonプログラム - Dive Into Python 3 日本語版
http://diveintopython3-ja.rdy.jp/your-first-python-program.html

それにしてもまさか、上の1.1で丸1日潰すとは思いませんでした
向いていないかもしれないですね
とにかくレスを下さった方々本当にありがとうございました
319デフォルトの名無しさん:2012/11/21(水) 00:05:02.41
もしかして…相対パス…
320デフォルトの名無しさん:2012/11/21(水) 00:08:58.33
currentをd:\python33にするのは止めなさい。

毎回、
cd d:\pythonProject
しなさい。若いもんが横着を覚えては駄目だ。
321デフォルトの名無しさん:2012/11/21(水) 00:52:11.86
横着するためにプログラムはあるというのに
322デフォルトの名無しさん:2012/11/21(水) 01:20:30.82
コマンドプロンプトは立ち上げっぱなしでD:\pythonProjectを指しておく.
humansize.pyを始めとする自分の開発資産はもちろんここに置く.
humansize.pyを実装したら,立ち上げっぱなしのコマンドプロンプトで
python humansize.py
を実行する.
デバッグのときもコマンドプロンプトを立ち上げっぱなしにしておけば↑キーで履歴が辿れるから,わざわざ再度
python humansize.py
とタイプする必要はない.

もう一工夫したいのであれば,a.batみたいな短いファイル名のバッチファイルを開発資産と同じディレクトリに置いて,中身は
python humansize.py
と書いておく.
実行時はコマンドプロンプトから
a
とタイプしてEnter.
323デフォルトの名無しさん:2012/11/21(水) 01:38:59.76
おお、それはすごく便利
いろいろやりようがあるんですね
324デフォルトの名無しさん:2012/11/21(水) 02:57:11.84
Numpyの解説サイトないですか?
arrayとmatrixの違いが良く分からない
325デフォルトの名無しさん:2012/11/21(水) 03:10:01.55
326デフォルトの名無しさん:2012/11/21(水) 07:30:32.25
馬鹿を甘やかすなよ
327デフォルトの名無しさん:2012/11/21(水) 08:02:45.58
馬鹿には無理
328デフォルトの名無しさん:2012/11/21(水) 08:10:29.15
>>327
お前は無理だったな笑
329デフォルトの名無しさん:2012/11/21(水) 08:44:09.73
>>326
初心者を脅威に感じる程度のレベルなの?
330デフォルトの名無しさん:2012/11/21(水) 11:19:59.10
pythonでhttp://www.dlsite.comから
各作品のダウンロード数をスクレイピングして記録しようと思ったのですが、
どうやら単純に文字を表示しているのではなく
jQueryを使ってアクセスするたびに文字を生成している
ようなのです。
よって単純にソースを取得しても
Download&nbsp;:&nbsp;<span class="_dl_count_RJ****"
のようなものしかとれず肝心のダウンロード数を取得できません。
どのようにすればよいでしょうか。
331デフォルトの名無しさん:2012/11/21(水) 12:00:54.05
Ryona's Station [RETTA] | 「同人誌」「同人ゲーム」「同人ソフト」をこっそり楽しむ | DLsite Home
ttp://www.dlsite.com/home/work/=/product_id/RJ100689.html

Download&nbsp;:&nbsp;<span class="_dl_count_RJ100689">129</span>
えー普通に値として書いてるじゃん
dl_count..はclass属性の値だからね、span要素の値を取得しないと
332デフォルトの名無しさん:2012/11/21(水) 12:04:09.24
python関係ないだろ
333デフォルトの名無しさん:2012/11/21(水) 13:33:32.40
 フ゜ッ ∩ ∧_∧  あっそ
  ℃ゞノ ヽ(・ω・ )  
  ⊂´_____∩
334デフォルトの名無しさん:2012/11/21(水) 14:55:07.10
 フ゜ッ ∩ ∧_∧
  ℃ゞノ ヽ(・ω・ )
  ⊂´_____∩
335デフォルトの名無しさん:2012/11/21(水) 15:30:38.54
>>330-331
ヾ(o゚ω゚o)ノ゙ プニプニ!プニプニ!
336デフォルトの名無しさん:2012/11/21(水) 17:03:05.31
おっpipy
337デフォルトの名無しさん:2012/11/22(木) 12:58:49.42
python3で
a = [(1,100), (3,400), (2,500), (5,200)]
を2番目の要素でソートして、
[(1,100), (5,200), (3,400), (2,500)]
のように並べ替えたいんですが、どうやればいいでしょうか。
338デフォルトの名無しさん:2012/11/22(木) 13:13:58.91
from operator import itemgetter
a.sort(key=itemgetter(1))

で行けました。
339デフォルトの名無しさん:2012/11/22(木) 14:48:12.39
>>> a.sort(key=lambda x: x[1])
>>> a
[(1, 100), (5, 200), (3, 400), (2, 500)]
>>> a.sort(key=lambda x: x[1], reverse=True)
>>> a
[(2, 500), (3, 400), (5, 200), (1, 100)]
340デフォルトの名無しさん:2012/11/22(木) 15:04:12.08
FAQ なのでテンプレに入れた方が良いかもね
341デフォルトの名無しさん:2012/11/22(木) 18:04:45.12
>>339
ありがとうございます。
ググった時に「関数を定義して云々」という情報もありましたがハードルが高そうでスルーしてました。
けっこう基本的なことなんですね。
342デフォルトの名無しさん:2012/11/22(木) 23:13:56.02
基本的ではないけれど
みんなが使うのでFAQ
343デフォルトの名無しさん:2012/11/22(木) 23:43:50.48
PyScripter使ってみたらインタプリタがすごく重い
webサイトのソースを表示したらカックカクになる
PythonShellだと、以前入力した文字を表示できない
コマンドプロンプトだと↑キーで前に入力した文字を表示できるけど
フォント色変えたり、インテリセンス機能がない

何かオススメのインタプリタないですか?
344デフォルトの名無しさん:2012/11/23(金) 00:14:23.67
eric4
345デフォルトの名無しさん:2012/11/23(金) 01:42:46.86
Pythonはプログラム初学者には素晴らしい言語
だからと言って子供のおもちゃではない
大規模なプログラムも、商用利用も可能なほど高性能
宝石なんか眼中にない
僕らはニシキヘビを信仰する
がんばれPython それいけ僕らのPython
346デフォルトの名無しさん:2012/11/23(金) 01:48:31.12
しかし馬鹿には無理
347デフォルトの名無しさん:2012/11/23(金) 02:11:08.28
>>344
馬鹿には無理だった
なんとかインストールしたけど
入力補完がデフォルトでできない
どこか設定があるんだろうけど日本語解説サイトもないし諦めました
348デフォルトの名無しさん:2012/11/23(金) 02:30:32.71
>>343 インタラクティブ・シェルのような環境と解釈するけど
ipythonやbpython辺りが定番、他に手軽に使えそうなとこだと

python -midlelib.idle 標準で付いてくるidle。色付と補完くらいはしてくれる
 前に入力した文字は Alt+P (Options -> Configure IDLE -> Keys で設定変更可)

python -mwx.py.PyCrust (PySlices,PySlicesShell,PyAlaMode,...) wxPythonに標準で色々付いてくる
 前に入力した文字は Alt+P もしくは Ctrl+↑(Helpに一覧あり)
 PySlicesはeditor+shellみたいな環境。コードの断片を実行・再編集出来る。
349デフォルトの名無しさん:2012/11/23(金) 02:55:00.69
>>347
それ言語関係ないやん。
おまいコーディングすんな。世の中に貢献するより迷惑かけるほうが多そうだ。
350デフォルトの名無しさん:2012/11/23(金) 04:15:24.61
>>348
だめだ難しすぎる
python自体簡単な言語のようだけど
インストールや設定がわけがわからない
pyreadlineとpywin32はexeがあったので簡単にできたが
ipythonはソースだけのようでどうしていいかわからない
python setup.py installとやってもwarningだらけ

easy_installでやると簡単らしいときいたけど
これをインストールするのが同じく難しかった
一応easy_installへのパスは通ったみたいだけど
easy_install ipythonとやるとdistフォルダがみつからないとかで
エラー

超絶難しいんだけどww
みんなよくこんなのできたな
351デフォルトの名無しさん:2012/11/23(金) 04:47:51.36
馬鹿には無理
352デフォルトの名無しさん:2012/11/23(金) 05:11:29.93
もう一回再インストールしようと思って
removeipython.exe
removepywin.exe
をクリックしても
this program is normally started by windows
ってエラーダイアログが出てアンインスコもできない
なんだよこれ・・・どうなってんの

ipythonはレビューサイト見る限り、俺が求めていたものなんだけどなー
idleに毛が生えた程度のものでいいんだよ
プロ並のプロジェクトやりたいわけじゃないし
ちょっとテキスト読み込んでごにょごにょしたいだけなのにな
言語学ぶよりインストールの方が難しいって・・・
本末転倒だよね
353デフォルトの名無しさん:2012/11/23(金) 05:12:31.09
Pythonインタプリタとエディタとコマンドプロンプトあれば当座は十分じゃん
小難しいことするのは慣れてきてからで足りる
354デフォルトの名無しさん:2012/11/23(金) 05:16:51.78
>352
>言語学ぶよりインストールの方が難しいって・・・

自分が馬鹿なのを言語のせいにするなって。
お前あきらかにプログラミングに向いてないよ。
迷惑かけるだけだから止めろ。
355デフォルトの名無しさん:2012/11/23(金) 05:18:58.66
>>350
win32だったら公式よりも、ActivePythonにすれば、
easy_install最初から使えるし、ipythonのインストールも簡単 pypm install ipython

でも、色付き表示の為に qtconsole 使いたければ、
追加でいろいろ入れないといけないので、そこからまだ手間かかるかも
環境構築で躓くのでは、お勧めはし辛いかなぁ。

最初のうちは標準のIDLEでいいんじゃない?
www.python.jp/doc/release/tutorial/interactive.html
www.python.jp/doc/release/library/idle.html
356デフォルトの名無しさん:2012/11/23(金) 05:22:16.29
そうだと思う
そういうの慣れてからやればいいのに
便利な機能があると紹介されるといれたくなって…
一応>>348さんが書いてくれたように
もともとついているidleにも以前の入力を表示する機能があったので
今のとここれでいいんですけどね

ipythonはコンソールとシェルを行ったり来たりする必要が内容で
やってみたいなと思ったんだけど

あと、setuptoolsってもう更新してなくて2.7にしか対応していなようで
これが実行できればeasyinstallもできるんだろうけど…
まだ3x系に初心者が手を出すのは早かったのかなー

てか、いろいろ入れたライブラリのレジストリを削除したいのに・・・
インストール時点でもうエラー出てるんですよね。一応フィニッシュするけど
ログに0x83はutf-8に変換できないとかなんとかそういう英文が出てる
357デフォルトの名無しさん:2012/11/23(金) 05:25:21.67
馬鹿には無理ってこういうときのためにある言葉なんだなって
358デフォルトの名無しさん:2012/11/23(金) 05:25:55.14
>>352
インストーラで入れたのだったら
プログラムの追加と削除からアンインストール
359デフォルトの名無しさん:2012/11/23(金) 05:53:52.11
>>358
それでいけました。多分
site-packageにいっぱいゴミが残ったままですけど

やっぱり慣れるまでデフォルトのシンプルなままで使っていこうと思います
ありがとうございました
360デフォルトの名無しさん:2012/11/23(金) 08:29:18.36
>>331
import logging, sys, urllib
import BeautifulSoup

url = 'http://www.dlsite.com/home/work/=/product_id/RJ***.html'
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())

print soup.findAll("span", {"class":"_dl_count_RJ***"})


実行結果
[<span class="_dl_count_RJ***"></span>]
となりソースだけが落ちてきて肝心のダウンロード数が取得できません

>>332
どのカテゴリの話なのでしょう?
361デフォルトの名無しさん:2012/11/23(金) 08:46:04.60
馬鹿には無理
362デフォルトの名無しさん:2012/11/23(金) 08:59:27.98
バカが張り付いてるな
363デフォルトの名無しさん:2012/11/23(金) 09:02:57.24
>>360
Pythonのバージョンは?
364デフォルトの名無しさん:2012/11/23(金) 09:10:05.04
>>360
var query= from s in html.Descript("span")
where Regex.IsMatch(""_dl_count.*",s.Attribute("class").Value)
select s.Value
365デフォルトの名無しさん:2012/11/23(金) 10:00:39.87
やってみたけど
for span in soup.find_all("span"):
span.string
これですら数値が出ないってことはパーサーがだめなんじゃない?
366デフォルトの名無しさん:2012/11/23(金) 10:01:31.05
vimにvim-quickrunが鉄板
367デフォルトの名無しさん:2012/11/23(金) 10:11:52.27
>>360
マジレスすると python 全然関係無い。
web 板逝け。
368デフォルトの名無しさん:2012/11/23(金) 10:54:17.58
関係あるだろ、Pythonには糞みたいなパーサしかないのかって話なんだから
369デフォルトの名無しさん:2012/11/23(金) 11:11:59.21
パーサー関係無い
消えろ
370デフォルトの名無しさん:2012/11/23(金) 11:12:20.09
馬鹿には無理
371デフォルトの名無しさん:2012/11/23(金) 11:13:34.06
おまえが消えろカス
372デフォルトの名無しさん:2012/11/23(金) 11:13:37.49
落ちてきたHTMLソースを確認しろ
373デフォルトの名無しさん:2012/11/23(金) 12:42:38.58
>>363
2.73です

>>364
これはjQuery?ですか?これをどう利用するのでしょうか

>>365
パーサーとはこの場合どれのことをさすのでしょうか?

>>367
Pythonをやっていてスクレイピングがしたくなり
調べたらBeautiful soupというもので簡単に
出来るとのことだったのでPythonスレで聞いたほうが
良いのかなと思ったのですがwebのカテゴリ
なのでしょうか。Pythonの解説書を2冊ほど眺め
二、三スクリプト書いた程度ですがこの上webとも
なると敷居が高そうです。

>>372
落ちてきたソースの該当箇所は
Download&nbsp;:&nbsp;<span class="_dl_count_RJ***"></span>
と成っています。調べるとjQueryでブラウザでアクセスするごとにダウンロード数を
表示している?らしいですが、となるとpythonの知識だけでは足りないということでしょうか
374デフォルトの名無しさん:2012/11/23(金) 12:56:29.59
findAllの返すオブジェクトが何か調べろよ
pythonの知識じゃなくてセンスが足りない
375デフォルトの名無しさん:2012/11/23(金) 13:12:16.67
>>373
JavaScriptを実行するのはブラウザの仕事
勝手にやってはくれない
落としたソースでsummary_urlを検索して見つかったところが
ダウンロード数を取得しているJavaScriptコードだから
それと同じことをPythonでやればいい
頻繁に呼び出すと怒られるかもね
376デフォルトの名無しさん:2012/11/23(金) 15:28:23.18
>>373
beautifulsoupはhtmlのパーサーでしかない
javascript実行後のページを取得するにはwebkit等のブラウザを使う
windowsでは面倒、androidのsl4aやlinuxのpyGTKを使えばpythonで簡単に書ける

仕方ないから俺がここまで調べてやったぜ
377デフォルトの名無しさん:2012/11/23(金) 15:31:13.69
豚d
378デフォルトの名無しさん:2012/11/23(金) 16:26:05.89
C#なら一行で取得できるけどな
379デフォルトの名無しさん:2012/11/23(金) 16:28:23.32
スクレイピングではid等の所得のみに留めて、
その後JavaScriptでやってるのと同じhttpリクエストを発行してDL数を所得

規約とかどうなってるのか知らないけど、
マナーとして、実際のサイトでスクリプトをテストしたりせずに、
まずはどういう仕組みになってるのかきちんと解析しよう
380デフォルトの名無しさん:2012/11/23(金) 21:35:05.38
>>373
> pythonの知識だけでは足りないということでしょうか

HTML, JavaScript, HTTP, XMLHTTPRequest, JSON 等の知識が必要になってくる

どちらかと言うとweb向きの話題
dl数が取れないのはサイトの仕様なので、htmlパーサの責任じゃない。

ブラウザのオートメーションする方法では、
データが読み込まれるタイミング等を適切に把握してないといけないので、その辺が結構面倒
JavaScript, DOM events 等の知識が必要
381デフォルトの名無しさん:2012/11/23(金) 22:50:50.32
こういうのを一行づつ確認しながら試せるのがPythonの良さだよな
コンパイラ言語でやってたときは本当に非効率的だった
382デフォルトの名無しさん:2012/11/23(金) 23:01:35.08
>>381
デバッガでそれに近いことはできるよねコンパイラ言語でも
383デフォルトの名無しさん:2012/11/24(土) 01:07:57.34
非効率的と逝っているのに
あさっての方向のレスする馬鹿
384デフォルトの名無しさん:2012/11/24(土) 01:11:36.92
最初から読んでないのか、揚げ足取りたいだけなのか、論点ずらしたいのか知らんがアフォ丸出し。
385デフォルトの名無しさん:2012/11/24(土) 01:12:19.37
バッカにはムッリィイイイイイイイイイイイイイイ
386デフォルトの名無しさん:2012/11/24(土) 06:23:11.54
だから早くID開示をしろと
387デフォルトの名無しさん:2012/11/24(土) 09:26:41.90
>>383
いや今時のデバッガはデバッグ中にコード修正とかもできるから、
効率も遜色ない。

君の知識が古いから、あさってに見えるだけだよ (w
388デフォルトの名無しさん:2012/11/24(土) 09:49:36.65
デバッグ中に修正できる程度の糞コードならな
389デフォルトの名無しさん:2012/11/24(土) 10:46:09.14
>>374
>>375
>>376
>>379
>>380
ちょっと現状では手に負えなさそうですが、
調べてみます。
ありがとうございました。
390デフォルトの名無しさん:2012/11/24(土) 11:05:21.41
>>388
一回使ってから言ってくれ。
391デフォルトの名無しさん:2012/11/24(土) 11:12:54.86
嫌です
392デフォルトの名無しさん:2012/11/24(土) 11:16:16.88
おことわりします(AAry
393デフォルトの名無しさん:2012/11/24(土) 11:28:59.47
>>390
テスト駆動開発もしらないバカに言われたくありませんw
394デフォルトの名無しさん:2012/11/24(土) 11:54:17.42
どう見ても「テスト駆動開発」と言いたいだけのレス乙 (w
395デフォルトの名無しさん:2012/11/24(土) 12:08:49.80
だいたいテスト駆動開発でデバッグの作業が消えるわけじゃないのにな
テストケースのエラー見てコード修正してるならそれは立派にデバッグだよ
396デフォルトの名無しさん:2012/11/24(土) 12:14:01.41
>>388
それができるPythonのコードはデバッグ中に修正できるウンコードしかないってこと?
397デフォルトの名無しさん:2012/11/24(土) 12:18:17.18
>396
>381
398デフォルトの名無しさん:2012/11/24(土) 12:24:01.81
>>397
やっぱりそうなんですね。所詮はLL脳ですね。
399デフォルトの名無しさん:2012/11/24(土) 12:24:20.38
Pythonでやれるようなレベルならコンパイラなんて使わないだろ
400デフォルトの名無しさん:2012/11/24(土) 12:41:29.39
テキストエディタだけあれば十分
401デフォルトの名無しさん:2012/11/24(土) 14:37:21.49
Yes, I think so.
402デフォルトの名無しさん:2012/11/24(土) 14:42:21.77
エディタは何がいいですか?
信者が沢山いて、私も信者になれる奴がいいです。
403デフォルトの名無しさん:2012/11/24(土) 14:45:36.55
notpad is good.
404デフォルトの名無しさん:2012/11/24(土) 14:46:07.80
x notpad
o notepad
405デフォルトの名無しさん:2012/11/24(土) 19:02:17.10
>>402
信者の多いエディタならEmacsやVimとなる。
しかしいいかどうかは疑問だ。
共に、一通り使えるようになるまで数年かかるので
それまではコーディングの効率が落ちる。
406デフォルトの名無しさん:2012/11/24(土) 19:12:17.65
どんだけ免許皆伝な「一通り」だよ。
407デフォルトの名無しさん:2012/11/24(土) 19:33:06.03
>>406
ファイルの基本的な編集と保存操作を、いちいち考え込んだり
ググったりせずできるようになるまで、を一通りと表現した。
408デフォルトの名無しさん:2012/11/24(土) 19:40:52.19
それに数年かかるようだと、この業界向いてないから
周りの人のために早めに辞めた方がいいぞ。
409デフォルトの名無しさん:2012/11/24(土) 19:57:47.92
>>408
ひどいことを言う人だな。
EmacsとVimは数分で挫折する人が大半なんだぜ。
俺は挫折せずここまで頑張ったことを誇りに思っているよ。
410デフォルトの名無しさん:2012/11/24(土) 20:06:28.11
pass
411デフォルトの名無しさん:2012/11/24(土) 20:07:39.52
数分で挫折する奴の方が、自分の実力を知ってる分マシ。

周りに迷惑かけてることも考えずにヘタに粘る奴は、マジ辞めて欲しい。
412デフォルトの名無しさん:2012/11/24(土) 20:08:19.47
数分でなきゃ数年なのかよ。
413デフォルトの名無しさん:2012/11/24(土) 20:15:51.34
黙ってed使えよ雑魚
414デフォルトの名無しさん:2012/11/24(土) 20:18:01.02
>>411
エディタの習熟に時間がかかるとなぜ
周りに迷惑がかかるんだよ。
自分でネット見て作ったアンチョコがあるから
仕事には影響出さなかったよ?
アンチョコを見ずに操作できるようになるまで
数年かかったということだ。
415デフォルトの名無しさん:2012/11/24(土) 20:28:08.65
いちいちあんちょこ見ながらエディタ使ってるような奴が
回りに迷惑かけてないって?

周りが見えてないって、ある意味最強だな (w
416デフォルトの名無しさん:2012/11/24(土) 20:37:13.24
>>381以降,デバッガの話題(?)
試行錯誤するのが便利なのは、REPL環境のインタラクティブ性の恩恵だと思う

一般的に、スクリプト言語の方が敷居が低いし、準備の手間も楽で手軽
シェルで済む程度の作業では、エディタもデバッガも出番じゃない

> cat getdoc.py
#!/usr/bin/env python
import sys, lxml.html
url = sys.argv[1]
doc = lxml.html.parse(url)

> python -i getdoc.py URL
>>> doc.xpath("//span[starts-with(@class,'_dl_count')]/text()")
417デフォルトの名無しさん:2012/11/24(土) 20:39:59.85
>>415
もういいよ。
あんたは人をそういう上から目線で
見下す種類の人間なんだな。
会話するだけ時間の無駄だ。
418デフォルトの名無しさん:2012/11/24(土) 20:41:16.08
>>389
375提案の方法 codepad.org/0qErCrE1
ページにも拠るみたいだけど、一覧では普通にspanの値でDL数取れる
419デフォルトの名無しさん:2012/11/24(土) 20:43:48.42
> 会話するだけ時間の無駄だ。

なら、レスしなきゃいいのに…
こういうこと覚えるのにも数年かかるんだろうな。(w
420デフォルトの名無しさん:2012/11/24(土) 20:46:42.21
>>419
レスしなきゃお前が言いたい放題じゃないか。
そんなの許せるかよ。
人に嫌みを言うことしかできない人間は黙って消えろ。
421デフォルトの名無しさん:2012/11/24(土) 20:50:54.62
二人ともお互いが気になってしょうがないのね
結婚すれば?
422デフォルトの名無しさん:2012/11/24(土) 20:51:49.97
むかつく。すげーむかつく。
見ず知らずの人にこんなひどい言葉をかけて
末尾に「(w」とか付けて楽しむ人間って
普段どんな顔して仕事してるんだ。
この世に存在していいのか。消えてなくなれ。
423デフォルトの名無しさん:2012/11/24(土) 20:53:01.89
>>422
消えてなくなれよ
424デフォルトの名無しさん:2012/11/24(土) 20:59:12.50
端から見てりゃお似合いだから、夜の闇にしけこんで消えて無くなれ。
425デフォルトの名無しさん:2012/11/24(土) 20:59:41.13
ごめん、熱くなった。
不快なレスはスルーというのが
にちゃんの鉄則だったな。
スレを汚して申し訳ない。
426デフォルトの名無しさん:2012/11/24(土) 21:05:33.63
>>423-424 がお前の職場での評価だよ (w
427デフォルトの名無しさん:2012/11/24(土) 21:09:14.08
>>425
わかったら国に帰るんだな
428デフォルトの名無しさん:2012/11/24(土) 21:55:15.38
チラシは便所の裏で
429デフォルトの名無しさん:2012/11/24(土) 23:42:51.80
くだらない質問よりくだらない人間が多いこのスレ
430デフォルトの名無しさん:2012/11/24(土) 23:55:16.87
>>429
確かにそうだな、>>429 とかが典型例
431デフォルトの名無しさん:2012/11/25(日) 00:00:13.15
確かにそうだな、>>430 とかが(ry
432デフォルトの名無しさん:2012/11/25(日) 00:11:46.94
ニヤニヤしながらryとか打ってんじゃねえよブタ
433デフォルトの名無しさん:2012/11/25(日) 00:29:25.00
vimはウィンドウズユーザーにはおすすめしない
ショートカットがすべてが一般的なものと違うから
434デフォルトの名無しさん:2012/11/25(日) 00:39:52.92
>>416
>catって何?
435デフォルトの名無しさん:2012/11/25(日) 00:44:55.40
EmacsやVimが使えない奴がでかい顔してるスレがあると聞いてやって来ました。
436デフォルトの名無しさん:2012/11/25(日) 00:45:14.01
プロジェクトの一部を修正、試行錯誤したいって場合
同じようなことしようとしたらテスト駆動しかないだろ
デバッガなんてステップしかできないんだから
437デフォルトの名無しさん:2012/11/25(日) 00:53:02.95
pass
438デフォルトの名無しさん:2012/11/25(日) 01:08:28.90
ブタがでかい顔してるスレがあると聞いてやって来ました。
439デフォルトの名無しさん:2012/11/25(日) 02:33:47.11
pass
440デフォルトの名無しさん:2012/11/25(日) 08:51:39.02
windowsしか使う気無いならPython自体やめとけ
441デフォルトの名無しさん:2012/11/25(日) 08:56:44.92
windows利用者に最適
442デフォルトの名無しさん:2012/11/25(日) 09:03:17.65
vimのショートカットって何だ?
相応しい言葉を使えよクソデブという意味でなく、文字通りの意味で、何だ?
443デフォルトの名無しさん:2012/11/25(日) 09:27:02.05
もうPythonの話飽きた
たまにはエディタの話でもしろ
444デフォルトの名無しさん:2012/11/25(日) 09:45:33.21
>>418
これはすごい!
即座には理解できなさそうですが
勉強させていただきます。
ありがとうございました。
445デフォルトの名無しさん:2012/11/25(日) 11:16:21.55
python 全然関係ないじゃん
446デフォルトの名無しさん:2012/11/25(日) 11:23:25.31
無用なことを全部そぎ落とすとつまんねえ人間になるぞ
今のお前のようにな
447デフォルトの名無しさん:2012/11/25(日) 12:41:19.82
軽さにこだわるXP廚は壁紙無地なんだろ?
448デフォルトの名無しさん:2012/11/25(日) 15:04:32.69
pass
449デフォルトの名無しさん:2012/11/26(月) 08:18:31.50
while not you_died:
&nbsp;watch_youporn()
&nbsp;masturbate(tenga)
&nbsp;sleep()
450デフォルトの名無しさん:2012/11/26(月) 22:59:13.07
tkinterでExcelのようなスプレッドシートを作っているのですが

from tkinter import *
root = Tk()
value=StringVar()
col = [' ', 'a', 'b', 'c', 'd']
row = [' ', 0, 1, 2, 3]
# セルの値を格納
cellDict = {}
def printVal(evt):
print(value.get())
for i in range(len(row)):
for j in range(len(col)):
if j == 0:
# create row labels
label = Label(root, width=3,text=str(col[i]))
label.grid(row=i, column=j,padx=2, pady=2)
elif i == 0:
# create column labels
label = Label(root, width=20, text=row[j])
label.grid(row=i, column=j, padx = 2, pady=2)
else:
# create cell
entry = Entry(root, width=20, textvariable=value)
cellDict[(i, j)] = value
entry.bind('<KeyRelease>', printVal)
entry.grid(row=i, column=j)
root.mainloop()
上記のコードだと一つのセルに入力した値が全てのセルに反映されてしまいます
おそらくEntryのtextvariableに問題があると思うのですが
Excelのようなスプレッドシートを作りたい場合、Entryの設定をどのようにすればよいのでしょうか
451デフォルトの名無しさん:2012/11/26(月) 23:30:43.37
>>450
お前こんなん、よう貼ったなぁ
コピペも出来ないだろ
ちゃんと空白を行頭に入れて貼り直し
pythonで空白を先頭に入れないのは禁じ手よ
452デフォルトの名無しさん:2012/11/26(月) 23:44:12.67
>>451
すみません
半角スペースで空白を書き込んだのですが
2chでは行頭の半角スペースが反映されないことを知りませんでした
代わりに全角スペースで行頭に空白を書き込んでもよろしいでしょうか?
453デフォルトの名無しさん:2012/11/26(月) 23:46:23.04
とは書きましたが、待つのも面倒くさいので完成させておきました。

from tkinter import *
root = Tk()
col = [' ', 'a', 'b', 'c', 'd']
row = [' ', 0, 1, 2, 3]

values = [None] * len(col)
for j in range(len(col)):
values[j] = [None] * len(row)
for i in range(len(row)):
value = StringVar()
values[j][i] = value

for i in range(len(row)):
for j in range(len(col)):
if j == 0:
# create row labels
label = Label(root, width=3,text=str(col[i]))
label.grid(row=i, column=j, padx=2, pady=2)
elif i == 0:
# create column labels
label = Label(root, width=20, text=row[j])
label.grid(row=i, column=j, padx=2, pady=2)
else:
# create cell
value = values[j][i]
entry = Entry(root, width=20, textvariable=value)
cellDict[(i, j)] = value
entry.grid(row=i, column=j)

root.mainloop()
454デフォルトの名無しさん:2012/11/26(月) 23:47:53.73
おかしいな
嘘吐くな
もともとインデント潰してうpしただろ
正直に言え
455デフォルトの名無しさん:2012/11/26(月) 23:50:13.00
>>452
いや、本来なら専用ブラウザでpop up表示させた時には、
元の半角空白が表示されるのよ。
でも、レスアンカーで確認しても空白が出なかったから、
>>451で文句言ったわけ。
もしかしてfirefox使ってる?
それだったら2chの専用ブラウザを検索して使うようにしなされ。

専ブラ入れてから、専ブラで>>453を見てご覧。
456デフォルトの名無しさん:2012/11/26(月) 23:59:32.55
>>454
私もおかしいなとは思ったけど、ブラウザ側で先頭から続く半角空白を
削除することもあるかもと思った。

>>450が手元のeditorで書いたcodeをブラウザに貼り付けるとしても、
先頭の半角空白だけ削除し、回答者が苦労するように
質問するとも思えないので、何かの手違いでしょうということで、
>>453のように先行して回答を書きました。

ごめん、↓いらないから削除しておいて。
cellDict[(i, j)] = value
457デフォルトの名無しさん:2012/11/27(火) 00:02:55.27
>>455
firefoxのchaikaで2chを見てました
Janeをインストールして空白が出ないことを確認しました
申し訳ございませんでした
458デフォルトの名無しさん:2012/11/27(火) 00:14:05.23
>firefoxのchaikaで2ch
.....\Mozilla\Firefox\Profiles\hogehoge.default\extensions\[email protected]\chrome\content\chaika\post\
post.jsの中の
preview["mail"] = convertEntity(this.mail);

preview["message"] = convertEntity
の間に
preview["mail"] = convertEntity(this.mail);
this.message = this.message.replace(/^[ \t]+/mg, function(s){
return s.replace(/ /g, " ").replace(/\t/g, "  ");
});
preview["message"] = convertEntity
459デフォルトの名無しさん:2012/11/27(火) 00:15:16.26
ideoneとか使って貼ってくれちょ
460デフォルトの名無しさん:2012/11/27(火) 00:16:28.31
ミスった orz
  this.message = this.message.replace(/^[ \t]+/mg, function(s){
    return s.replace(/ /g, "&#160;").replace(/\t/g, "&#160;&#160;");
  });
全角「&」を半角「&」に置き換えて
461デフォルトの名無しさん:2012/11/27(火) 00:17:08.36
2chの方でも実体参照の仕様がいきなり変更されて
何が何だかわけがわからないことになってますね。

「&#32;」はOKだけど、
「&#x20;」はだめ。
でも「&#32」はOKという意味不明なことになってるし。
462デフォルトの名無しさん:2012/11/27(火) 03:56:48.15
てす
463デフォルトの名無しさん:2012/11/27(火) 03:59:05.90
あら&nbsp;ってまた使えるようになったのか?
464デフォルトの名無しさん:2012/11/27(火) 23:03:21.23
皆さんが使っている総合開発環境を知りたいです
465デフォルトの名無しさん:2012/11/27(火) 23:20:33.50
使ってませんよ
十数の言語を操るようになると、この言語はどのIDEあれはどのIDEなどと言っていられないのです
全部エディタで済まします
466デフォルトの名無しさん:2012/11/27(火) 23:33:09.55
PyDev
467デフォルトの名無しさん:2012/11/28(水) 00:10:16.28
468デフォルトの名無しさん:2012/11/28(水) 09:02:01.47
>>465
 せ
  い
   ろ
    ん
469デフォルトの名無しさん:2012/11/28(水) 13:37:25.16
ひさびさに覗いたら人いた
http://kohada.2ch.net/test/read.cgi/php/1302598469/
470デフォルトの名無しさん:2012/11/29(木) 00:46:19.21
http://codepad.org
落ちてるね
471デフォルトの名無しさん:2012/11/29(木) 10:26:00.99
一瞬広告っぽいの出たけど
繋がらないね
472デフォルトの名無しさん:2012/11/29(木) 11:59:11.08
http://codepad.org/
治ったね
473デフォルトの名無しさん:2012/11/29(木) 12:09:33.69
Python 3.3 で OpenCV を使いたいのですが、
どのバージョンなら動きますか?
474デフォルトの名無しさん:2012/11/29(木) 20:35:32.71
>>473 誘導してみるテスト

【Intel】OpenCV総合スレ 4画素目【画像処理】
http://toro.2ch.net/test/read.cgi/tech/1329040627/
475デフォルトの名無しさん:2012/11/29(木) 21:21:39.30
知恵をお貸しください。
以下のようなフォーマットの固定長テキストデータがありまして
AAAAAA123456789BBBBBCCCCC

全ての行について、7カラム目から3カラム×3のフィールドを取り出して
リストに['123', '456', '789']…と展開して格納したいのです。
以下のコードを書き、何とか動いたところで質問があります。

-----------------------------------------------------
# レコードの7カラム目から3カラム×3のフィールドを取り出す
with open('sample.txt','r') as f:
  s = []
  for line in f:
    for col in range(0,3):
      s.append( line[ col * 3 + 6 : col * 3 + 9 ] )
print(s)
-----------------------------------------------------

1.スライスで取り出す部分が力技な気がします。もっとスマートなやり方はないでしょうか
2.データの最後に改行のみの行があると、空データがリストに追加されるのですが
改行のみの行は処理しないようにするにはどうすればいいですか
476デフォルトの名無しさん:2012/11/29(木) 21:30:26.62
ほとんど自分で答えしゃべってんじゃん
突っ込みの技術でも競ってんの?
477デフォルトの名無しさん:2012/11/29(木) 21:52:06.26
スマートって一番ムツカシイ質問だよな
質問者にとってのスマートさの定義を小一時間語ってから質問してくれい
478デフォルトの名無しさん:2012/11/29(木) 21:56:01.91
479デフォルトの名無しさん:2012/11/29(木) 21:56:35.76
with open('tech475.sample.txt','r') as f:
s = []
for line in f:
line = line.strip()# 2.
if not line:    # 2.
continue   # 2.
for i in range(6, 15, 3):
s.append(line[i:i+3]) # 1.あえて変更するなら?
print(s)
480デフォルトの名無しさん:2012/11/29(木) 22:24:15.43
>475
問題点が判ってんなら自分で直せよ
481デフォルトの名無しさん:2012/11/29(木) 22:32:17.00
>>478,479
ありがとうございます。参考にさせていただきます。

>>477
確かに曖昧な表現でした。
具体的には、行単位のループの中にさらにカラム単位の
ループを入れているところが、テキスト一括処理を得意とする
スクリプト言語らしからぬやり方だと思う次第です。

>>480
お叱りごもっともです。
改行のみという状態を判定する具体的なコーディングが
わかりませんでしたので知恵を拝借した次第です。
精進いたします。
482デフォルトの名無しさん:2012/11/29(木) 22:59:38.08
s = [[line[col * 3 + 6 : col * 3 + 9] for col in range(0, 3)] for line in open('sample.txt', 'rb') if len(line.rstrip())]
print s
483デフォルトの名無しさん:2012/11/29(木) 23:21:05.01
import re
reg = re.compile(r'.{6}(\d{3})(\d{3})(\d{3})')
s = []
with open('hoge', 'r') as f:
 for line in f:
  m = reg.match(line)
  if m:
   s.extend(m.group(1, 2, 3))
print(s)
484デフォルトの名無しさん:2012/11/29(木) 23:47:56.28
これが正しいイヤミ>>482-483
485475:2012/11/30(金) 00:05:38.74
嫌みなもんですか。
>>482,483とも私には思いも付かない実装で、目から鱗とはこのことです。
この系統の処理は、業務で頻繁に必要になるので、とてもありがたいです。
開発さんにCOBOLで頼むと一ヶ月で100万円かかるものを
こうやってエンドユーザーで実現できてしまうとは…Python恐るべし。
486デフォルトの名無しさん:2012/11/30(金) 01:18:54.97
正規表現を思いもつかないユーザーと
100万ぼったくるコボラー
この国終わってんな
487デフォルトの名無しさん:2012/11/30(金) 01:52:46.75
固定長で特定の部分のみ読み出すなら、
普通は位置計算してからseekして必要な部分のみreadするんじゃない?
ファイル全部読む程度問題ない規模ならいいけど。

固定長のデータを扱う場合はstructモジュールが適してる

9バイトのデータの分割なら
struct.unpack("3s"*3, "abcdefghi") # => ("abc","def","ghi")
488デフォルトの名無しさん:2012/11/30(金) 02:05:22.09
>>486
カモネギってどこにでもいるんだよ。
それをじょうずに捕まえるのが勝ち組。
489デフォルトの名無しさん:2012/11/30(金) 02:48:32.24
>>475 ランダムアクセス版 (python2.7)
ideone.com/hZtO1I

ファイルを扱うサンプルにideoneのinput試してみたかった。seek出来るんだね

固定長データを扱う方法は他に、ctypesで構造体を定義する方法もある
けど、Cで構造体扱った経験がないと、慣れるまでが手間かもしれない。

pythonのみで手軽に固定長データ扱うなら、
namedtupleと struct.unpack を組み合わせて使う方法がお勧め
490489:2012/11/30(金) 03:09:13.73
URL間違えた
ideone.com/uj7RI6
491デフォルトの名無しさん:2012/11/30(金) 07:46:42.77
じゃあCでいいだろっていうコード
492デフォルトの名無しさん:2012/11/30(金) 09:06:22.25
>>486
そんなことより情報系の学問が軽視される風潮にあることのほうがよっぽど終わってると思う
先見の明なさすぎ
493デフォルトの名無しさん:2012/11/30(金) 10:53:25.73
>>489
>ファイルを扱うサンプルにideoneのinput試してみたかった。seek出来るんだね

バイナリってどうやって喰わせるの?
494デフォルトの名無しさん:2012/11/30(金) 11:41:48.84
>>493
encodingは UTF-8、改行は LF に統一されるので、
範囲外の任意のバイナリデータを直接は無理。base64にエンコードする等の工夫が必要
495デフォルトの名無しさん:2012/11/30(金) 12:00:18.25
base64よりstring_escapeの方がいいかな
デコードしないと何のデータかわからなくなるのは面倒だし

スクリプト内へデータ埋め込みでテストする場合は、
エスケープシーケンスで書いてStringIO等で包む方法をよく使う
496デフォルトの名無しさん:2012/11/30(金) 12:13:51.28
ありがとうございます
圧縮してbase64してみます
497デフォルトの名無しさん:2012/11/30(金) 23:38:36.64
from itertools import chain, islice, izip_longest

def f():
 with open('sample.txt', 'r') as lines:
  recs = (izip_longest(*[islice(line, 6, 15)] * 3) for line in lines if line.rstrip())
  for cols in chain.from_iterable(recs):
   yield ''.join(cols)

print list(f())
498デフォルトの名無しさん:2012/12/01(土) 04:47:59.69
細かな突っ込み。なるべくstrictな方針で

# 固定長テキストデータは、(文字数ではなく)バイト数が固定長と仮定

サイズが分かっている場合、行バッファ使って読み込むのは冗長
行読み込みだとレコード内に他の改行文字がないという保証が必要

rstrip 末尾の空文字を取り除くので、スペースのみのレコードは通らない
読み込まれたデータの長さを保証してない

スライスで対象がunicodeだと困るかもしれない
ファイルの場合 openの第二引数 "rb" 明示したほうがいい
499デフォルトの名無しさん:2012/12/01(土) 09:20:39.11
Pythonに限らないけど、最近の言語は
固定長データを桁位置指定で切り刻んで
扱う手段を組み込みで持っていないよな。
Javaなんかもそうかな?

Pythonにも一応構造体的なものとしてnamedtupleがあるけど、
既に区切られたフィールドに名前を付けるだけだしな。
500デフォルトの名無しさん:2012/12/01(土) 10:21:36.17
Python3では、
>>487,489
のいうstructが固定長の扱い用に用意してあると思うけど。

>>> fmt2 = b"3s"*3+b'3x'+b'3s'+b'x'+b'2s'+b'3x'+b'4s'
>>> struct.unpack(fmt2, b"abcdefghipppXXXpYYpppZZZZ")
(b'abc', b'def', b'ghi', b'XXX', b'YY', b'ZZZZ')
>>> cmpl2 = struct.Struct(fmt2)
>>> cmpl2.unpack(b"abcdefghipppXXXpYYpppZZZZ")
(b'abc', b'def', b'ghi', b'XXX', b'YY', b'ZZZZ')
>>> cmpl2.format
b'3s3s3s3x3sx2s3x4s'
501デフォルトの名無しさん:2012/12/01(土) 10:27:10.16
>>499
> 固定長データを桁位置指定で切り刻んで扱う手段を組み込みで

scanfは組み込みにないらしいね。マニュアルの正規表現の項に書いてた。

組み込みだと他には bufferやmemoryview 使う方法

# format: AAAAAA123456789BBBBBBBBBB(LF) record_size: 26

buf= bytearray(record_size)
digits = memoryview(buf)[6:15]
x,y,z = [buffer(buf,offset,3) for offset in [6,9,12]] # bufferは2.xのみ

while stream.readinto(record) == record_size:
print digits.tobytes()
 print x,y,z # リストに入れる際はバッファをコピー [x[:], y[:], z[:]]
502デフォルトの名無しさん:2012/12/01(土) 10:45:28.31
>499
素人はすっころんでろ
503デフォルトの名無しさん:2012/12/01(土) 11:03:00.75
ええんやで
504デフォルトの名無しさん:2012/12/01(土) 11:19:43.76
固定長ってだけで地雷案件だし
505デフォルトの名無しさん:2012/12/01(土) 11:35:04.47
オフセットの指定がmagic numberになるので、バッファ・オブジェクトを直接扱うのは面倒だな。

ctypes.Structureで、固定長データを読むサンプル書いてみた。
operator.attrgetter がネストした構造にも対応してて便利

ideone.com/0IxDjB
506デフォルトの名無しさん:2012/12/01(土) 11:56:23.61
>>505は、ctypesの使いどころ誤ってる。

ある目的の.so, .dllがあって、APIは分かってるけど、
元の.cを入手出来ないし、
出来たとしてもpython用のC拡張作らない・れないし、
開発工数かかりすぎで非経済的だし、
って場合に、一時凌ぎ・次善策的に使うのがctypes。

ここ、超初心者スレでは教える必要のない情報。

pythonのC拡張を作るまでもない時は、ctypes使うけど、
>>505の貼ったcodeでctypes使う必要なんてない。
一切ない。全くない。これっぽっちもない。
現在の話の進行では、悪いけど、むしろ有害。

固定長を扱うにはどうするか?では、struct使えばいい話。
>>500に書いたように、読み飛ばしも'x'で可能。
507デフォルトの名無しさん:2012/12/01(土) 12:31:28.61
pass
508デフォルトの名無しさん:2012/12/01(土) 13:12:13.19
まあ参考にはなったわ
ありがdx
509デフォルトの名無しさん:2012/12/01(土) 13:59:27.10
>>502
いやー
Pythonのstructは外部のクラスライブラリだから
言語に組み込まれた機能とは言えんだろ。
Javaについてもググってみたが、クラスにフィールドを並べて
うんたらという感じの記事ばかりで、どうもすっきりしない。

オブジェクト指向系言語が固定長データの扱いにやや
まどろっこしい手続きを必要とするのは、スペースやカンマで
区切られたデータ処理を前提としているからなのかもな。
それならsplitで取り出していかようにも処理できる。
面白い傾向だ。
510デフォルトの名無しさん:2012/12/01(土) 14:03:40.88
>>509
言語に組み込む必要がないって話でしょ。
んで、必要になった時にはstructで十分事足りるというお話。
511デフォルトの名無しさん:2012/12/01(土) 14:11:09.22
ノイジーマイノリティと共通する
512デフォルトの名無しさん:2012/12/01(土) 14:39:37.79
ある情報筋によりますと、
何かの答えを得たい場合、日本の2ちゃんに行って、質問し、
回答者に適当に反論しつつ罵倒するのだそうです
そうすると、日本人は顔を真っ赤にしながら
無料で何でも聞き出せる状態に変身するとのことです
513デフォルトの名無しさん:2012/12/01(土) 14:45:31.51
APIスレ見てると最近はそうでもないよ
その情報筋、古いね
514デフォルトの名無しさん:2012/12/01(土) 14:52:39.35
APIスレとPerlスレのあれはそういう芸風なので
VIPみたいなもんだよ
515デフォルトの名無しさん:2012/12/01(土) 15:16:50.07
で、味をしめた教えて君が調子こいてまた違う質問をすると
今度は「なんだコイツこの先延々と全部聞いていくつもりか?」
「ちょっとは自分で調べろよ」と全員からバッシングを受けて、
何も聞き出せない状態になるのでした。
516デフォルトの名無しさん:2012/12/01(土) 15:25:03.46
>>512
いいことじゃないか。
こうしてROMも含めたスレの参加者多数に有益な情報が浸透し、
上級者も改めて基礎を固めることができる。
このスレで研鑽を積み、将来日本のIT界を背負って立つ存在に
なる人もいるかも知れん。
雑談や煽り合戦をするよりは数段マシ。
517デフォルトの名無しさん:2012/12/01(土) 15:42:19.40
>こうしてROMも含めたスレの参加者多数に有益な情報が浸透し、

宿題スレの回答とか見てるが糞コードばっかじゃねーか。
参考にならないどころか劣化コピーよりさらにひどい
害悪を撒き散らしてるだけ。
518デフォルトの名無しさん:2012/12/01(土) 15:50:39.97
一時期は投稿しておりましたが、
宿題の方には、私は現在投稿しておりませんので、、、
あいつら進歩しないから見切った。

Pythonの方に来れば良質なcodeを読めるよ〜。
519デフォルトの名無しさん:2012/12/01(土) 15:56:34.97
>>517
実践の場ではコードは動けばいいんだよ。
糞だのという評価は、個人的嗜主義・嗜好によりなされるものであり、
それでもってコードやそれを書いた人を批判することは慎むべき。
動いているコードはみな平等の価値を持っている。
520デフォルトの名無しさん:2012/12/01(土) 16:16:16.16
ネタだろうけど
実践の場ほど動けば良いじゃ済まなくなる
速度もメモリ使用量も例外も
全て考慮してコードを書く必要がある
521デフォルトの名無しさん:2012/12/01(土) 16:30:02.83
ある情報筋によりますと、
何かの答えを得たい場合、日本の2ちゃんに行って、質問し、
回答者に適当に反論しつつ罵倒するのだそうです
そうすると、日本人は顔を真っ赤にしながら
無料で何でも聞き出せる状態に変身するとのことです
522デフォルトの名無しさん:2012/12/01(土) 22:44:53.24
そして教えられたDOSコマンド試してみてアボーンするのでした
523デフォルトの名無しさん:2012/12/01(土) 22:48:00.72
ああ、そうやってフェンリルのサーバーを皆で初期化してさし上げたっけな
524デフォルトの名無しさん:2012/12/01(土) 23:39:20.85
VIPでやれ
525デフォルトの名無しさん:2012/12/01(土) 23:57:12.87
pass
526デフォルトの名無しさん:2012/12/02(日) 06:22:07.70
フォルダ名testの中にあるファイルを読み出す時
Desktop\test\ほにゃらら.txt ってやると \t の部分でエラーが起きて読みこめないことがわかりました
どうすればいいんでしょうか
527デフォルトの名無しさん:2012/12/02(日) 08:04:18.35
>526
Desktop\\test\\ほにゃらら.txt

>>520
書き込み時間ワロス
528デフォルトの名無しさん:2012/12/02(日) 08:17:48.69
>>> import os
>>> path = os.path.join('Desktop', 'test', 'ほにゃらら.txt')
>>> path
'Desktop/test/ほにゃらら.txt'
>>> path = os.path.join('.', 'Desktop', 'test', 'ほにゃらら.txt')
>>> path
'./Desktop/test/ほにゃらら.txt'
>>> import sys
>>> print(sys.version)
3.2.2 (default, Sep 16 2012, 00:38:58)
[GCC 4.5.2]
529デフォルトの名無しさん:2012/12/02(日) 08:39:46.15
b = '\x00' * (4096 * 1024)
for n in xrange(1024 * 1024):
  f = open('hoge.txt', 'ab')
  f.write(b)
  f.close()
  print len(b) * n
530デフォルトの名無しさん:2012/12/02(日) 08:46:24.97
テンプレ叩き台
頑張って>>250まで抽出

78 名前:デフォルトの名無しさん [sage]: 2012/10/30(火) 00:16:01.46
"tkinter" -> 標準ライブラリ。手軽だが貧弱。
"PyQt4" -> Qtは商用アプリでもよく使われている。機能も豪華。(ただしGPL)
"PySide" -> PyQt4互換のLGPL版バインディング(新参なので若干バグあり)
"wxPython" -> 知らん
"pyGTK" -> 事実上Linux専用。GTKアプリを作りたいなら。

79 名前:デフォルトの名無しさん [sage]: 2012/10/30(火) 00:43:52.00
wxPythonはそれなりにサンプルが揃ってたんで
やりやすかったが、未だにPython3未対応だな。

137 名前:126 [sage]: 2012/11/04(日) 22:10:27.39
ありがとうございました。

もう一つ質問ですが、Pythonのクラスが
メンバに対する明示的なアクセス制御機構
(Javaで言うprivate指定など)を持たず、結果として
オブジェクト指向の三大要素の一つである隠蔽が欠けているのは
型のない言語であるがゆえのやむを得ない仕様でしょうか?
それとも別の意図がある?

138 名前:デフォルトの名無しさん [sage]: 2012/11/04(日) 22:51:15.63
underscore で十分だよね。みんなちゃんと守ってくれるよね。
っていう紳士協定を導入してるから。

実際には綺麗なC言語実装になるからじゃないの?
531デフォルトの名無しさん:2012/12/02(日) 08:47:42.53
139 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 01:35:59.60
>>137
class Class(object):#2系でobject継承すると新スタイルクラス(3と同じ挙動)
#ここも普通に実行されるがクラススコープ
_member = 1#非公開メンバ(列挙されないだけでアクセスは出来る)
__member = 2#非公開+難読化(外部からは_Class__memberという名前になる)

基本的にはこんな感じであとはデスクリプタとかでC#のようなプロパティも出来る
詳細は言語リファレンスのデータモデルなんかを読んでください

スタンスについては

デバックの際にはアクセスできることが有効であるし
自由にアクセスできるからといって
アクセスするプログラムを作らなければならないわけではない
アクセスしないようにプログラムを作ればいい
みんな大人なんだから

とかなんとか

140 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 01:41:27.19
l = [(1,2),(3,4),(5,6),...]というリストから
[1,3,5...]と[2,4,6...]というリストを作りたいのですが
a = [i[0] for i in l]
b = [i[1] for i in l]
より早い方法ってあります?
なんども呼ぶのでなるべく早くしたいのですが
532デフォルトの名無しさん:2012/12/02(日) 08:49:39.55
141 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 01:46:16.18
>>140
a,b = zip(*l)

142 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 01:47:47.36
import numpy
l = numpy.array([(1,2),(3,4),(5,6)])
a = l[:,0]
b = l[:,1]

143 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 03:01:46.74
実際privateでもリフレクションやvtblを弄くってアクセスすることが可能なので
確実なメリットって言うと、間違って呼び出した時にエラーにしてくれるくらいしかない
のよね

144 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 08:30:15.25
l[0::2]
l[1::2]

156 名前:忍法帖【Lv=40,xxxPT】(1+0:5) []: 2012/11/05(月) 19:34:05.02
PythonでLISTだけを含むファイルを外部に作って、メインのプログラムから
そのリストを参照したいんですが、どうやれば出来ますか?

親切な方、教えてくださいm(_ _)m
533デフォルトの名無しさん:2012/12/02(日) 08:54:31.38
157 名前:デフォルトの名無しさん [sage]: 2012/11/05(月) 19:55:22.88
import external
external.L
if __name__ == '__main__':
print('external.L =', external.L)
~/main.py [utf-8][unix][4/4行,27文字目]

L = [1, 2, 3, 4]
~/external.py [utf-8][unix][1/1行,16文字目]

p3 main.py
external.L = [1, 2, 3, 4]

160 名前:157 [sage]: 2012/11/05(月) 20:19:41.82
本当に、「参照」だけ目的なら、listではなく、
tup = (1, 2, 3, 4)
とした方が良いかもね。

167 名前:デフォルトの名無しさん [sage]: 2012/11/07(水) 08:16:20.49
Python 3.3.0のせいで前に入れていたpython2が動かなくなりました><

168 名前:デフォルトの名無しさん [sage]: 2012/11/07(水) 09:50:59.93
>>167
windows?

バージョン番号付きでshebang 書いてれば、py (windows板のランチャ) が振り分けてく>れるよ

#!/usr/bin/env python <- これだとバージョンが曖昧になるので
#!/usr/bin/env python2.7
#!/usr/bin/env python3.3
534デフォルトの名無しさん:2012/12/02(日) 08:55:26.42
171 名前:デフォルトの名無しさん [sage]: 2012/11/07(水) 16:35:51.92
windowsでおすすめのpythonエディタを教えてください

小規模なwindowsアプリぐらいしか作らないのであまり複雑じゃないものがいいです
python2.7とwxpythonを使う予定です

172 名前:デフォルトの名無しさん [sage]: 2012/11/07(水) 17:39:26.18
IDLE
EMACS
VisualStudio
Eclipse
netbeans
pycharm
windows上で作るなら↑が代表的
これ以外は微妙。

簡単なのはテキストエディタでがんばる

173 名前:デフォルトの名無しさん [sage]: 2012/11/07(水) 19:15:14.37
>>171
wxPythonに付いてくるEditra
日本語入力がインラインじゃないのと,エディタにしては起動が遅い(IDEよりは手軽感ある)
補完時に時々クラッシュする点がマイナス評価だけど、pluginで簡単なIDE並の機能を追加できる
同じwxPythonでpluginを作れるのが利点
535デフォルトの名無しさん:2012/12/02(日) 09:01:54.98
>>> reduce(lambda x,y: [x[0]+[y[0]],x[1]+[y[1]]], [(1,2),(3,4),(5,6)], [[],[]])
[[1, 3, 5], [2, 4, 6]]
536デフォルトの名無しさん:2012/12/02(日) 09:12:17.54
>>530
137の書き込みをした者ですが、
その後本を見ていたら
オブジェクト指向の三大要素は
「継承」「カプセル化」と「多態性」だそうです。
「隠蔽」は三大要素ではありません。
もしテンプレに使うなら
「オブジェクト指向の三大要素」というくだりを
削除していただけると幸いです。
537デフォルトの名無しさん:2012/12/02(日) 09:23:23.95
>>526
既に解決策出てるけど、他の方法
エスケープシーケンスを解釈しないようにraw文字列を使うと、そのまま記述出来る

r"Desktop\test\ほにゃらら.txt"
538デフォルトの名無しさん:2012/12/02(日) 09:37:31.40
連続投稿規制で困ってました。( ・ω・) d

186 名前:デフォルトの名無しさん [sage]: 2012/11/11(日) 23:19:33.77
環境変数の設定でつまずいてる
...
と入力してもうまくいかない どなたかわかりますか

>>> path = '''C:\Program Files (x86)\AMD APP\\bin\\x86_64;C:\Program Files (x86)\AMD APP\bin\\x86;'''
; で改行して調べてみると以下の通り。

>>> print(path.replace(';', '\n'))
C:\Program Files (x86)\AMD APP\bin\x86_64
C:\Program Files (x86)\AMD APin\x86

212 名前:デフォルトの名無しさん [sage]: 2012/11/13(火) 11:12:08.53
C の printf("%s\n", __func__) 相当のことってどうやったらできる?

213 名前:デフォルトの名無しさん [sage]: 2012/11/13(火) 11:27:20.96
logging で吐くなら
%(funcName)s

ttp://toro.2ch.net/test/read.cgi/tech/1328714043/592-
sys._getframe(0).f_code.co_name
sys._getframe(1).f_code.co_name

ttp://toro.2ch.net/test/read.cgi/tech/1342660231/396-
self.__class__.__name__,traceback.extract_stack()[-1][2]
traceback.extract_stack()[-1][2]
traceback.extract_stack()[-2][2]
...
traceback.extract_stack()[1][2]
traceback.extract_stack()[0][2]
539デフォルトの名無しさん:2012/12/02(日) 09:38:36.76
208 名前:デフォルトの名無しさん [sage]: 2012/11/12(月) 22:23:37.33
便乗で、windowsの人に質問 c:\Windows\py.exe ってない?
PythonにPATH通ってなくても、pyコマンド使えないかな?

win32/vistaで、PATH設定なしで py コマンドが使えてた記憶があるのだけど
Python 26,27,32,33 で 自前ビルド/公式/ActivePython 混在環境で
pipで入れたのかどうか、インストール経路が思い出せない。

222 名前:デフォルトの名無しさん [sage]: 2012/11/15(木) 07:22:18.39
標準マニュアルにあるnamedtupleの説明で
「typename という名前の tuple の新しいサブクラスを返します」
ってあるんですが、
そもそもクラスを返すっていう概念がよくわかりません。
値やインスタンスを返すというのなら何となくわかるのですが。
簡単なコードなんか示してもらえると助かります。

224 名前:デフォルトの名無しさん [sage]: 2012/11/15(木) 08:17:39.61
>>222
クラスもメタクラスtypeのインスタンスであり、
class以外にもtypeやexecで動的に生成できる

namedtupleは自身にインデックスアクセスする
デスクリプタを与えられた名前で定義してる

operatorを使わず通常定義風なら
class typename(tuple):
@property
def id(self):return self[0]

実際書くなら
type('typename',(tuple,),{'id':property(operator.itemgetter(0))})
collectionsモジュールは大半がPythonコードなのでソースを見ると良い
540デフォルトの名無しさん:2012/12/02(日) 09:40:55.14
225 名前:デフォルトの名無しさん [sage]: 2012/11/15(木) 08:19:46.64
クラス自体を理解出来てないと見た。
class Foo(object):
def name(self):
return 'Foo'
class Baa(object):
def name(self):
return 'Baa'
def return_class(name):
dic_classes = {}
dic_classes['Foo'] = Foo
dic_classes['Baa'] = Baa
return dic_classes[name]
if __name__ == '__main__':
foo_class = return_class('Foo')
obj = foo_class()
print('id(Foo) = 0x{:08x}'.format(id(Foo)))
print('id(foo_class) = 0x{:08x}'.format(id(foo_class)))
print('obj.name =', obj.name())
248 名前:デフォルトの名無しさん [sage]: 2012/11/17(土) 21:29:47.39
開発環境はPyScripterとPycharmはどちらが使いやすいでしょうか?

249 名前:デフォルトの名無しさん [sage]: 2012/11/17(土) 21:39:24.77
>>248
あまり高度なことをしてない俺の意見で良ければ
pycharmは機能が豊富でコード補完も便利で使いやすい、ただしマウスホイールでスクロ>ールが出来ない
pyscripterはシンプルでプロジェクト管理やコードの色分けが出来ればいいな、ぐらいの
機能

250 名前:デフォルトの名無しさん [sage]: 2012/11/18(日) 04:50:41.59
eric4
頑張って>>250まで抽出
541デフォルトの名無しさん:2012/12/02(日) 09:43:06.35
250までのテンプレたたき台案

>>530-536,538-540

までで貼り付け完了。

251以降はまた明日やるつもりだけど、誰かお願い。
542デフォルトの名無しさん:2012/12/02(日) 09:43:35.11
同じスレ内の書き込みなのに丸ごと貼って何がしたいんだ?
543デフォルトの名無しさん:2012/12/02(日) 09:51:11.04
テンプレたたき台案作成

テンプレってレスアンカーだけで良かったんです?
と思ったけど、>>541のように一行にまとめて書けば
よかったですね。

無駄にスレ流しただけでしたね。
失礼しました。

今度は、レスアンカーだけで叩き台案貼り付けます。
544デフォルトの名無しさん:2012/12/02(日) 09:56:49.50
インデント潰れてるから
丸ごとじゃないな
劣化コピーだ
死ねカス
545デフォルトの名無しさん:2012/12/02(日) 10:07:21.80
まとめスレ使えよ。
ぼけが。
546デフォルトの名無しさん:2012/12/02(日) 11:30:37.45
http://codepad.org/gZqEc4ye
途中で空になっているはずのディレクトリなのに
「WindowsError: [Error 145] ディレクトリが空ではありません。」
というエラーが出て中断されます
なぜでしょう?
547デフォルトの名無しさん:2012/12/02(日) 11:39:55.17
1. まずはエラーの内容を全部貼れよ…
2. 本当にそのディレクトリは空なのか確認したのか…
3. まずは、http://d.hatena.ne.jp/s-n-k/20090621/1245603351 とか見て勉強しなよ…
548デフォルトの名無しさん:2012/12/02(日) 11:39:58.28
>>546
遅延書き込みが原因じゃないかな。
os.rmdir() の後に time.sleep(0.01) くらい入れてみるとか。

あとディレクトリの中を消して行きたいみたいだけど、
そういう処理をするには os.walk() を使うと良いよ。
549デフォルトの名無しさん:2012/12/02(日) 11:50:52.06
>547-548
出来ました
ありがとうございました
エクスプローラでフォルダ開いてたのが原因だった見たいです
550デフォルトの名無しさん:2012/12/02(日) 11:53:02.57
なんかむかつくなこいつ。
551デフォルトの名無しさん:2012/12/02(日) 12:01:36.68
砂が喋った程度でむかつかんすよ
552デフォルトの名無しさん:2012/12/02(日) 14:02:32.69
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
 | おまわりさんこいつです! |
 \_  ________/
    ∨    ___
        ,r'つ@=,r'
    ∧_ ∧.| (・∀・ )
    (・ω・´ )、/~У ̄|゙i
   ゚こ、  つ |=◎=∪
     しー-J (_(__)

http://toro.2ch.net/test/read.cgi/tech/1349545643/932
553デフォルトの名無しさん:2012/12/03(月) 14:54:41.86
pass
554デフォルトの名無しさん:2012/12/04(火) 15:12:29.24
import random
blockList = [['****'], [' * ', '***'], [''**', '**']]
def blockDown(blank):
  form = '%' + str(blank) + 's'
  for i in blockList[random.randint(0, len(blockList) - 1)]:
    print form % i
while (True):
  blockDown(random.randint(0, 24))

テトリスを作りたいのですが
555デフォルトの名無しさん:2012/12/04(火) 20:34:09.37
console だけでやる?
556デフォルトの名無しさん:2012/12/04(火) 20:47:32.67
はい、コンソールだけで作りたいです
557デフォルトの名無しさん:2012/12/04(火) 20:50:35.57
pythonのコードをvim上でデバッグしたいんのですが,
なにかオススメのデバッガーはありますか?
pdbは使いにくそうなので敬遠してます・・・
558デフォルトの名無しさん:2012/12/04(火) 20:54:17.67
GDBがPythonに対応してるか知らないけれど、:!で使えるんじゃない?
559デフォルトの名無しさん:2012/12/04(火) 23:38:50.30
curses
560デフォルトの名無しさん:2012/12/05(水) 02:15:18.64
python で書いたプログラムのフルパステストみたいなことをやりたいのですが、
何かいいツールややり方とかありますか?
561デフォルトの名無しさん:2012/12/05(水) 06:43:37.86
>>560
自動で検査するようなツールは知らないけど、実行結果からテストのカバレッジを知る方法なら、
各テスト・フレームワーク毎に、オプションだったり拡張として準備されてるはず。pip search coverage
562デフォルトの名無しさん:2012/12/06(木) 07:02:47.15
563554:2012/12/06(木) 10:53:17.73
>562
完成しました
ほんとうにありがとうございました
http://ideone.com/XtBlrY
564デフォルトの名無しさん:2012/12/08(土) 16:10:20.32
Pythonの宿題スレなんてあったんだね、知らなかったよ。
565デフォルトの名無しさん:2012/12/09(日) 16:15:03.70
確かネタで作れみたいな話だったはず
566デフォルトの名無しさん:2012/12/10(月) 11:00:46.49
おっぱい揉んで
激安で抜ける
○1000円〜
「新宿 アイアイ 」
○1500円〜
「西川口 マーガレット 」
○2000円〜
「新宿・錦糸町 あんぷり亭 」
「新宿 ダブルエロチカ 」
567デフォルトの名無しさん:2012/12/11(火) 12:30:35.15
Pythonのfile()とopen()の違いは何なのでしょうか?
568デフォルトの名無しさん:2012/12/11(火) 13:03:00.58
>>567
2.x系では、fileのは型のコンストラクタ呼出、openはビルトイン関数の呼出
openは中でfile呼び出してるだけなので、返すオブジェクトは一緒

違いは、例えば
isinstance(f, file) は型なので可能だけど、
isinstance(f, open) は関数なので TypeError

実際のコードではisinstanceでファイルの型チェックは殆どしないし、
3.xでは fileは無くなるので、違いや使い分けとか気にしなくていい。openを使おう
569デフォルトの名無しさん:2012/12/11(火) 14:09:01.26
>>568
python fileで検索してもファイルの扱い方ばかりでてきて、file()の説明があまり出てこず苦戦しておりました。
詳しいご説明ありがとうございました。
570デフォルトの名無しさん:2012/12/11(火) 22:05:58.66
元気がないぞ、おらっ!
571デフォルトの名無しさん:2012/12/13(木) 00:30:58.92
教えて下さい。

最短マッチで
>>> print re.search("\(.*?\)", "aaa(bbb(cc))dd").group()
(bbb(cc)
となって、最初に出てきた”(”から一番短い”)”を探すっぽい。という理解で合ってる?

(cc)にマッチさせるにはどうしたら良い?
572デフォルトの名無しさん:2012/12/13(木) 02:54:10.42
>>> import re
>>> r = re.compile(r'\([^(]*?\)')
>>> r.search('aaa(bbb(cc))dd').group()
'(cc)'
573デフォルトの名無しさん:2012/12/13(木) 03:02:09.96
>>> import re
>>> r = re.compile(r'\([^()]*\)')
>>> r.search('aaa(bbb(cc))dd').group()
'(cc)'
574デフォルトの名無しさん:2012/12/13(木) 06:57:18.57
>>573
むう…これはどういうからくりなのだろう。
最短一致の?を使わずに内側のカッコ部分を取り出せるのか。
575デフォルトの名無しさん:2012/12/13(木) 11:22:17.38
括弧で囲まれてる中の括弧じゃない文字列の最大一致なわけだから、
一番素直な解答例だと思うな。
576デフォルトの名無しさん:2012/12/13(木) 16:23:22.33
pip install pykf
すると、

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c src/pykf.c -o build/temp.linux-i686-2.7/src/pykf.o

src/pykf.c:30:20: 致命的エラー: Python.h: そのようなファイルやディレクトリはありません

コンパイルを停止しました。

error: command 'gcc' failed with exit status 1

のようなエラーが出て停止してしまうのですが、こういうのはどこに報告すれば良いのでしょうか?
577デフォルトの名無しさん:2012/12/13(木) 16:39:06.15
http://sourceforge.jp/projects/pykf/
ここでいいんじゃね?
578デフォルトの名無しさん:2012/12/13(木) 17:27:36.63
DjangoかPyramidのどっちか使おうと迷ってるんですけど、皆さん何基準で選んでます??
579デフォルトの名無しさん:2012/12/13(木) 17:54:15.33
ずばり知名度でDjangoでしょ
580デフォルトの名無しさん:2012/12/13(木) 19:29:23.90
参考にさせて頂くでござる!
581デフォルトの名無しさん:2012/12/13(木) 19:54:43.70
>>575
カッコを否定で使って最大一致を取ると
カッコを使った最小一致になるというからくりか。感動した。
俺だと r = re.compile('\([a-zA-Z]*?\)')でカッコ内の文字種類を
決め打ちして最小一致を取ることしか考えつかなかったよ。
582デフォルトの名無しさん:2012/12/13(木) 20:10:23.95
>>576
$ apt-get install python3-dev
583デフォルトの名無しさん:2012/12/13(木) 20:51:31.38
Djangoなかなかpy3対応しないから、もうPyramidでいいよ。
584デフォルトの名無しさん:2012/12/13(木) 23:21:12.24
>>572
>>573
ありがとう。高度すぎてわからないw勉強します。
585デフォルトの名無しさん:2012/12/13(木) 23:37:22.37
Pythonでブラウザを起動させて特定のサイトにアクセスしたり
例えばGoogleに飛んで自動で検索フォームにPythonと入力したり出来ますか?
586デフォルトの名無しさん:2012/12/14(金) 00:15:48.68
馬鹿には無理
587デフォルトの名無しさん:2012/12/14(金) 00:28:24.15
588デフォルトの名無しさん:2012/12/14(金) 08:21:27.01
>>581
その正規表現の場合、終端が最初に現れる閉じ括弧と確定できるので、最短・最長は影響しないはず。

仕様次第では、そちらの括弧内のマッチする文字を明示した方が良い場合もあるよ。
ドットや補集合では、不要な文字にまでマッチしてしまうケースが出るので。
589デフォルトの名無しさん:2012/12/14(金) 10:12:28.08
仕様次第ではこっちが優れてるとか言い出したらキリ無いじゃーん

>>571の問題に対する一番優れた回答は>>573
なぜなら少ないタイピング量で、かつ、より広い概念で解いているからだ
590デフォルトの名無しさん:2012/12/14(金) 10:27:04.04
タイプ量は >>572 と一緒な訳で
591デフォルトの名無しさん:2012/12/14(金) 11:11:47.77
くだらね
592デフォルトの名無しさん:2012/12/14(金) 12:32:19.85
>>589
自演かよ
593デフォルトの名無しさん:2012/12/14(金) 12:56:46.98
なぜ自分に突っ込むし
594デフォルトの名無しさん:2012/12/14(金) 14:46:12.90
pass
595デフォルトの名無しさん:2012/12/14(金) 16:04:55.06
馬鹿には無理
596デフォルトの名無しさん:2012/12/14(金) 20:13:33.30
頭のおかしな奴がいるな
597デフォルトの名無しさん:2012/12/14(金) 22:21:10.37
ホントだな文体真似ると自演とかアホかと
598デフォルトの名無しさん:2012/12/14(金) 22:35:53.35
>>585
import webbrowser
webbrowser.open("GOOGLE_DOT_COM/?q=Python") # ※ URL書込み出来なかった

ブラウザを開いてサイトにアクセスは標準のwebbrowserモジュールで可。
オートメーションはサポートしてない。

手軽にやるならJavaScript/Bookmarkletsがあるけど、
多分、外部からの呼び出しはセキュリティ絡みの制限に引っ掛る。
599デフォルトの名無しさん:2012/12/15(土) 00:05:51.12
>>598
こんなモジュールが有ったのですね
ありがとうございます
600デフォルトの名無しさん:2012/12/15(土) 21:29:03.26
関数の外で作られた変数について
関数内で同名の変数を参照だけする場合はグローバルで
関数内で値を代入した瞬間からローカルになるという仕様に
どうにもなじめません。
ローカル変数のつもりで、うっかり代入をせずに参照するような
ことをしてしまうと、エラーにならず通ってしまい危険ではないですか。
みなさんはこの仕様とどういう折り合いを付けているのでしょうか?
601デフォルトの名無しさん:2012/12/15(土) 22:00:26.31
危険ではないです
602デフォルトの名無しさん:2012/12/15(土) 22:02:07.70
何の問題も無い。
>>> hoge = [5, 3, 1]
>>> def a():
... hoge[2] = 9
...
>>> hoge
[5, 3, 1]
>>> a()
>>> hoge
[5, 3, 9]
603デフォルトの名無しさん:2012/12/15(土) 23:10:20.52
俺はそもそもグローバル空間に物置かない主義なので
604デフォルトの名無しさん:2012/12/15(土) 23:24:55.60
そもそも、グローバル変数とローカル変数の名前が衝突するのがおかしいので。
605デフォルトの名無しさん:2012/12/16(日) 00:11:24.79
そういう考え方はありだと思うが、それなら警告出すなりエラーにすべきだと思う。
606デフォルトの名無しさん:2012/12/16(日) 00:16:59.65
思うのは自由だが、そんなことで俺らは動かない。
動作が気に食わないなら自分でPEPでも書くといい。
607デフォルトの名無しさん:2012/12/16(日) 22:34:08.14
主義とかは関係ない気がするが

ttp://stackoverflow.com/questions/12590058/python-performance-with-global-variables-vs-local
ttp://stackoverflow.com/questions/7028770/why-a-procedure-is-so-much-faster-when-put-into-a-function

グローバルに置くのとローカルに置くのじゃパフォーマンスに影響する
マルチプロセスとか考慮しないなら変数は極力ローカルにしとくべき
ローカルにすると排他とかない分パフォーマンスが高くなる

某 WAF のようにグローバルを汚さないのが pysonic
608デフォルトの名無しさん:2012/12/16(日) 22:44:30.04
ローカル変数持ってる言語だと、どんな言語でも似たようなもんだと思うが。
609デフォルトの名無しさん:2012/12/16(日) 23:04:55.46
馬鹿には無理
610デフォルトの名無しさん:2012/12/16(日) 23:12:47.94
そうおもう
611デフォルトの名無しさん:2012/12/16(日) 23:26:32.36
GUIアプリケーション作る時、Tkinter使うのってやめた方が良いって話をどこかで聞いたのだが、それはマジなんだろうか。
612デフォルトの名無しさん:2012/12/16(日) 23:36:03.33
613デフォルトの名無しさん:2012/12/17(月) 19:28:55.52
みんなのパイチンくんみんなのものだよ
614デフォルトの名無しさん:2012/12/17(月) 21:23:05.75
guiならpyside
615デフォルトの名無しさん:2012/12/17(月) 21:24:28.87
>>614
だね
616デフォルトの名無しさん:2012/12/17(月) 21:49:17.24
617デフォルトの名無しさん:2012/12/17(月) 22:56:21.14
>>616
nokia が qt 売るだけじゃん
買ったとこが pyside も買うよ

どっか買ってくれるよね?!
618デフォルトの名無しさん:2012/12/18(火) 09:07:09.96
8月に売却して>>616の流れなんですよ…
Nokia、全Qt事業をフィンランドのDigiaに売却 - SourceForge.JP Magazine
http://sourceforge.jp/magazine/12/08/09/2048249
619デフォルトの名無しさん:2012/12/18(火) 10:37:19.34
pyqtでいいんでないの?
620デフォルトの名無しさん:2012/12/18(火) 10:41:40.58
そう思うならそれでいいよ
621デフォルトの名無しさん:2012/12/19(水) 00:20:40.56
Python 3.3.0 / win7 64bitです
以下のコードをコマンドプロンプトで実行させると例外が出てしまいます
#↓unicode文字
testStr='''〄'''
print (testStr)

コマンドプロンプトがCP932で表示されているからその範囲外の〄を表示できないのは分かりますけど
とりあえず確認用に軽く表示しているだけなので切り捨てて表示させるにはどうしたらよいでしょうか

コマンドプロンプトをunicodeで表示するのはフォントが汚くなるからちょっと。
622デフォルトの名無しさん:2012/12/19(水) 00:23:56.11
おもいっきり書いてありました。失礼しました
http://docs.python.jp/3.3/library/stdtypes.html#str.encode
623デフォルトの名無しさん:2012/12/19(水) 16:21:21.23
プラグイン?モジュール?拡張機能?をインストールするにはどうしたらよいのでしょうか
情報を探してもLinuxだったりバージョン2だったりしますしPyPI、pip、easy_installとか同じような機能?が沢山あってさっぱりわかりません

入れたいのはこれで、コードをDLしてサンプルを実行すると動くのですが
サンプルコードを別のフォルダに移動して実行すると動かなくなったりとやはり何かの「インストール」作業が必要に思えるのですが、それがわかりません。
colorama ―Pythonでコンソールに色付け - flatlineの日記
http://d.hatena.ne.jp/flalin/20100716/colorama

Installation instructions — pip 1.2.1.post1 documentation
http://www.pip-installer.org/en/latest/installing.html
を見てもまずcurlが入っていませんでしたし

http://pypi.python.org/pypi/setuptools#windows
の64-bit versions of Python Download ez_setup.py and run it;を実行してもコマンドが無いと言われてしまいます

>>621と同じく3.3、7の64bitです
624デフォルトの名無しさん:2012/12/19(水) 17:28:43.34
setuptoolsはPython3非対応
まずdistributeを入れ、pipを入れる
その前にパスを通すのが先かな
625デフォルトの名無しさん:2012/12/19(水) 17:41:07.39
なるほど、setuptoolsはPython3ではダメなんですね
pipを入れるという事で調べてみます。ありがとうございました
626デフォルトの名無しさん:2012/12/19(水) 18:05:56.96
普通にpython setup.py installでいいんじゃね?
627デフォルトの名無しさん:2012/12/20(木) 04:27:28.17
numpyについて質問です。
実対称行列の固有ベクトルを求めるのに、
numpy.linalg.eigを使うと固有ベクトルを並べた行列が直交行列になりません。
これは仕様なのでしょうか?
(ちなみに、numpy.linalg.eighを使うとちゃんと直交行列になります。)
628デフォルトの名無しさん:2012/12/20(木) 20:53:59.81
f = open( r"./Log.txt", "a" )
try:
f.write("\u3004")
finally:
f.close()
とすると
UnicodeEncodeError: 'cp932' codec can't encode character '\u3004' in position 0: illegal multibyte sequence
とエラーが出るのですが何故でしょうか

ファイルに追記しているのに何故'cp932'にエンコードしようとしているのか…
629デフォルトの名無しさん:2012/12/20(木) 21:11:36.36
何故じゃない
「Uniccode文字列」は直接ファイルに書けない
「utf_8やutf_16にエンコードされたバイトシーケンス」は書ける
明示しないなら適当に何らかのエンコーディングでバイトシーケンスに直そうとする
630デフォルトの名無しさん:2012/12/21(金) 16:55:12.82
みんなのみんなのパイチンくんみんなの
631デフォルトの名無しさん:2012/12/21(金) 17:20:46.70
pyファイル名に日本語を使ったら
python: failed to set __main__.__loader__
と怒られて実行できないのですが、もしかして英字限定だったりしますか
windowsなので全部unicodeで統一されてると思ったのに
632デフォルトの名無しさん:2012/12/21(金) 17:59:50.40
とりあえず日本語ファイル名とか使ったことないけど、WindowsはCP932じゃないの
OSの内部的にはUnicodeだと思うけど
633デフォルトの名無しさん:2012/12/21(金) 18:13:59.40
filesystemencodingを指定すれば医院で内科医
634デフォルトの名無しさん:2012/12/21(金) 18:29:36.11
お勉強スレにあるけど、それバグ
ローダーがファイルシステムエンコーディングを無視してutf-8でデコードしようとしてるせい

修正リリースされてないので、自分でパッチあててビルドしないと直らない
635デフォルトの名無しさん:2012/12/21(金) 18:32:02.67
>>621
テスト
636デフォルトの名無しさん:2012/12/21(金) 19:22:49.57
0バイトのあいうえお.pyを作っても同じエラーが出るからどうしようと思っていましたが、pythonのバグでしたか
公式のリリースノート見たら3.2.3から3.3.0まで半年近くかかってるなあ
せっかく見やすいファイル名が使えると思ったのに
637デフォルトの名無しさん:2012/12/21(金) 19:27:16.90
Pythonのビルドは簡単だから自分でやってみたら?

VC++2010を入れる(Expressでおk)
ソースを展開する
pcbuild.slnをVC++で開く
ソリューション構成をReleaseにする
ビルドで完成

俺は修正して使ってるからバイナリや差分を渡せないこともないが
この御時世にその対応はちょっとお天気が過ぎるな
638デフォルトの名無しさん:2012/12/21(金) 20:10:18.20
直す箇所を教えて頂けないでしょうか
お勉強スレをutf-8やpcbuildで検索したけど見つかりませんでしたし
そのまま開いてビルドしなおしただけでは何も変わりませんでした
639デフォルトの名無しさん:2012/12/21(金) 20:11:41.79
馬鹿には無理
640デフォルトの名無しさん:2012/12/21(金) 20:16:51.28
641デフォルトの名無しさん:2012/12/21(金) 21:49:57.13
>>640
ありがとうございます
それの一番新しいコメント http://bugs.python.org/issue16218#msg176872http://hg.python.org/cpython/rev/c25635b137cc
左のメニューの http://hg.python.org/cpython/archive/c25635b137cc.zip の中の/PCbuild/pcbuild.slnを開き、ビルドしてexeは出来たものの
そのexeをそのまま今の環境に上書きしても当然動きませんでした

ImportError: No module named '_ssl'とインストーラーでインストールした時と比べて色々足りてない感じがするのですが
インストーラーでインストールしたpythonに↑からDLしてビルドしたpythonを上書き?させるにはどうしたらよいのでしょうか
642デフォルトの名無しさん:2012/12/21(金) 21:57:32.56
まず公式のインストーラで3.3.0を入れる
これとは別に>>637を作る

そして出来上がった python33.dll 「だけ」 を上書きする
643デフォルトの名無しさん:2012/12/21(金) 22:22:21.85
簡単だとは言ったものの、本当に簡単かどうかは人それぞれだよな
いつ修正リリースされるかもわからんし、それまでのためにフォークを作った

https://bitbucket.org/yttkans/python-3.3.0-issue-16218-patched/

ビルドの仕方は同じ
上書きするのはpython33.dllだけ

遠隔操作が怖くない人向けにバイナリも用意した
これは上書きするだけでいい

https://bitbucket.org/yttkans/python-3.3.0-issue-16218-patched/src/2843e2749d8b/win32?at=default
644デフォルトの名無しさん:2012/12/21(金) 23:40:04.85
>>642-643
ありがとうございます、python-3.3.0.msiからインストールし、python33.dll 「だけ」 を上書きしたら無事日本語のpyファイルが実行出来ました

python-3.3.0.amd64.msi つまり64bit版のパッチはまだ存在しないのでしょうか
ビルド時の構成をwin32から64にしても「プロジェクトはこのソリューション構成に対してビルドするように選択されていません。」と表示されてしまうので32bit専用みたいです
645デフォルトの名無しさん:2012/12/22(土) 01:44:49.91
VC++Expressにはx64のコンパイラとインポートライブラリが無いので
WindowsSDKを入れる必要がある

ソリューションの構成をRelease、x64にしたら
pythoncoreプロジェクトのプロパティで「プラットフォームツールセット」って項を探して
Windows SDK 7.1を選択する(最初はv100になっているが、v100だとx64のインポートライブラリが見つからなくてこける)

あとはビルドする
x64のバイナリはamd64という名前のフォルダに出力されるので見落としがち

例によってx64のバイナリ
俺はx64に全く興味が無いので動作は確認していない
https://bitbucket.org/yttkans/python-3.3.0-issue-16218-patched/src/c9cde181d5af/amd64?at=default
646デフォルトの名無しさん:2012/12/22(土) 02:14:41.37
Windows SDKから入れてみます
本日は手取り足取りありがとうございました。
647デフォルトの名無しさん:2012/12/22(土) 07:45:33.41
数字の文字列を要素とするリストがあるとして、
全ての要素が数字であることをチェックして
異常ならメッセージを出してプログラムを中止
という処理をできるだけ短く済ませたいです。

以下のようにリスト内包表記に詰め込んで
一行でやろうと試みたのですが、Syntax Errorとなります。
他のやり方はありますか。

print('数字をスペース区切りで入力してね')
ans = input().split(' ')
[print('数字以外の入力があります');exit(1) for s in ans if s.isdigit() == False]
648デフォルトの名無しさん:2012/12/22(土) 08:38:15.26
printとかinputはスルーする
内包表記はリストを作る式なので、要素の反復処理にはfor文を使う

print '数字をスペース区切りで入力してね'
ans = raw_input().split()
for s in ans:
 if not s.isdigit():
  print '数字以外の入力があります'
  exit(1)
649デフォルトの名無しさん:2012/12/22(土) 09:37:36.15
if all([s.isdigit() for s in ans]): print('数字以外の入力があります'); exit(1)
650デフォルトの名無しさん:2012/12/22(土) 09:38:40.57
すまんnot 抜けた
651デフォルトの名無しさん:2012/12/22(土) 09:43:31.38
ていうかジェネレータで良かった
if not all(s.isdigit() for s in ans): print('数字以外の入力があります'); exit(1)
652デフォルトの名無しさん:2012/12/22(土) 09:52:30.89
a = []
for i, s in ans:
 if not s.isdigit():
  a.append('%d番目の項目に数字以外の入力があります' % (i, ))
if len(a):
  print '\n'.join(a)
  exit(1)
653デフォルトの名無しさん:2012/12/22(土) 10:11:08.40
もうわかったから
654デフォルトの名無しさん:2012/12/22(土) 10:14:26.92
import sys; globals().__setitem__('ans', raw_input('数字をスペース区切りで入力してね: ').split()) or all(s.isdigit() for s in ans) or sys.stdout.write('数字以外の入力があります\n') or exit(1);
655デフォルトの名無しさん:2012/12/22(土) 11:37:28.27
>>647
set() 使うと楽だよ。

if __name__ == '__main__':
num_st = set('0123456789')
sep = ' '
num_st_with_sep = set(num_st)
num_st_with_sep.add(sep)
# print('num_st_with_sep =', num_st_with_sep)
print('数字をスペース区切りで入力してね')
_debug = not True
if _debug:
input_valid = '124 400 84 927 553 666'
input_invalid = '1i4 29a 4E00 84 9F2'

input_ = input_invalid
# input_ = input_valid
else:
input_ = input()
input_st = set(input_)
# print('input_st =', input_st)

ans = input_.split(sep)

diff_st = input_st - num_st_with_sep
if not diff_st:
print('ans =', ans)
else:
print('数字以外の文字が入力されました。')
print('それは、以下の通りです。')
print('{}'.format(', '.join(diff_st)))
print('頑張りましょう。')`
656デフォルトの名無しさん:2012/12/22(土) 12:49:41.94
しつこいんだよォ!
657デフォルトの名無しさん:2012/12/22(土) 13:04:44.74
>>651
このケースでは anyの方が効率良いよ # Trueを返した時点で繰り返しを終了出来るので

isdigitは 一部のunicode文字も通ったり、2系だとロケールの影響を受けるので、
支障がないかマニュアルを要確認。

数値として使うなら int(n, 10) で変換してみて範囲チェック/例外を捕まえるのが数値チェックの定石だけど、
厳密な文字列のチェックをしたいなら正規表現が汎用的。
例えば後から、頭にマイナス符号を許可するといった変更がある場合でも、他の方法より対応が容易。
658657:2012/12/22(土) 13:13:25.51
>このケースでは anyの方が効率良いよ # Trueを返した時点で繰り返しを終了出来るので

ごめん、なんか勘違いした。決定時にループ終わるのはallも同じだった
any だと not isdigit にしないといけないから。not all で良かった
659デフォルトの名無しさん:2012/12/22(土) 18:04:58.73
外部のサウンドファイルを用意するのが面倒なんだけど
音の高さと長さを指定する程度でいいから
スクリプトから簡単なピー音を直接鳴らす方法って無い?
660デフォルトの名無しさん:2012/12/22(土) 21:01:19.06
ある夜
661デフォルトの名無しさん:2012/12/22(土) 21:13:55.30
>>659
いろいろあるとおもうけど自分がもしやるなら
初回起動時に音声ファイル生成するかPygameのsndarrayつかう。
662デフォルトの名無しさん:2012/12/22(土) 21:46:05.24
windowsならprint('\a')かwinsoundが使える
663647:2012/12/23(日) 13:58:46.99
いろんなアドバイスありがとうございました。
全部試して楽しんでます。
Pythonは楽しい。大好き。
664デフォルトの名無しさん:2012/12/24(月) 23:11:08.10
dir = r'd:\work\python\lang\'

という文がありまして、
ファイルの存在チェックをするためにそのベースとなる
ディレクトリ名を変数に代入するものです。
これを実行すると、文の末尾で
SyntaxError: EOL while scanning string literalが出ます。

これはどういうことでしょうか。raw文字列ならば\は
単なる文字になると理解しているのですが…
665デフォルトの名無しさん:2012/12/24(月) 23:16:46.61
馬鹿には無理
666デフォルトの名無しさん:2012/12/24(月) 23:25:19.53
>>664
> raw文字列ならば\は単なる文字になると理解しているのですが…

その理解は正しくない。

http://docs.python.jp/2/reference/lexical_analysis.html#literal
「接頭文字 'r' または 'R' がある場合」の節を参照のこと。
667デフォルトの名無しさん:2012/12/24(月) 23:29:30.23
windowsのcmd.exeでpyを起動してるのですが
エラーが出た時終了させずに止めるにはどうしたらよいでしょうか
すべての関数等をtry:で囲むのも大変ですので、全てのエラー発生時に…という処理は出来ないでしょうか
668デフォルトの名無しさん:2012/12/24(月) 23:58:35.34
終了させずに止める
669デフォルトの名無しさん:2012/12/25(火) 00:29:13.57
Pythonでenumはありますか?
670デフォルトの名無しさん:2012/12/25(火) 04:11:25.84
Macのターミナル上 python -v => 3.2
pythonスクリプト内で os.system("python -v") => 2.7

となります メリークリスマス
3.2は自分で入れたもので2.7はシステムに最初から入っていたものです
os.systemでも通常のターミナルと同じ環境にしたいのですが、どうすればよいでしょうか?
671デフォルトの名無しさん:2012/12/25(火) 09:55:58.70
>>664
Pythonのbugじゃない?
あなたのやりたいことは以下で大丈夫だと思うので、
深く考えるのは止めにしました。

>>528
>>> import os
>>> path = os.path.join('Desktop', 'test', 'ほにゃらら.txt')
>>> dname = os.path.dirname(path)
>>> path, dname
('Desktop/test/ほにゃらら.txt', 'Desktop/test')

>>670
起動scriptの先頭行に以下を書き込むか、
#!/usr/bin/env python3.2

3.2から以下のようにして直接起動する。
python3.2 tes670.py

>>669
多分無い。
672デフォルトの名無しさん:2012/12/25(火) 09:59:22.70
>>667
よく分からんけど、起動scriptで呼び出すmethodを一つだけにして、
def run():
# 色々な呼び出し。
とか適当にしておいて、run()をtry, exceptで囲う。

def func1():
raise RuntimeError('func1()')
def func2():
raise Exception('func2()')
def func3():
raise IOError('func3()')
def func4():
raise KeyboardInterrupt('func4()')

def run():
# func1()
# func2()
# func3()
func4()

if __name__ == '__main__':
try:
run()
except BaseException as raiz:
print('よい子のみんなは真似しちゃ駄目。')
print('raiz =', raiz)
raise raiz
673デフォルトの名無しさん:2012/12/25(火) 10:40:57.10
>>669
こういうのならたまにやる
HOGE, FUGA, PIYO = range(3)
674デフォルトの名無しさん:2012/12/25(火) 18:24:49.23
for i,v in enumerate(["a","b","c"]):
print i,v

こーゆーの?
675デフォルトの名無しさん:2012/12/25(火) 20:58:07.52
最近ドキュメント見直したらfor文にelse文が使えるのはビックリ
しかも意外に便利だた
676666:2012/12/25(火) 23:57:06.62
>>671
>Pythonのbugじゃない?

わざわざ URL 示していても、読まずにアホなこと言う奴がいるんだな。
677デフォルトの名無しさん:2012/12/26(水) 00:14:52.41
気に入らない仕様とは紙一重
678671:2012/12/26(水) 08:58:17.92
>>676
えっとですね。URLに "/2/" とあったので、2系の話だろう、
質問者>>664の質問には>>671の回答で十分だろう、
ということで読みませんでした。

きちんと読んでみると、>>664の質問の答えが書いてありましたです。。。
勉強になりました。。。bugでなかったです。。。

接頭文字 'r' または 'R' がある場合、バックスラッシュの後にくる文字はそのまま
文字列中に入り、 バックスラッシュは全て 文字列中に残されます 。例えば、文
字列リテラル r"\n" は二つの文字: バックスラッシュと小文字の 'n' からなる文
字列を表すことになります。引用符はバックスラッシュでエスケープすることがで
きますが、バックスラッシュ自体も残ってしまいます; 例えば、 r"\"" は不正でな
い文字列リテラルで、バックスラッシュと二重引用符からなる文字列を表します
; r"\" は正しくない文字列リテラルです (raw 文字列を奇数個連なったバックス
ラッシュで終わらせることはできません)。厳密にいえば、 (バックスラッシュが直
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
後のクオート文字をエスケープしてしまうため) raw文字列を単一のバックスラッ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
シュで終わらせることはできない ということになります。また、バックスラッシュ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
の直後に改行がきても、行継続を意味する のではなく 、それら二つの文字とし
て解釈されるので注意してください。
679デフォルトの名無しさん:2012/12/26(水) 09:18:42.24
いちいち貼らなくていいから
680デフォルトの名無しさん:2012/12/26(水) 09:59:58.98
681デフォルトの名無しさん:2012/12/28(金) 00:12:17.34
グロ注意
682デフォルトの名無しさん:2012/12/28(金) 17:20:30.08
みんなのパイチンくんですか〜
683デフォルトの名無しさん:2012/12/28(金) 17:30:53.07
windowsでpyCUDAとpyOpenCLを使いたいのですがインストール方法がわかりません
詳しいやり方を教えていただけると助かります
python2.7は入れてあります
684デフォルトの名無しさん:2012/12/28(金) 18:40:20.62
"pycuda windows binary"でググれ
685デフォルトの名無しさん:2012/12/29(土) 18:11:56.28
文字列の両端を指定した文字で囲む綺麗な方法ってありますか。
具体的に言うと、文字列のリストを元にして
各文字列をダブルクォートで囲んだリストを作りたいです。

a = [ 'a', 'b', 'c' ]
b = []
for i in a:
  b.append( '"' + i + '"' )

私が考えたのは上記ですが、なんかダサイなあと思うので。
686デフォルトの名無しさん:2012/12/29(土) 18:16:35.86
全要素に何かしたいならmap関数でも使ってみたら
別に綺麗だとは思わないけどー
687デフォルトの名無しさん:2012/12/29(土) 18:18:49.26
>>685
a = ['a', 'b', 'c']
map(lambda x : '"' + x + '"', a)
688デフォルトの名無しさん:2012/12/29(土) 19:31:16.92
b = ['"'+n+'"' for n in a]
689デフォルトの名無しさん:2012/12/29(土) 20:04:34.46
map('"{}"'.format, a)
690デフォルトの名無しさん:2012/12/29(土) 20:10:39.23
ミッフィーが見えた
691デフォルトの名無しさん:2012/12/29(土) 20:26:35.01
>>689
に一票
692デフォルトの名無しさん:2012/12/29(土) 20:42:34.97
pythonって関数を実行する前に定義しなきゃいけないじゃないですか
そうすると必然的にmain部分がファイルの下の方になっちゃうと思うんですが
どうにかしてmain部分をファイルの先頭に持ってくる事は出来ないでしょうか

def main():
 #ここにmain部分
def func1():
 pass
def func2():
 pass
#〜必要な関数を定義する〜
if __name__ == '__main__':
 main()

この様な書き方でよろしいでしょうか
693デフォルトの名無しさん:2012/12/29(土) 20:48:52.64
>>692 なぜそれを試してみない?
694デフォルトの名無しさん:2012/12/29(土) 21:02:21.05
それでいいと思う奴はいいと答えるし
駄目だと思う奴は駄目だと答える罠

多数派が知りたいならアンケートしたまえ
695685:2012/12/29(土) 23:39:02.17
ありがとうございました。
formatって引数を付けずにmapでリストに適用できるんだ…
ためになります。
696デフォルトの名無しさん:2012/12/30(日) 08:42:32.21
mapをまだ理解してないだろ
マニュアル嫁
697デフォルトの名無しさん:2012/12/30(日) 13:04:07.70
モジュールを入れようと思うのですが
これって仮にOSを再インストールする時にどうやったら環境を復元出来るのでしょうか
そのままC:\pythonフォルダを新しいPCに移して、pyファイルの関連付けして、PATHを通せば動きますか?
698デフォルトの名無しさん:2012/12/30(日) 14:39:14.33
pip freezeとか
699685:2012/12/30(日) 21:01:54.84
>>696
うーんマニュアルを読みましたが、よくわかりませんね。
map関数の第一引数の説明はfunctionとあるので
関数を引数に取るのだと思うのですが
'"{}"'.formatってstrオブジェクトの持つメソッドであって
組み込み関数のformatではないですよね?
もしかして、オブジェクトのメソッドも関数扱いになるのですか?
700デフォルトの名無しさん:2012/12/30(日) 23:50:52.39
公式のドキュメントにも関数とメソッドが入り交じってるから誤解を招きがちだが、両者に区別はない
オブジェクトに束縛された関数が、暗黙に第一引数でインスタンスを渡されることだけが特別な例だ
701デフォルトの名無しさん:2012/12/30(日) 23:59:15.98
今年Pythonのイベントで面白いのってなんだったでしょうか?
また、来年で一番早く行われるイベントっていつ頃でしょうか?
702デフォルトの名無しさん:2012/12/31(月) 00:28:25.27
素朴な疑問
なんで最初から総称関数方向に行かなかったんだろ?
あっちの方が融通効きそうなのに…
703デフォルトの名無しさん:2012/12/31(月) 00:39:10.21
>>692
func1(), func2()を別のfunc_factory.pyぐらいに持っていって、
main()を書く場所より上で、
from func_factory import func1, func2
ってしたら?
704685:2012/12/31(月) 08:01:54.23
>>700
なるほど。
それで合点がいきました。
そうなるとmap関数の適用範囲は
非常に広いということになりますね。
705デフォルトの名無しさん:2012/12/31(月) 22:58:19.83
import codecs
f=codecs.open("g:/a.txt","r+","utf-8")
m=f.readlines()
for i in range(len(m):
l[i]=m[i]*2"\n"
f.writelines(l)
f.close()

ファイルパスがg:/a.txtのファイルの各行を2回ずつ繰り返すように変更するつもりなのですが、
実行してもファイルになんの変化もありませんでした。
どこがどう間違っててどう直せばいいのでしょうか。
pythonのバージョンは2.5.4、a.txtはutf-8で保存した日本語ファイルです。
706デフォルトの名無しさん:2012/12/31(月) 23:05:08.26
rで読んでwで書いて
707デフォルトの名無しさん:2012/12/31(月) 23:29:36.94
ありがとうございます。
import codecs
f=codecs.open("g:/a.txt","r","utf-8")
m=f.readlines()
for i in range(len(m):
l[i]=m[i]*2"\n"
f=codecs.open("g:/a.txt","w","utf-8")
f.writelines(l)
f.close()
で実行してみたのですが、やはりなんの変化もありませんでした。
.pyファイルはasciiで保存できなかったのでunicodeで保存したのですが、問題ないでしょうか。
708デフォルトの名無しさん:2012/12/31(月) 23:34:04.46
せめて実行可能なコードを貼り付けようよ
というかそのコードを実行してエラーになっているのに気付いてない
(当然ファイルは書き換わらない)というオチか?

↓のような感じでいいはず

with open('t.txt', 'r+') as f:
    lines = f.readlines()
    f.seek(0)
    f.writelines(line * 2 for line in lines)
709デフォルトの名無しさん:2012/12/31(月) 23:34:23.18
>>701
pycon us
710708:2012/12/31(月) 23:39:39.11
あ、open()に渡すパスは適当に直しといて

いちおう説明しとくと、元のコードは少なくともforの行と
l[i]に代入しているコードがコンパイル可能な正しいPythonコードになっていない

それから、"r+"で開くのは問題ないが、
書く前にシークしてファイルポインタを書き込みたい位置に移動しないといけない
711デフォルトの名無しさん:2012/12/31(月) 23:54:20.89
ありがとうございます。
a.txtはutf-8の日本語ファイルなのですが、codecsモジュールを使う必要はないのでしょうか。
一応以下の2通りを試してみたのですが、やはりなんの変化もありませんでした。

with open("g:/a.txt","r+") as f:
lines = f.readlines()
f.seek(0)
f.writelines(line * 2 for line in lines)

import codecs
with codecs.open("g:/a.txt","r+","utf-8") as f:
lines = f.readlines()
f.seek(0)
f.writelines(line * 2 for line in lines)
712デフォルトの名無しさん:2013/01/01(火) 00:48:50.99
>>711
ちなみにどうやって実行してんの?
そもそも本当に実行されてるのか?
実行されれば元のコードではPythonがエラーを出力したはずだけど
713デフォルトの名無しさん:2013/01/01(火) 00:54:39.50
わかった
なんの変化もないと言うけど、.pyをダブルクリックして実行してるせいで、コマンドプロンプトがすぐ消えてエラーが出てても見えてないだけじゃないの
714デフォルトの名無しさん:2013/01/01(火) 03:15:29.51
  ●●●ケネディ大統領は何故、死なねばならなかったのか?●●●
  http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53

  ¥¥¥¥¥¥¥『万有サロン』書き込み大賞・総額100万円¥¥¥¥¥¥¥¥¥¥¥¥

  この掲示板に優秀な書き込みをして、総額100万円の賞金をゲットしよう!(*^^)v
    万有サロン
      http://jbbs.livedoor.jp/study/3729/
    書き込み大賞の詳細
      http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1069922074/78-
    書き込み大賞の詳細(資料倉庫内)
      http://www2.tba.t-com.ne.jp/a-z/omake/banyu/taisho.htm

  また、あらゆる疑問に関する質問を、携帯電話やメールでも受け付けています。
    電話番号 080-4437-4187
    メール  [email protected]

  ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
715デフォルトの名無しさん:2013/01/01(火) 07:18:15.89
g: は書き込み可能なメディア?
ファイルのタイムスタンプも変化なし?
Roaming用の場所にファイルが作られてたりしない?

Program Files とかを仮想ドライブで g: に割り当ててたりしないか、念のため確認
716デフォルトの名無しさん:2013/01/01(火) 08:32:06.21
誤爆?

念のため確認
717デフォルトの名無しさん:2013/01/01(火) 08:43:09.30
誤爆に思える方が不思議
718デフォルトの名無しさん:2013/01/01(火) 08:53:10.56
頭悪過ぎる質問なのでスルーが宜しいかと
719デフォルトの名無しさん:2013/01/01(火) 09:10:49.12
>>711
こんな感じでいいんじゃね?
ttp://pastebin.com/wj0M9UQM
720デフォルトの名無しさん:2013/01/01(火) 18:14:49.98
>>719
ありがとうございます!!!!
ただ、

あいう
あいう
かきく
かきく

のように繰り返した部分に改行が入るのではなく、

あいうあいう
かきくかきく

のようにしたいのですが、
どうすればいいのでしょうか?
721デフォルトの名無しさん:2013/01/01(火) 18:18:04.46
>>720
お正月の宿題です。
自分で考えましょう。

ヒント: 引数
722デフォルトの名無しさん:2013/01/01(火) 18:38:16.71
>>720
改行取ればいいんじゃない?
Google で "python 文字列 改行文字 削除" とか検索すれば沢山出てくるけど。
改行文字を削る方法が分かったら、

for ループの中で
改行文字を取り除いた文字列を作成する
"改行文字を取り除いた文字列" を出力する
"改行文字を取り除いた文字列" を出力する
改行文字を出力する

みたいにすればOK。
723デフォルトの名無しさん:2013/01/01(火) 19:02:11.27
>>721
↓でうまくいきました。
大変ありがとうございました!!!

import codecs

f = codecs.open("g:/a.txt", "r","utf-8")
lines = f.readlines()
f.close()

f = codecs.open("g:/a.txt", "w", "utf-8")
for line in lines:
f.writelines(line.replace('\r\n','') + line)
f.close()
724デフォルトの名無しさん:2013/01/01(火) 19:07:49.78
>>722
その方法だと
line.replace('\r\n','') * 2 + "\r\n"
でいいのでしょうか。
みなさん、大変ありがとうございました!!!
725デフォルトの名無しさん:2013/01/01(火) 21:17:15.37
すいませんまだちょっとわからないところがあるのですが、
writelinesで何行目に書き込むのか指定しなくても
問題が起きないのはなぜでしょうか
引数で書き込む内容にlineの値が入るから
書き込む行がそのlineの値と同一内容の行になるとは考えにくいのですが
726デフォルトの名無しさん:2013/01/01(火) 21:58:18.53
最初から書き換えてるから
727デフォルトの名無しさん:2013/01/01(火) 22:06:46.89
codecs.openの第2引数でファイルをどう開くか指定する
'w'は書き込み (ファイルがすでに存在すれば切り詰められます)
728デフォルトの名無しさん:2013/01/01(火) 22:49:58.07
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ あけおめ!ことよろ!
└─┘
729デフォルトの名無しさん:2013/01/01(火) 22:58:41.97
runrun-python.blogspot.jp/2011/09/blog-post_20.html
↑を見るとwritelinesの1回目の実行では1行目、
2回目は2行目に書き込むということのようですが、
それで正しいのでしょうか?
730デフォルトの名無しさん:2013/01/02(水) 02:23:21.80
末尾に追記だろ
何が疑問なんだ
731デフォルトの名無しさん:2013/01/02(水) 03:12:46.03
>>723
どうぞ。3を勧めるけど。

# Python3
import os

path = "~/a.txt"
path_r = os.path.expanduser(path)
path_w = os.path.expanduser(path + '.w')

with open(path_r, "r") as fr:
with open(path_w, "w") as fw:
edited_lines = []
for line in fr:
line = line.strip()
print(line * 2, file=fw)

# python2.7
import os

path = "~/a.txt"
path_r = os.path.expanduser(path)
path_w = os.path.expanduser(path + '.w')
print('path_r =', path_r)
print('path_w =', path_w)

with open(path_r, "r") as fr:
with open(path_w, "w") as fw:
edited_lines = []
for line in fr:
line = line.strip()
fw.write(line * 2 + '\n')
732デフォルトの名無しさん:2013/01/02(水) 10:53:07.95
python27を使っています。
以下のプログラムの構造がよく分からないので、教えていただけると助かります。
1,1000の素数を求めているそうですが・・・。

result = []
candidates = range(3,1000)
base = 2
product = base

while candidates:←@
while product < 1000:
if product in candidates:
candidates.remove(product)
product = product+base
result.append(base)
base = candidates[0]
product = base
del candidates[0]

result.append(base)
print result

@の点から↓の流れが分からないです。
条件がないwhileとはどういうことなのでしょうか?

http://www.python.jp/Zope/intro/instant_hacking_jp

ここから拝借しました。
733デフォルトの名無しさん:2013/01/02(水) 11:14:02.70
Python的には…
while candidatesは、リストcandidatesが空になったら終了する。
リストcandidatesを空にするための操作(要素の除去)は、remove(要素)や、del candidates[添字]で行なっている。
734デフォルトの名無しさん:2013/01/02(水) 11:23:43.46
他はあまりPython関係なさそうなので省略するけど、
各々の変数の役割を整理すれば、構造を掴むのは難しくないでしょ。
735デフォルトの名無しさん:2013/01/02(水) 11:56:34.16
条件式の等号や不等号を省略するコーディングは
望ましくないとする専門書もある。俺もそう思う。
条件式の書き漏れの可能性を残すし、バグの元でもある。
この場合、while candidates != []と書くべき。
736デフォルトの名無しさん:2013/01/02(水) 12:44:16.81
俺はそう思わない(主観)し、望ましいとしている専門書もある(ソースを提示しない)。
ゆえに等号などは省略すべき。




こんなもん宗教でしかねえのに、べきだべきでない語るんじゃねえ。
俺はこうしてるに留めろや教祖様。
737デフォルトの名無しさん:2013/01/02(水) 12:51:55.85
聞いてないことまで語る奴ってウザいよね
738デフォルトの名無しさん:2013/01/02(水) 12:54:06.92
初心者スレだからね。
良くない習慣を身につけないよう
きちっと指導するのが俺ら先達の努め。
739デフォルトの名無しさん:2013/01/02(水) 12:56:13.97
プログラマレベル3が調子に乗ってるねえ
お前等いつから教師ヅラできるほど偉くなったんだ?
平プログラマーのくせに
740デフォルトの名無しさん:2013/01/02(水) 13:00:18.59
>>733 ありがとうございます。
そういう意味なんですね。条件式がないのは初めて見たので戸惑いました。
もう少し自力で考えてみます。
741デフォルトの名無しさん:2013/01/02(水) 13:00:34.72
その習慣が正しいって保証は、どこの計算機の神様がしてくれるんでしょうね。
ちょっと信仰してみたいから、教えてよ。
742デフォルトの名無しさん:2013/01/02(水) 13:02:56.66
そんなに熱くなってどうしたのさ。
現に、初心者からこういう質問が上がるってことは
理解しづらいコーディングだという証拠だろ?
Pythonはわかりやすいコーディングをよしとする言語だから
そういう悪しき習慣は積極的に排除していこうじゃないか。
ここは日本のPython教育の最前線でもあるわけだし。
743デフォルトの名無しさん:2013/01/02(水) 13:07:59.41
お前みたいに一般化して語る人間が大嫌いなんだ。
744デフォルトの名無しさん:2013/01/02(水) 13:12:49.33
よしとするだあ?んなもん一部の人間が言ってるだけで普遍の真理でもなんでもねえだろが。
受け売りだけで分かったような面しやがって、てめえで考える脳も判断する脳も持ってねえだけだろが。
だから教祖と信者ってんだよ。
745733:2013/01/02(水) 13:14:23.81
掲示板でコーディングルールといった思想や経験則を語るのは、やっぱり無理があるよね。
746デフォルトの名無しさん:2013/01/02(水) 13:19:03.15
>>743
自分のコーディングスタイルをダメ出しされて逆ギレ?
それは視野が狭いよ。このスレは君のためじゃない、
初心者のためにあるんだ。
現に初心者が理解できず困っているじゃないか。
そんなコーディングはやめよう。

君がこのやり方で条件式を書く限り、書いたソースを見た
誰かが真似をして、それがまた新たに理解の妨げとなる。
この連鎖を断ち切らなきゃいけない。
ちょうど新年だから今年から直しなさい。
条件は手抜きせずきちっと書くこと。
747デフォルトの名無しさん:2013/01/02(水) 16:06:45.70
>>745
C とか Perl スレならいざ知らず Python スレなんだから、>>735 程度は
当たり前かと思ってた。

と言うか、エラーにしろよ とすら思う。
748デフォルトの名無しさん:2013/01/02(水) 16:10:58.75
なんでだよw
while expression:
のexperssionは条件式じゃなくて、真偽値だろ?
条件式の結果が真偽値だから条件式を入れても動作するだけで。
749デフォルトの名無しさん:2013/01/02(水) 16:18:18.34
candidates は真偽値なのかよ。
750デフォルトの名無しさん:2013/01/02(水) 16:34:24.49
PhytonのCで作ったモジュールで引数を複数受け取ることはできますか?
751デフォルトの名無しさん:2013/01/02(水) 17:02:37.87
>>750
出来るよ。

ドキュメントの「Python インタプリタの拡張と埋め込み」
1.1. 簡単な例
1.7. 拡張モジュール関数でのパラメタ展開
辺りを読もう
752デフォルトの名無しさん:2013/01/02(水) 17:04:47.08
ありがとうございます。
やってみます。
753デフォルトの名無しさん:2013/01/02(水) 17:30:18.65
> コーディング スタイル

Pythonの場合、と前置きはつくけど
PEP8では、空のシーケンスがFalseになるのを利用するのを推奨してる

!= [] だと、リスト以外に対応する場合、書き直しが必要になり汎用性が欠けるし、
実行効率の面でも若干冗長。
754デフォルトの名無しさん:2013/01/03(木) 00:43:04.23
> 条件式の書き漏れの可能性を残すし、バグの元でもある。
こういう思考のやつはセンス無いから消えてほしいわ
755デフォルトの名無しさん:2013/01/03(木) 00:57:05.45
手配師が考えた規約とかゴミクズだから
756デフォルトの名無しさん:2013/01/03(木) 01:32:09.78
補足、一概に条件式の省略を推奨してるわけではないよ。
None と 0 を区別する場合等、省略しないで明示的に書いた方がいいケースもある。
googleの方のスタイルガイドの方では、その辺、推奨するスタイルとその根拠・理由にも言及してる。
757デフォルトの名無しさん:2013/01/03(木) 07:58:35.04
>>756
> googleの方のスタイルガイド

どこにあるの?
URL plz.
758733:2013/01/03(木) 08:14:34.84
>>757
正にその引用部分でググると、5位くらいのところに出てくるぞ…
759デフォルトの名無しさん:2013/01/03(木) 08:25:24.95
テンプレにすら書いてあるPEPすら読んでない似非回答者にはお引取り願う
切に、願う
760デフォルトの名無しさん:2013/01/03(木) 08:33:46.54
>>746
そもそも不毛な話だから止めろと言われてるのに、良い悪いに終始してる時点で頭腐ってるだろ、お前
761デフォルトの名無しさん:2013/01/03(木) 08:59:36.58
一家言ある奴ってのは本質的に言い争いするのが好きだから。
集団の中にいられると火種になるし最高に迷惑なんだけどねえ。
知らぬは…とやら。
762デフォルトの名無しさん:2013/01/03(木) 09:15:10.00
>>760
不毛じゃないよ。
初心者を惑わせる悪い習慣を改めようという意見がなぜ不毛なの?
今までやっていたから、PEPにあるからという受け身な理由は
理由にならない。現実をよくするために行動しよう。
763デフォルトの名無しさん:2013/01/03(木) 09:21:50.55
そろそろ死ねよ生ゴミ野郎
764デフォルトの名無しさん:2013/01/03(木) 09:38:41.96
誰かに意見されたからなんて最高に受け身だと思うけど
ブーメラン
ブーメラン
765デフォルトの名無しさん:2013/01/03(木) 10:10:40.48
自分が(実在するかどうかも不明な)専門書を傘に喋ってる癖にこれだよ。
舌が2枚に割れてんだろうな、蛇だけに。
766デフォルトの名無しさん:2013/01/03(木) 10:45:35.61
>>762
今の時代に PEP が大事にされる理由をちゃんと理解しないと
単なる自己中の構ってちゃんにしかならないよ
767デフォルトの名無しさん:2013/01/03(木) 11:24:08.88
惑って結構じゃないの
768デフォルトの名無しさん:2013/01/03(木) 11:29:31.07
コーディングスタイルに関する書籍なり文書なりが色々ある中で、
「俺の主張はこの文書に基づいてる」と言えないってことは
勉強してないだけでしょ。井の中の蛙。
この手の人は「このコードは俺が見慣れていないから禁止」と言うんだよね。
勉強しない俺が偶然慣れ親しんだコードに合わせろとかいう、その手の
アフォが2人いたらまとまらんだろうが。気づけよ。

よっぽどおかしなコーディングスタイルで無い限り、合わせることに意味がある。
PEP8使え。(PEP8はよくできてるよ)
769デフォルトの名無しさん:2013/01/03(木) 11:38:40.25
せめてそのコーディングスタイルの理由ぐらい理解しようよ。
770デフォルトの名無しさん:2013/01/03(木) 11:51:32.26
気が済むまで専門書読んでてね〜ボクちゃん。
あと死ね。
771デフォルトの名無しさん:2013/01/03(木) 23:13:30.96
pass
772デフォルトの名無しさん:2013/01/04(金) 01:23:30.32
カルシウム足らないキチガイが新年早々暴れてたでござる
773デフォルトの名無しさん:2013/01/04(金) 04:36:27.74
過去形するには10年早い
774デフォルトの名無しさん:2013/01/04(金) 11:38:06.57
幕の内からスレ野比てると思ったら全部自演だったでござる
775デフォルトの名無しさん:2013/01/04(金) 11:43:33.97
質問です。
以下のプログラムが動きません。
errorでは、
line14 (module)
TypeError:unsupported operand type(s) for & (str) (tuple)
とでます。
line14の修正をいろいろ試したのですが、どうもうまくいきません。
よろしくお願いします。


#!/usr/bin/env python

import datetime

html_body = """
<html><body>
&d/&d/&d &d:&d:&d
</body></html>"""

now=datetime.datetime.now()

print "Content-type: text/html\n"
print html_body & (now.year, now.month, now.day,
now.hour, now.minute, now.second)
776デフォルトの名無しさん:2013/01/04(金) 12:28:38.60
>>775
str.format() を使う。

html_body = """
<html><body>
{0}/{1}/{2} {3}:{4}:{5}
</body></html>"""

now=datetime.datetime.now()

print html_body.format(now.year, now.month, now.day, now.hour, now.minute, now.second)
777デフォルトの名無しさん:2013/01/04(金) 12:30:40.95
フォーマット演算子はモジュロであってアンパサンドではない
778デフォルトの名無しさん:2013/01/04(金) 12:36:22.74
>>776

うまくいきました!!
ありがとうございます。
まだ始めたばかりで構造とかはよくわからないのですが、調べてみます!
ありがとうございます。
779デフォルトの名無しさん:2013/01/05(土) 00:15:30.22
質問です。
ファイル単位のモジュールを初期化するスタンダードな方法ってありますか?
現在ファイル数にして10数枚に分かれた一つのプログラムをオブジェクト指向で書いています。
今は初期化が必要なモジュールはファイルの先頭に
def init():
って関数を書いてそれをファイルの最後の行で
init()
として実行してます。
init()の中では主に
configというモジュールで読んだiniファイルデータをシングルトンのクラスに保管してあるので、
それをimportしてちょっと加工したりしていろんなクラスにクラス定数として渡してます。
ディレクトリ単位のモジュールは__init__.pyというファイル内で初期化するのが一般的なようですが、
ファイル単位でのやり方や定石、および「俺は個人的にこう書いてる」っていうのがあったら知りたいです。
もしくはこういうやり方自体Pythonicではないのでしょうか?
780デフォルトの名無しさん:2013/01/05(土) 02:27:44.42
>>779

再度呼び出されたりしてはいけないものは、関数にせず、モジュールのトップレベルに直で書く。
関数にするなら、名前に _ 接頭子を付けて非公開関数だとの意図を示す or 呼び出した後にその関数を del して後始末。

不用意にモジュールの依存関係を作ると、再利用が難しくなったり単体テストが面倒になるので、
自分なら、初期化はなるべくクラス/インスタンス単位で行えるように設計する。
781デフォルトの名無しさん:2013/01/05(土) 19:12:43.51
コマンドプロンプトで以下を実行しました
リストにはデータが入るのに
タプルには入らないのはなぜでしょうか

>>> a = map(lambda x: x + 1, [1,2,3])
>>> a
<map object at 0x00C40810>
>>> b = list(a)
>>> b
[2, 3, 4]
>>> c = tuple(a)
>>> c
()
782デフォルトの名無しさん:2013/01/05(土) 19:40:11.63
list(a)の段階でイテレータを列挙しきってるから
783デフォルトの名無しさん:2013/01/05(土) 19:54:40.78
>>782
もう一度b = list(a)をやったらbも[]になりました
むむむ、イテレータオブジェクトって一度きりの使い捨てなのですね…
すると二度使うことを目的としてイテレータオブジェクトを
変数(ここではa)に代入する意味はないということですね
784デフォルトの名無しさん:2013/01/05(土) 19:59:09.91
巻き戻せないんか?
785デフォルトの名無しさん:2013/01/06(日) 02:45:44.07
> すると二度使うことを目的としてイテレータオブジェクト

イテレータって省メモリ化と、速度向上を目的としているから。
イテレータさんとしては、2度使われるのは想定外だと思うよ。

>>> a = map(lambda x: x + 1, [1,2,3])
>>> a.__sizeof__()
16
>>> b = list(a)
>>> b.__sizeof__()
44
>>> a = map(lambda x: x + 1, [1,2,3])
>>> c = tuple(a)
>>> c.__sizeof__()
24
>>> d = map(lambda x: x + 1, range(1000))
>>> d.__sizeof__()
16
>>> e = tuple(d)
>>> e.__sizeof__()
4012
>>> len(e)
1000

ね?map object をlist, tuple にしてやると、
__sizeof__()が返す値が大きくなるでしょ?
実装は分からんけど、map使うと速度も向上するって聞いた。
786デフォルトの名無しさん:2013/01/06(日) 03:25:27.90
>>785
二度使いたい場合は
リストやタプルに保存してから処理するより
イテレータをもう一度作る方がマシですね
勉強になります
787デフォルトの名無しさん:2013/01/06(日) 21:32:23.16
知恵かしてけれ、パス切ってみたりするのだがインポートできない、PyQtのdllが腐ってるってるのか?

>>> import PyQt4
>>> import PyQt4.QtGui
Traceback (most recent call last):
File "<stdin>", line 1, in <module>

環境
Python 2.6.8 (unknown, Jun 9 2012, 11:30:32)
[GCC 4.5.3] on cygwin
788デフォルトの名無しさん:2013/01/06(日) 21:48:31.03
from PyQt4 import QtGui

も駄目なんだろうなってのは置いておいて、
>>787の書き込みだけじゃどうしようもないぞ。
他にも何か言ってないか?
言ってるんだったら、出し惜しみせずに全部出して。

sys.modules['PyQt4'] は、なんて言ってる?
↑が返すフォルダ以下に、QtGuiっている?
あと、どうやってPyQt4入れたのか知りませんが、
Pythonの別バージョンのPyQt4入れたんじゃないかとか。
789デフォルトの名無しさん:2013/01/06(日) 21:58:03.24
>>788
もちろん、専用のPyQtだす
>>> sys.modules['PyQt4']
<module 'PyQt4' from '/usr/lib/python2.6/site-packages/PyQt4/__init__.pyc'>

>>> PyQt4.
PyQt4.QtCore PyQt4.__getattribute__( PyQt4.__reduce__(
PyQt4.__class__( PyQt4.__hash__( PyQt4.__reduce_ex__(
PyQt4.__delattr__( PyQt4.__init__( PyQt4.__repr__(
PyQt4.__dict__ PyQt4.__name__ PyQt4.__setattr__(
PyQt4.__doc__ PyQt4.__new__( PyQt4.__sizeof__(
PyQt4.__file__ PyQt4.__package__ PyQt4.__str__(
PyQt4.__format__( PyQt4.__path__ PyQt4.__subclasshook__(
補完はこう
790デフォルトの名無しさん:2013/01/06(日) 22:15:07.98
>>789
PyQt4は入ってるんだ。

Qt4自体は動いてる?どうやって動作確認した?
簡単なdemoを持ってきて、"Qt4"が単発で動くか確認しないと。
動くなら、今度はPyQt4の問題となりそうだけど。

一応断っておくけど、cygwin界のQt4が動作することを確認してね。
cygwin界外の、windowsのQt4の動作確認されても困るからね。
791デフォルトの名無しさん:2013/01/06(日) 22:49:15.15
新規でPyQtを選択する理由って何?
792779:2013/01/07(月) 04:02:16.53
>> 780
返事が遅くなりました。ありがとうございます。
不要な中間変数でglobal空間が汚れるのが嫌で関数にしてたのですが
その後のことを考えるとなんらかの隠蔽をした方がいいですね。
関数ごとdelしてしまうというのは発想にありませんでした。
再利用や独立性を考えると設定的なパラメータは仮のデフォルト値を上書きする形で外から渡した方が良い気もしつつ、
単体テストを考えるとそれぞれのモジュール内で処理した方が気楽な気もしつつ。
でもおそらく迷うということはそもそもの設計がぬるいんでしょう。
参考になりました。
793788:2013/01/07(月) 18:17:55.63
どうやらCygwin PortsのPyQt4が腐っていたようだす
インストーラーと格闘中にパッケージにPySideがあるのを発見したので入れてみたころ、作動しやすた
お騒がせしやすた
794デフォルトの名無しさん:2013/01/09(水) 01:02:35.91
書籍に「タブは空白文字が良い」と書いてあったのですが、
pyscripterはタブを空白文字にするということはできるでしょうか?
795デフォルトの名無しさん:2013/01/09(水) 01:07:40.50
初期でなってました
すみません
796デフォルトの名無しさん:2013/01/09(水) 01:51:07.13
Pythonの外部モジュールを普通にソースからimportしても関数のコード補完が効かないのですが
何か設定して動かすことはできないのでしょうか?環境を以下に記します。

環境
Windows 7 32bit SP1
Portable Python 2.7.3.1(Python 2.7)

エディタ Pyscripter 2.5.3
外部モジュール OpenCV2.4.3

です。よろしくおねがいします。
797デフォルトの名無しさん:2013/01/10(木) 00:08:16.65
>>791
速い。
798デフォルトの名無しさん:2013/01/11(金) 07:29:29.21
>>796
それはエディタの仕様
ちゃんとしたIDEだと補完してくれるはず
799デフォルトの名無しさん:2013/01/11(金) 23:10:11.03
>>798
ちゃんとしたIDEってEclipseですか?
800デフォルトの名無しさん:2013/01/11(金) 23:43:31.10
>>796
手元だと、以下の環境で補完候補が表示できます
Windows 7 64bit SP1
Python 2.7.3
PyScripter 2.5.3.0
OpenCV 2.4.2 + numpy 1.6.2
801デフォルトの名無しさん:2013/01/12(土) 04:56:36.98
>>799
pycharmいいよぅ
802デフォルトの名無しさん:2013/01/12(土) 12:54:04.81
組み込み関数all()の仕様に疑問が…

>iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します
とあるのだけど、例えば空リストをallに食わせるとTrueだということだよね
Python使いの感覚では、空リスト=Falseが自然だと思うのだが
なぜこんな仕様なんだろう?
803デフォルトの名無しさん:2013/01/12(土) 17:36:31.10
「iterable の全ての要素が真ならば True を返します」
の対偶は
「iterable のいずれかの要素が偽ならば False を返します」
になるわけで、
偽となる要素が存在しなければ真になるんじゃないの。

もしくは iterable は集合であると考える。
all(iterable)が真であるなら、
all(iterableの部分集合)も真である。
空集合は任意の集合の部分集合であるから、
all(∅)は真とするのが妥当なんじゃないの。
804デフォルトの名無しさん:2013/01/12(土) 17:46:50.35
空のリストにall関数を適用したいと思ったことがなかったから気づかなかったな
805デフォルトの名無しさん:2013/01/12(土) 17:48:14.41
後者の方がイメージはしやすいと思った
806デフォルトの名無しさん:2013/01/12(土) 18:20:10.71
対偶ではないけどな
807デフォルトの名無しさん:2013/01/12(土) 18:23:25.17
「iterable の全ての要素が真ならば True を返します」
の対偶は
「iterable のいずれかの要素が偽ならば False を返します」
になるわけで、
偽となる要素が存在しなければ真になるんじゃないの。


SQLでNULLの扱いに苦労するタイプですねわかります
808デフォルトの名無しさん:2013/01/12(土) 18:33:09.52
>>803
むむむ…スマンが数学は苦手なので集合はわからんのだ
マニュアルには、allの動作は以下と同じと書いてあって
これを見ればiterableが空の時はforを一度も実行せずに
抜けるから動作としては理解できるのだが…
def all(iterable):
  for element in iterable:
    if not element:
      return False
  return True

bool([])がFalseで
all([])がTrueというのは、けっこうな落とし穴だと思った次第
「iterableの要素有無チェックをallに期待するのは誤り」ということを
覚えておくしかないな
809デフォルトの名無しさん:2013/01/12(土) 18:37:09.58
どこが落とし穴なの?
なんで悩んでるのかわからん
810デフォルトの名無しさん:2013/01/12(土) 18:38:13.52
うむ
811デフォルトの名無しさん:2013/01/12(土) 18:54:25.68
>>809
全ての要素が真ならば真を返す関数において
負論理値の代表格である空のiterableが真となるのは
一見矛盾した仕様に見えるということ
812デフォルトの名無しさん:2013/01/12(土) 19:01:55.67
>>808
日本語が理解できりゃ、数学が苦手だろうが>>803の前半は解るだろ
813デフォルトの名無しさん:2013/01/12(土) 19:05:27.51
名前に騙されてないか?
all() の定義は「全ての要素が真ならば真を返す関数」ではなく
「全ての要素中に真でない要素がひとつでもあれば偽を返す関数」だぞ
814デフォルトの名無しさん:2013/01/12(土) 19:09:24.34
つまり本当は数学が苦手なのではなくて国語が苦手だったってこと?
815デフォルトの名無しさん:2013/01/12(土) 19:13:42.18
>>812
わからん
空データには真になる要素も偽になる要素もないのに
なぜ真にするのか

>>813
それが、リファレンスには
「iterable の全ての要素が真ならば」とあるんだよ
その後ろに「もしくはiterableが空ならば」とくっついているので
今回の疑問提起に至ったわけだけど
816デフォルトの名無しさん:2013/01/12(土) 19:33:44.06
>>815
どこに載ってんの?
見つからないんだけど
リンク貼って
817デフォルトの名無しさん:2013/01/12(土) 19:57:03.01
>>802,808,815
こういうことでしょ?

>>> L3 = []
>>> all(L3)
True
>>> L4 = [[]]
>>> all(L4)
False
>>> L3 != L4
>>> True

まず第一に、L3 != L4 だよ。

> Python使いの感覚では、空リスト=Falseが自然だと思うのだが
L4 ではきちんとFalseを返しているよ。

>iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します
これは、、、訳文が混乱させているかも。
以下の訳文なら変な混乱しないと思う。

iterable の持つ要素に一つでも偽の要素があれば、 False を返します。
そうでなければ、 True を返します。

という訳なら、>>802は混乱しないと思う。
これなら、「もしくは、 iterable が空ならば」という注釈もいらない。
818デフォルトの名無しさん:2013/01/12(土) 20:07:28.68
>>817
> >iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します
> これは、、、訳文が混乱させているかも。

翻訳は悪くない。原文でもそうかいてる。
http://docs.python.org/3/library/functions.html#all

all っていう関数名からしても、そもそも >>802 みたいな疑問が起こるようなものにするつもり
はなかったのが、実装時にどうするか考えてるうちに当初の目的が忘れられてしまってこうなった
って感じはする。
819デフォルトの名無しさん:2013/01/12(土) 20:14:35.54
> 空データには真になる要素も偽になる要素もないのに
> なぜ真にするのか

数学的定義が``∀に空集合を与えた場合の結果は常に真と''なっているから
820デフォルトの名無しさん:2013/01/12(土) 20:18:17.38
>>818
失礼いたしました。

>>> all([])

は、Falseを返すよう仕様を直すべきと思うけど、難しいかな?
なんで、こんな糞な仕様が通ったんだろうね。
821デフォルトの名無しさん:2013/01/12(土) 20:19:28.04
と書いたら、>819に教えられた。
数学的な定義によるものでしたか。
一つ勉強になりました。
822デフォルトの名無しさん:2013/01/12(土) 20:24:55.68
自分のちっぽけな脳みそに収まる程度の常識が常に正しいなんてよく思えるね
823デフォルトの名無しさん:2013/01/12(土) 20:39:16.48
数学はともかくall([])が真になってほしい用途は色々思いつくので、
どっちかはっきりしてればそれでいい。
例えば0個以上の処理の結果をリストにして、すべてOKを知りたいとか。
どんな場合に偽になってほしいんだろう?
824デフォルトの名無しさん:2013/01/12(土) 20:58:09.76
>>815
あほやなおまえ

>「iterable の全ての要素が真ならば」とあるんだよ
>その後ろに「もしくはiterableが空ならば」とくっついている

ならなんの問題もないやろ

>all() の定義は「全ての要素が真ならば真を返す関数」ではなく
>「全ての要素中に真でない要素がひとつでもあれば偽を返す関数」だぞ

となんの矛盾もない
825デフォルトの名無しさん:2013/01/12(土) 21:28:49.81
>>824
とりあえずお前はここまでのレスをちゃんと読んでからコメントすれ。
826デフォルトの名無しさん:2013/01/12(土) 21:47:47.04
>>802 は、
 (もしくは iterable が空ならば)
を見落とした馬鹿。
827デフォルトの名無しさん:2013/01/13(日) 00:19:13.23
どうやったらそんな馬鹿な発言が出来るのか、理解に苦しむ…
828デフォルトの名無しさん:2013/01/13(日) 00:58:17.77
馬鹿には無理
829デフォルトの名無しさん:2013/01/13(日) 01:11:00.36
not any([])
830デフォルトの名無しさん:2013/01/13(日) 03:04:32.56
pass
831デフォルトの名無しさん:2013/01/13(日) 10:30:45.20
                      |:::ハ:.:.:.:.:.:i:.:.:i.:.:i./.:.://メノ  左ォ}::::ノ::ノノ
                  |::::i:::';::::::::l、::i:::ハ:/,ィチ爪'    {ヒチ'!::イイ
                    |ハ::::::ヾ::::ハ 'Vリ ゙´ {、込ソ    ゛″!:::i:.:l
                      |:.::ト、:.:.:ヾ:.ハーi|   ::::::::      〉 ノ::::i::.|
                  {:.:.ト、ヾ.:.:.:ヾハ lト、        _, , イ:.:.:.:i.:ハ
                   ヾ::ヽゞ、\.::.\!! ヽ、.   ´ /!.::!.:.i:.:!:.!:l    >>1乙ぱい
               , '" ヾ\ \:::::::::k   /` ー ' `メ'リ:.:.ノ.ノ:ノノ
                  /     川   リllVハ. (  i `\ ,イイ// //
              /              |l ̄`ヽ  ノ    `メ、
             ,/            {:}          `ー'- ニ_
          ,/         _∠     |l     \ ,      \
      /        _ ,. イ´:       |l      \      ,λ
     /   -‐‐‐-<´   .!   /    |l       ' ,   _,ィ'ンy}
    〈            \  .ノ`ー斗rェ,,_,_,_|l          ,.ir'彡イy-´ !
     `ヽ、        ` ' <._ {jt=t-t-ミ`^Yーrヘr-彡'水k} !:} .ノ
          ` ー-  .._       ` -ヽ.  l`亠^{:i ̄ {:リ |ハ ノノ/ノ
      _,. -‐ '  ̄ ´ ̄` ー- 、    \{{   {:l   {:i ノ_,ィニ_ン´
    //                  `ヽ 、\ \  {:l  {∠ニァ--'
  / /                 `ヽミニ>ァ┴ '´
 /\V|                          /
./   ヾ.、                  ,. ' ´
832デフォルトの名無しさん:2013/01/13(日) 11:40:43.31
相手が分かってないことを分かってないのだと分からせるのが、コミュ力の高い人。
833デフォルトの名無しさん:2013/01/13(日) 12:02:58.11
低くていいから消えろ
834デフォルトの名無しさん:2013/01/13(日) 15:55:15.33
ある拡張子を持つファイル名を抜き出したい場合、
どうやって正規表現書いたらいいでしょうか?
拡張子は、"txt", "html" のように複数です。

>>> import re
>>> re.findall('[a-z]+\.(txt|html)', 'abc.txt def.html') # 1
['txt', 'html']
>>> re.findall('([a-z]+)\.(txt|html)', 'abc.txt def.html') # 2
[('abc', 'txt'), ('def', 'html')]
>>> re.findall('(([a-z]+)\.(txt|html))', 'abc.txt def.html') # 3
[('abc.txt', 'abc', 'txt'), ('def.html', 'def', 'html')]

私は、2案を採用したのですが、
抜き出した後に','.join()として元に戻す方法が好きじゃありません。

3案ならば、texts[0]とでもすれば思ったものを抜き出せますが、
余計なオブジェクトを生成してしまうのが好きではありません。

3案の[0]をいきなり抜き出したいのですが、無理でしょうか。
835デフォルトの名無しさん:2013/01/13(日) 16:27:43.50
好きじゃない以前に2案だって余計なオブジェクト生成してるだろうに
あなたの美観が意味不明だからなんともいえない

単にソースコード上に見えなければそれでいいってこと?
836デフォルトの名無しさん:2013/01/13(日) 16:35:07.06
3案は本命+2案ですので、好きではありません。
本命のみ抜き出したいのです。
2案も余計なものは抜き出しておりませんが、
後でくっつけ直すのが好きではありません。
837デフォルトの名無しさん:2013/01/13(日) 16:48:38.85
この手の質問って漠然としすぎててウンザリするよな。

[n[0] for n in re.finditer('(([a-z]+)\.(txt|html))', 'abc.txt def.html')]

これは?何が不満だ?
仕方ないからお前のママじゃねえけど相手してやるよ。
838デフォルトの名無しさん:2013/01/13(日) 16:51:54.78
動かないのが不満
finditerが返すのはmatchなので

[n.group(1) for n in re.finditer('(([a-z]+)\.(txt|html))', 'abc.txt def.html')]
http://ideone.com/7cJzXF

が正しい
839デフォルトの名無しさん:2013/01/13(日) 16:56:20.12
長いのが不満
内包表記が不満
Matchを無駄に生成してる(←誤解です)のが不満
840デフォルトの名無しさん:2013/01/13(日) 17:07:32.84
Match.groupを使うなら外側のグループ化いらなくね
[n.group(0) for n in re.finditer('([a-z]+)\.(txt|html)', 'abc.txt def.html')]
841デフォルトの名無しさん:2013/01/13(日) 17:09:57.03
map を使うのはどうだろう?

map((lambda x: x[0]), re.findall('([a-z]+¥.(txt|html))', 'abc.txt def.html'))
842デフォルトの名無しさん:2013/01/13(日) 17:12:40.18
リファレンスを穴が開くほど読んでりゃこれでいいと分かる

import re
print re.findall('(?:[a-z]+)\.(?:txt|html)', 'abc.txt def.html')

?:を指定するとグループ化しつつも後方参照できなくなる
843842:2013/01/13(日) 17:14:00.29
というわけでママの座は俺のものだ
異論はないだろう
844デフォルトの名無しさん:2013/01/13(日) 17:19:28.94
どうぞどうぞ
845デフォルトの名無しさん:2013/01/13(日) 17:27:42.18
それなら最初のグルーピングも外しちゃっていいな。
re.findall('[a-z]+¥.(?:txt|html)', 'abc.txt def.html')
846デフォルトの名無しさん:2013/01/13(日) 17:36:30.18
あ、本当だ
見落としてた
847デフォルトの名無しさん:2013/01/13(日) 20:12:17.85
>>> re.findall('[a-z]+\.(?:txt|html)', 'abc.txt def.html')
[]

 :||:: \おい、隠れても無駄だ ゴルァ!     ドッカン  ゴガギーン
 :|| ::   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄_m ドッカン     ☆
 :||::   ___     ======) ))_____ /        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 :||  |     |      | ̄.ミ∧_∧ | | ────┐||::    ∧_∧ < おらっ!出てこい>>845,846
 :||  |___|      |_..(   ) | | .___ │||::   (・Д・ )  \____________
 :||  |___|      |_「 ⌒ ̄  ,|.. |.    .|.|||::  / 「    \ ::.
 :||  |___|      |_|    ,/  ̄ .  ̄ ̄ ̄ │||::  | |    /\\
 :||:   ̄ ̄ ̄         ̄|    .| :||│     ;,   │||; へ//|  |  |. |
 :||::   :;  ; ,,         :|    :.| ||│       (\/,.へ \|  | ::( .)
 :||::   :;  冫、. .      |   .i  .|:||◎ニニニニ\/  \    |    ̄
 :||.:,,'';      ` ..  . ::  . |  ∧. |:||│::::/    │||::.:.   .Y ./ ..:: ;;
 :||:;;;:    ;;.. ::::: 冫、 : .:: .|  | | |.||│ 冫、 ;;;,,│||:;;;.   | .|  ........
 :||:;;;:  .....   .. `     / /  / /::||│ `  .,;;;,,.│||:;;;.   | .|  ...:L
 :||;::: #   ..:        ./ / ./ ./ ||│|三三三|. │||;;:..::   | .| . #.. :: ;;
 :||;:::     #. ..:  :::::: (_) .(_).ミ||│        │||;;;k、,,,|,(_).. ,,, :::
   ̄ ̄ ̄ ̄ ̄: ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
:::;三三;;;;;三三:::;;;;;;; :::::;;;;;::;;;;;;;;;;::::;; :::::;;;;;:::::;;;;;;;;;;::::;; :::::;;;;;:::;;;;;;;;;;::::;;;;;:::::::;;;;;;三
848デフォルトの名無しさん:2013/01/13(日) 20:32:38.12
pass
849デフォルトの名無しさん:2013/01/13(日) 21:24:16.69
大王烏賊
850845:2013/01/13(日) 21:29:19.76
>>847
2ch だとバックスラッシュが円記号に変換されちゃうけど、自分の環境で実行する前にファイル名と拡張子の間のピリオドをエスケープしてる円記号をバックスラッシュに直さないとだめだよ。

こっちならちゃんと見えるはず。
http://ideone.com/O10zDE
851デフォルトの名無しさん:2013/01/13(日) 21:46:37.67
>>850
俺には普通にバックスラッシュに見えてるが
852デフォルトの名無しさん:2013/01/13(日) 21:49:34.66
>>851
自分の環境がおかしいの分かってて言ってるだろw
853デフォルトの名無しさん:2013/01/13(日) 21:50:11.98
pass
854デフォルトの名無しさん:2013/01/13(日) 22:06:52.30
ファイル名に二つ以上.あったら終わりだな。
855デフォルトの名無しさん:2013/01/13(日) 22:16:38.62
>>854
その場合は正規表現を改良すればいいだけで、元の議論はどうやって正規表現の結果からファイル名だけを取り出すかだから。
元の質問者は満足したかな?
856デフォルトの名無しさん:2013/01/13(日) 22:25:03.88
発想の貧困さを見ると全部自演かと
857デフォルトの名無しさん:2013/01/13(日) 22:36:48.41
何でもかんでも自演と言う発想の貧困さ (w
858デフォルトの名無しさん:2013/01/13(日) 22:52:08.22
わかりやすいな
お前
859デフォルトの名無しさん:2013/01/13(日) 22:55:02.99
>>858 みたいな自演は本当にわかりやすいよね (w
860デフォルトの名無しさん:2013/01/13(日) 23:11:25.25
まったくだな (w
861デフォルトの名無しさん:2013/01/14(月) 01:00:04.27
>>798
>>800
>>801
遅くなりましたが、回答ありがとうございました
Pyscriptの設定からIDE OptionのSpecial packageにcv2を追加すれば
PyscripterからでもOpenCVのコード補完を使用することができました。

Pycharmは使ってみたいのですが日本語ローカライズされてないみたいなので少々手が出しづらいです。
日本語に対応したらすぐ購入しようと思います。
862デフォルトの名無しさん:2013/01/14(月) 02:52:22.90
まず対応しないだろうなあ
試用できるから試してみたら、案外英語のままでも支障無いと思う
863デフォルトの名無しさん:2013/01/16(水) 11:51:59.93
RubyでいうherokuみたいなポジションのPython3.3が動かせる無料サーバの定番ってありますか?
gaeは2.7なので・・・
864デフォルトの名無しさん:2013/01/16(水) 12:00:59.59
pythonでネットワークするにはどうすれば良いんですか?
865デフォルトの名無しさん:2013/01/16(水) 12:04:57.97
I can Python!! ha! ha! ha! ha!
866デフォルトの名無しさん:2013/01/16(水) 15:51:34.54
import socket して、ライブラリリファレンス読んで、あとは頑張れ。
867デフォルトの名無しさん:2013/01/16(水) 18:10:01.96
馬鹿には無理
868デフォルトの名無しさん:2013/01/16(水) 18:25:03.85
ダメな奴は何をやっても
869デフォルトの名無しさん:2013/01/16(水) 18:36:02.12
GAEはとうに無料じゃなくなったろ
870デフォルトの名無しさん:2013/01/16(水) 18:43:58.55
これ見て分からんのならチュートリアルからやった方がいい
http://docs.python.jp/2/library/socket.html#socket-example

サーバーの方はSocketServerモジュール使ったほうが圧倒的に楽
871デフォルトの名無しさん:2013/01/16(水) 18:49:22.29
fileには文章が書かれています。
* 私は〜
あなたは〜




num = 0
for line in file:
if line.startswitch('*') == True:
ここで*をnumを数字の値に変換したいんですが、replaceではできません。
num += 1

何か良い方法はありませんか?
よろしくお願いします。
872デフォルトの名無しさん:2013/01/16(水) 18:52:52.07
ここで*をnumを数字の値に
ではなく
ここで*をnumの数字の値に
でした。
すみません。
873デフォルトの名無しさん:2013/01/16(水) 18:55:09.87
GAEは無料だろ今でも無料で使ってるぞ
874デフォルトの名無しさん:2013/01/16(水) 18:57:46.92
>>871,872
"*" * num

あとif line.startswith("*"): でいいよ
str.startswith()はTrueかFalseを返すんだからことさらTrueと比較するのは無駄
875デフォルトの名無しさん:2013/01/16(水) 18:59:24.76
なんか的外れ回答したかも
外れてたら仮にnum = 3 のときにどういう返り値なり結果が欲しいか書いて
876デフォルトの名無しさん:2013/01/16(水) 19:04:21.83
>>874,,875
ありがとうございます。
Trueは取りました。

入力
* 私は〜
あなたは〜
* 君が〜
* 私は〜
* どんなときに〜




出力
0 私は〜
あなたは〜
1 君が〜
2 私は〜
3 どんなときに〜




です。
よろしくお願いします。
877デフォルトの名無しさん:2013/01/16(水) 19:09:38.79
import re
re.sub(r'^\*', str(num), "* わたしは〜")
878デフォルトの名無しさん:2013/01/16(水) 19:54:16.05
>>876
import re

# help(re)
# sub(pattern, repl, string, count=0, flags=0)
# Return the string obtained by replacing the leftmost
# non-overlapping occurrences of the pattern in string by the
# replacement repl. repl can be either a string or a callable;
# if a string, backslash escapes in it are processed. If it is
# a callable, it's passed the match object and must return
# a replacement string to be used.
# >>> re.sub('a', 'A', 'bacdaef')
# 'bAcdAef'
# >>> re.sub('ac', 'A', 'bacdaef')
# 'bAdaef'

text = '''\
* 私は〜
あなたは〜
* 君が〜
* 私は〜
* どんなときに〜'''

lines = text.split('\n')

num = 0
for line in lines:
if line.startswith('*'):
# sub(pattern, repl, string, count=0, flags=0)
line = re.sub('\*', str(num), line)
num += 1
print(line)
879デフォルトの名無しさん:2013/01/16(水) 20:04:48.95
せっかく元がfor line in fileなのに、
lines = text.split('\n')するコスト意識の低さ。
880デフォルトの名無しさん:2013/01/16(水) 20:14:18.03
>>879
頭おかしい人?

↓以下をコピペすれば動作するでしょ。
if line.startswith('*'):

私が試す場合に別file作りたくないから、
text作っておいたまでで。

>>876にとって重要なのは、
>>876の入力が出力に変換できることだよ?
2ch ってすごく頭の悪い人がいて、びっくりする。

最高に頭の悪い発言して下さいスレってまだあるっけ?
881デフォルトの名無しさん:2013/01/16(水) 20:16:04.41
>>880
○↓の行以下をコピペすれば動作するでしょ。
×↓以下をコピペすれば動作するでしょ。
882デフォルトの名無しさん:2013/01/16(水) 20:18:46.98
馬鹿だから徒歩何分何円とか計算してんだろうな
あほくせえ
883デフォルトの名無しさん:2013/01/16(水) 20:23:41.06
自分ができないせいで、みなさん、すいません。
>>877,878
ありがとうございました。
得たい出力をえれました。
884デフォルトの名無しさん:2013/01/16(水) 20:42:32.14
気にする必要ないよ

>>> num = 12
>>> "* hoge*fuga".replace("*", str(num), 1)
'12 hoge*fuga'

reいらなかった
885デフォルトの名無しさん:2013/01/18(金) 06:34:55.04
>>879
間違っています。
以上。
はい次の方。
886デフォルトの名無しさん:2013/01/19(土) 07:00:41.75
外部ライブラリを使っているプログラムを第三者に公開する場合
そのライブラリも含めて公開するにはどうしたらよいのでしょうか。

例えば○○のライブラリが必要です と書いても
そのライブラリが後から消える可能性や、バージョンアップで動かなくなる可能性もあるじゃないですか
そういうのを回避する為に、標準以外のライブラリを全て含めて
pythonさえ正常に入っていれば(python自体の互換性は置いておくとして)、例えオフライン状態でもそのコードに必要なファイルが全て揃っている
という状態にするにはどうしたらよいのでしょうか?
887デフォルトの名無しさん:2013/01/19(土) 07:59:41.90
cxfreezeでも使えば
888デフォルトの名無しさん:2013/01/19(土) 09:17:22.71
pip freeze で一覧書き出して
pip bundle で一式まとめzipの出来上がり

移した先でpip install
889デフォルトの名無しさん:2013/01/19(土) 09:33:05.52
>>886
同梱したいって事だろうけど、ライブラリのライセンスに依るでしょ

> そのライブラリが後から消える可能性や、
> バージョンアップで動かなくなる可能性もあるじゃないですか
> そういうのを回避する

回避したいなら、そのライブラリ互換のモノを自分で書きなさいってこと
書けないなら諦めなさい
890デフォルトの名無しさん:2013/01/19(土) 10:00:04.24
>回避したいなら、そのライブラリ互換のモノを自分で書きなさいってこと

>そのライブラリが後から消える可能性や、バージョンアップで動かなくなる可能性もあるじゃないですか

消えてから(動かなくなってから)考えろ
891デフォルトの名無しさん:2013/01/19(土) 10:31:14.25
C言語のdo〜whileのような
まず一度処理をし、その後脱出条件になるまでループをする処理は
Pythonではどう書けばいいんでしょうか
892デフォルトの名無しさん:2013/01/19(土) 10:33:30.96
while True:
  hoge
  if 脱出条件: break
893デフォルトの名無しさん:2013/01/19(土) 11:53:51.15
堅い堅い頭が堅いよきみぃぃぃぃ
894デフォルトの名無しさん:2013/01/19(土) 13:03:21.05
895デフォルトの名無しさん:2013/01/19(土) 15:11:17.76
皆さん最初にPythonを始めた頃
どんなアプリを作りましたか?
896デフォルトの名無しさん:2013/01/19(土) 15:28:12.35
hello world
sqlite使って予定管理帳

大体誰かのをimportしているな
897デフォルトの名無しさん:2013/01/19(土) 15:31:27.68
自動2ちゃん投稿スクリプト

そのつもりないのに荒らしツールだ!って言われたので公開してない
898デフォルトの名無しさん:2013/01/19(土) 15:34:00.65
imagemagickをマルチプロセスで実行するシェルスクリプト
899デフォルトの名無しさん:2013/01/19(土) 15:36:21.17
GAEでtwitterのbot
900デフォルトの名無しさん:2013/01/19(土) 15:58:19.59
僕がPythonに興味を持ち始めたのは
http://www.youtube.com/watch?v=2so3T7xnCn8

こうゆうモノを作りたくて興味を持ち始めたのですが壮大すぎて全然進みません
なので小さなモノから作っていこうと思いまして

自動2ちゃん投稿スプリクト作りたいです
901デフォルトの名無しさん:2013/01/19(土) 17:40:25.80
# encoding: utf-8※ここは変更できません

a = raw_input()

raw_inputで入力される内容をユニコードとして入力したいのですが、どうすればいいでしょうか?
902デフォルトの名無しさん:2013/01/19(土) 18:25:43.76
すまない、UTF-8以外は帰ってくれ
903デフォルトの名無しさん:2013/01/19(土) 18:27:08.13
要するにraw_inputから入ってくるデータがu'hoge'になってればいいって認識であってるか?
904デフォルトの名無しさん:2013/01/19(土) 18:28:21.24
>>903
そうです。
解決法ありますかね?
905デフォルトの名無しさん:2013/01/19(土) 18:28:39.43
>>886
py2exeに関連するものを全部パックするオプションがあるよ
906デフォルトの名無しさん:2013/01/19(土) 18:33:36.48
手軽なのはラップしちゃえばいいんじゃない
raw_input = lambda :__builtins__.raw_input().decode('cp932')

sys.stdinにデコーダー被せてもいけるかもしれないが
他にも影響しそうで怖い
907デフォルトの名無しさん:2013/01/19(土) 18:36:27.74
UTF8版のGit入れてgitbash使ったらいけた
908デフォルトの名無しさん:2013/01/19(土) 18:58:53.43
>>906
<lambda>() takes no arguments (1 given)
というエラーが出てしまいました。
909デフォルトの名無しさん:2013/01/19(土) 19:14:07.29
prompt使うのね
じゃあこう

raw_input = lambda *p:__builtins__.raw_input(*p).decode('cp932')
910デフォルトの名無しさん:2013/01/19(土) 20:25:11.65
>>909
UnicodeDecodeError: 'cp932' codec can't decode bytes in
position 0-1: illegal multibyte sequence
とでてしまいます。
どうすればよいでしょうか?
911デフォルトの名無しさん:2013/01/19(土) 20:26:45.67
勝手にWindowsだと思い込んでたけど環境は一体なんです?
912デフォルトの名無しさん:2013/01/19(土) 20:28:58.45
>>911
Windowsです。
913デフォルトの名無しさん:2013/01/19(土) 20:40:32.76
>>912
http://www.dotup.org/uploda/www.dotup.org3861638.png

何が原因だろ
プロンプトのコードページが違うか、Cygwinのターミナルでも使ってるんだろうか
914デフォルトの名無しさん:2013/01/19(土) 20:49:06.41
>>913
何が原因なんでしょうね?
コードページは932で、ターミナルは使ってないです。
ありがとうございました。
915デフォルトの名無しさん:2013/01/19(土) 20:53:25.45
position 0-1ってことはデータの先頭に何かある雰囲気
916デフォルトの名無しさん:2013/01/19(土) 21:32:05.86
>>901
# encoding: utf-8
# ※ここは変更できません
こうやったら解決とか、それはないかー

あー何となく分かった
日本語書いてるでしょ、それが良くないと思う。
sjis, euc-jp, iso-2022-jp色々あるんだよー
日本語消してごらん、# 使うんじゃなくて、文字通り削除する。
917デフォルトの名無しさん:2013/01/19(土) 21:40:10.86
>>916
日本語の文が入力なので消すことができません。
918デフォルトの名無しさん:2013/01/19(土) 21:41:15.36
何か奇怪な方向に向かい始めたぞ??
919デフォルトの名無しさん:2013/01/19(土) 21:45:05.24
ごめんなさい。
日本語消すってのは入力に日本語を入れるなって意味ではないのですか?
920デフォルトの名無しさん:2013/01/19(土) 21:46:18.87
>>919
何を入力したか具体的に書けよ
あと、次の文に同じ入力を食わせたときの結果を書け
print repr(raw_input('hoge>'))
921デフォルトの名無しさん:2013/01/19(土) 22:02:18.84
>>920

入力:彼は東京から来た

u'\u5f7c\u306f\u6771\u4eac\u304b\u3089\u6765\u305f'

入力をKNPに入れます。
922デフォルトの名無しさん:2013/01/19(土) 22:07:05.60
print repr(raw_input('hoge>'))

これでu'\u5f...'なんて出てくるはずないんだがな・・・
923デフォルトの名無しさん:2013/01/19(土) 22:11:32.98
もう面倒くさいからソースプリーズ
924デフォルトの名無しさん:2013/01/19(土) 22:11:50.40
>>922

自分でもraw_inputとプログラムの中に入力を書くを比べてみたところ差異が確認できました。
925デフォルトの名無しさん:2013/01/19(土) 22:14:26.58
差異って何だよ…
926デフォルトの名無しさん:2013/01/19(土) 22:14:40.64
あーソースくれるならideoneとかじゃなくてそのものをzipでくれ
テキストだけ貼られるとエンコーディング大丈夫なのかとか分かんない
927デフォルトの名無しさん:2013/01/19(土) 22:18:09.69
Tracebackもファイルパスとか以外は省略せずに全部貼れ
928デフォルトの名無しさん:2013/01/19(土) 22:19:33.81
なんかちぐはぐだな
指示したことが正しく実行されていない気配がある
聞いてる話も本当にその方法で行われているのか
929デフォルトの名無しさん:2013/01/19(土) 22:22:14.41
画面が見れれば3秒で解決しそうなだけに意思疎通が微妙でイライラする。寝るわ。
930デフォルトの名無しさん:2013/01/19(土) 22:28:49.70
#coding:utf-8
import subprocess
import re

def knp(str):
juman = subprocess.Popen(["juman"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
knp = subprocess.Popen(["knp", "-tab"], stdin=juman.stdout, stdout=subprocess.PIPE, shell=True)
juman.stdin.write(str.encode("cp932"))
juman.stdin.close()
juman.stdout.close()
return knp.communicate()[0]

raw_input = lambda *p:__builtins__.raw_input(*p).decode('cp932')

input = raw_input(u'入力:'.encode('cp932'))

#print repr(raw_input())

input_type_word_file = open('input_knp.txt','w')
input_type_word_file.write(knp(input))
input_type_word_file.flush()
input_type_word_file.close()

です。
931デフォルトの名無しさん:2013/01/19(土) 22:29:50.75
人の話聞けよてめえ貼ったおすぞ
932デフォルトの名無しさん:2013/01/19(土) 22:31:19.11
エンコードはUTF-8のBOM付きです。
遅くなってすいませんでした。
933デフォルトの名無しさん:2013/01/19(土) 22:32:41.39
すいません、複数人いらっしゃる見たいだったので。
zipでもあげなおします。
少々お待ちください。
934デフォルトの名無しさん:2013/01/19(土) 22:32:57.95
まあ、不審な点はない。
じゃあ、なぜ?

入力って
xxx.py < input.txt
とかやってる?
935デフォルトの名無しさん:2013/01/19(土) 22:36:34.84
標準入力からファイル突っ込んでる可能性かー。
そういえば、エラーが起きたの入力データの先頭だったよな。
それBOMじゃねえの?
936デフォルトの名無しさん:2013/01/19(土) 22:37:34.92
http://u12.getuploader.com/goodnight/download/36/a.zip
です。

入力はa.pyのみです。
937デフォルトの名無しさん:2013/01/19(土) 22:42:21.00
938デフォルトの名無しさん:2013/01/19(土) 22:42:23.25
>>936
次はエラーメッセージを全部貼って
939デフォルトの名無しさん:2013/01/19(土) 22:43:42.12
すいません。
パソコンを再起動したらきちんと出力が出ました。
お騒がせしました。
940デフォルトの名無しさん:2013/01/19(土) 22:45:16.92
なんでだよwこっちがなんでなのか聞きたいよw
941デフォルトの名無しさん:2013/01/19(土) 22:45:34.10
ズコー
942デフォルトの名無しさん:2013/01/19(土) 22:48:24.67
良かった、問題なんてなかったんだ。
943デフォルトの名無しさん:2013/01/19(土) 23:00:55.51
本当にすいませんでした。
ありがとうございました。
944デフォルトの名無しさん:2013/01/20(日) 08:08:24.88
これで一人のPython戦士がよちよち歩きを初めたんや
良かった良かった
945デフォルトの名無しさん:2013/01/20(日) 10:46:50.11
python2か3でwindowsの画面右下のポップアップを出すにはどうすればいいですか?
946デフォルトの名無しさん:2013/01/20(日) 12:04:59.74
Windowsで出す方法調べて、どのdll, APIを使えばいいかまで調べたら、
>>505の言うctypes使う。
http://docs.python.org/3/library/ctypes.html

他に簡単な方法があるかもしれんから、
http://pypi.python.org/pypi
ここ行って調べてみて、良い方法があったら教えて。
947デフォルトの名無しさん:2013/01/20(日) 12:54:22.90
画面右下のポップアップってなんのこと?
Shell_Notifyicon のつもり?
948デフォルトの名無しさん:2013/01/20(日) 12:59:23.82
ポップアップ出すプログラムを書いてサブプロセスとして走らせる
949デフォルトの名無しさん:2013/01/20(日) 13:11:43.30
>>947でぐぐってみたらやってる人がいるね
https://gist.github.com/4000505
これがいりそうだ
http://sourceforge.net/projects/pywin32/
950デフォルトの名無しさん:2013/01/20(日) 13:19:19.24
windowsな人だったらそれで通じるのかも、notifyとかballoon tipsの事だよね。

IronPythonならNotifyIconのShowBalloonTipsで簡単に出せるけど、dllのAPI叩くのは結構手間掛かる
ctypesよりはwin32モジュール使った方が多少楽かな (win32gui.Shell_Notifyicon 辺り。それでも数十行規模になると思う)
GUIのツールキット使うともう少し楽 (qtのQSystemTrayIcon 等。多分、十数行位の規模できる)

探したこと無いけど、もっと簡単に扱えるライブラリ在るはず
951デフォルトの名無しさん:2013/01/21(月) 00:18:03.66
wxPython最強です
952デフォルトの名無しさん:2013/01/21(月) 10:17:17.51
wxPythonだとユーティリティ的なクラスが用意されてるので、
wx.Appのインスタンス作った後に、これだけでok

wx.NotificationMessage("title", "hello").Show()

通知領域を使う方法では、レジストリで表示のon/offが出来るんだけど、
(フルスクリーンでの作業中はoffにしておきたい場合等には、まとめて設定出来るので便利)
レジストリの設定に依存したくないなら、吹き出し型じゃないけど ToasterBox も通知用途に使える。
953デフォルトの名無しさん:2013/01/21(月) 16:40:37.18
くだすれPython(超初心者用) その16
http://toro.2ch.net/test/read.cgi/tech/1358753763/
954デフォルトの名無しさん:2013/01/21(月) 18:29:28.48
けど、ちょっと早くないか?
955デフォルトの名無しさん:2013/01/21(月) 19:53:57.60
入力の例1:list = [0,A,9,B]
入力の例2:list = [0,A,1,A,3,A,5,B,8,A,13,A,20,A]
if 'A' in list and 'B' in list:
if list.count('A') == 1:
A_num = list.index('A') - 1
B_num = list.index('B') - 1
if list[A_num] < list[B_num]:
list = list[A_num + 2:]
else:
pass
else:
ここから〜

[0,A,9,B]という入力があったら、A=0、B=9という風にアルファベットの
左側をアルファベットが持っている値とみなします。
複数のAと単体のBを比べて、Bより小さいAを全て消したリストにしたいのですが、
list.indexの参照は最初のひとつしかできないので、参照した部分を消していくやり方を思い浮かんだのですが、
もう少し、スマートにできる方法はないでしょうか?
何か、良い案があれば教えてください。
よろしくお願いします。
956デフォルトの名無しさん:2013/01/21(月) 20:35:18.51
ソートしてあるという前提がないならソートしてあるテストデータを書いちゃ駄目だよ
957デフォルトの名無しさん:2013/01/21(月) 20:36:30.85
listは組み込み型なので、その名前に代入するのは避けた方がいい
958デフォルトの名無しさん:2013/01/21(月) 20:55:47.20
また質問者の「スマートさ」の概念を予想して差し上げるお仕事か
http://ideone.com/dVOvBY

無駄にリスト生成してるとか言い出すんだろうな
まったく
959デフォルトの名無しさん:2013/01/21(月) 20:55:56.33
>>955
要素を2つずつ取り出すジェネレータpairwiseを作って
for value,keyin pairwise(data) として処理する.

ideone.com/pvhSaU
960デフォルトの名無しさん:2013/01/21(月) 20:59:37.20
組のデータは組にしておいた方が色々と捗るぞ
こんなふうに

list = [(0,A),(1,A),(3,A),(5,B),(8,A),(13,A),(20,A)]

汚いものから綺麗なものを取り出す仕事は泥臭いと決まってるんだ
情報論的に
961959:2013/01/21(月) 21:04:00.96
自己レス
959は、元の仕様のリストに戻す過程で、無駄にタプルをたくさん生成する事になるので、その点はスマートさ(?)に欠けるかな。
ジェネレータのまま処理するか、扱うデータ自体を(key,value)のタプルのリストにした方が良い。
962デフォルトの名無しさん:2013/01/21(月) 21:23:07.23
>>956-961
ありがとうございます。
扱うデータをタプルのリストにして行ってみようと思います。
963デフォルトの名無しさん:2013/01/21(月) 23:46:04.97
A = 3
B = 4
A = 5
print B

のようなことをした時に4と出力される時と、5と出力される時があります。
こういう違いはなぜでてくるのでしょうか?
964デフォルトの名無しさん:2013/01/22(火) 00:44:39.93
>>963
それが完全なソースだとしたら、5と表示される事は在りえないと思うけど。

どのように実行してる?他に何か余計なことしてない?
考えられる原因は、モジュールにしてて、キャッシュや他のパスのものが読み込まれてたとか。
エディタで編集してるのと端末で実行したスクリプトのファイルが違ってたとか、そういった類の勘違いによるミスしか思いつかない。

一度、クリーンな環境で実行してみよう。
965デフォルトの名無しさん:2013/01/22(火) 00:46:18.57
>>950
B = A とかやっちゃってんだろ
966デフォルトの名無しさん:2013/01/22(火) 01:16:24.71
申し訳ありません。間違えました。

A = 3
B = A
A = 5
print B

でした。この時に3と5の場合があります。
モジュールはnumpyを使っています。
967デフォルトの名無しさん:2013/01/22(火) 02:00:55.18
眼科池
968デフォルトの名無しさん:2013/01/22(火) 02:51:14.93
>>966
codepadやらideoneで再現してくれ
969デフォルトの名無しさん:2013/01/22(火) 03:59:55.40
>>968
http://ideone.com/vEHzQC
はじめから、ちゃんとしたコードを載せるべきでした。すいません。

出力結果は
[[ 0.69041153 0.81024034 0.40324572]
[ 0.84312668 0.81469053 0.2784516 ]]
[ 3.]
[[ 0.99601157 0.08629962 0.02265681]
[ 0.84312668 0.81469053 0.2784516 ]]
[ 3.]
となります。
970デフォルトの名無しさん:2013/01/22(火) 05:46:34.30
似たようなスレが同時に立つとまぎらわしいな
971デフォルトの名無しさん:2013/01/22(火) 08:48:46.53
つまりこういうことだろ。numpyは関係ない。
変数の指すオブジェクトを書き換えるのと、変数が指す先を変更するのとの違いだ。

A = [0]
B = A
AA = [0]
BB = AA

print(B)
print(BB)

A[0] = 1
AA = [1]

print(B)
print(BB)


出力:
[0]
[0]
[1]
[0]
972デフォルトの名無しさん:2013/01/22(火) 12:40:15.54
みんなのみんなのチンパイくんですか〜
973デフォルトの名無しさん:2013/01/22(火) 21:17:54.62
馬鹿しかいないなこのスレ
974デフォルトの名無しさん:2013/01/22(火) 21:25:33.37
馬鹿鹿以内那胡熨擦礼
975デフォルトの名無しさん:2013/01/22(火) 21:25:35.27
自己紹介乙
976デフォルトの名無しさん:2013/01/22(火) 21:34:46.39
自分が答えられないからって

恥ずかしい
977デフォルトの名無しさん:2013/01/22(火) 22:40:25.17
>>971
ありがとうございます。なんとなく理解出来ました。
今まで、「変数」と「オブジェクト」を区別できていませんでした。
978デフォルトの名無しさん:2013/01/22(火) 22:41:38.13
>>964
丁寧に教えていただいたのに、説明不足で申し訳ありませんでした。
979デフォルトの名無しさん:2013/01/22(火) 22:59:40.49
最初はそんなもの
980デフォルトの名無しさん:2013/01/23(水) 14:37:34.90
くだすれPython(超初心者用) その16
http://toro.2ch.net/test/read.cgi/tech/1358753763/
981デフォルトの名無しさん:2013/01/23(水) 19:18:01.61
リストのリストを検索して値があるか確認したいのですが、どうすればいいでしょうか?

入力データの例
[['他の値','他の値','A','他の値','他の値'],['他の値','他の値','B','他の値','他の値'],['他の値','他の値','D','他の値','他の値'],['他の値','他の値','G','他の値','他の値'],['他の値','他の値','S','他の値','他の値']]

DとSの両方の値がある場合に処理を行いたいのですが、どうすればよいでしょうか?
確認したい場所は全部同じです。ここでは2番目
982デフォルトの名無しさん:2013/01/23(水) 19:39:08.63
>>> sa = set('a')
>>> sabc = set('abc')
>>> sabc
{'a', 'b', 'c'}
>>> sa.issubset(sabc)
True
>>> sabc.issubset(sa)
False
>>> L = [['他の値','他の値','A','他の値','他の値'],['他の値','他の値','B','他の 値','他の値'],['他の値','他の値','D','他の値','他の値'],['他の値','他の値','G','他の値','他の値'],['他の値','他の値','S','他の値','他の値']]]]
>>> center = [x[2] for x in L]
>>> center
['A', 'B', 'D', 'G', 'S']
>>> set('DS').issubset(center)
True
>>> set('SD').issubset(center)
True
>>> 'SD'.issubset(center)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'issubset'
983デフォルトの名無しさん:2013/01/23(水) 19:40:33.27
いまいちわからん日本語だな
984デフォルトの名無しさん:2013/01/23(水) 19:45:46.59
エスパーランクの低いものには分かるまい
985デフォルトの名無しさん:2013/01/23(水) 19:48:15.95
>>> center = set([x[2] for x in L])
>>> center
{'A', 'S', 'B', 'D', 'G'}
>>> center.issuperset('DS')
True
986デフォルトの名無しさん:2013/01/23(水) 19:53:49.61
わからないならレスしないで下さい。うざいだけです。
987デフォルトの名無しさん:2013/01/23(水) 19:55:46.32
>>982,985
ありがとうございます。

Trueの後の処理が、LのリストからDの要素が入っているリストを削除するのですが、
もう一回Lのリストのなかを検索して消せばいいですよね?
988デフォルトの名無しさん:2013/01/23(水) 20:06:33.37
>>987
>>> for index, L1 in enumerate(L):
... if 'D' in L1:
... break
...
>>> index
2
>>> del L[index]
>>> L
[['他の値', '他の値', 'A', '他の値', '他の値'], ['他の値', '他の値', 'B', '他の 値', '他の値'], ['他の値', '他の値', 'G', '他の値', '他の値'], ['他の値', '他の値', 'S', '他の値', '他の値']]値', 'S', '他の値', '他の値']]
>>> len(L)
4
989デフォルトの名無しさん:2013/01/23(水) 20:09:04.50
さっきから上手くコピペできてない。。。
うーん、、、ごめんねー。
990デフォルトの名無しさん:2013/01/23(水) 21:47:42.23
>>988
ありがとうございます。
991デフォルトの名無しさん:2013/01/23(水) 22:18:22.54
... if L1[2] == 'D':

inを使うのではなく、こうすべきだったという独り言。
992デフォルトの名無しさん:2013/01/23(水) 22:46:36.30
list.index("a")を使うとaの最初のインデックスを取得することができますが、
listの中にaが複数個含まれているときに、aの最後のインデックスを取得するにはどうすればいいですか?

やりたいことはaの最後のインデックスを取得してそれ以降の値を変換したいです。
993デフォルトの名無しさん:2013/01/23(水) 22:50:25.79
rindexあんだろって言いそうになった
そうかrindexは文字列だけだったな
994デフォルトの名無しさん:2013/01/23(水) 23:00:46.36
>>> L = ['a', 'A', 'B', 'c', 'a', 'a', 'Z']
>>> s = ''.join(L)
>>> s.rindex('a')
5
>>> for index, s in enumerate(L):
... if s == 'a':
... index_a = index
...
>>> index_a
5
995デフォルトの名無しさん:2013/01/23(水) 23:07:14.33
破壊的だから好きじゃないけど、これも案としてどうぞ
>>> L.reverse()
>>> L
['Z', 'a', 'a', 'c', 'B', 'A', 'a']
>>> (len(L) - 1) - L.index('a')
5
996デフォルトの名無しさん:2013/01/23(水) 23:22:04.58
>>994,995
ありがとうございます。
997デフォルトの名無しさん:2013/01/23(水) 23:24:39.43
スレも大鳥
998デフォルトの名無しさん:2013/01/24(木) 17:28:24.87
コマンドプロンプトで値を与えると、リストのリストのデータができあがります。
いろいろな値をコマンドプロンプトで与えてそれを一つのテキストファイルに出力するには、どうすればよいのですか?

リストのリストの出力の例
例1[["みかん"]["50円"][C][D]],["りんご"]["100円"][G][J]],......]
例2[["ぶどう"]["400円"][C][D]],["りんご"]["100円"][G][J]],......]

欲しいテキストファイル
みかん,50円,C,D
りんご.......
.......
例1の終わり

ぶどう,50円,C,D
......
.......
例2の終わり

3つめの始まり
999デフォルトの名無しさん:2013/01/24(木) 17:29:08.56
 
        、.  _ _  .i  ,.
         ヽ`//| /i.//
          ヽ. '| ト./ /
           i∧/  /
           / ̄ ̄
          /
         /
        /
      ヘ⌒ヽフ
     (・ω・ )<世界平和を祈るお 
     O┬O )
     ◎┴し'-◎ ≡キコキコキコ
1000デフォルトの名無しさん:2013/01/24(木) 17:36:13.57
1000なら今年中にPython2消滅。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。