2 :
デフォルトの名無しさん :2012/10/20(土) 16:35:06.20
|....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
6 :
デフォルトの名無しさん :2012/10/21(日) 07:49:08.28
いちもつ
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
8 :
デフォルトの名無しさん :2012/10/21(日) 08:06:49.23
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6 1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1 9JpzFQBRXmeP
おまわりさんこのひとです
これってまさか BASE64でエンコードされた遠隔操作命令…?
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 なんぞこれ?
zlib.decompress してみよう
# 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'))
前スレ1000見て笑いが抑えられなかった、で変な目で見られた…roz
質問です あーでもないこーでもないと書いてはエラーで怒られての繰り返しする中で IDLEで試行錯誤>使える部分をテキストエディタにコピペ>○○.pyで保存とやってます iptyhonとかbpythonとか触ってみると色々補完してくれてとても便利なんですが この辺のファイルに落としこむ作業は簡単なんでしょうか? 自分が見た限り%logstartとか最初から清書できる感じじゃないと無理なような。。。
解読班
>>15 セッションまるごと保存して後から必要な箇所だけ切り貼りするのではだめなの?
だめならemacsでM-x termからpython起動してあれこれ試して
保存したい箇所ができたら選択してwrite-regionとか
18 :
デフォルトの名無しさん :2012/10/26(金) 00:25:56.63
試行錯誤で作られたプログラムなんて使いたくないな
どなたも切り貼りしてるのですか ありがとうございました
試行錯誤して使える部分を切り貼りされたプログラムなんて使いたくないな
emacs/python-mode C-c C-r で選択範囲を interactive shell に送る 切り貼りするならwxPython付属のPySlicesが便利かもしれない インタラクティブにコードを実行できる環境で,一旦間違ったコードも編集/再評価が出来る, コピペの際 選択範囲に>>>や...を含まない.
22 :
デフォルトの名無しさん :2012/10/26(金) 14:10:57.29
Python3 系で CLOS の (class-direct-superclasses ...) みたいな, 動的に親クラスを調べる方法ってありませんか?
super().__class__
>>23 ありがと
でも, ちょっと違う.
(class-direct-superclasses (find-class <クラスネーム>))
の様な感じで, 指定したクラスの親リストが欲しいんです
# 説明不足で申し訳ない
SomeClass.__bases__
self.__class__.__bases__
>>27 使ってるテキストエディタ(メモ帳とか)の名前を言えば誰かが具体的な方法を教えてくれるかも
作業ディレクトリ(カレントディレクトリ)がよくわかってなかったら
コマンドプロンプト 作業ディレクトリ cd dir あたりについてぐぐるといい
回答とは関係ないけどWindowsのPythonスクリプトでshebang書いてあるのを
初めて見たので色々ぐぐってたら、こんなのがあるのを知った
http://www.python.org/dev/peps/pep-0397/
メモ帳で SJIS で保存して python -c "open('outfile.py', 'wb').write(open('infile.py', 'rb').read().decode('cp932').encode('utf-8'))" を実行すればいいよ
>27-28 >1行目ではPythonのインタープリタへのパスを記述します。 >今回のような、単独でのモジュール起動では記述が無くても大丈夫ですが、 >別のモジュールから今回作成したモジュールをimport(取り込み)したいというような時には、 >モジュール内部にインタープリタへのパスを記述しておきます。 必要が無くても記述する癖をつけておきましょう。 そのサイトに書いてある内容デタラメだから参考にしない方が良いよ。
ありがとうございます。テキストエディタはメモ帳です。 ググってみたところカレントディレクトリは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には適応してないのでしょうか。
>>29 ありがとうございます。SJISについて調べてみます。
>>30 初心者の中の初心者ですのでサイトえり好みできないんです(泣
>>32 > 初心者の中の初心者ですのでサイトえり好みできないんです(泣
んなこたないだろ。本人の気持ち次第。
Dive into python と公式ドキュメントのチュートリアル見れ。
そのサイトは参考にしない方が良いよ
>初心者の中の初心者ですのでサイトえり好みできないんです(泣 「選り好み出来ない」の意味を取り違えてる。 初心者が間違ったサイトを参考に勉強するとかえって悲惨な事態になるだけ。 自分で初心者だと思ってるなら素直に先輩の言うことを聞いた方が良い。
始めたばかりの初心者にDive into Pythonや公式嫁ってのは頭煮えてると思うよ
エディタと文字コードについて触れずに初心者向けを標榜するのも煮えてるわな 煮えてない所を頼む
みんなのPython買うのが手っ取り早い
とりあえず今後のことを考えるならメモ帳を止めろといえよてめーら
メモ帳でも問題ない 問題になるのは能力以上のことをやろうとしたとき
42 :
27 :2012/10/27(土) 17:29:43.80
>>29 Cドライブ直下にpython27というカレントディレクトリがあって、
その中に読み込みたいファイルtest02.pyがある場合そのコードのどこを変えればいいんでしょうか?
Dive into Pythonを見てきましたが解らない言葉が多すぎて手に負えませんでした。
簡単な実践から入れるサイトがそこしかないので、上達できたら他のファイルを見て修正していきたいと思います。
>>39 そこはまず飛ばしても大丈夫ですかね?ここで詰まってばかりも入れないので次に進んでみます。
なんでそんな糞サイトに固執するんだ? ステマか?
まずはコマンドプロンプトとWindowsのファイルシステムについて学んだらどうですか
本当に申し訳ありません。sjisについてもう少し調べてみた所 メモ帳のテキスト文字がANSIになっていた事が解り、utfにしてみたら解決してしまいました。 回答して頂いた皆さんありがとうございました。
いえいえ
Windows の shebang は BOM 付いてても問題起こさないのか すげー(棒)
(あのサイトは、「初心者用じゃねぇよ」ってちゃんと書いてあるじゃん...)
中級者用でも玄人用でもないぞ。間違いだらけだから
具体的には?
例えば
>>30 で指摘されてるけどshebangがなきゃだめなモジュールなんてものはない
shebang書いとくとコマンドとして実行できて便利ってだけ
単独でのモジュール起動の場合にshebangつけずに
importされるモジュールの場合はshebangつけろっていうのはどう考えても変
あと自分が見たときはstr.splitの返り値がタプルとか書いてあった
一応追記。スクリプトをコマンドにするなら実行権限も必要(Linuxの場合)
>>51 そんなむちゃくちゃな記述どこにもないぞ。
俺はDive Into Pythonの話だと思ってたが、違うサイトの話だったのか?
ああ、Python-ismとかいうサイトの話だったんですね。 関係各位の皆様、申しわけありません。
各位って誰だよ死ね
角煮
角電池
raise StopIteration
超殺伐
エイサーじゃねぇのか
今見たら治ってた 対応早すぎわろす 絶対2ちゃん見てる
なおってねぇぞ
影でこそこそ言うのも陰湿だから、 気付いた問題点をまとめて、お問い合わせフォームに送りつけとくわ。
と思ったけど、問題点が多すぎるな...
20分も待たずに挫折するとは
68 :
65 :2012/10/28(日) 05:45:46.52
とりあえず、shebangについてのデタラメと、文字列の項の問題点は指摘しておいた。 あとは知らん。
or: N
頑張ってチュートリアルサイト作ろうかな
飽きるで
72 :
デフォルトの名無しさん :2012/10/29(月) 17:55:57.33
みんなのパイチンくんとチンパイくん
チュートリアルは有難い そして俺はどのGUIを選べばいいんだー やっぱTKINTERすか? 色々あってわけわかめ
>>74 あらあらどもです・・・ってどんだけあんだーw
>>75 Python3に対応してるとなると選択肢が狭まる。
"tkinter" -> 標準ライブラリ。手軽だが貧弱。 "PyQt4" -> Qtは商用アプリでもよく使われている。機能も豪華。(ただしGPL) "PySide" -> PyQt4互換のLGPL版バインディング(新参なので若干バグあり) "wxPython" -> 知らん "pyGTK" -> 事実上Linux専用。GTKアプリを作りたいなら。
wxPythonはそれなりにサンプルが揃ってたんで やりやすかったが、未だにPython3未対応だな。
78がすげー分かりやすい… 79の補足で埋まったし しかし一長一短激しいのなー
>79 Py3にこだわらなければwx最強だよ pyQt4/PySideもありだけど将来不安でいまいち没頭しにくい その他は糞
wxしかやってないけどめちゃ簡単だったよ マウス操作で配置出来るエディタがあるし、xrc書き出しでGUIとスクリプトを分離して使い回しも便利 flashのUIコンポーネント並みにお手軽だった
個人的な感想。 UIデザイナに関しては、QtもwxWidgetsも同じ。 APIの設計とイベントハンドリングはQtのほうが綺麗な印象。 あとWebKitが標準で使えるのが便利だった。 PyQt/PySideの将来については確かに不安。
PyQtはQtがLGPLになっても依然としてGPLなのでライセンスが売れて欲しいだけである 見限ってよい
そりゃライセンスで飯食ってる会社だからなー。
>>83-84 まさにこの思考プロセスでpysideがベターという結論に到達した
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
>>89 ビルド環境がない場合は、インストーラの有無も評価項目になるのかな
Downloads -> Binaries 各プラットフォームにリンクがあるけど
osx は 3対応バイナリ見当たらない
win は 3対応はあるものの、64bits版が not available といった状況
そもそもQtが64bitに正式対応してないと思う
俺PyQt派だけど、自力でビルドしようとすると Qtのビルドが超面倒臭くて心折れる。
93 :
デフォルトの名無しさん :2012/10/31(水) 00:27:10.64
PySide はバグ落ち着いてるよー いいよいいよー ただ RPC 周りが PyQt に比べてちっと遅い 他はなんの問題もない Qt5 対応どうなんだろうなー Nokia 売っぱらっちまったから PySide に今までみたいに力入れてくれるかなー
>>94 そもそも日本語の本自体が少ないんだけど、この本はどうだろう?
http://www.amazon.co.jp/dp/4894714019 ある程度基礎が分かったら、さっさと自分の興味のある方面で、何かを作ったり、
優秀な人が書いたコードをパクったり(参考にしたり)するのが
一番勉強になると思う。
自分は何をしてみたいのか。Web開発、GUIアプリ、自動化スクリプト、
アルゴリズムの勉強、ネットワーク、数値計算、etc.
あとできれば英語を読んだほうがいいです。無理のない範囲で。
アルゴリズムとかをちゃんと勉強すると、日本のIT業界に耐えられなくなりますよ(意味深)
>94 あなたが買って読めない場所を質問してくれれば 翻訳してあげてもいいですよ
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | | ,,ノ(、_, )ヽ、,, | | ,;‐=‐ヽ .:::::| \ `ニニ´ .:::/ NO THANK YOU /`ー‐--‐‐―´´\ .n:n nn nf||| | | |^!n f|.| | ∩ ∩|..| |.| |: :: ! } {! ::: :| ヽ ,イ ヽ :イ
102 :
デフォルトの名無しさん :2012/10/31(水) 08:22:18.33
うちのブラちゃんでは >94 と >100 は同一人物と判定されているんだが 頼んでおいて断るとはこれ如何に
いや、誰も頼んでないだろ。w
セクションだけ立てて飽きた。 (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) とか?
> # -*- codecs: utf-8 -*- いきなり間違えてるYO
みんな日本語で苦労してるんですね。わかります。
# coding: rot13
Rubyのほうが世界的に使われてる。
つれますか
正しい日本語の扱い方 1. Python2.xのアンインストール 2. Python3.xのインストール
python3は文字コード周りがまだ枯れてないから却下
str と u"" の違いさえきっちり判ってれば py2 でほとんど問題無いんですが
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() とすると、各行番号と列番号に異なったサイズのキーが配置されて キーとキーの間に隙間が出来てしまうため、実際のキーボードのようなレイアウトになりません 現実のキーボードのようにキーを隙間なく配置したいのですが、何か良い方法はないでしょうか
>>113 .grid(sticky="news", ...でとりあえず隙間は埋められます
但し、gridだと格子状になるので、実際のキーボードのような行毎にずらすレイアウトにするなら
gridに 例えばcolumspan=k_lenと指定したり、gridではなく pack を入子にする等もう一工夫必要です
>>114 columnspan=k_lenを指定したところ、最後の行以外は現実のキーボードと同じレイアウトになりました
なんとか後は工夫してどうにかできそうです、本当にありがとうございました
>>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 さんにも試したこと書いて欲しい。。。
>>116 >>115 です
最後の行以外は現実の同じキーボードとレイアウトになったと書きましたが
よく見たら一列目のTab,CapsLock,Shiftが二列目以降のキーに重なって半分見えない状態になっていました
隙間がなくなっていることに感動して見落としていたようです
なので自分もまだ工夫する方法を考えている状態です
columnspan=k_len とする場合は column を前のspanの分進めないといけないです ついでに、gridで実際のキーボードみたいに半分ずらすなら、 通常のキーはcolumspan=2にして columnは各行で奇数,偶数,奇数となるように配置します
>>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
ちょっと改造した。私的には満足できたので消えます。
アリガトウ ( ´∀`)ノ
>>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
122 :
デフォルトの名無しさん :2012/11/01(木) 02:07:14.82
みんなのみんなのパイチンくんですよ〜
おっぱいそーん
pass
馬鹿には無理
初めてPythonでオブジェクト指向をやってみたのですが これを実行したところ、メッセージが表示されてしまいました。 クラスをどこからも継承したり呼んだりしていないのに 単体で動いてしまうのって正常ですか? class Fuga(): print("Fuga submitted!")
128 :
デフォルトの名無しさん :2012/11/04(日) 10:24:06.63
>>126 そこで実行されないとメンバ変数宣言出来ないじゃん
他の言語だとその位置には宣言しか置けなくなってるから意識したことないんだろう でも副作用のある宣言をすればちゃんと実行されているはずだぜ
PILを使って半透過PNGをTkinterのウィジェットに貼り付け Topとウィジェットの背景色を指定しその色を透過するようにしました Topの背景は透過されたのですが 画像の半透過の部分が透けません どうしたらよいでしょうか?
>>131 >Topとウィジェットの背景色を指定し
背景色を指定ってのがよくわからない。これはどうやってる?
色指定なくても top.wm_attributes("-alpha", 0.8) で全部透過になるよ
もしかして RGBA 形式でない透過のpng だったりしないかな?
>>132 背景色はconfigure(bg="color")で指定してます
RGBA形式の透過PNGであるのは確認しました
完全な透過指定の部分は透過されてるんですが
半透過の部分は半透過されてるようなんですがどうも透過されてるはずの
ウィジェットの背景色が画像の色に加算されたままになってるようです
>>132 あとalphaで指定すると透過でないところが透過されるので使えないです
>半透過の部分は半透過されてるようなんですがどうも透過されてるはずの >ウィジェットの背景色が画像の色に加算されたままになってるようです 半透過ならそれで正常
そうですか・・・ありがとうございました
137 :
126 :2012/11/04(日) 22:10:27.39
ありがとうございました。 もう一つ質問ですが、Pythonのクラスが メンバに対する明示的なアクセス制御機構 (Javaで言うprivate指定など)を持たず、結果として オブジェクト指向の三大要素の一つである隠蔽が欠けているのは 型のない言語であるがゆえのやむを得ない仕様でしょうか? それとも別の意図がある?
underscore で十分だよね。みんなちゃんと守ってくれるよね。 っていう紳士協定を導入してるから。 実際には綺麗なC言語実装になるからじゃないの?
>>137 class Class(object):#2系でobject継承すると新スタイルクラス(3と同じ挙動)
#ここも普通に実行されるがクラススコープ
_member = 1#非公開メンバ(列挙されないだけでアクセスは出来る)
__member = 2#非公開+難読化(外部からは_Class__memberという名前になる)
基本的にはこんな感じであとはデスクリプタとかでC#のようなプロパティも出来る
詳細は言語リファレンスのデータモデルなんかを読んでください
スタンスについては
デバックの際にはアクセスできることが有効であるし
自由にアクセスできるからといって
アクセスするプログラムを作らなければならないわけではない
アクセスしないようにプログラムを作ればいい
みんな大人なんだから
とかなんとか
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] より早い方法ってあります? なんども呼ぶのでなるべく早くしたいのですが
import numpy l = numpy.array([(1,2),(3,4),(5,6)]) a = l[:,0] b = l[:,1]
実際privateでもリフレクションやvtblを弄くってアクセスすることが可能なので 確実なメリットって言うと、間違って呼び出した時にエラーにしてくれるくらいしかないのよね
l[0::2] l[1::2]
>>145 >「PTVS」v1.5では「Python 3.3」へ対応したほか
>「Python 3.3」
はい解散
どういう意味やねん
馬鹿には無理
pass
PythonをVisual Studioで書こうとは思えんわ
あんまり使ったことないけど、コード保管がとてもいい感じだよVS 重いイメージあって敬遠してたけど、VS2012入れてみたらそうでもなさそう。 結局その前に評価したPyCharmに落ち着いたけど。 PyCharm試す前にに触っていたらVSにしてたかもしれない それ以外はわからない
154 :
デフォルトの名無しさん :2012/11/05(月) 19:23:52.43
UTF-8がBOM付しか扱えない問題は解決されてるんだろうか そもそも解決する気があるんだろうか SJISまたはBOM付でしか書けないなら それだけでVSは失格
なんで SJIS じゃだめなん?
156 :
忍法帖【Lv=40,xxxPT】(1+0:5) :2012/11/05(月) 19:34:05.02
PythonでLISTだけを含むファイルを外部に作って、メインのプログラムから そのリストを参照したいんですが、どうやれば出来ますか? 親切な方、教えてくださいm(_ _)m
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
あ、なんだか出来たみたいです。ありがとうございます!
160 :
157 :2012/11/05(月) 20:19:41.82
本当に、「参照」だけ目的なら、listではなく、 tup = (1, 2, 3, 4) とした方が良いかもね。
実対称行列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」というものがあるけどこれ何? 初期状態では無効になっているみたい
馬鹿には無理
Vapoursynthの話題ってここでいいのかな? の人か
>>162 環境変数PATHにpython.exeへのパスを追加する
追加しとくとコマンドプロンプトからpython.exeを起動するときに
C:\からのフルパスで入力せずにpython.exeだけで起動できるようになる
よくわかんなかったら有効にしておいてもたぶん大丈夫
Pythonより英語やれよ
Python 3.3.0のせいで前に入れていたpython2が動かなくなりました><
>>167 windows?
バージョン番号付きでshebang 書いてれば、py (windows板のランチャ) が振り分けてくれるよ
#!/usr/bin/env python <- これだとバージョンが曖昧になるので
#!/usr/bin/env python2.7
ありがとうございます!
>>161 結果が複素数になるようなデータを与えたからではないのかな?って疑問なのだけど
具体的なコードと期待する結果を提示してみては?
windowsでおすすめのpythonエディタを教えてください 小規模なwindowsアプリぐらいしか作らないのであまり複雑じゃないものがいいです python2.7とwxpythonを使う予定です
IDLE EMACS VisualStudio Eclipse netbeans pycharm windows上で作るなら↑が代表的 これ以外は微妙。 簡単なのはテキストエディタでがんばる
>>171 wxPythonに付いてくるEditra
日本語入力がインラインじゃないのと,エディタにしては起動が遅い(IDEよりは手軽感ある)
補完時に時々クラッシュする点がマイナス評価だけど、pluginで簡単なIDE並の機能を追加できる
同じwxPythonでpluginを作れるのが利点
>>172-173 レスありがとうございます
以前はpyscripterを使っていました
おすすめしていただいたものを一通り使ってみて決めたいと思います
ありがとうございました
175 :
デフォルトの名無しさん :2012/11/08(木) 11:07:38.47
みんなのみんなのパイチンくんですよ〜
おっぱい
yabaiyo indent source 貼れないよ
ideoneとか使いたまえ 正直ここに貼られても邪魔
お前らPythonで学ぶプログラム作法ちゃんと読んだの?
いいえ全く
少しだけ…
pycharmいい感じだけどマウスホイールが効かないっす
て す と
184 :
デフォルトの名無しさん :2012/11/11(日) 16:52:02.70
みんなのみんなのパイチンくんとチンパイくんですよ〜
その手のレス削除依頼出されてるよ
環境変数の設定でつまずいてる 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 と入力してもうまくいかない どなたかわかりますか
馬鹿には無理
環境変数の設定壊しそうで危なっかしいなw
セミコロン2つ並んでてその間には何があったのだろうと気になってる
>>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 は「うまくいかない」とだけ言っているので
何がどううまくいっていないのかが全く伝わらない
釣り認定されるレベル
mecabのpythonバインディングって3.2以降には対応していないのでしょうか? 内部で使ってるSWIGというのが3.2以降では動かなくなったとかいう情報があるのですが
>>191 ,
>>192 ある事情で、pythonを自分一人で一から勉強することになりました。
何がわかっていないのか、自分でもわからないレベルです
気になったところ
尻に \ がついてるけど、意図して付けてる?
;; が連続しているけど、意図しているもの?
これについて、PCは自作のwindows7 64bitでpythonをインストールする前にリカバリーをしています
最後のc:\Python27以外は何もいじってません
なんとかインストールまでこぎつけないかと思ってます
- セミコロンは通常パスの区切りごとに1つ - c:\Python27 は存在するか? - 存在したとして c:\Python27\python.exe は存在するか?
Pythonの質問というより コマンド・プロンプトの質問ですね。
>>194 そっちはどうでも良くて、こっちの方が重要でした
Python2.7を以下にinstallしてるんだろうけど、きちんと存在している?
c:\Python27
↑のbin以下にpython.exeが存在するんじゃない?
python.exeのプロパティからpathをきちんと調べてみて。
最初は付属のIDLE使えばいいからパスの設定なんてイラン。
200 :
デフォルトの名無しさん :2012/11/12(月) 20:15:31.14
>>198 ありがとうございます
インストールされている場所は
C:\Python27になってます
一度削除してからインストしたほうがいいでしょうか?
\
pass
C:\Python27\python.exe って打って実行できるか試してみたら? 多分出来ないと思う python.exeをdrag & dropでprompt上に持っていけば、 画面にpathを表示してくれたように思う。 PATH\python.exe 最後にpython.exeって付けても実行できるpathを prompt上で頑張って見つけるんだ。 それが環境変数の値だ。健闘を祈る。
質問者がコマンドプロンプト使ってるかも怪しいんだが
いたずらに回答する前に
>>196 から確認すべきだと思うわ
>なんとかインストールまでこぎつけないかと思ってます って書いてるし、何でつまってるか分からないよね
>尻に \ がついてるけど、意図して付けてる? >;; が連続しているけど、意図しているもの? これについては質問者も回答者も既に解決済み?
>>206 質問者としては、ただ気になっただけ。
別に答えてもらわなくても問題解決に支障はないと思っておりますが。
;; は影響あったりするんでしょうか?
一応、;;は直しておいて試してよ
>>200 後、削除せずに試して欲しいな。
便乗で、windowsの人に質問 c:\Windows\py.exe ってない? PythonにPATH通ってなくても、pyコマンド使えないかな? win32/vistaで、PATH設定なしで py コマンドが使えてた記憶があるのだけど Python 26,27,32,33 で 自前ビルド/公式/ActivePython 混在環境で pipで入れたのかどうか、インストール経路が思い出せない。
馬鹿には無理
>インストール経路が思い出せない Vista以降で何がどのファイルをインストールしたか常時監視&管理するツール無かったっけ?
C の printf("%s\n", __func__) 相当のことってどうやったらできる?
214 :
デフォルトの名無しさん :2012/11/13(火) 11:45:12.83
tracebackは色々判って便利だね
ちょっちゅね
>>209 ,211
OS標準でなかったらその手のツールは使ってないので解らない
とりあえず、ファイルのタイムスタンプから3.3と判断出来ました
もしかしてpipで入れたかな?と思ってたのは、思い違いだったようです
レスthx
pyscripterが起動できないのです osはwindows7で pythonは3.3の32bit版を使用 pyscripterは64bit版ですとpython could not be properly initializedで動かず、 32bit版でも access violation error, no python engine errorで動きませんでした 他にCなどをインストールする必要があるのでしょうか ランタイムなどは一切入れていませんが…
python2.7を入れて上手く動作するか試してみたらどうだろう? 動くんなら、python3.3が悪いんだし、動かないんならwindows版に問題ありそうだし。
うちは動いてる manifestじゃ無かろうもん
標準マニュアルにあるnamedtupleの説明で 「typename という名前の tuple の新しいサブクラスを返します」 ってあるんですが、 そもそもクラスを返すっていう概念がよくわかりません。 値やインスタンスを返すというのなら何となくわかるのですが。 簡単なコードなんか示してもらえると助かります。
レスありがとうございます 3対応の参考書を買ってきて始めてしまったので、出来れば3以降でやりたいのです 今試しにvirtualPCに入れたXPに32bit版を入れたらpyscriptが動きました… これだけの為にわざわざvirtualPCを立ち上げるのも面倒だし、どうしようか迷っています…
>>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コードなのでソースを見ると良い
クラス自体を理解出来てないと見た。 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())
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())
>>225 >>226 シェー!!
∧_⊂ヽ
∧⊂ヽ (´∀`)ノ
(゚Д゚)ノ (⊃ ノ
(⊃ ノ ヽ__二)
ヽニ⊃ (_)
∪
>>224 ありがとうございます。ソースを見てみました。
tupleを継承したサブクラスを生成するコードを
文字列として定義し、それをexecといふ関数にぶち込んで
その結果をreturn文で返している、というふうに理解しました。
>>225 おっしゃるとおり、あんまりわかっていません。
クラスに限らず、オブジェクトをreturnで返すということは
内部的にはオブジェクトの種類とアドレス(ポインタ?)を返すという
ことなんでしょうか。だからメモリに作るものなら何でも返せると。
フ゜ッ ∩ ∧_∧ あっそ ℃ゞノ ヽ(・ω・ ) ⊂´_____∩
内部的には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;
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; }
>>230 ヒントありがとうございます。
オブジェクトの構造に種類も入っているので
アドレスのみ返せば足りるということですね。
Pythonの中で、クラスはオブジェクトの一種に過ぎない
というのがよくわかりました。
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の基盤上にきちんと配置することができるでしょうか。
すみません、上記のコードの変数名に一部間違いがありました ☓ n_cols ◯n_col
>> 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を消してもう一度実行しても同じ日時のファイルができあがります。
思ったよりむずかった。 (#^ω^)ビキビキ 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()
続き (#^ω^)ビキビキ 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()
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()
>>237-239 まさか、こんな短時間で解いていただけるとは・・・
これでようやくゲームパートの作成に取り掛かれます
本当にありがとうございました
「# ここで正規化」 ↑より下の部分は丁寧に書いたつもりなので、 きちんと意味を理解してね。
(#^ω^)ビキビキ 色々、間違ってるお。。。 ○ 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))
243 :
236 :2012/11/17(土) 19:35:25.32
こんにちわ
はいこんにちは
winは使わないよ。ごめんね。 もう夜遅いから寝なさい。 明日win7があれば試してみるよ。 ごめんね。ごめんね。
246 :
236 :2012/11/17(土) 20:13:15.98
はい
いいえこんにちは
開発環境はPyScripterとPycharmはどちらが使いやすいでしょうか?
>>248 あまり高度なことをしてない俺の意見で良ければ
pycharmは機能が豊富でコード補完も便利で使いやすい、ただしマウスホイールでスクロールが出来ない
pyscripterはシンプルでプロジェクト管理やコードの色分けが出来ればいいな、ぐらいの機能
eric4
printにくっつけて使うことの多いformat関数だけど formatと毎回6文字もタイプするのが面倒だし インデントの深いところで使うと行末が右奥まで行くか 次行に折り返しとなって見苦しい。 Cみたいにtypedefでftとかに短縮して使う方法はありませんか? 割と使用頻度の高いものだけに切実です。
関数をオーバーライドすればいいじゃない
つ >>> 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,
ありがとうございます。感動しました! これがオブジェクト指向言語の 真骨頂ってヤツですかね。 自分で自分を改造・拡張できる。
えっ、もしかして下の方でやっちゃった? makeしたの?からかってやるつもりでpatch貼ったのに・・・ ナンカ、マケタキブン(#^ω^)ビキビキ
>>255 PythonのCソースコードを検索して
formatという文字を片っ端からftに修正・コンパイル
しなければならないのかと覚悟していました。
こんな簡単にできるとは…
聞くは一時の恥聞かぬは一生の恥とはこのこと。
257 :
236 :2012/11/18(日) 15:16:26.52
おはようございます。
わっわわわわわ
多分Pythonとは関係ない。
win7のファイルの取り扱いが関係していると思った。
で、「ファイルの作成日時」「ファイルの更新日時」
それぞれを調べてみてごらん。
@orig.txt を作成
A10分ほど待つ
B
>>236 の方法でcopied.txtを作成する。
Corig.txt, copied.txtの作成日時、更新日時を確認する。
多分、Cの時にcopied.txtの作成日時が、
@の時間と一致するんではないかと。
自由に出来るwin環境がないから試せなかった。
>>258 ABの間に
orig.txtの中身を適当に修正。
を追加して。
>>236 今ちゃんと読んで気づいたんだけど、
>>236 の状態で、
bb = open("bb.jpg", "rb")
b = open("b.jpg", "wb")
b.write(bb.read())
b.close() ←入れ替え
bb.close() ←入れ替え
↑の順序でも試してみてよ。
open(), close()の対称性が、ふと気になった。
>>254 >>253 の上段はオブジェクト指向言語とは関係ないと思う。
あなたが欲していた情報の下段は、
掻きたいところに手が届く、オープンソースの醍醐味かな?
西新宿のバスターミナルでバスから降りつつ 「駅どこ?」と言い始めた若い女性グループに ここから一番近いのは営団丸の内線の西新宿駅だけど 次に近いのは都営大江戸線都庁前駅で あと西武線新宿駅とか都営新宿線新宿駅もあるし 京王線新宿駅小田急線新宿駅 最近出来た副都心線新宿三丁目駅 と話してる間に 相手が居なくなってしまっていたときの敗北感
>>261 str.formatが変数に代入できるというだけで
私にとってはオブジェクト指向なのです。
あと、下段は何をしているのか意味がわかりませんでした。
満足してるなら良かろう
>>263 よく分からんけど、上段があなたにとってのオブジェクト指向なら、
世間のオブジェクト指向とあなたのオブジェクト指向は異なるってこった。
下段についてはpatch, diffで検索するよろし
pass
>>263 関数を変数に代入してるから、関数型になるね。
ただオブジェクト指向とは矛盾しない。
>>str.formatが変数に代入できるというだけで >>私にとってはオブジェクト指向なのです。 ぷっ
関数が第一級オブジェクト と言った方が適切かも ビルトイン関数のformatじゃなくて、文字列のformatメソッド使うようにすれば .f で補完候補出してくれないかな?
doctestを使ってみているのですが、doctestの途中にデバッグプリントのようなものを出力することはできないでしょうか? printを使ってデバッグプリントを吐き出していると、その出力までdoctestの比較値にされてしまうため、doctestに比較されない出力方法はないかと思っております。
stderrに吐けばキャプチャされないとか書いてあるけど、それで足りる?
>>262 コピペかと思ったらオリジナル?
しかし営団とは古い!
しょうもない質問かと思いますが、どうしてdict.update()の戻り値はnoneになるのでしょうか? 結合したディクショナリを返したほうが使い勝手がいいかと思うのですが。
>>274 listのsortやreverseと一緒でしょ
>副作用があることをユーザに思い出させるために、これらの操作は並べ替えまたは反転されたリストを返しません。
listのsort()の戻り値もNoneです
>>275 実際にはそういうのって副作用があることを想起させるやり方としてはいまさんくらいだと
思うんだよね。
そういうの忘れがちな初心者(俺)がガーッとコード書いて動かしてみて、「あれ?」ってデバッグ
すると、「あーこれか、めんどくさ」っていうくらいの印象しか無い。
いまさんだと言うならいまいちいまにを挙げるべきだろう 個人的にはL.sorted()って書いてあれーってなったりする
> ガーッとコード書いて動かしてみて 初心者を免罪符にやることではありません。 初心者であれば小さな単位で書いて動かしましょう。
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になってしまいます。 ミュータブルな値の関係かと思うのですが、そのあたりがよくわかっていないためか悩んでおります。
281 :
280 :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になる理由もわかりません。 どうか解説いただけないでしょうか?
new.append( [ i, { "bam": tmp[:]}])
教えて欲しかったらインデント直せ
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
プログラミング未経験でも学べるPythonサイト教えてください
>>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と出来るか出来ないかが違う。
ここまで書いてめんどくさくなったので今日はここまでで寝る。詳しくは明日書く。
>>286 ありがとうございます
つまり3がおすすめということでしょうか?
2.7をダウンロードしたばっかりなんですが
今どっちが人口多いですか?そしてこれから
XPに3.3をインストールしてパイソンシェルのウィンドウを動かすとカクカクするんだけどおれだけ?
>>280 tmp = rdict は辞書のコピーではなく参照なので、
tmpへの変更がrdictにも反映されます。
期待通りのbazの値を得るには、コピーする
tmp = rdict.copy()
>>288 2.7でいいよ
2から3にコンバートも出来るし基本は変わらない
多分プログラミング以前の問題だと思いますが、ここで質問させてください 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 これだとちゃんとエディタが起動してくれます
>>293 d:\python33\にはパスを通してあるけど
d:\pythonProject\にはパスを通してないんでしょ?
>>293 pythonはwindowsのパスなんて理解しないよ
>>293 3.3なら py test.py ではどう?
自分のとこではc:\Windowsに入ってたので環境変数設定は不要だった
複数のバージョンが入ってる場合は、shbangを一行目に書くか
py -3.3 test.py で実行
>sys.path.appendで追加してsys.pathにも表示されています
環境変数の設定方法に疑問が。これはライブラリを探す場所のpath設定だよ
>>294 システム環境変数に両方共パスは通しています
それでうまくいかなかったので
sys.pathでも通しました
>>296 だめでした no such fileとなります
pythonは33しかいれていません
できるかだけでも教えて欲しいんですが
みなさんの環境だと
test.pyをスクリプト専用のフォルダ(python.exeの配下じゃないフォルダ)において
>py test.py
というやり方で実行できますか?
>>297 cd d:\pythonProject
してから
python test.py
sitecustomize.py usercustomize.py どっちかを編集してみるとか 普通は君みたいなことするひとは居ないけど
>>297 コマンドプロンプトからpathって打ってEnterしたらどうなる?
差し支えのある箇所があったら伏せ字にしたうえで結果を貼ってみて
この手のは長引くよな
コマンドプロンプトを理解してないだけじゃねえか
>>300 PATH=D:\Python33\;D:\Python33\Lib\site-packages;D:\PythonProject;
>>299 検索しましたがそういったファイルはありませんでした
ぜひ普通のやり方を教えて下さい
>>298 それで一応できたのですが
それだと毎回指定しないといけないですよね?
ジャンルごとにフォルダ分けしてその中のpyを実行させたいので
予め環境変数など指定しておけばいいという状態にしたいんです。
importでのモジュールのパスは検索することはできるけど
python test.pyなどの実行時の引数のパスは各ディレクトリから検索しないってことなんでしょうか?
どっから環境変数設定してんの? プロンプトでやってんなら実は揮発してましたとか言わない?
>>304 ちゃんとコントロールパネルのシステムで設定しています
プロンプトで設定した場合、閉じるとパスが消えることは知っています
shebang書けって言ってるんだから書けよ 1行目に #!python
Cygwin
私はshebang書けとは言われたことがないですが それは何ですか? pythonは今日はじめたばかりなのでどこにどのように書くのかわかりません
>>309 いい忘れてましたが
それも既にやってました
どうも皆様ありがとうございました
pythonは諦めます
スレ汚し失礼しました
python -m test
パスに日本語混じってたりとか?
>>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.
>>>
>>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
に名前変えてみて、もう一度挑戦してみたら?
カレントが d:\python33 なのに d:\pythonProject\test.py をファイル名のみで実行しようとしてるとこが問題 309,311の方法で探してくれそうだけど、パスの順序と名前重複に注意(testって名前は標準にある)
スレ違い
え
アンインストールして寝ようと思ってましたが
レス頂いたのでインストールし直しました
>>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日潰すとは思いませんでした
向いていないかもしれないですね
とにかくレスを下さった方々本当にありがとうございました
もしかして…相対パス…
currentをd:\python33にするのは止めなさい。 毎回、 cd d:\pythonProject しなさい。若いもんが横着を覚えては駄目だ。
横着するためにプログラムはあるというのに
コマンドプロンプトは立ち上げっぱなしでD:\pythonProjectを指しておく. humansize.pyを始めとする自分の開発資産はもちろんここに置く. humansize.pyを実装したら,立ち上げっぱなしのコマンドプロンプトで python humansize.py を実行する. デバッグのときもコマンドプロンプトを立ち上げっぱなしにしておけば↑キーで履歴が辿れるから,わざわざ再度 python humansize.py とタイプする必要はない. もう一工夫したいのであれば,a.batみたいな短いファイル名のバッチファイルを開発資産と同じディレクトリに置いて,中身は python humansize.py と書いておく. 実行時はコマンドプロンプトから a とタイプしてEnter.
おお、それはすごく便利 いろいろやりようがあるんですね
Numpyの解説サイトないですか? arrayとmatrixの違いが良く分からない
馬鹿を甘やかすなよ
馬鹿には無理
>>326 初心者を脅威に感じる程度のレベルなの?
pythonで
http://www.dlsite.comから 、
各作品のダウンロード数をスクレイピングして記録しようと思ったのですが、
どうやら単純に文字を表示しているのではなく
jQueryを使ってアクセスするたびに文字を生成している
ようなのです。
よって単純にソースを取得しても
Download : <span class="_dl_count_RJ****"
のようなものしかとれず肝心のダウンロード数を取得できません。
どのようにすればよいでしょうか。
python関係ないだろ
フ゜ッ ∩ ∧_∧ あっそ ℃ゞノ ヽ(・ω・ ) ⊂´_____∩
フ゜ッ ∩ ∧_∧ ℃ゞノ ヽ(・ω・ ) ⊂´_____∩
おっpipy
python3で a = [(1,100), (3,400), (2,500), (5,200)] を2番目の要素でソートして、 [(1,100), (5,200), (3,400), (2,500)] のように並べ替えたいんですが、どうやればいいでしょうか。
from operator import itemgetter a.sort(key=itemgetter(1)) で行けました。
>>> 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)]
FAQ なのでテンプレに入れた方が良いかもね
>>339 ありがとうございます。
ググった時に「関数を定義して云々」という情報もありましたがハードルが高そうでスルーしてました。
けっこう基本的なことなんですね。
基本的ではないけれど みんなが使うのでFAQ
PyScripter使ってみたらインタプリタがすごく重い webサイトのソースを表示したらカックカクになる PythonShellだと、以前入力した文字を表示できない コマンドプロンプトだと↑キーで前に入力した文字を表示できるけど フォント色変えたり、インテリセンス機能がない 何かオススメのインタプリタないですか?
eric4
Pythonはプログラム初学者には素晴らしい言語 だからと言って子供のおもちゃではない 大規模なプログラムも、商用利用も可能なほど高性能 宝石なんか眼中にない 僕らはニシキヘビを信仰する がんばれPython それいけ僕らのPython
しかし馬鹿には無理
>>344 馬鹿には無理だった
なんとかインストールしたけど
入力補完がデフォルトでできない
どこか設定があるんだろうけど日本語解説サイトもないし諦めました
>>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みたいな環境。コードの断片を実行・再編集出来る。
>>347 それ言語関係ないやん。
おまいコーディングすんな。世の中に貢献するより迷惑かけるほうが多そうだ。
>>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
馬鹿には無理
もう一回再インストールしようと思って removeipython.exe removepywin.exe をクリックしても this program is normally started by windows ってエラーダイアログが出てアンインスコもできない なんだよこれ・・・どうなってんの ipythonはレビューサイト見る限り、俺が求めていたものなんだけどなー idleに毛が生えた程度のものでいいんだよ プロ並のプロジェクトやりたいわけじゃないし ちょっとテキスト読み込んでごにょごにょしたいだけなのにな 言語学ぶよりインストールの方が難しいって・・・ 本末転倒だよね
Pythonインタプリタとエディタとコマンドプロンプトあれば当座は十分じゃん 小難しいことするのは慣れてきてからで足りる
>352 >言語学ぶよりインストールの方が難しいって・・・ 自分が馬鹿なのを言語のせいにするなって。 お前あきらかにプログラミングに向いてないよ。 迷惑かけるだけだから止めろ。
>>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
そうだと思う
そういうの慣れてからやればいいのに
便利な機能があると紹介されるといれたくなって…
一応
>>348 さんが書いてくれたように
もともとついているidleにも以前の入力を表示する機能があったので
今のとここれでいいんですけどね
ipythonはコンソールとシェルを行ったり来たりする必要が内容で
やってみたいなと思ったんだけど
あと、setuptoolsってもう更新してなくて2.7にしか対応していなようで
これが実行できればeasyinstallもできるんだろうけど…
まだ3x系に初心者が手を出すのは早かったのかなー
てか、いろいろ入れたライブラリのレジストリを削除したいのに・・・
インストール時点でもうエラー出てるんですよね。一応フィニッシュするけど
ログに0x83はutf-8に変換できないとかなんとかそういう英文が出てる
馬鹿には無理ってこういうときのためにある言葉なんだなって
>>352 インストーラで入れたのだったら
プログラムの追加と削除からアンインストール
>>358 それでいけました。多分
site-packageにいっぱいゴミが残ったままですけど
やっぱり慣れるまでデフォルトのシンプルなままで使っていこうと思います
ありがとうございました
>>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
馬鹿には無理
バカが張り付いてるな
>>360 var query= from s in html.Descript("span")
where Regex.IsMatch(""_dl_count.*",s.Attribute("class").Value)
select s.Value
やってみたけど for span in soup.find_all("span"): span.string これですら数値が出ないってことはパーサーがだめなんじゃない?
vimにvim-quickrunが鉄板
>>360 マジレスすると python 全然関係無い。
web 板逝け。
関係あるだろ、Pythonには糞みたいなパーサしかないのかって話なんだから
パーサー関係無い 消えろ
馬鹿には無理
おまえが消えろカス
落ちてきたHTMLソースを確認しろ
>>363 2.73です
>>364 これはjQuery?ですか?これをどう利用するのでしょうか
>>365 パーサーとはこの場合どれのことをさすのでしょうか?
>>367 Pythonをやっていてスクレイピングがしたくなり
調べたらBeautiful soupというもので簡単に
出来るとのことだったのでPythonスレで聞いたほうが
良いのかなと思ったのですがwebのカテゴリ
なのでしょうか。Pythonの解説書を2冊ほど眺め
二、三スクリプト書いた程度ですがこの上webとも
なると敷居が高そうです。
>>372 落ちてきたソースの該当箇所は
Download : <span class="_dl_count_RJ***"></span>
と成っています。調べるとjQueryでブラウザでアクセスするごとにダウンロード数を
表示している?らしいですが、となるとpythonの知識だけでは足りないということでしょうか
findAllの返すオブジェクトが何か調べろよ pythonの知識じゃなくてセンスが足りない
>>373 JavaScriptを実行するのはブラウザの仕事
勝手にやってはくれない
落としたソースでsummary_urlを検索して見つかったところが
ダウンロード数を取得しているJavaScriptコードだから
それと同じことをPythonでやればいい
頻繁に呼び出すと怒られるかもね
>>373 beautifulsoupはhtmlのパーサーでしかない
javascript実行後のページを取得するにはwebkit等のブラウザを使う
windowsでは面倒、androidのsl4aやlinuxのpyGTKを使えばpythonで簡単に書ける
仕方ないから俺がここまで調べてやったぜ
豚d
C#なら一行で取得できるけどな
スクレイピングではid等の所得のみに留めて、 その後JavaScriptでやってるのと同じhttpリクエストを発行してDL数を所得 規約とかどうなってるのか知らないけど、 マナーとして、実際のサイトでスクリプトをテストしたりせずに、 まずはどういう仕組みになってるのかきちんと解析しよう
>>373 > pythonの知識だけでは足りないということでしょうか
HTML, JavaScript, HTTP, XMLHTTPRequest, JSON 等の知識が必要になってくる
どちらかと言うとweb向きの話題
dl数が取れないのはサイトの仕様なので、htmlパーサの責任じゃない。
ブラウザのオートメーションする方法では、
データが読み込まれるタイミング等を適切に把握してないといけないので、その辺が結構面倒
JavaScript, DOM events 等の知識が必要
こういうのを一行づつ確認しながら試せるのがPythonの良さだよな コンパイラ言語でやってたときは本当に非効率的だった
>>381 デバッガでそれに近いことはできるよねコンパイラ言語でも
非効率的と逝っているのに あさっての方向のレスする馬鹿
最初から読んでないのか、揚げ足取りたいだけなのか、論点ずらしたいのか知らんがアフォ丸出し。
バッカにはムッリィイイイイイイイイイイイイイイ
だから早くID開示をしろと
>>383 いや今時のデバッガはデバッグ中にコード修正とかもできるから、
効率も遜色ない。
君の知識が古いから、あさってに見えるだけだよ (w
デバッグ中に修正できる程度の糞コードならな
嫌です
おことわりします(AAry
>>390 テスト駆動開発もしらないバカに言われたくありませんw
どう見ても「テスト駆動開発」と言いたいだけのレス乙 (w
だいたいテスト駆動開発でデバッグの作業が消えるわけじゃないのにな テストケースのエラー見てコード修正してるならそれは立派にデバッグだよ
>>388 それができるPythonのコードはデバッグ中に修正できるウンコードしかないってこと?
>396 >381
>>397 やっぱりそうなんですね。所詮はLL脳ですね。
Pythonでやれるようなレベルならコンパイラなんて使わないだろ
テキストエディタだけあれば十分
Yes, I think so.
エディタは何がいいですか? 信者が沢山いて、私も信者になれる奴がいいです。
notpad is good.
x notpad o notepad
>>402 信者の多いエディタならEmacsやVimとなる。
しかしいいかどうかは疑問だ。
共に、一通り使えるようになるまで数年かかるので
それまではコーディングの効率が落ちる。
406 :
デフォルトの名無しさん :2012/11/24(土) 19:12:17.65
どんだけ免許皆伝な「一通り」だよ。
>>406 ファイルの基本的な編集と保存操作を、いちいち考え込んだり
ググったりせずできるようになるまで、を一通りと表現した。
それに数年かかるようだと、この業界向いてないから 周りの人のために早めに辞めた方がいいぞ。
>>408 ひどいことを言う人だな。
EmacsとVimは数分で挫折する人が大半なんだぜ。
俺は挫折せずここまで頑張ったことを誇りに思っているよ。
pass
数分で挫折する奴の方が、自分の実力を知ってる分マシ。 周りに迷惑かけてることも考えずにヘタに粘る奴は、マジ辞めて欲しい。
412 :
デフォルトの名無しさん :2012/11/24(土) 20:08:19.47
数分でなきゃ数年なのかよ。
黙ってed使えよ雑魚
>>411 エディタの習熟に時間がかかるとなぜ
周りに迷惑がかかるんだよ。
自分でネット見て作ったアンチョコがあるから
仕事には影響出さなかったよ?
アンチョコを見ずに操作できるようになるまで
数年かかったということだ。
いちいちあんちょこ見ながらエディタ使ってるような奴が 回りに迷惑かけてないって? 周りが見えてないって、ある意味最強だな (w
>>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()")
>>415 もういいよ。
あんたは人をそういう上から目線で
見下す種類の人間なんだな。
会話するだけ時間の無駄だ。
>>389 375提案の方法 codepad.org/0qErCrE1
ページにも拠るみたいだけど、一覧では普通にspanの値でDL数取れる
> 会話するだけ時間の無駄だ。 なら、レスしなきゃいいのに… こういうこと覚えるのにも数年かかるんだろうな。(w
>>419 レスしなきゃお前が言いたい放題じゃないか。
そんなの許せるかよ。
人に嫌みを言うことしかできない人間は黙って消えろ。
二人ともお互いが気になってしょうがないのね 結婚すれば?
むかつく。すげーむかつく。 見ず知らずの人にこんなひどい言葉をかけて 末尾に「(w」とか付けて楽しむ人間って 普段どんな顔して仕事してるんだ。 この世に存在していいのか。消えてなくなれ。
端から見てりゃお似合いだから、夜の闇にしけこんで消えて無くなれ。
ごめん、熱くなった。 不快なレスはスルーというのが にちゃんの鉄則だったな。 スレを汚して申し訳ない。
チラシは便所の裏で
くだらない質問よりくだらない人間が多いこのスレ
ニヤニヤしながらryとか打ってんじゃねえよブタ
vimはウィンドウズユーザーにはおすすめしない ショートカットがすべてが一般的なものと違うから
EmacsやVimが使えない奴がでかい顔してるスレがあると聞いてやって来ました。
プロジェクトの一部を修正、試行錯誤したいって場合 同じようなことしようとしたらテスト駆動しかないだろ デバッガなんてステップしかできないんだから
pass
ブタがでかい顔してるスレがあると聞いてやって来ました。
pass
windowsしか使う気無いならPython自体やめとけ
windows利用者に最適
vimのショートカットって何だ? 相応しい言葉を使えよクソデブという意味でなく、文字通りの意味で、何だ?
もうPythonの話飽きた たまにはエディタの話でもしろ
>>418 これはすごい!
即座には理解できなさそうですが
勉強させていただきます。
ありがとうございました。
python 全然関係ないじゃん
無用なことを全部そぎ落とすとつまんねえ人間になるぞ 今のお前のようにな
軽さにこだわるXP廚は壁紙無地なんだろ?
pass
while not you_died: watch_youporn() masturbate(tenga) sleep()
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の設定をどのようにすればよいのでしょうか
>>450 お前こんなん、よう貼ったなぁ
コピペも出来ないだろ
ちゃんと空白を行頭に入れて貼り直し
pythonで空白を先頭に入れないのは禁じ手よ
>>451 すみません
半角スペースで空白を書き込んだのですが
2chでは行頭の半角スペースが反映されないことを知りませんでした
代わりに全角スペースで行頭に空白を書き込んでもよろしいでしょうか?
とは書きましたが、待つのも面倒くさいので完成させておきました。 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()
おかしいな 嘘吐くな もともとインデント潰してうpしただろ 正直に言え
>>452 いや、本来なら専用ブラウザでpop up表示させた時には、
元の半角空白が表示されるのよ。
でも、レスアンカーで確認しても空白が出なかったから、
>>451 で文句言ったわけ。
もしかしてfirefox使ってる?
それだったら2chの専用ブラウザを検索して使うようにしなされ。
専ブラ入れてから、専ブラで
>>453 を見てご覧。
>>454 私もおかしいなとは思ったけど、ブラウザ側で先頭から続く半角空白を
削除することもあるかもと思った。
>>450 が手元のeditorで書いたcodeをブラウザに貼り付けるとしても、
先頭の半角空白だけ削除し、回答者が苦労するように
質問するとも思えないので、何かの手違いでしょうということで、
>>453 のように先行して回答を書きました。
ごめん、↓いらないから削除しておいて。
cellDict[(i, j)] = value
>>455 firefoxのchaikaで2chを見てました
Janeをインストールして空白が出ないことを確認しました
申し訳ございませんでした
>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
ideoneとか使って貼ってくれちょ
ミスった orz this.message = this.message.replace(/^[ \t]+/mg, function(s){ return s.replace(/ /g, "&#160;").replace(/\t/g, "&#160;&#160;"); }); 全角「&」を半角「&」に置き換えて
2chの方でも実体参照の仕様がいきなり変更されて 何が何だかわけがわからないことになってますね。 「&#32;」はOKだけど、 「&#x20;」はだめ。 でも「&#32」はOKという意味不明なことになってるし。
てす
あら&nbsp;ってまた使えるようになったのか?
皆さんが使っている総合開発環境を知りたいです
使ってませんよ 十数の言語を操るようになると、この言語はどのIDEあれはどのIDEなどと言っていられないのです 全部エディタで済まします
PyDev
469 :
デフォルトの名無しさん :2012/11/28(水) 13:37:25.16
一瞬広告っぽいの出たけど 繋がらないね
473 :
デフォルトの名無しさん :2012/11/29(木) 12:09:33.69
Python 3.3 で OpenCV を使いたいのですが、 どのバージョンなら動きますか?
知恵をお貸しください。 以下のようなフォーマットの固定長テキストデータがありまして 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.データの最後に改行のみの行があると、空データがリストに追加されるのですが 改行のみの行は処理しないようにするにはどうすればいいですか
ほとんど自分で答えしゃべってんじゃん 突っ込みの技術でも競ってんの?
スマートって一番ムツカシイ質問だよな 質問者にとってのスマートさの定義を小一時間語ってから質問してくれい
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)
>475 問題点が判ってんなら自分で直せよ
>>478 ,479
ありがとうございます。参考にさせていただきます。
>>477 確かに曖昧な表現でした。
具体的には、行単位のループの中にさらにカラム単位の
ループを入れているところが、テキスト一括処理を得意とする
スクリプト言語らしからぬやり方だと思う次第です。
>>480 お叱りごもっともです。
改行のみという状態を判定する具体的なコーディングが
わかりませんでしたので知恵を拝借した次第です。
精進いたします。
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
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)
485 :
475 :2012/11/30(金) 00:05:38.74
嫌みなもんですか。
>>482 ,483とも私には思いも付かない実装で、目から鱗とはこのことです。
この系統の処理は、業務で頻繁に必要になるので、とてもありがたいです。
開発さんにCOBOLで頼むと一ヶ月で100万円かかるものを
こうやってエンドユーザーで実現できてしまうとは…Python恐るべし。
正規表現を思いもつかないユーザーと 100万ぼったくるコボラー この国終わってんな
固定長で特定の部分のみ読み出すなら、 普通は位置計算してからseekして必要な部分のみreadするんじゃない? ファイル全部読む程度問題ない規模ならいいけど。 固定長のデータを扱う場合はstructモジュールが適してる 9バイトのデータの分割なら struct.unpack("3s"*3, "abcdefghi") # => ("abc","def","ghi")
>>486 カモネギってどこにでもいるんだよ。
それをじょうずに捕まえるのが勝ち組。
>>475 ランダムアクセス版 (python2.7)
ideone.com/hZtO1I
ファイルを扱うサンプルにideoneのinput試してみたかった。seek出来るんだね
固定長データを扱う方法は他に、ctypesで構造体を定義する方法もある
けど、Cで構造体扱った経験がないと、慣れるまでが手間かもしれない。
pythonのみで手軽に固定長データ扱うなら、
namedtupleと struct.unpack を組み合わせて使う方法がお勧め
490 :
489 :2012/11/30(金) 03:09:13.73
URL間違えた ideone.com/uj7RI6
じゃあCでいいだろっていうコード
>>486 そんなことより情報系の学問が軽視される風潮にあることのほうがよっぽど終わってると思う
先見の明なさすぎ
>>489 >ファイルを扱うサンプルにideoneのinput試してみたかった。seek出来るんだね
バイナリってどうやって喰わせるの?
>>493 encodingは UTF-8、改行は LF に統一されるので、
範囲外の任意のバイナリデータを直接は無理。base64にエンコードする等の工夫が必要
base64よりstring_escapeの方がいいかな デコードしないと何のデータかわからなくなるのは面倒だし スクリプト内へデータ埋め込みでテストする場合は、 エスケープシーケンスで書いてStringIO等で包む方法をよく使う
ありがとうございます 圧縮してbase64してみます
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())
細かな突っ込み。なるべくstrictな方針で # 固定長テキストデータは、(文字数ではなく)バイト数が固定長と仮定 サイズが分かっている場合、行バッファ使って読み込むのは冗長 行読み込みだとレコード内に他の改行文字がないという保証が必要 rstrip 末尾の空文字を取り除くので、スペースのみのレコードは通らない 読み込まれたデータの長さを保証してない スライスで対象がunicodeだと困るかもしれない ファイルの場合 openの第二引数 "rb" 明示したほうがいい
Pythonに限らないけど、最近の言語は 固定長データを桁位置指定で切り刻んで 扱う手段を組み込みで持っていないよな。 Javaなんかもそうかな? Pythonにも一応構造体的なものとしてnamedtupleがあるけど、 既に区切られたフィールドに名前を付けるだけだしな。
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'
>>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[:]]
>499 素人はすっころんでろ
ええんやで
固定長ってだけで地雷案件だし
オフセットの指定がmagic numberになるので、バッファ・オブジェクトを直接扱うのは面倒だな。 ctypes.Structureで、固定長データを読むサンプル書いてみた。 operator.attrgetter がネストした構造にも対応してて便利 ideone.com/0IxDjB
>>505 は、ctypesの使いどころ誤ってる。
ある目的の.so, .dllがあって、APIは分かってるけど、
元の.cを入手出来ないし、
出来たとしてもpython用のC拡張作らない・れないし、
開発工数かかりすぎで非経済的だし、
って場合に、一時凌ぎ・次善策的に使うのがctypes。
ここ、超初心者スレでは教える必要のない情報。
pythonのC拡張を作るまでもない時は、ctypes使うけど、
>>505 の貼ったcodeでctypes使う必要なんてない。
一切ない。全くない。これっぽっちもない。
現在の話の進行では、悪いけど、むしろ有害。
固定長を扱うにはどうするか?では、struct使えばいい話。
>>500 に書いたように、読み飛ばしも'x'で可能。
pass
まあ参考にはなったわ ありがdx
>>502 いやー
Pythonのstructは外部のクラスライブラリだから
言語に組み込まれた機能とは言えんだろ。
Javaについてもググってみたが、クラスにフィールドを並べて
うんたらという感じの記事ばかりで、どうもすっきりしない。
オブジェクト指向系言語が固定長データの扱いにやや
まどろっこしい手続きを必要とするのは、スペースやカンマで
区切られたデータ処理を前提としているからなのかもな。
それならsplitで取り出していかようにも処理できる。
面白い傾向だ。
>>509 言語に組み込む必要がないって話でしょ。
んで、必要になった時にはstructで十分事足りるというお話。
ノイジーマイノリティと共通する
ある情報筋によりますと、 何かの答えを得たい場合、日本の2ちゃんに行って、質問し、 回答者に適当に反論しつつ罵倒するのだそうです そうすると、日本人は顔を真っ赤にしながら 無料で何でも聞き出せる状態に変身するとのことです
APIスレ見てると最近はそうでもないよ その情報筋、古いね
APIスレとPerlスレのあれはそういう芸風なので VIPみたいなもんだよ
で、味をしめた教えて君が調子こいてまた違う質問をすると 今度は「なんだコイツこの先延々と全部聞いていくつもりか?」 「ちょっとは自分で調べろよ」と全員からバッシングを受けて、 何も聞き出せない状態になるのでした。
>>512 いいことじゃないか。
こうしてROMも含めたスレの参加者多数に有益な情報が浸透し、
上級者も改めて基礎を固めることができる。
このスレで研鑽を積み、将来日本のIT界を背負って立つ存在に
なる人もいるかも知れん。
雑談や煽り合戦をするよりは数段マシ。
>こうしてROMも含めたスレの参加者多数に有益な情報が浸透し、 宿題スレの回答とか見てるが糞コードばっかじゃねーか。 参考にならないどころか劣化コピーよりさらにひどい 害悪を撒き散らしてるだけ。
一時期は投稿しておりましたが、 宿題の方には、私は現在投稿しておりませんので、、、 あいつら進歩しないから見切った。 Pythonの方に来れば良質なcodeを読めるよ〜。
>>517 実践の場ではコードは動けばいいんだよ。
糞だのという評価は、個人的嗜主義・嗜好によりなされるものであり、
それでもってコードやそれを書いた人を批判することは慎むべき。
動いているコードはみな平等の価値を持っている。
ネタだろうけど 実践の場ほど動けば良いじゃ済まなくなる 速度もメモリ使用量も例外も 全て考慮してコードを書く必要がある
ある情報筋によりますと、 何かの答えを得たい場合、日本の2ちゃんに行って、質問し、 回答者に適当に反論しつつ罵倒するのだそうです そうすると、日本人は顔を真っ赤にしながら 無料で何でも聞き出せる状態に変身するとのことです
そして教えられたDOSコマンド試してみてアボーンするのでした
ああ、そうやってフェンリルのサーバーを皆で初期化してさし上げたっけな
VIPでやれ
pass
フォルダ名testの中にあるファイルを読み出す時 Desktop\test\ほにゃらら.txt ってやると \t の部分でエラーが起きて読みこめないことがわかりました どうすればいいんでしょうか
>526
Desktop\\test\\ほにゃらら.txt
>>520 書き込み時間ワロス
>>> 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]
b = '\x00' * (4096 * 1024) for n in xrange(1024 * 1024): f = open('hoge.txt', 'ab') f.write(b) f.close() print len(b) * n
テンプレ叩き台
頑張って
>>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言語実装になるからじゃないの?
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]
より早い方法ってあります?
なんども呼ぶのでなるべく早くしたいのですが
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
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
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を作れるのが利点
>>> reduce(lambda x,y: [x[0]+[y[0]],x[1]+[y[1]]], [(1,2),(3,4),(5,6)], [[],[]]) [[1, 3, 5], [2, 4, 6]]
>>530 137の書き込みをした者ですが、
その後本を見ていたら
オブジェクト指向の三大要素は
「継承」「カプセル化」と「多態性」だそうです。
「隠蔽」は三大要素ではありません。
もしテンプレに使うなら
「オブジェクト指向の三大要素」というくだりを
削除していただけると幸いです。
>>526 既に解決策出てるけど、他の方法
エスケープシーケンスを解釈しないようにraw文字列を使うと、そのまま記述出来る
r"Desktop\test\ほにゃらら.txt"
連続投稿規制で困ってました。( ・ω・) 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]
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コードなのでソースを見ると良い
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 まで抽出
250までのテンプレたたき台案
>>530-536 ,538-540
までで貼り付け完了。
251以降はまた明日やるつもりだけど、誰かお願い。
同じスレ内の書き込みなのに丸ごと貼って何がしたいんだ?
テンプレたたき台案作成
テンプレってレスアンカーだけで良かったんです?
と思ったけど、
>>541 のように一行にまとめて書けば
よかったですね。
無駄にスレ流しただけでしたね。
失礼しました。
今度は、レスアンカーだけで叩き台案貼り付けます。
544 :
デフォルトの名無しさん :2012/12/02(日) 09:56:49.50
インデント潰れてるから 丸ごとじゃないな 劣化コピーだ 死ねカス
まとめスレ使えよ。 ぼけが。
>>546 遅延書き込みが原因じゃないかな。
os.rmdir() の後に time.sleep(0.01) くらい入れてみるとか。
あとディレクトリの中を消して行きたいみたいだけど、
そういう処理をするには os.walk() を使うと良いよ。
>547-548 出来ました ありがとうございました エクスプローラでフォルダ開いてたのが原因だった見たいです
なんかむかつくなこいつ。
砂が喋った程度でむかつかんすよ
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)) テトリスを作りたいのですが
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に対応してるか知らないけれど、:!で使えるんじゃない?
curses
python で書いたプログラムのフルパステストみたいなことをやりたいのですが、 何かいいツールややり方とかありますか?
>>560 自動で検査するようなツールは知らないけど、実行結果からテストのカバレッジを知る方法なら、
各テスト・フレームワーク毎に、オプションだったり拡張として準備されてるはず。pip search coverage
563 :
554 :2012/12/06(木) 10:53:17.73
Pythonの宿題スレなんてあったんだね、知らなかったよ。
確かネタで作れみたいな話だったはず
566 :
デフォルトの名無しさん :2012/12/10(月) 11:00:46.49
おっぱい揉んで 激安で抜ける ○1000円〜 「新宿 アイアイ 」 ○1500円〜 「西川口 マーガレット 」 ○2000円〜 「新宿・錦糸町 あんぷり亭 」 「新宿 ダブルエロチカ 」
567 :
デフォルトの名無しさん :2012/12/11(火) 12:30:35.15
Pythonのfile()とopen()の違いは何なのでしょうか?
>>567 2.x系では、fileのは型のコンストラクタ呼出、openはビルトイン関数の呼出
openは中でfile呼び出してるだけなので、返すオブジェクトは一緒
違いは、例えば
isinstance(f, file) は型なので可能だけど、
isinstance(f, open) は関数なので TypeError
実際のコードではisinstanceでファイルの型チェックは殆どしないし、
3.xでは fileは無くなるので、違いや使い分けとか気にしなくていい。openを使おう
>>568 python fileで検索してもファイルの扱い方ばかりでてきて、file()の説明があまり出てこず苦戦しておりました。
詳しいご説明ありがとうございました。
元気がないぞ、おらっ!
教えて下さい。 最短マッチで >>> print re.search("\(.*?\)", "aaa(bbb(cc))dd").group() (bbb(cc) となって、最初に出てきた”(”から一番短い”)”を探すっぽい。という理解で合ってる? (cc)にマッチさせるにはどうしたら良い?
>>> import re >>> r = re.compile(r'\([^(]*?\)') >>> r.search('aaa(bbb(cc))dd').group() '(cc)'
>>> import re >>> r = re.compile(r'\([^()]*\)') >>> r.search('aaa(bbb(cc))dd').group() '(cc)'
>>573 むう…これはどういうからくりなのだろう。
最短一致の?を使わずに内側のカッコ部分を取り出せるのか。
括弧で囲まれてる中の括弧じゃない文字列の最大一致なわけだから、 一番素直な解答例だと思うな。
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 のようなエラーが出て停止してしまうのですが、こういうのはどこに報告すれば良いのでしょうか?
DjangoかPyramidのどっちか使おうと迷ってるんですけど、皆さん何基準で選んでます??
ずばり知名度でDjangoでしょ
参考にさせて頂くでござる!
>>575 カッコを否定で使って最大一致を取ると
カッコを使った最小一致になるというからくりか。感動した。
俺だと r = re.compile('\([a-zA-Z]*?\)')でカッコ内の文字種類を
決め打ちして最小一致を取ることしか考えつかなかったよ。
>>576 $ apt-get install python3-dev
Djangoなかなかpy3対応しないから、もうPyramidでいいよ。
Pythonでブラウザを起動させて特定のサイトにアクセスしたり 例えばGoogleに飛んで自動で検索フォームにPythonと入力したり出来ますか?
586 :
デフォルトの名無しさん :2012/12/14(金) 00:15:48.68
馬鹿には無理
>>581 その正規表現の場合、終端が最初に現れる閉じ括弧と確定できるので、最短・最長は影響しないはず。
仕様次第では、そちらの括弧内のマッチする文字を明示した方が良い場合もあるよ。
ドットや補集合では、不要な文字にまでマッチしてしまうケースが出るので。
仕様次第ではこっちが優れてるとか言い出したらキリ無いじゃーん
>>571 の問題に対する一番優れた回答は
>>573 だ
なぜなら少ないタイピング量で、かつ、より広い概念で解いているからだ
くだらね
なぜ自分に突っ込むし
pass
595 :
デフォルトの名無しさん :2012/12/14(金) 16:04:55.06
馬鹿には無理
頭のおかしな奴がいるな
ホントだな文体真似ると自演とかアホかと
>>585 import webbrowser
webbrowser.open("GOOGLE_DOT_COM/?q=Python") # ※ URL書込み出来なかった
ブラウザを開いてサイトにアクセスは標準のwebbrowserモジュールで可。
オートメーションはサポートしてない。
手軽にやるならJavaScript/Bookmarkletsがあるけど、
多分、外部からの呼び出しはセキュリティ絡みの制限に引っ掛る。
>>598 こんなモジュールが有ったのですね
ありがとうございます
関数の外で作られた変数について 関数内で同名の変数を参照だけする場合はグローバルで 関数内で値を代入した瞬間からローカルになるという仕様に どうにもなじめません。 ローカル変数のつもりで、うっかり代入をせずに参照するような ことをしてしまうと、エラーにならず通ってしまい危険ではないですか。 みなさんはこの仕様とどういう折り合いを付けているのでしょうか?
危険ではないです
何の問題も無い。 >>> hoge = [5, 3, 1] >>> def a(): ... hoge[2] = 9 ... >>> hoge [5, 3, 1] >>> a() >>> hoge [5, 3, 9]
俺はそもそもグローバル空間に物置かない主義なので
そもそも、グローバル変数とローカル変数の名前が衝突するのがおかしいので。
そういう考え方はありだと思うが、それなら警告出すなりエラーにすべきだと思う。
思うのは自由だが、そんなことで俺らは動かない。 動作が気に食わないなら自分でPEPでも書くといい。
ローカル変数持ってる言語だと、どんな言語でも似たようなもんだと思うが。
馬鹿には無理
そうおもう
GUIアプリケーション作る時、Tkinter使うのってやめた方が良いって話をどこかで聞いたのだが、それはマジなんだろうか。
613 :
デフォルトの名無しさん :2012/12/17(月) 19:28:55.52
みんなのパイチンくんみんなのものだよ
guiならpyside
>>616 nokia が qt 売るだけじゃん
買ったとこが pyside も買うよ
どっか買ってくれるよね?!
pyqtでいいんでないの?
そう思うならそれでいいよ
Python 3.3.0 / win7 64bitです 以下のコードをコマンドプロンプトで実行させると例外が出てしまいます #↓unicode文字 testStr='''〄''' print (testStr) コマンドプロンプトがCP932で表示されているからその範囲外の〄を表示できないのは分かりますけど とりあえず確認用に軽く表示しているだけなので切り捨てて表示させるにはどうしたらよいでしょうか コマンドプロンプトをunicodeで表示するのはフォントが汚くなるからちょっと。
setuptoolsはPython3非対応 まずdistributeを入れ、pipを入れる その前にパスを通すのが先かな
なるほど、setuptoolsはPython3ではダメなんですね pipを入れるという事で調べてみます。ありがとうございました
普通にpython setup.py installでいいんじゃね?
numpyについて質問です。 実対称行列の固有ベクトルを求めるのに、 numpy.linalg.eigを使うと固有ベクトルを並べた行列が直交行列になりません。 これは仕様なのでしょうか? (ちなみに、numpy.linalg.eighを使うとちゃんと直交行列になります。)
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'にエンコードしようとしているのか…
何故じゃない 「Uniccode文字列」は直接ファイルに書けない 「utf_8やutf_16にエンコードされたバイトシーケンス」は書ける 明示しないなら適当に何らかのエンコーディングでバイトシーケンスに直そうとする
630 :
デフォルトの名無しさん :2012/12/21(金) 16:55:12.82
みんなのみんなのパイチンくんみんなの
pyファイル名に日本語を使ったら python: failed to set __main__.__loader__ と怒られて実行できないのですが、もしかして英字限定だったりしますか windowsなので全部unicodeで統一されてると思ったのに
とりあえず日本語ファイル名とか使ったことないけど、WindowsはCP932じゃないの OSの内部的にはUnicodeだと思うけど
filesystemencodingを指定すれば医院で内科医
お勉強スレにあるけど、それバグ ローダーがファイルシステムエンコーディングを無視してutf-8でデコードしようとしてるせい 修正リリースされてないので、自分でパッチあててビルドしないと直らない
0バイトのあいうえお.pyを作っても同じエラーが出るからどうしようと思っていましたが、pythonのバグでしたか 公式のリリースノート見たら3.2.3から3.3.0まで半年近くかかってるなあ せっかく見やすいファイル名が使えると思ったのに
Pythonのビルドは簡単だから自分でやってみたら? VC++2010を入れる(Expressでおk) ソースを展開する pcbuild.slnをVC++で開く ソリューション構成をReleaseにする ビルドで完成 俺は修正して使ってるからバイナリや差分を渡せないこともないが この御時世にその対応はちょっとお天気が過ぎるな
直す箇所を教えて頂けないでしょうか お勉強スレをutf-8やpcbuildで検索したけど見つかりませんでしたし そのまま開いてビルドしなおしただけでは何も変わりませんでした
馬鹿には無理
まず公式のインストーラで3.3.0を入れる
これとは別に
>>637 を作る
そして出来上がった python33.dll 「だけ」 を上書きする
>>642-643 ありがとうございます、python-3.3.0.msiからインストールし、python33.dll 「だけ」 を上書きしたら無事日本語のpyファイルが実行出来ました
python-3.3.0.amd64.msi つまり64bit版のパッチはまだ存在しないのでしょうか
ビルド時の構成をwin32から64にしても「プロジェクトはこのソリューション構成に対してビルドするように選択されていません。」と表示されてしまうので32bit専用みたいです
Windows SDKから入れてみます 本日は手取り足取りありがとうございました。
数字の文字列を要素とするリストがあるとして、 全ての要素が数字であることをチェックして 異常ならメッセージを出してプログラムを中止 という処理をできるだけ短く済ませたいです。 以下のようにリスト内包表記に詰め込んで 一行でやろうと試みたのですが、Syntax Errorとなります。 他のやり方はありますか。 print('数字をスペース区切りで入力してね') ans = input().split(' ') [print('数字以外の入力があります');exit(1) for s in ans if s.isdigit() == False]
printとかinputはスルーする 内包表記はリストを作る式なので、要素の反復処理にはfor文を使う print '数字をスペース区切りで入力してね' ans = raw_input().split() for s in ans: if not s.isdigit(): print '数字以外の入力があります' exit(1)
if all([s.isdigit() for s in ans]): print('数字以外の入力があります'); exit(1)
すまんnot 抜けた
ていうかジェネレータで良かった if not all(s.isdigit() for s in ans): print('数字以外の入力があります'); exit(1)
a = [] for i, s in ans: if not s.isdigit(): a.append('%d番目の項目に数字以外の入力があります' % (i, )) if len(a): print '\n'.join(a) exit(1)
もうわかったから
import sys; globals().__setitem__('ans', raw_input('数字をスペース区切りで入力してね: ').split()) or all(s.isdigit() for s in ans) or sys.stdout.write('数字以外の入力があります\n') or exit(1);
>>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('頑張りましょう。')`
しつこいんだよォ!
>>651 このケースでは anyの方が効率良いよ # Trueを返した時点で繰り返しを終了出来るので
isdigitは 一部のunicode文字も通ったり、2系だとロケールの影響を受けるので、
支障がないかマニュアルを要確認。
数値として使うなら int(n, 10) で変換してみて範囲チェック/例外を捕まえるのが数値チェックの定石だけど、
厳密な文字列のチェックをしたいなら正規表現が汎用的。
例えば後から、頭にマイナス符号を許可するといった変更がある場合でも、他の方法より対応が容易。
658 :
657 :2012/12/22(土) 13:13:25.51
>このケースでは anyの方が効率良いよ # Trueを返した時点で繰り返しを終了出来るので ごめん、なんか勘違いした。決定時にループ終わるのはallも同じだった any だと not isdigit にしないといけないから。not all で良かった
外部のサウンドファイルを用意するのが面倒なんだけど 音の高さと長さを指定する程度でいいから スクリプトから簡単なピー音を直接鳴らす方法って無い?
ある夜
>>659 いろいろあるとおもうけど自分がもしやるなら
初回起動時に音声ファイル生成するかPygameのsndarrayつかう。
windowsならprint('\a')かwinsoundが使える
663 :
647 :2012/12/23(日) 13:58:46.99
いろんなアドバイスありがとうございました。 全部試して楽しんでます。 Pythonは楽しい。大好き。
dir = r'd:\work\python\lang\' という文がありまして、 ファイルの存在チェックをするためにそのベースとなる ディレクトリ名を変数に代入するものです。 これを実行すると、文の末尾で SyntaxError: EOL while scanning string literalが出ます。 これはどういうことでしょうか。raw文字列ならば\は 単なる文字になると理解しているのですが…
665 :
デフォルトの名無しさん :2012/12/24(月) 23:16:46.61
馬鹿には無理
windowsのcmd.exeでpyを起動してるのですが エラーが出た時終了させずに止めるにはどうしたらよいでしょうか すべての関数等をtry:で囲むのも大変ですので、全てのエラー発生時に…という処理は出来ないでしょうか
668 :
デフォルトの名無しさん :2012/12/24(月) 23:58:35.34
終了させずに止める
Pythonでenumはありますか?
Macのターミナル上 python -v => 3.2 pythonスクリプト内で os.system("python -v") => 2.7 となります メリークリスマス 3.2は自分で入れたもので2.7はシステムに最初から入っていたものです os.systemでも通常のターミナルと同じ環境にしたいのですが、どうすればよいでしょうか?
>>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 多分無い。
>>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
>>669 こういうのならたまにやる
HOGE, FUGA, PIYO = range(3)
for i,v in enumerate(["a","b","c"]): print i,v こーゆーの?
最近ドキュメント見直したらfor文にelse文が使えるのはビックリ しかも意外に便利だた
676 :
666 :2012/12/25(火) 23:57:06.62
>>671 >Pythonのbugじゃない?
わざわざ URL 示していても、読まずにアホなこと言う奴がいるんだな。
気に入らない仕様とは紙一重
678 :
671 :2012/12/26(水) 08:58:17.92
>>676 えっとですね。URLに "/2/" とあったので、2系の話だろう、
質問者
>>664 の質問には
>>671 の回答で十分だろう、
ということで読みませんでした。
きちんと読んでみると、
>>664 の質問の答えが書いてありましたです。。。
勉強になりました。。。bugでなかったです。。。
接頭文字 'r' または 'R' がある場合、バックスラッシュの後にくる文字はそのまま
文字列中に入り、 バックスラッシュは全て 文字列中に残されます 。例えば、文
字列リテラル r"\n" は二つの文字: バックスラッシュと小文字の 'n' からなる文
字列を表すことになります。引用符はバックスラッシュでエスケープすることがで
きますが、バックスラッシュ自体も残ってしまいます; 例えば、 r"\"" は不正でな
い文字列リテラルで、バックスラッシュと二重引用符からなる文字列を表します
; r"\" は正しくない文字列リテラルです (raw 文字列を奇数個連なったバックス
ラッシュで終わらせることはできません)。厳密にいえば、 (バックスラッシュが直
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
後のクオート文字をエスケープしてしまうため) raw文字列を単一のバックスラッ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
シュで終わらせることはできない ということになります。また、バックスラッシュ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
の直後に改行がきても、行継続を意味する のではなく 、それら二つの文字とし
て解釈されるので注意してください。
いちいち貼らなくていいから
グロ注意
682 :
デフォルトの名無しさん :2012/12/28(金) 17:20:30.08
みんなのパイチンくんですか〜
windowsでpyCUDAとpyOpenCLを使いたいのですがインストール方法がわかりません 詳しいやり方を教えていただけると助かります python2.7は入れてあります
"pycuda windows binary"でググれ
文字列の両端を指定した文字で囲む綺麗な方法ってありますか。 具体的に言うと、文字列のリストを元にして 各文字列をダブルクォートで囲んだリストを作りたいです。 a = [ 'a', 'b', 'c' ] b = [] for i in a: b.append( '"' + i + '"' ) 私が考えたのは上記ですが、なんかダサイなあと思うので。
全要素に何かしたいならmap関数でも使ってみたら 別に綺麗だとは思わないけどー
>>685 a = ['a', 'b', 'c']
map(lambda x : '"' + x + '"', a)
b = ['"'+n+'"' for n in a]
map('"{}"'.format, a)
ミッフィーが見えた
pythonって関数を実行する前に定義しなきゃいけないじゃないですか そうすると必然的にmain部分がファイルの下の方になっちゃうと思うんですが どうにかしてmain部分をファイルの先頭に持ってくる事は出来ないでしょうか def main(): #ここにmain部分 def func1(): pass def func2(): pass #〜必要な関数を定義する〜 if __name__ == '__main__': main() この様な書き方でよろしいでしょうか
それでいいと思う奴はいいと答えるし 駄目だと思う奴は駄目だと答える罠 多数派が知りたいならアンケートしたまえ
695 :
685 :2012/12/29(土) 23:39:02.17
ありがとうございました。 formatって引数を付けずにmapでリストに適用できるんだ… ためになります。
mapをまだ理解してないだろ マニュアル嫁
モジュールを入れようと思うのですが これって仮にOSを再インストールする時にどうやったら環境を復元出来るのでしょうか そのままC:\pythonフォルダを新しいPCに移して、pyファイルの関連付けして、PATHを通せば動きますか?
pip freezeとか
699 :
685 :2012/12/30(日) 21:01:54.84
>>696 うーんマニュアルを読みましたが、よくわかりませんね。
map関数の第一引数の説明はfunctionとあるので
関数を引数に取るのだと思うのですが
'"{}"'.formatってstrオブジェクトの持つメソッドであって
組み込み関数のformatではないですよね?
もしかして、オブジェクトのメソッドも関数扱いになるのですか?
公式のドキュメントにも関数とメソッドが入り交じってるから誤解を招きがちだが、両者に区別はない オブジェクトに束縛された関数が、暗黙に第一引数でインスタンスを渡されることだけが特別な例だ
今年Pythonのイベントで面白いのってなんだったでしょうか? また、来年で一番早く行われるイベントっていつ頃でしょうか?
素朴な疑問 なんで最初から総称関数方向に行かなかったんだろ? あっちの方が融通効きそうなのに…
>>692 func1(), func2()を別のfunc_factory.pyぐらいに持っていって、
main()を書く場所より上で、
from func_factory import func1, func2
ってしたら?
704 :
685 :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で保存した日本語ファイルです。
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で保存したのですが、問題ないでしょうか。
せめて実行可能なコードを貼り付けようよ というかそのコードを実行してエラーになっているのに気付いてない (当然ファイルは書き換わらない)というオチか? ↓のような感じでいいはず with open('t.txt', 'r+') as f: lines = f.readlines() f.seek(0) f.writelines(line * 2 for line in lines)
710 :
708 :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)
>>711 ちなみにどうやって実行してんの?
そもそも本当に実行されてるのか?
実行されれば元のコードではPythonがエラーを出力したはずだけど
わかった なんの変化もないと言うけど、.pyをダブルクリックして実行してるせいで、コマンドプロンプトがすぐ消えてエラーが出てても見えてないだけじゃないの
714 :
デフォルトの名無しさん :2013/01/01(火) 03:15:29.51
g: は書き込み可能なメディア? ファイルのタイムスタンプも変化なし? Roaming用の場所にファイルが作られてたりしない? Program Files とかを仮想ドライブで g: に割り当ててたりしないか、念のため確認
誤爆? 念のため確認
誤爆に思える方が不思議
頭悪過ぎる質問なのでスルーが宜しいかと
719 :
デフォルトの名無しさん :2013/01/01(火) 09:10:49.12
720 :
デフォルトの名無しさん :2013/01/01(火) 18:14:49.98
>>719 ありがとうございます!!!!
ただ、
あいう
あいう
かきく
かきく
のように繰り返した部分に改行が入るのではなく、
あいうあいう
かきくかきく
のようにしたいのですが、
どうすればいいのでしょうか?
>>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の値と同一内容の行になるとは考えにくいのですが
最初から書き換えてるから
codecs.openの第2引数でファイルをどう開くか指定する 'w'は書き込み (ファイルがすでに存在すれば切り詰められます)
728 :
デフォルトの名無しさん :2013/01/01(火) 22:49:58.07
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ あけおめ!ことよろ! └─┘
runrun-python.blogspot.jp/2011/09/blog-post_20.html ↑を見るとwritelinesの1回目の実行では1行目、 2回目は2行目に書き込むということのようですが、 それで正しいのでしょうか?
末尾に追記だろ 何が疑問なんだ
>>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')
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 ここから拝借しました。
Python的には… while candidatesは、リストcandidatesが空になったら終了する。 リストcandidatesを空にするための操作(要素の除去)は、remove(要素)や、del candidates[添字]で行なっている。
他はあまりPython関係なさそうなので省略するけど、 各々の変数の役割を整理すれば、構造を掴むのは難しくないでしょ。
条件式の等号や不等号を省略するコーディングは 望ましくないとする専門書もある。俺もそう思う。 条件式の書き漏れの可能性を残すし、バグの元でもある。 この場合、while candidates != []と書くべき。
俺はそう思わない(主観)し、望ましいとしている専門書もある(ソースを提示しない)。 ゆえに等号などは省略すべき。 こんなもん宗教でしかねえのに、べきだべきでない語るんじゃねえ。 俺はこうしてるに留めろや教祖様。
聞いてないことまで語る奴ってウザいよね
初心者スレだからね。 良くない習慣を身につけないよう きちっと指導するのが俺ら先達の努め。
プログラマレベル3が調子に乗ってるねえ お前等いつから教師ヅラできるほど偉くなったんだ? 平プログラマーのくせに
>>733 ありがとうございます。
そういう意味なんですね。条件式がないのは初めて見たので戸惑いました。
もう少し自力で考えてみます。
その習慣が正しいって保証は、どこの計算機の神様がしてくれるんでしょうね。 ちょっと信仰してみたいから、教えてよ。
そんなに熱くなってどうしたのさ。 現に、初心者からこういう質問が上がるってことは 理解しづらいコーディングだという証拠だろ? Pythonはわかりやすいコーディングをよしとする言語だから そういう悪しき習慣は積極的に排除していこうじゃないか。 ここは日本のPython教育の最前線でもあるわけだし。
お前みたいに一般化して語る人間が大嫌いなんだ。
よしとするだあ?んなもん一部の人間が言ってるだけで普遍の真理でもなんでもねえだろが。 受け売りだけで分かったような面しやがって、てめえで考える脳も判断する脳も持ってねえだけだろが。 だから教祖と信者ってんだよ。
745 :
733 :2013/01/02(水) 13:14:23.81
掲示板でコーディングルールといった思想や経験則を語るのは、やっぱり無理があるよね。
>>743 自分のコーディングスタイルをダメ出しされて逆ギレ?
それは視野が狭いよ。このスレは君のためじゃない、
初心者のためにあるんだ。
現に初心者が理解できず困っているじゃないか。
そんなコーディングはやめよう。
君がこのやり方で条件式を書く限り、書いたソースを見た
誰かが真似をして、それがまた新たに理解の妨げとなる。
この連鎖を断ち切らなきゃいけない。
ちょうど新年だから今年から直しなさい。
条件は手抜きせずきちっと書くこと。
>>745 C とか Perl スレならいざ知らず Python スレなんだから、
>>735 程度は
当たり前かと思ってた。
と言うか、エラーにしろよ とすら思う。
なんでだよw while expression: のexperssionは条件式じゃなくて、真偽値だろ? 条件式の結果が真偽値だから条件式を入れても動作するだけで。
candidates は真偽値なのかよ。
PhytonのCで作ったモジュールで引数を複数受け取ることはできますか?
>>750 出来るよ。
ドキュメントの「Python インタプリタの拡張と埋め込み」
1.1. 簡単な例
1.7. 拡張モジュール関数でのパラメタ展開
辺りを読もう
ありがとうございます。 やってみます。
> コーディング スタイル Pythonの場合、と前置きはつくけど PEP8では、空のシーケンスがFalseになるのを利用するのを推奨してる != [] だと、リスト以外に対応する場合、書き直しが必要になり汎用性が欠けるし、 実行効率の面でも若干冗長。
> 条件式の書き漏れの可能性を残すし、バグの元でもある。 こういう思考のやつはセンス無いから消えてほしいわ
手配師が考えた規約とかゴミクズだから
補足、一概に条件式の省略を推奨してるわけではないよ。 None と 0 を区別する場合等、省略しないで明示的に書いた方がいいケースもある。 googleの方のスタイルガイドの方では、その辺、推奨するスタイルとその根拠・理由にも言及してる。
>>756 > googleの方のスタイルガイド
どこにあるの?
URL plz.
758 :
733 :2013/01/03(木) 08:14:34.84
>>757 正にその引用部分でググると、5位くらいのところに出てくるぞ…
テンプレにすら書いてあるPEPすら読んでない似非回答者にはお引取り願う 切に、願う
>>746 そもそも不毛な話だから止めろと言われてるのに、良い悪いに終始してる時点で頭腐ってるだろ、お前
一家言ある奴ってのは本質的に言い争いするのが好きだから。 集団の中にいられると火種になるし最高に迷惑なんだけどねえ。 知らぬは…とやら。
>>760 不毛じゃないよ。
初心者を惑わせる悪い習慣を改めようという意見がなぜ不毛なの?
今までやっていたから、PEPにあるからという受け身な理由は
理由にならない。現実をよくするために行動しよう。
そろそろ死ねよ生ゴミ野郎
誰かに意見されたからなんて最高に受け身だと思うけど ブーメラン ブーメラン
自分が(実在するかどうかも不明な)専門書を傘に喋ってる癖にこれだよ。 舌が2枚に割れてんだろうな、蛇だけに。
>>762 今の時代に PEP が大事にされる理由をちゃんと理解しないと
単なる自己中の構ってちゃんにしかならないよ
惑って結構じゃないの
コーディングスタイルに関する書籍なり文書なりが色々ある中で、 「俺の主張はこの文書に基づいてる」と言えないってことは 勉強してないだけでしょ。井の中の蛙。 この手の人は「このコードは俺が見慣れていないから禁止」と言うんだよね。 勉強しない俺が偶然慣れ親しんだコードに合わせろとかいう、その手の アフォが2人いたらまとまらんだろうが。気づけよ。 よっぽどおかしなコーディングスタイルで無い限り、合わせることに意味がある。 PEP8使え。(PEP8はよくできてるよ)
せめてそのコーディングスタイルの理由ぐらい理解しようよ。
気が済むまで専門書読んでてね〜ボクちゃん。 あと死ね。
pass
カルシウム足らないキチガイが新年早々暴れてたでござる
過去形するには10年早い
幕の内からスレ野比てると思ったら全部自演だったでござる
質問です。 以下のプログラムが動きません。 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)
フォーマット演算子はモジュロであってアンパサンドではない
>>776 うまくいきました!!
ありがとうございます。
まだ始めたばかりで構造とかはよくわからないのですが、調べてみます!
ありがとうございます。
質問です。 ファイル単位のモジュールを初期化するスタンダードな方法ってありますか? 現在ファイル数にして10数枚に分かれた一つのプログラムをオブジェクト指向で書いています。 今は初期化が必要なモジュールはファイルの先頭に def init(): って関数を書いてそれをファイルの最後の行で init() として実行してます。 init()の中では主に configというモジュールで読んだiniファイルデータをシングルトンのクラスに保管してあるので、 それをimportしてちょっと加工したりしていろんなクラスにクラス定数として渡してます。 ディレクトリ単位のモジュールは__init__.pyというファイル内で初期化するのが一般的なようですが、 ファイル単位でのやり方や定石、および「俺は個人的にこう書いてる」っていうのがあったら知りたいです。 もしくはこういうやり方自体Pythonicではないのでしょうか?
>>779 再度呼び出されたりしてはいけないものは、関数にせず、モジュールのトップレベルに直で書く。
関数にするなら、名前に _ 接頭子を付けて非公開関数だとの意図を示す or 呼び出した後にその関数を del して後始末。
不用意にモジュールの依存関係を作ると、再利用が難しくなったり単体テストが面倒になるので、
自分なら、初期化はなるべくクラス/インスタンス単位で行えるように設計する。
コマンドプロンプトで以下を実行しました リストにはデータが入るのに タプルには入らないのはなぜでしょうか >>> 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 ()
list(a)の段階でイテレータを列挙しきってるから
>>782 もう一度b = list(a)をやったらbも[]になりました
むむむ、イテレータオブジェクトって一度きりの使い捨てなのですね…
すると二度使うことを目的としてイテレータオブジェクトを
変数(ここではa)に代入する意味はないということですね
巻き戻せないんか?
> すると二度使うことを目的としてイテレータオブジェクト イテレータって省メモリ化と、速度向上を目的としているから。 イテレータさんとしては、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使うと速度も向上するって聞いた。
>>785 二度使いたい場合は
リストやタプルに保存してから処理するより
イテレータをもう一度作る方がマシですね
勉強になります
知恵かしてけれ、パス切ってみたりするのだがインポートできない、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
from PyQt4 import QtGui
も駄目なんだろうなってのは置いておいて、
>>787 の書き込みだけじゃどうしようもないぞ。
他にも何か言ってないか?
言ってるんだったら、出し惜しみせずに全部出して。
sys.modules['PyQt4'] は、なんて言ってる?
↑が返すフォルダ以下に、QtGuiっている?
あと、どうやってPyQt4入れたのか知りませんが、
Pythonの別バージョンのPyQt4入れたんじゃないかとか。
>>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__(
補完はこう
>>789 PyQt4は入ってるんだ。
Qt4自体は動いてる?どうやって動作確認した?
簡単なdemoを持ってきて、"Qt4"が単発で動くか確認しないと。
動くなら、今度はPyQt4の問題となりそうだけど。
一応断っておくけど、cygwin界のQt4が動作することを確認してね。
cygwin界外の、windowsのQt4の動作確認されても困るからね。
新規でPyQtを選択する理由って何?
792 :
779 :2013/01/07(月) 04:02:16.53
>> 780 返事が遅くなりました。ありがとうございます。 不要な中間変数でglobal空間が汚れるのが嫌で関数にしてたのですが その後のことを考えるとなんらかの隠蔽をした方がいいですね。 関数ごとdelしてしまうというのは発想にありませんでした。 再利用や独立性を考えると設定的なパラメータは仮のデフォルト値を上書きする形で外から渡した方が良い気もしつつ、 単体テストを考えるとそれぞれのモジュール内で処理した方が気楽な気もしつつ。 でもおそらく迷うということはそもそもの設計がぬるいんでしょう。 参考になりました。
793 :
788 :2013/01/07(月) 18:17:55.63
どうやらCygwin PortsのPyQt4が腐っていたようだす インストーラーと格闘中にパッケージにPySideがあるのを発見したので入れてみたころ、作動しやすた お騒がせしやすた
書籍に「タブは空白文字が良い」と書いてあったのですが、 pyscripterはタブを空白文字にするということはできるでしょうか?
初期でなってました すみません
Pythonの外部モジュールを普通にソースからimportしても関数のコード補完が効かないのですが 何か設定して動かすことはできないのでしょうか?環境を以下に記します。 環境 Windows 7 32bit SP1 Portable Python 2.7.3.1(Python 2.7) エディタ Pyscripter 2.5.3 外部モジュール OpenCV2.4.3 です。よろしくおねがいします。
>>796 それはエディタの仕様
ちゃんとしたIDEだと補完してくれるはず
>>798 ちゃんとしたIDEってEclipseですか?
>>796 手元だと、以下の環境で補完候補が表示できます
Windows 7 64bit SP1
Python 2.7.3
PyScripter 2.5.3.0
OpenCV 2.4.2 + numpy 1.6.2
組み込み関数all()の仕様に疑問が… >iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します とあるのだけど、例えば空リストをallに食わせるとTrueだということだよね Python使いの感覚では、空リスト=Falseが自然だと思うのだが なぜこんな仕様なんだろう?
「iterable の全ての要素が真ならば True を返します」 の対偶は 「iterable のいずれかの要素が偽ならば False を返します」 になるわけで、 偽となる要素が存在しなければ真になるんじゃないの。 もしくは iterable は集合であると考える。 all(iterable)が真であるなら、 all(iterableの部分集合)も真である。 空集合は任意の集合の部分集合であるから、 all(∅)は真とするのが妥当なんじゃないの。
空のリストにall関数を適用したいと思ったことがなかったから気づかなかったな
後者の方がイメージはしやすいと思った
対偶ではないけどな
「iterable の全ての要素が真ならば True を返します」 の対偶は 「iterable のいずれかの要素が偽ならば False を返します」 になるわけで、 偽となる要素が存在しなければ真になるんじゃないの。 SQLでNULLの扱いに苦労するタイプですねわかります
>>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 全ての要素が真ならば真を返す関数において
負論理値の代表格である空のiterableが真となるのは
一見矛盾した仕様に見えるということ
名前に騙されてないか? all() の定義は「全ての要素が真ならば真を返す関数」ではなく 「全ての要素中に真でない要素がひとつでもあれば偽を返す関数」だぞ
つまり本当は数学が苦手なのではなくて国語が苦手だったってこと?
>>812 わからん
空データには真になる要素も偽になる要素もないのに
なぜ真にするのか
>>813 それが、リファレンスには
「iterable の全ての要素が真ならば」とあるんだよ
その後ろに「もしくはiterableが空ならば」とくっついているので
今回の疑問提起に至ったわけだけど
>>815 どこに載ってんの?
見つからないんだけど
リンク貼って
>>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 失礼いたしました。
>>> all([])
は、Falseを返すよう仕様を直すべきと思うけど、難しいかな?
なんで、こんな糞な仕様が通ったんだろうね。
と書いたら、>819に教えられた。 数学的な定義によるものでしたか。 一つ勉強になりました。
自分のちっぽけな脳みそに収まる程度の常識が常に正しいなんてよく思えるね
数学はともかくall([])が真になってほしい用途は色々思いつくので、 どっちかはっきりしてればそれでいい。 例えば0個以上の処理の結果をリストにして、すべてOKを知りたいとか。 どんな場合に偽になってほしいんだろう?
>>815 あほやなおまえ
>「iterable の全ての要素が真ならば」とあるんだよ
>その後ろに「もしくはiterableが空ならば」とくっついている
ならなんの問題もないやろ
>all() の定義は「全ての要素が真ならば真を返す関数」ではなく
>「全ての要素中に真でない要素がひとつでもあれば偽を返す関数」だぞ
となんの矛盾もない
>>824 とりあえずお前はここまでのレスをちゃんと読んでからコメントすれ。
>>802 は、
(もしくは iterable が空ならば)
を見落とした馬鹿。
どうやったらそんな馬鹿な発言が出来るのか、理解に苦しむ…
馬鹿には無理
not any([])
pass
|:::ハ:.:.:.:.:.: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| /
./ ヾ.、 ,. ' ´
相手が分かってないことを分かってないのだと分からせるのが、コミュ力の高い人。
低くていいから消えろ
ある拡張子を持つファイル名を抜き出したい場合、 どうやって正規表現書いたらいいでしょうか? 拡張子は、"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]をいきなり抜き出したいのですが、無理でしょうか。
好きじゃない以前に2案だって余計なオブジェクト生成してるだろうに あなたの美観が意味不明だからなんともいえない 単にソースコード上に見えなければそれでいいってこと?
3案は本命+2案ですので、好きではありません。 本命のみ抜き出したいのです。 2案も余計なものは抜き出しておりませんが、 後でくっつけ直すのが好きではありません。
この手の質問って漠然としすぎててウンザリするよな。 [n[0] for n in re.finditer('(([a-z]+)\.(txt|html))', 'abc.txt def.html')] これは?何が不満だ? 仕方ないからお前のママじゃねえけど相手してやるよ。
動かないのが不満
finditerが返すのはmatchなので
[n.group(1) for n in re.finditer('(([a-z]+)\.(txt|html))', 'abc.txt def.html')]
http://ideone.com/7cJzXF が正しい
長いのが不満 内包表記が不満 Matchを無駄に生成してる(←誤解です)のが不満
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'))
リファレンスを穴が開くほど読んでりゃこれでいいと分かる import re print re.findall('(?:[a-z]+)\.(?:txt|html)', 'abc.txt def.html') ?:を指定するとグループ化しつつも後方参照できなくなる
843 :
842 :2013/01/13(日) 17:14:00.29
というわけでママの座は俺のものだ 異論はないだろう
どうぞどうぞ
845 :
デフォルトの名無しさん :2013/01/13(日) 17:27:42.18
それなら最初のグルーピングも外しちゃっていいな。 re.findall('[a-z]+¥.(?:txt|html)', 'abc.txt def.html')
あ、本当だ 見落としてた
>>> re.findall('[a-z]+\.(?:txt|html)', 'abc.txt def.html')
[]
:||:: \おい、隠れても無駄だ ゴルァ! ドッカン ゴガギーン
:|| ::  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄_m ドッカン ☆
:||:: ___ ======) ))_____ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
:|| | | | ̄.ミ∧_∧ | | ────┐||:: ∧_∧ < おらっ!出てこい
>>845 ,846
:|| |___| |_..( ) | | .___ │||:: (・Д・ ) \____________
:|| |___| |_「 ⌒ ̄ ,|.. |. .|.|||:: / 「 \ ::.
:|| |___| |_| ,/  ̄ .  ̄ ̄ ̄ │||:: | | /\\
:||:  ̄ ̄ ̄  ̄| .| :||│ ;, │||; へ//| | |. |
:||:: :; ; ,, :| :.| ||│ (\/,.へ \| | ::( .)
:||:: :; 冫、. . | .i .|:||◎ニニニニ\/ \ |  ̄
:||.:,,''; ` .. . :: . | ∧. |:||│::::/ │||::.:. .Y ./ ..:: ;;
:||:;;;: ;;.. ::::: 冫、 : .:: .| | | |.||│ 冫、 ;;;,,│||:;;;. | .| ........
:||:;;;: ..... .. ` / / / /::||│ ` .,;;;,,.│||:;;;. | .| ...:L
:||;::: # ..: ./ / ./ ./ ||│|三三三|. │||;;:..:: | .| . #.. :: ;;
:||;::: #. ..: :::::: (_) .(_).ミ||│ │||;;;k、,,,|,(_).. ,,, :::
 ̄ ̄ ̄ ̄ ̄: ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
:::;三三;;;;;三三:::;;;;;;; :::::;;;;;::;;;;;;;;;;::::;; :::::;;;;;:::::;;;;;;;;;;::::;; :::::;;;;;:::;;;;;;;;;;::::;;;;;:::::::;;;;;;三
pass
849 :
デフォルトの名無しさん :2013/01/13(日) 21:24:16.69
大王烏賊
850 :
845 :2013/01/13(日) 21:29:19.76
>>850 俺には普通にバックスラッシュに見えてるが
>>851 自分の環境がおかしいの分かってて言ってるだろw
pass
ファイル名に二つ以上.あったら終わりだな。
>>854 その場合は正規表現を改良すればいいだけで、元の議論はどうやって正規表現の結果からファイル名だけを取り出すかだから。
元の質問者は満足したかな?
発想の貧困さを見ると全部自演かと
何でもかんでも自演と言う発想の貧困さ (w
わかりやすいな お前
>>858 みたいな自演は本当にわかりやすいよね (w
まったくだな (w
>>798 >>800 >>801 遅くなりましたが、回答ありがとうございました
Pyscriptの設定からIDE OptionのSpecial packageにcv2を追加すれば
PyscripterからでもOpenCVのコード補完を使用することができました。
Pycharmは使ってみたいのですが日本語ローカライズされてないみたいなので少々手が出しづらいです。
日本語に対応したらすぐ購入しようと思います。
まず対応しないだろうなあ 試用できるから試してみたら、案外英語のままでも支障無いと思う
RubyでいうherokuみたいなポジションのPython3.3が動かせる無料サーバの定番ってありますか? gaeは2.7なので・・・
pythonでネットワークするにはどうすれば良いんですか?
I can Python!! ha! ha! ha! ha!
import socket して、ライブラリリファレンス読んで、あとは頑張れ。
馬鹿には無理
ダメな奴は何をやっても
GAEはとうに無料じゃなくなったろ
fileには文章が書かれています。 * 私は〜 あなたは〜 ・ ・ ・ num = 0 for line in file: if line.startswitch('*') == True: ここで*をnumを数字の値に変換したいんですが、replaceではできません。 num += 1 何か良い方法はありませんか? よろしくお願いします。
ここで*をnumを数字の値に ではなく ここで*をnumの数字の値に でした。 すみません。
GAEは無料だろ今でも無料で使ってるぞ
>>871 ,872
"*" * num
あとif line.startswith("*"): でいいよ
str.startswith()はTrueかFalseを返すんだからことさらTrueと比較するのは無駄
なんか的外れ回答したかも 外れてたら仮にnum = 3 のときにどういう返り値なり結果が欲しいか書いて
>>874 ,,875
ありがとうございます。
Trueは取りました。
入力
* 私は〜
あなたは〜
* 君が〜
* 私は〜
* どんなときに〜
・
・
・
出力
0 私は〜
あなたは〜
1 君が〜
2 私は〜
3 どんなときに〜
・
・
・
です。
よろしくお願いします。
import re re.sub(r'^\*', str(num), "* わたしは〜")
>>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)
せっかく元がfor line in fileなのに、 lines = text.split('\n')するコスト意識の低さ。
>>879 頭おかしい人?
↓以下をコピペすれば動作するでしょ。
if line.startswith('*'):
私が試す場合に別file作りたくないから、
text作っておいたまでで。
>>876 にとって重要なのは、
>>876 の入力が出力に変換できることだよ?
2ch ってすごく頭の悪い人がいて、びっくりする。
最高に頭の悪い発言して下さいスレってまだあるっけ?
>>880 ○↓の行以下をコピペすれば動作するでしょ。
×↓以下をコピペすれば動作するでしょ。
馬鹿だから徒歩何分何円とか計算してんだろうな あほくせえ
自分ができないせいで、みなさん、すいません。
>>877 ,878
ありがとうございました。
得たい出力をえれました。
気にする必要ないよ >>> num = 12 >>> "* hoge*fuga".replace("*", str(num), 1) '12 hoge*fuga' reいらなかった
>>879 間違っています。
以上。
はい次の方。
外部ライブラリを使っているプログラムを第三者に公開する場合 そのライブラリも含めて公開するにはどうしたらよいのでしょうか。 例えば○○のライブラリが必要です と書いても そのライブラリが後から消える可能性や、バージョンアップで動かなくなる可能性もあるじゃないですか そういうのを回避する為に、標準以外のライブラリを全て含めて pythonさえ正常に入っていれば(python自体の互換性は置いておくとして)、例えオフライン状態でもそのコードに必要なファイルが全て揃っている という状態にするにはどうしたらよいのでしょうか?
cxfreezeでも使えば
pip freeze で一覧書き出して pip bundle で一式まとめzipの出来上がり 移した先でpip install
>>886 同梱したいって事だろうけど、ライブラリのライセンスに依るでしょ
> そのライブラリが後から消える可能性や、
> バージョンアップで動かなくなる可能性もあるじゃないですか
> そういうのを回避する
回避したいなら、そのライブラリ互換のモノを自分で書きなさいってこと
書けないなら諦めなさい
>回避したいなら、そのライブラリ互換のモノを自分で書きなさいってこと >そのライブラリが後から消える可能性や、バージョンアップで動かなくなる可能性もあるじゃないですか 消えてから(動かなくなってから)考えろ
C言語のdo〜whileのような まず一度処理をし、その後脱出条件になるまでループをする処理は Pythonではどう書けばいいんでしょうか
892 :
デフォルトの名無しさん :2013/01/19(土) 10:33:30.96
while True: hoge if 脱出条件: break
堅い堅い頭が堅いよきみぃぃぃぃ
895 :
デフォルトの名無しさん :2013/01/19(土) 15:11:17.76
皆さん最初にPythonを始めた頃 どんなアプリを作りましたか?
hello world sqlite使って予定管理帳 大体誰かのをimportしているな
自動2ちゃん投稿スクリプト そのつもりないのに荒らしツールだ!って言われたので公開してない
imagemagickをマルチプロセスで実行するシェルスクリプト
899 :
デフォルトの名無しさん :2013/01/19(土) 15:36:21.17
GAEでtwitterのbot
900 :
デフォルトの名無しさん :2013/01/19(土) 15:58:19.59
# encoding: utf-8※ここは変更できません a = raw_input() raw_inputで入力される内容をユニコードとして入力したいのですが、どうすればいいでしょうか?
すまない、UTF-8以外は帰ってくれ
要するにraw_inputから入ってくるデータがu'hoge'になってればいいって認識であってるか?
>>886 py2exeに関連するものを全部パックするオプションがあるよ
手軽なのはラップしちゃえばいいんじゃない raw_input = lambda :__builtins__.raw_input().decode('cp932') sys.stdinにデコーダー被せてもいけるかもしれないが 他にも影響しそうで怖い
UTF8版のGit入れてgitbash使ったらいけた
>>906 <lambda>() takes no arguments (1 given)
というエラーが出てしまいました。
prompt使うのね じゃあこう raw_input = lambda *p:__builtins__.raw_input(*p).decode('cp932')
>>909 UnicodeDecodeError: 'cp932' codec can't decode bytes in
position 0-1: illegal multibyte sequence
とでてしまいます。
どうすればよいでしょうか?
勝手にWindowsだと思い込んでたけど環境は一体なんです?
>>913 何が原因なんでしょうね?
コードページは932で、ターミナルは使ってないです。
ありがとうございました。
position 0-1ってことはデータの先頭に何かある雰囲気
>>901 # encoding: utf-8
# ※ここは変更できません
こうやったら解決とか、それはないかー
あー何となく分かった
日本語書いてるでしょ、それが良くないと思う。
sjis, euc-jp, iso-2022-jp色々あるんだよー
日本語消してごらん、# 使うんじゃなくて、文字通り削除する。
>>916 日本語の文が入力なので消すことができません。
何か奇怪な方向に向かい始めたぞ??
ごめんなさい。 日本語消すってのは入力に日本語を入れるなって意味ではないのですか?
920 :
デフォルトの名無しさん :2013/01/19(土) 21:46:18.87
>>919 何を入力したか具体的に書けよ
あと、次の文に同じ入力を食わせたときの結果を書け
print repr(raw_input('hoge>'))
>>920 入力:彼は東京から来た
u'\u5f7c\u306f\u6771\u4eac\u304b\u3089\u6765\u305f'
入力をKNPに入れます。
print repr(raw_input('hoge>')) これでu'\u5f...'なんて出てくるはずないんだがな・・・
もう面倒くさいからソースプリーズ
>>922 自分でもraw_inputとプログラムの中に入力を書くを比べてみたところ差異が確認できました。
差異って何だよ…
あーソースくれるならideoneとかじゃなくてそのものをzipでくれ テキストだけ貼られるとエンコーディング大丈夫なのかとか分かんない
Tracebackもファイルパスとか以外は省略せずに全部貼れ
なんかちぐはぐだな 指示したことが正しく実行されていない気配がある 聞いてる話も本当にその方法で行われているのか
画面が見れれば3秒で解決しそうなだけに意思疎通が微妙でイライラする。寝るわ。
#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() です。
人の話聞けよてめえ貼ったおすぞ
エンコードはUTF-8のBOM付きです。 遅くなってすいませんでした。
すいません、複数人いらっしゃる見たいだったので。 zipでもあげなおします。 少々お待ちください。
まあ、不審な点はない。 じゃあ、なぜ? 入力って xxx.py < input.txt とかやってる?
標準入力からファイル突っ込んでる可能性かー。 そういえば、エラーが起きたの入力データの先頭だったよな。 それBOMじゃねえの?
すいません。 パソコンを再起動したらきちんと出力が出ました。 お騒がせしました。
なんでだよwこっちがなんでなのか聞きたいよw
ズコー
良かった、問題なんてなかったんだ。
本当にすいませんでした。 ありがとうございました。
これで一人のPython戦士がよちよち歩きを初めたんや 良かった良かった
python2か3でwindowsの画面右下のポップアップを出すにはどうすればいいですか?
画面右下のポップアップってなんのこと? Shell_Notifyicon のつもり?
ポップアップ出すプログラムを書いてサブプロセスとして走らせる
windowsな人だったらそれで通じるのかも、notifyとかballoon tipsの事だよね。 IronPythonならNotifyIconのShowBalloonTipsで簡単に出せるけど、dllのAPI叩くのは結構手間掛かる ctypesよりはwin32モジュール使った方が多少楽かな (win32gui.Shell_Notifyicon 辺り。それでも数十行規模になると思う) GUIのツールキット使うともう少し楽 (qtのQSystemTrayIcon 等。多分、十数行位の規模できる) 探したこと無いけど、もっと簡単に扱えるライブラリ在るはず
wxPython最強です
wxPythonだとユーティリティ的なクラスが用意されてるので、 wx.Appのインスタンス作った後に、これだけでok wx.NotificationMessage("title", "hello").Show() 通知領域を使う方法では、レジストリで表示のon/offが出来るんだけど、 (フルスクリーンでの作業中はoffにしておきたい場合等には、まとめて設定出来るので便利) レジストリの設定に依存したくないなら、吹き出し型じゃないけど ToasterBox も通知用途に使える。
953 :
デフォルトの名無しさん :2013/01/21(月) 16:40:37.18
けど、ちょっと早くないか?
入力の例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の参照は最初のひとつしかできないので、参照した部分を消していくやり方を思い浮かんだのですが、 もう少し、スマートにできる方法はないでしょうか? 何か、良い案があれば教えてください。 よろしくお願いします。
ソートしてあるという前提がないならソートしてあるテストデータを書いちゃ駄目だよ
listは組み込み型なので、その名前に代入するのは避けた方がいい
>>955 要素を2つずつ取り出すジェネレータpairwiseを作って
for value,keyin pairwise(data) として処理する.
ideone.com/pvhSaU
組のデータは組にしておいた方が色々と捗るぞ こんなふうに list = [(0,A),(1,A),(3,A),(5,B),(8,A),(13,A),(20,A)] 汚いものから綺麗なものを取り出す仕事は泥臭いと決まってるんだ 情報論的に
961 :
959 :2013/01/21(月) 21:04:00.96
自己レス 959は、元の仕様のリストに戻す過程で、無駄にタプルをたくさん生成する事になるので、その点はスマートさ(?)に欠けるかな。 ジェネレータのまま処理するか、扱うデータ自体を(key,value)のタプルのリストにした方が良い。
>>956-961 ありがとうございます。
扱うデータをタプルのリストにして行ってみようと思います。
A = 3 B = 4 A = 5 print B のようなことをした時に4と出力される時と、5と出力される時があります。 こういう違いはなぜでてくるのでしょうか?
>>963 それが完全なソースだとしたら、5と表示される事は在りえないと思うけど。
どのように実行してる?他に何か余計なことしてない?
考えられる原因は、モジュールにしてて、キャッシュや他のパスのものが読み込まれてたとか。
エディタで編集してるのと端末で実行したスクリプトのファイルが違ってたとか、そういった類の勘違いによるミスしか思いつかない。
一度、クリーンな環境で実行してみよう。
申し訳ありません。間違えました。 A = 3 B = A A = 5 print B でした。この時に3と5の場合があります。 モジュールはnumpyを使っています。
眼科池
>>966 codepadやらideoneで再現してくれ
>>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
似たようなスレが同時に立つとまぎらわしいな
つまりこういうことだろ。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
馬鹿しかいないなこのスレ
馬鹿鹿以内那胡熨擦礼
自己紹介乙
自分が答えられないからって 恥ずかしい
>>971 ありがとうございます。なんとなく理解出来ました。
今まで、「変数」と「オブジェクト」を区別できていませんでした。
>>964 丁寧に教えていただいたのに、説明不足で申し訳ありませんでした。
最初はそんなもの
リストのリストを検索して値があるか確認したいのですが、どうすればいいでしょうか? 入力データの例 [['他の値','他の値','A','他の値','他の値'],['他の値','他の値','B','他の値','他の値'],['他の値','他の値','D','他の値','他の値'],['他の値','他の値','G','他の値','他の値'],['他の値','他の値','S','他の値','他の値']] DとSの両方の値がある場合に処理を行いたいのですが、どうすればよいでしょうか? 確認したい場所は全部同じです。ここでは2番目
>>> 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'
いまいちわからん日本語だな
エスパーランクの低いものには分かるまい
>>> center = set([x[2] for x in L]) >>> center {'A', 'S', 'B', 'D', 'G'} >>> center.issuperset('DS') True
わからないならレスしないで下さい。うざいだけです。
>>982 ,985
ありがとうございます。
Trueの後の処理が、LのリストからDの要素が入っているリストを削除するのですが、
もう一回Lのリストのなかを検索して消せばいいですよね?
>>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
さっきから上手くコピペできてない。。。 うーん、、、ごめんねー。
... if L1[2] == 'D': inを使うのではなく、こうすべきだったという独り言。
list.index("a")を使うとaの最初のインデックスを取得することができますが、 listの中にaが複数個含まれているときに、aの最後のインデックスを取得するにはどうすればいいですか? やりたいことはaの最後のインデックスを取得してそれ以降の値を変換したいです。
rindexあんだろって言いそうになった そうかrindexは文字列だけだったな
>>> 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
破壊的だから好きじゃないけど、これも案としてどうぞ >>> L.reverse() >>> L ['Z', 'a', 'a', 'c', 'B', 'A', 'a'] >>> (len(L) - 1) - L.index('a') 5
スレも大鳥
コマンドプロンプトで値を与えると、リストのリストのデータができあがります。 いろいろな値をコマンドプロンプトで与えてそれを一つのテキストファイルに出力するには、どうすればよいのですか? リストのリストの出力の例 例1[["みかん"]["50円"][C][D]],["りんご"]["100円"][G][J]],......] 例2[["ぶどう"]["400円"][C][D]],["りんご"]["100円"][G][J]],......] 欲しいテキストファイル みかん,50円,C,D りんご....... ....... 例1の終わり ぶどう,50円,C,D ...... ....... 例2の終わり 3つめの始まり
、. _ _ .i ,. ヽ`//| /i.// ヽ. '| ト./ / i∧/ / / ̄ ̄ / / / ヘ⌒ヽフ (・ω・ )<世界平和を祈るお O┬O ) ◎┴し'-◎ ≡キコキコキコ
1000なら今年中にPython2消滅。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。