1 :
デフォルトの名無しさん :
2010/01/28(木) 22:43:01
2 :
デフォルトの名無しさん :2010/01/28(木) 22:47:32
>>> x "['c', 'c']" これを cc っていう文字列リテラルで表示したいです。 何を使用すればいいでしょうか。
>>1 乙です
>>2 "".join(eval(x))
これでいいんじゃね?
4 :
デフォルトの名無しさん :2010/01/29(金) 00:13:05
適当なこと書くなよw
>>2 s = reduce(lambda a,b: a + b, x)
reduceを使うのはオッサン
OS:windows7 64bit python:2.6.2 (32bit) py2exe:py2exe-0.6.9.win32-py2.6 の環境下で "icon_resources": [(1,"pyico")] として作成したプログラムファイルのアイコンがデフォルトのアイコンとなってしまいます。 このプログラムをXPのPCにコピーするとちゃんと指定したアイコンで表示されます。 この環境でもアイコンが見れるようにするにはどうすればいいでしょうか?
OSを32bitにする
Python 2.6です。 path=〜〜#削除したいディレクトリのパス この時、path以下を(ファイルを含め)全て削除するにはどうしたらよいでしょうか? os.removedirs(path)としてみましたが、 File "C:\Python2x\lib\os.py", line 170, in removedirs rmdir(name) WindowsError: [Error 145] ディレクトリが空ではありません。: '〜〜' と言われてしまいます。 よろしくお願い申し上げます。
14 :
デフォルトの名無しさん :2010/02/01(月) 03:17:50
超初心者です。 テキスト読み始め数日… クラスってのがいまいちピンと来ないんですが、わかりやすく言うと(例えると) どんな感じっすか?
>>14 個人的には、クラスに限らず、超初心者がいきなりわかりやすい一言表現とか比喩に触れても
まず意味はわからないし、場合によっては逆に混乱するんじゃないかと思ってる。
そういうのは、具体的なことがそこそこ手に付いてきた段階で、それらを頭の中で束ねる発想として
力を発揮するもので、まずは説明を読んでコード書いて……の繰り返しに専念すべきじゃないかな。
わかんなくても書けるよ。 おれは未だにclassがなんで必要なのかイマイチ 分からないけど、classつかってるよ。
必要かどうか迷ったときは必要じゃない時の方が多いような気がする>クラス クラスについて知る ↓ なんかよく分からんが怪しいオブジェクト指向本とか頼りに使い始める ↓ デザパタとか覚えて無駄に使いまくる ↓ (Java的なきっちりとした)クラス指向に疲れてくる ↓ 再利用を狙うんなら関数オブジェクトとかでもいいし、 ポリモーフィズムならダックタイピングでもいいし、 クラス指向が唯一の解ってわけでもない、とか気づく ↓ それでもOpenCV2.0のC++実装とかnumpyとかそれなりに便利だし オブジェクトも捨てたもんじゃねえかなとか思い出す ←いまここ
>>17 変数をまとめて管理できたら便利じゃね
→リスト
変数やリストや辞書や関数をまとめて管理して一発アクセスできたら便利じゃね?
→複雑な辞書
複雑な辞書作っちゃったけど、この構造使い回したい
→クラス
21 :
デフォルトの名無しさん :2010/02/02(火) 15:39:32
python の場合ファイル分けてモジュール化するだけでも実用になったりするからな class のありがたみがわかるのってフレームワークとか自作するときくらいじゃないかな
>>19 Python の class って辞書で作れるような
>>21 シングルトンならモジュール化だけでなんとかなるんだろうけど
インスタンスを幾つも生成したかったら結局クラスを使うことになるよ
クラスの話の流れで質問です class Hasher: def __init__(self,n,o): ABC = o def abc_hash(n): if hash(self,n) == ABC: print('-'*40) return True elif hash != ABC: print('-'*40) return False def re_hash(self): return n a = Hasher HasherクラスにHasher('検査する文字列',ハッシュ値のオブジェクト) を渡してBOOL値を返したいのですが ha = Hasher(abc, -1600925533) Traceback (most recent call last): File "<input>", line 1, in <module> NameError: name 'abc' is not defined ha = Hasher('abc', -1600925533) ha <__main__.Hasher instance at 0x18f46bc0> ha.abc_hash() Traceback (most recent call last): File "<input>", line 1, in <module> File "<input>", line 5, in abc_hash NameError: global name 'self' is not defined どうすれば良いんでしょうか
>>> class Hasher(object): def __init__(self, n, o): self.n = n self.o = o def abc_hash(self): if id(self.n) == self.o: print('-'*40) return True elif self.n is not self.o: print('-'*40) return False >>> ha = Hasher('abc', 31544672) >>> ha.abc_hash() ---------------------------------------- True ハッシュ値がどうたらは置いといてコンテキスト乱れまくってるぞ
だからスペースを& nbsp;に置換しろと(ry それはそうと、pythonでメンバ使いたかったら selfを第一引数にしてself.hogeだ
投稿側で を入れるか 閲覧側でdat読めば問題ない。
Jane Style使いはみんな既にやってるのかもしれないが一応。
Jane StyleのReplaceStr.txtを書き換え。。
<rx2>\s & nbsp; msg //(&n間スペース削除)
おぉ見やすい。なんで俺今まで気づかなかったのか。
他の専ブラでも出来るのかな?
普通のブラウザはGreaseMonkey使えたらできそうだな。
・・・と思って書いてみら出来た。Firefoxで成功。
// ==UserScript==
// @name Show top space of 2ch
// @namespace *
// @include
http://*.2ch.net/* // ==/UserScript==
(function(){
var nodes = document.getElementsByTagName("dd");
for(var i = 0; i < nodes.length; i++){
var after = nodes[i].cloneNode(true);
var msg = after.innerHTML;
msg = msg.replace(/\s/g, "& nbsp;"); //(&n間スペース削除)
after.innerHTML = msg;
nodes[i].parentNode.replaceChild(after, nodes[i]);
}
})();
Portable PythonのPyScripterを日本語化したいのですが どうすればいいのかアドバイスお願いします。 Portable Python 1.1 - based on Python 3.0.1 PyScripter v1.9.9.6
そもそもPortable Pythonの用途が不明。
一体そんな漠然とした質問でどうしろと。
Python製の2ちゃんブラってあります?
指定した実行可能ファイルが$PATH中に存在するか 判定するにはどうすればいいでしょうか?
subprocess.Popen()して、無かったらOSErrorが返るけど これではいかんのですか。実行してしまったらいかんのかな
which ls ; echo $? which foo ; echo $?
標準モジュールのwebbrowserが自力で探してたよ
sys.path.contains()
distutils.spawn.find_executable でできました。ありがとうございます。
C++のコメントに一致するPython正規表現を書いて/教えてくださいませんでしょうか?
target_str = open("hoge.cpp").read()
で取得したtarget_strを対象とし、
hoge.cppのC++のコメントに一致する部分にマッチするところを
全て抜き出しリストにして欲しいです。
////////////////C++のコメント/////////////////////////////
//でコメント導入を示し、行末までがコメントになります。
var = 42; // この部分がコメント
また/*と*/で囲むと、複数行コメントになります。
/*この部分がコメント。*/
/*この部分がコメントです。
この部分もコメントです。
この部分もコメントです。
*/
/* */の中に/* */の対を入れることは出来ません。/*の後に再び/*が来ても、それはコメントの一部と思われるため、無視。一方、最初に出現した*/でコメントは終わりと取られます。
/* コメントを /* 入れ子 */ にすることはできません。*/ ← error!!
ttp://www.icepp.s.u-tokyo.ac.jp/~sakamoto/education/atlasj/cplusplus/l1.html より引用・改変。
import re comment = re.compile(r'(?<=//)[^\n]*|(?<=/\*).*?(?=\*/)', re.M|re.S) a = ''' //////////////////////comment1///////////////// var = 43; // comment2 /* comment3 comment4 */ /* comment5 */''' comment.findall(a) => ['////////////////////comment1/////////////////', '', ' comment2', ' comment3\ncomment4\n', ' comment5 ']
44 :
43 :2010/02/07(日) 12:49:42
42のコメントの定義だと /* foo // bar */ foobar */ は "foobar" までコメントになるけど 実際gccで試してみたらエラーだな
//が先に評価されて /**/がその後で評価されるってことか
コメントは面倒だぞ cout << "/* comment? */" << endl; とかもある
>>42 re.compile(r'(//[^\n]*$)|(/\*.*?\*/)', re.M | re.S).findall(target_str)
48 :
47 :2010/02/07(日) 13:07:44
>>44 > 42のコメントの定義だと
> /* foo // bar */
> foobar */
> は "foobar" までコメントになるけど
ならないだろ。
42のコメントの定義でも。
> 実際gccで試してみたらエラーだな
無論そうだろう。
50 :
42 :2010/02/07(日) 13:40:01
すみませんみなさん。 確かに /* // */ のようなケースについては記述をしていませんでした。 C++のプリプロセッサは基本的に前から見ていくので、 最初に出現したコメントが優先されます。 (//を無条件で優先するということはありません。) 従ってご指摘の通り、 /* foo // bar */ foobar */ は最初の/*を見た瞬間から*/が出現しない限り全て無視する(コメント扱いする)こととなります。 よってC++プリプロセッサは//を見ても何とも思わずコメント扱いを続け、 その後最初に */を見た瞬間にコメント扱いを終了します。 よって "foobar" までコメントになるのでははなく、 /* foo // bar */だけがコメントとなりfoobar */の部分でコンパイルエラーとなります。 (当方、g++, VC++, dmcで確認しましたが全て同じ動作でした。)
51 :
42 :2010/02/07(日) 13:45:20
もう正規表現使うよりparser書いた方がいいんじゃないか
文字列に含まれるコメントがなぁ・・・ import re a = ''' //////////////////////comment1///////////////// var = 43; // comment2 /* comment3 comment4 */ /* comment5 */ " /* comment6 */ "''' comment_and_string = re.compile(r'(?<=//)[^\n]*|(?<=/\*).*?(?=\*/)|"[^\n]*"', re.M|re.S) [ x.group(0) for x in comment_and_string.finditer(a) if x.group(0) and x.group(0)[0] != '"'] re.scannerでparser書いた方がわかりやすいかも
54 :
42 :2010/02/07(日) 15:07:51
みなさんありがとうございます。 正規表現で一気にやらず、処理を分けるかparserを書くことにします。 ありがとうございました。
正規表現ミスってた comment_and_string = re.compile(r'(?<=//)[^\n]*|(?<=/\*).*?(?=\*/)|"[^\n"]*"', re.M|re.S) シングルクォーテーションとダブルクォーテーションの区別が付きにくいフォントだと かなり終わってる
49は穴だらけの仕様を書いてしまうか、記載外の処理を思い込みで実装するタイプ
詳説正規表現にあった気がするよ
>>59 俺は持っていないが、
さすがに文字列中のコメントには対応できていないんじゃないか?
(文字列の中にあるのは除外すべきってやつ。)
六章末にあるが誰も引用したがらないだろうな・・・
Google booksで覗けるから未読の人は見てみるといい
正規表現のスレに行って聞いてみるわ。
64 :
60 :2010/02/07(日) 16:10:01
詳説正規表現をGoogle booksで見てみたけど、 やっぱり Does not support multi-line comments状態だね。
>Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems >ある人達が一つの問題に直面した時,彼らは「ああ、正規表現を使えばいいのか.」と考えた。今彼らは二つの問題を抱えている。 >- Jamie Zawinski
話は変わるけど
>>43 にある通り、正規表現の先読み後読みって非対称的で可読性低いよね
由来が由来だから仕方ないけど、文字列処理だけPythonicに書けないってのがなんかなぁ……
正規表現の代替って無いもんだろうか
そもそも、正規表現で解析できるのはregular languageだけだ。 行コメント、複数行コメントと文字列リテラルが絡むとregular languageの範囲を超えて context free languageになるから、それようの構文解析器が必要になる。 構文解析ライブラリを使って自分で解析するか、 Pygments みたいなライブラリを 再利用するべし。
>>65 英語かっこいい
何で日本人はこう気の利いたこと言えないの?
劣等民族だから?
>>70 俺は正規表現厨氏ねって思ってるから安心して
>>53 ,55は "/**//3" をうまく扱えないな
>>53 /* test
char *hoge = " */ ";
*/
>>73 先読みを使ってるせいで
複数行コメントの終端を表すスラッシュがマッチ後も消費されないから
単一行コメントのスラッシュとしても使われてしまう
ってことか。なるほど。
>>75 それコンパイルできる?
gccだとエラーになった
コンパイルエラーが正解
>>75 /* test
char *hoge = " */ ";
*/
は
/* test
の/*を見たところからコメント扱いを続けるため。
char *hoge = " */ ";
*/
は
";
*/
だけが残される。
よってコンパイルエラー。
返事かなり遅れました...
僅かな時間を見つけて
>>25 ありがとうございます
is notですか...
参考になります
一致しない時に返すという条件を定義するんですね
あと__init__とかって組み込み型を継承しないと使えない特殊メゾットなんですね
>ハッシュ値がどうたらは置いといてコンテキスト乱れまくってるぞ
混乱してました。英語のリファレンス読んだり、日本語の読んだりして
あと僕が思い描いていた処理とは少し違うようです
でもとてもいいヒントになりました
http://codepad.org/Nxv7UZul こんな感じです
>>26 覚えておきます...
メンバってメンバ関数のことですよね
調べてみます
>>27 すいませんでした
今度から活用させていただきます
あと最近Pythonと文法が似ている(と誰かが言っていた)JSにも挑戦中です
ブロック体で表現する以外にthisだとかvarだとか...
Pythonでも;を付ける癖が...
ありがとうございました
悪いんだが、君が今やろうとしているオブジェクト指向というか、クラスシステムの部分は1番似てない。 それに、varをはじめとするスコープの仕組みもだいぶ異なる。 JavascriptとPythonで似ているところといえば、 ジェネレータとか、関数がオブジェクトとか、ある程度使いこなせてる人が「便利だな」と感じる部分。 だから生半可な気持ちで掛け持ちすると火傷しそうな気がする。
>クラスシステムの部分は1番似てない そうかな?
プロトタイプベースとクラスベースだから、まぁ違うよね。 PythonとJSの文法を似てると言うのなら、CもJavaもRubyもHaskellも似てるうちに入る。 以後その誰かの言うことは信用するな。
JavaScriptはモジュールがないのがな Pythonのモジュールシステムが便利すぎるだけだが
Python って頑張ればプロトタイプベースで書ける
rindex() と index() って何か違うの。
>>86 index()は左から探し、rindex()は右から探して最初にヒットしたものを返す。
>>a = "test"
>>a.index("t") == 1
True
>>a.rindex("t") == 3
True
頑張ってるのってかなり遅い
90 :
質問 :2010/02/09(火) 02:15:16
OS: Windows7 x64
Pythonのバージョン: Stackless Python 2.6.4
という環境で
http://www.riverbankcomputing.co.uk/software/pyqt/download からPyQt-Py2.6-gpl-4.7-1.exeをダウンロードしてインストールしました。
そして実行すると以下のようなエラーが出ました。
> cat QTHello.py
import sys
from PyQt4.QtGui import *
app = QApplication(sys.argv)
button = QPushButton("Hello World", None)
button.show()
app.exec_()
> python QTHello.py
Traceback (most recent call last):
File "QTHelloWorld.py", line 2, in <module>
from PyQt4.QtGui import *
MemoryError
悩みましたが解決方法がわからず、
皆さんのお力をお借りしたいと思い、
質問させていただきます。
Windows Vista 32bit Python 2.5 そのソースのままで動いた 64bit 環境では知らん 関係ないかもしれないけど from PyQt4.QtGui import * をやめて下のように書いたらどうなりますか? import sys import PyQt4.QtGui as QtGui app = QtGui.QApplication(sys.argv) button = QtGui.QPushButton('Hello, work', None) button.show() app.exec_()
64bitを窓から投げ捨てろ!
Hello, work
94 :
質問 :2010/02/09(火) 10:56:41
>>91 そのソースでも同じくMemoryErrorがでました。
64bitというのが怪しいのでしょうか・・・
96 :
質問 :2010/02/09(火) 11:22:03
>>95 なるほど、PyQTは行儀の悪いライブラリだからStackless Pythonでは動かないんですね。
97 :
質問 :2010/02/09(火) 11:50:04
解決しました。 PyQTのソースを弄ってまでStackless Python上で使い続ける気が無かったので、 普通のPython上で実行してみたところ正常に実行できました。 ありがとうございました。
でもこれからは64bit全盛なんだろうなぁ・・・ 俺もそろそろ64bitに移行したいが、こういうトラブルが怖い
この場合64bitは関係ないと思う。Stackless PythonというPython実装の問題。
Stackless Python でもほとんどの拡張モジュールがそのまま動く。 PyQtというかSIPが行儀の悪い拡張をしているのが問題。
r8 と r9 をどっかで潰してるんだろうな
1: #!/usr/local/bin/python 2: 3: spams = [ "spam", "egg", "ham" ] 4: for i in spams: 5: if i != spam 6: print "spam" 7: print i 8: print "SPAM! SPAM! SPAM!" ネットで拾った文で適当に動かしてみてるのですが5行目がおかしいみたいで動きません どういじるべきなんでしょうか?
よくわからんけど、5行目は if i == "spam": なんじゃねの?
動きました ありがとうございます
__hoge__ ↑こういう前後にアンダーバー2つついてるものの名前教えろや
特殊メソッド
サンクス。褒美をやろう(・∀・)つI
print 'aaa' if boolean_flag : 〜ここ〜 print 'bbb' print 'ccc' ################################################### 上のソースにて、〜ここ〜の部分に何か入れて、 このプログラムを終了してしまいたいのですが、 どうすればいいでしょうか? boolean_flagがTrueの時にプログラムを終了したいということです。 よろしくお願い申し上げます。
sys.exit()
raise SystemExit でおk。処理内容は等価だし。
文字列sのなかに、 "hogehoge" という文字列が含まれているかを調べるにはどうすればいいのでしょうか? if s.includes("hogehoge") : みたいなことをしたいのですが。 よろしくお願い申し上げます。
if "hogehoge" in s: print('s contains "hogehoge"')
>>113 if "hogehoge" in s:
これでできるのですか。
ありがとうございます。
助かりました。
if spam in mail: みたいなフィルタ書けると嬉しいな
何を意図しているのか正確には分からないが、__contains__をオーバーロードすればいいと思う
Process.kill(:USR1, pidi) 他の動作中プロセスに割り込みするにはシグナルしかないの? WindowsにはUSR1とかない?から、違う方法使いたい。
PCゲームのmodを作成しようと、windows7 64bitのパソコンに Python2.6.4 Windows X86-64をインストールし、Path、PATHEXTの設定を 行いました。 しかし、拡張子.pyのファイルをPythonで開くことができません。 正確には一瞬ウィンドウが開くのですが、瞬時に閉じてしまいます。 Python自体は正常に動作します。 どのように対処すれば良いでしょうか? 初心者以前の質問で申し訳ありませんが、助言をお願いします。
えーと何か処理を書けばいいのではないでしょうか
処理が終了したから閉じた。 右クリックしてidle上で実行しる。
コマンドプロンプトから実行するか スクリプトの最後でraw_inputを使う
125 :
121 :2010/02/16(火) 01:12:42
126 :
デフォルトの名無しさん :2010/02/16(火) 02:48:35
returnの「値を返す」の意味が上手く理解できません。 何か上手い例えとかありましたらご教授頂きたいです。 例) """Print a Fibonacci series up to n.""" def fib(n): result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result 最後はprintでなく、returnでないといけないのでしょうか? returnの意味が…orz
print にしたけりゃ print でいいんだよ
129 :
デフォルトの名無しさん :2010/02/16(火) 03:44:43
>>127 ,128さん
回答ありがとうございます。初心者なのでちょっと理解しかねる部分もありますが(滝汗
そもそも「値を返す」って日常生活では使わない言葉ですよね(汗
日常的な言語で表現するとしたら?
計算なりの結果を最終的に表示するって感じですか?
どっかでみた自動販売機の例えが分かり易かったかもな それでいうと、お釣りが「値を返す」って事になる
表示するんじゃなく、結果を置き換えること。 日常じゃ、関数なんて言葉使わないだろう。それと同じで、日常じゃ返すなんて言葉を使わない。 例えば、 a= 1+1 の場合、1+1の計算が行われることによって、2に置き換えられ、 a=2 と同じ意味になる。 def twice(x): return x*2 a=twice(3) は、twice(3)が6を返す=6に結果を置き換えるので、 a=6 と同じ意味になる。 def p_twice(x): print x*2 の場合、何もreturnしてない=何も返してない。 何も返さなかったときの動作は言語によって違うが、Pythonの場合は、Noneが返される。 結果、 a=p_twice(3)は、p_twice(3)がNoneを返す、つまりNoneに置き換えるので a=None と同じ意味になる。 全然違うでしょ?
return で値を返していると 関数を使ったときに、その結果を変数に入れて 合計を求めたり、逆順にしてみたり色々弄れる >>> a = fib(100) >>> sum(a) 232 >>> a[::-1] [89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 1] 日常的だとPDFじゃなくてExcelでほしいとか?
>>126 おまいさんみたいなのにはみんなして触らないように心掛けるもんだが、
あえて言っておくと
ヒント:関数
134 :
デフォルトの名無しさん :2010/02/16(火) 06:12:48
>>131 さん
とてもわかりやすかったです。
置き換える。
意味がわかりました。
面倒な質問に付き合って頂いてすみませんでした。
ありがとうございました。
…またお願い致します(汗
135 :
デフォルトの名無しさん :2010/02/16(火) 20:00:14
linuxからインタプリタで最近python始めました www.python.jpのドキュメントなどを見てやってます あとで分からなくなったりしたときのためにやったことをソースとして残しておきたいと思うのです インタプリタで実行したコマンドをスクリプトにして保存する(というか実行したことをテキストかなにかで残しておく)ことは可能なんでしょうか? 日本語が所々おかしいところありますがよろしくおねがいします
>>135 標準のインタプリタの代わりにIPythonを使って、 %logstart を使うとログが取れるよ。
他の方法だったら、 screen を使うとかかな。
tmux
ぐぐればいっぱいある 次の方どうぞ
>>139 ActiveState, PyMOTW
143 :
デフォルトの名無しさん :2010/02/17(水) 20:29:59
135です
>>136 さん
>>137 さん
>>138 さん
お礼がおそくなりました
自分で読み直しても理解しにくいような文章に迅速な対応わざわざご回答ありがとうございました。
また来るかもしれないのでその時はよろしくおねがいします
ファイルのMD5を取得するにはどうすればいいんですか。 import hashlib hashlib.md5("c:\test.exe").hexdigest() だと文字列"c:\test.exe"のMD5値が得られてしまいます。。。
import hashlib hashlib.md5(open("c:\test.exe").read()).hexdigest()
せっかくなので一気に全部読まずにちょっとづつ読みながら計算する方法も教えて頂けますか?
おいこの流れ前にも見たぞ?
148 :
144 :2010/02/19(金) 03:49:32
バイナリモードで開けばいい open(r"c:\test.exe", "rb").read()
150 :
144 :2010/02/19(金) 04:18:27
>>149 うおおお、出来ました!ありがとうございます。
import md5 h = md5.md5() f = open('main.cpp', 'rb') while True: b = f.read(4096) if not b: break h.update(b) f.close() print h.hexdigest()
md5はPython2.5で撤廃済みだぞ それはさておき > このメソッドを繰り返して呼び出す操作は、それぞれの呼び出し時の > 引数 arg を結合したデータを引数として一回の呼び出す操作と同等に > なります: つまり、m.update(a); m.update(b) は m.update(a+b) と同等です。 メモリ気にして小分けに渡してupdateしてるの こういう説明されると意味無しに思えて嫌だ
禿堂
TkinterのListboxについての質問です。 listbox内のアイテムをget()で取得するときに<Button-1>だと一つ前に選択 していたアイテムを取得してしまいます。 これをクリックしたアイテムを取得するようにするにはどのようにすればできますか。 <Double-Button-1>ではなくButton-1>でお願いします。
ある1文字が全角か半角か判定するのはどのようにしたらいいのでしょうか?
unicodedata.east_asian_width
unicodeに変換してunicodedata.name()辺り呼ぶのが比較的きれい
汚いけど、sjisにエンコードしてlen
double_width = set(" = dict(F=2, H=1, W=2, Na=1, A=2, N=1) def count_width(s): import unicodedata return sum(2 if c in "FWA" else 1 for c in s)
一行目消し忘れたw
multi
全然ダメじゃねーか。 sum(2 if unicodedata.east_asian_width(c) in "FWA" else 1 for c in s) だ。
凝った書き方するからだ
凝った書き方はPythonの文化では好まれない。 読みやすさ&分かりやすさ優先。 ・・・ってことぐらい常識だと思うぜ。
コードはマシンに向けて書くものじゃなく 人間に向けて書くものだって誰かお偉いさんが言ってたな
は?
>>165 その人は今はお偉いさんじゃなくて
ホームレスになっちゃってたりしませんか?
ネストしているわけでもないし、一行に収まる長さだし、 これくらいならぎりぎりPythonicに含まれると思うぞ。
and/or を使うという手もある
i = 0 while True: 処理 i += 1 という無限ループがちょっとカッコ悪いので、for i in 〜の形で書きたいんだけど、なにかいい方法ありますか?
無限ループなんて物騒なもの使うなよ
>>171 import itertools
for i in itertools.count(0):
処理
>>171 無限ループなんだからループカウンタを作る必要なくね?と思ったらbreakするまで値を1増やし続けるプログラムを想定してるのか
個人的には目にわかりやすいから普通にwhileでやったほうがよさそうな気もするけど
177 :
デフォルトの名無しさん :2010/02/24(水) 17:59:05
arrayで行列を作成してある行を削除しようとして del(test[row,:]) としたところ ValueError: Can't delete array elements. となってしまいます。どのようにしたらその行を 削除することができるのでしょうか?
test が mutable なら del test[row]
179 :
デフォルトの名無しさん :2010/02/24(水) 19:36:53
せっかく教えていただいたのにできませんorz from Numeric import * import Numeric import math import sys from scipy import gplt from scipy import* import sys,string import time test=zeros((4,2),typecode=Int,savespace=1) rowcount=0 for line1 in range(2): for line2 in range(2): test[rowcount,0]=line1 test[rowcount,1]=line2 rowcount=rowcount+1 for row in range(4): if test[row,0] ==1 and test[row,1]==1: print row,test[row] del test[row] こんな感じで記述していて、一応実験的に最後の[1,1]を消そうと 思っています。 どなたかご指導お願いいたします。
マルチする悪い子には教えてあげない、まで読んだ
nums = filter(lambda x,y:x%y or x==y,[x for x in\ [i for i in range(2,8),[nums for nums in range(2,50)]]])\ ワンラインで素数の計算をしたいのですが 無名関数への複数の値の引き渡しがまだ良く解りません Pythonic的には少し複雑ですがlambdaを使いたいです 使うと分かりますね、無名関数の良さが
>>181 [i for i in range(2,8),[nums for...
この時点で意味不明。i for i のリスト内包をどこで閉じるの?
filter 使うのは、まず filter 使わずにシーケンスできてからにしたほうが
いいと思うよ。
lambdaなんて無理に使う必要ないから
右のほうに角カッコがあるがな 関数型言語スレならともかくここはPythonスレなので読む気も起こらないが
>>184 いや、 [i for i in range(2,8), [nums for nums in ...]] って本当にしたいんだとすると、
[range(2,8), [nums for nums in ...]] と同じだから、 i for i が何のためにあるのか
意味がわからなくなるから、リスト内包を本当はどこで閉じたかったのかを確認したかったんだ。
よく見ると [nums for nums in range(2,50)] も range(2,50) と同じだから、全く無意味に
リスト内包使ってるんだな、
>>181 は。
>>181 結論: ワンライナーを書くのは、まず複数行でやりたいことが書けるようになってから。
187 :
184 :2010/02/24(水) 22:52:12
>>185 了解
わざわざ説明させてしまってごめんよ
>>186 複数行で出来るからワンライナーで書こうと思いましたが確かにその通りですね
nums = range(2, 50)
for i in range(2, 8):
nums = filter(lambda x: x == i or x % i, nums)
ありがとうございます
[filter(lambda x: x == i or x % i, range(2, 50)) for i in range(2, 8)]
ああ、俺が勘違いしてたのかスマソ この内容なら2と8forで回さなくても良い気がする
>>188 それ、numに再代入しちゃってるよね。再代入しちゃうワンライナーなら
そこから作っても良いけど、いきなり
>>181 みたいのは無いだろ。
ワンライナーじゃなくて、
>>181 っぽいロジックのコードを書かないと。
reduce
Numeric 使ってるひといるみたいだけど obsolete じゃなかった? numpy とどうちがうの?
初めましてこれからpython勉強します宜しくお願いします バージョンの方ですが2.6.4と3.1.1があるみたいですがどちらをインストールすればいいでしょう
2.6.4
ありがとうございます早速インスコしました とても楽しみでうずうずします
>>188 これはどうだろうワンライナーでlambda使ってる
filter(lambda n: all(n%x!=0 for x in range(2,n)), range(2,50))
>>188 おもしろい方法を思いついたしかも超anti-pythonic
きっとhaskell使いとかなら普通に使ってる
(lambda x,r,f: x == 8 and r or f(x+1, filter(lambda y: y%x!=0, r), f)) \
(2,
range(2,50),
lambda x,r,f: x == 8 and r or f(x+1, filter(lambda y: y%x!=0, r), f)
)
あ、誤答だね連投失礼 (lambda x,r,f: x == 8 and r or f(x+1, filter(lambda y: y==x or y%x!=0, r), f)) \ (2, range(2,50), lambda x,r,f: x == 8 and r or f(x+1, filter(lambda y: y==x or y%x!=0, r), f) )
202 :
デフォルトの名無しさん :2010/02/26(金) 10:42:06
以前にもオライリーの「集合知プログラミング」のサンプルコードでNaNが発生する理由を
質問していたものです。時間が出来たのでもう一度トライしたくなりある程度調べました。
ttp://examples.oreilly.com/9780596529321/ の nmf.pyでの問題です。
発生原因はこの関数で間違いないと思います。">"の行はデバッグのために加えました。
NaNとNaNは比較してもイコールにならないことを利用してプログラムを止めてます。
他にも if h.any() != h.any(): と if w.any() != w.any(): も書いてますがここでは止まりません。
(.any()の使い方は良く分かっていません。インタプリタがこう書けというので書きました。)
def difcost(a,b):
dif=0
for i in range(shape(a)[0]):
for j in range(shape(a)[1]):
# Euclidean Distance
dif+=pow(a[i,j]-b[i,j],2)
> print a[i,j] ,b[i,j] ,dif
> if dif!=dif:
> return dif
return dif
何回かやりましたが結果はiterは3で必ずNaNが出るようです。
>>> weights,feat=nmf.factorize(v,pc=20, iter=3)
0 nan nan
>>> weights,feat=nmf.factorize(v,pc=20, iter=3)
0 nan nan
>>> weights,feat=nmf.factorize(v,pc=20, iter=3)
0 nan nan
>>> weights,feat=nmf.factorize(v,pc=20, iter=3)
0 nan nan
>>> weights,feat=nmf.factorize(v,pc=20, iter=3)
0 nan nan
>>>
なぜかwh(一回前のwとhの積です)の方に急にnanがでるようです。これでなにか分かりませんでしょうか。
203 :
デフォルトの名無しさん :2010/02/26(金) 10:50:27
def difcost(a,b): dif=0 k = 0 for i in range(shape(a)[0]): for j in range(shape(a)[1]): # Euclidean Distance k+=1 dif+=pow(a[i,j]-b[i,j],2) print k,':' ,a[i,j] ,b[i,j] ,dif if dif!=dif: return dif return dif で実行してみました。結果はk=585で毎回止まるようです。メモリ系のバグでしょうか。 ubuntuもあるのでそちらでも試して見ます。 577 : 0 0.0121184608179 81.0386182152 577 : 0 0.0164147052137 91.5984888312 577 : 0 0.0292418437414 79.7176242734 578 : 0 0.0508183707462 81.041200722 578 : 0 0.0496066791031 91.6009496538 578 : 0 0.0733880158902 79.7230100743 579 : 0 0.0257723893872 81.041864938 579 : 0 0.0274640804479 91.6017039296 579 : 0 0.0441988852923 79.7249636157 580 : 0 0.0193929967783 81.0422410264 580 : 0 0.0304702331206 91.6026323647 580 : 0 0.0250509068254 79.7255911637 581 : 0 0.136879372348 81.0609769889 581 : 0 0.13911625497 91.6219856971 581 : 0 0.155482865404 79.7497660851 582 : 0 0.0558954001978 81.0641012847 582 : 0 0.0732634782209 91.6273532343 582 : 0 0.0667560238416 79.7542224518 583 : 0 0.0431843749592 81.0659661749 583 : 0 0.0296703213474 91.6282335623 583 : 0 0.0374581954731 79.7556255682 584 : 0 0.0525606269812 81.0687287944 584 : 0 0.0382979828685 91.6297002978 584 : 0 0.0666638480736 79.7600696369 585 : 0 nan nan 585 : 0 nan nan 585 : 0 nan nan >>> >>> >>>
204 :
デフォルトの名無しさん :2010/02/26(金) 10:52:14
>>203 585回で止まっている様子を3つ横に並べて書いたのですが、スペースが消えて
わけが分からなくなってしまいました。申し訳ございません。
集合値プログラミング読んでないけど、がんばってるからちょっとだけ見てみた。
NumPyの配列は、0で除算しても ZeroDivizionError にならないで inf (無限) になる。
pow(a[i,j] - b[i,j], 2) してるけど、 inf - inf は NaN になるから、この結果も NaN
PythonのバグでもNumPyのバグでもないね。
factorize という関数は
>>202 が突っ込んだデータに対応できないというだけ。
207 :
デフォルトの名無しさん :2010/02/26(金) 11:18:30
Ubuntuはk=676で止まります… 環境は windowsXP python2.6 numpy-1.4.0-win32-superpack-python2.6.exe あとUbuntuがpython 2.6.4 numpy-1.3.0です。
208 :
デフォルトの名無しさん :2010/02/26(金) 11:23:19
レスありがとうございます。頭冷やしてからもう一度見てみます。ありがとうございました。
209 :
208 :2010/02/26(金) 12:10:49
了解
>>199 >>200 >>201 ありがとうございます
すごすぎて何をやっているのか正直良く解りませんが後で解析してみます
あと皆さんのおかげでなんとか超初心者から初心者に昇格できそうです
本当にありがとう、では
Windows + Python 2.6.4 で optparse (=コマンドラインオプション解析) を使う際 日本語のヘルプメッセージを表示するのは難しいでしょうか? Unicodeでヘルプメッセージ文を書いてしまったら DOS窓=ShiftJISコードで日本語を表示するコンソール上で 日本語が文字化けしてしまいそうですが… メッセージをコンソールに出力する際には必ずUnicode→SJIS変換を行う といった指定ができればなんとかなるのかなと想像したのですが どうすればそういうことができるのかもさっぱりわからず… かといって、optparse 相当を「車輪の再発明」するのも馬鹿馬鹿しいですし… 何か手はないものでしょうか?
214 :
213 :2010/02/27(土) 00:21:00
失礼しました 今試したら、u" " でメッセージを指定したら そのまま日本語で表示されました 2.6.4 の optparse は、 Windows + DOS窓でのSJIS表示に対応していたのか… 知らなかった…
できました。 本当にありがとうございます。
>>213-214 u"" で書いた方が「Unicode」ね。
ソースコードをUnicodeで保存していても、 "あいう" とかしたら、それはPythonにとってはバイト列。
cp932じゃないバイト列を標準出力に出したら、cp932のバイト列を期待しているコンソールは当然文字化けする。
print u"あいう" なら、Pythonは出力するときにUnicodeを出力先のエンコーディングにエンコードしようとしてくれる。
ただし、出力先がファイルだったりするとエンコーディングが判らない。なので、
import codecs
writer = codecs.getwriter('cp932')(sys.stdout)
みたいにすると、 print >>writer, u"あいう" は cp932 に変換されて sys.stdout に書かれる。
>>218 > Pythonは出力するときにUnicodeを出力先のエンコーディングにエンコードしようとしてくれる。
Perlではそのへん全然やってくれなかったので
てっきりPythonもそうなのかと思い込んでました
賢いというか、気がきくやつですね…>Python
少し惚れましたとです
>>209 その論文は非負値行列因子分解する手法を提案したものだが
matplotlibスレでも言及されているように
コード自体はLS法を忠実に実装しているので
205の言うとおり、君が扱っているデータが
与えている因子数とマッチしないデータだったというだけ
もう少し詳しく書くと
ゼロ除算が発生することが問題なので
コード中の "hd" "wd" の要素がゼロになった時点で負け確定
なので
"w" にすべての要素がゼロの行が含まれる
"h" にすべての要素がゼロの列が含まれる
のいずれかの条件を満たした場合に失敗する
確認すべきは、diffcost内の計算ではなく "w" と "h" 自身
f = codecs.open("hoge.txt", "r", "utf_8") str = f.readlines() これで hoge.txt をUTF-8で開いて内容をstrにコピーすることができますよね。 ところがhoge.txtがUTF-8では扱えない変な文字を含んでいる場合、 File "C:\Python2x\lib\codecs.py", line 674, in readlines return self.reader.readlines(sizehint) File "C:\Python2x\lib\codecs.py", line 583, in readlines data = self.read() File "C:\Python2x\lib\codecs.py", line 472, in read newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'utf8' codec can't decode bytes in position 4105-4107: invalid data というエラーになってしまいます。 これを、強制的に開かせることはできませんでしょうか? よろしくお願い申し上げます。
223 :
222 :2010/02/27(土) 23:56:26
簡単に考えるとバイナリモードで開けと言うことになりますが、 それ以外でできますでしょうか? 「UTF-8では扱えない変な文字」を扱える文字コードは不明とします。 (ユーザーがUTF-8のつもりで突っ込んできたHTMLを想定しているので) どうかよろしくお願い申し上げます。
open('hoge.txt','rb').decode('utf-8','ignore').splitlines() じゃだめ?
>>224 ignoreなんてあるのですね。
ありがとうございます。
>str = f.readlines() w
time.strptime("Sat Feb 27 13:29:58 +0000 2010", "%a %b %d %H:%M:%S +0000 %Y") これをコンソールから実行すると正常に値が返りますが、mod_pyhton上からだと ValueError: time data 'Sat Feb 27 13:29:58 +0000 2010' does not match format '%a %b %d %H:%M:%S +0000 %Y' となります。 何か特殊なことが必要なのでしょうか?
versionは?
>>221 なるほど。ではhd wd がゼロになる直前の値が一番ましと
割り切るしかないのですね。もっとvに0が少ないもので
試してみます。ありがとうございました。
strptimeってOSのロケール情報が影響したような
>>231 >>226 じゃないけど、おそらくビルトインオブジェクトであるstrに代入しているところだと思う。
別に__builtins__.strを参照すれば元に戻せるけど。
>>231 >>226 でも
>>232 でもないけど、 readlines() は(文字列が入った)リストを
返すのに、文字列が入っていると誤解させる変数名を使っているのも
気になるな。
234 :
231 :2010/02/28(日) 14:50:11
なるほど。 strという変数名は避けるべきなのですね。 理想的には str_listとかにすべきということでしょうか。
よりも、 hoge_lines みたいに、リストの内容を示す変数名の方が良いな。
>>228 Python 2.6.4です
>>230 localeですか。そのあたりを攻めてみます。
locale.getlocale()をしたところ、 コンソールは(None, None)、mod_pythonは('ja_JP', 'UTF-8')でしたので locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')した結果、解決ができました。 失礼しました。
>>231 >>226 でも
>>232 でも
>>233 でもないけど、
f = codecs.open("hoge.txt", "r", "utf_8")
で codecs をかましてるんだったら
f.readlines() は str (バイト列)のリストではなく unicode 文字列のリストが入ってると期待されるので、
ustrs = f.readlines()
みたいな感じで受けるのが良いのかもしれない
>>224 read()が抜けてる。
codecs.open()も4つ目の引数で 'ignore' 指定できるよね。
readlines()なんかしないで forループにかけたりした方が素直な気がするけど。
240 :
231 :2010/02/28(日) 23:26:04
みなさんありがとうございます。 'ignore'フラグを利用して今回は解決できました。 どうもありがとうございました。
バイト列のリスト? unicode 文字列のリスト?
242 :
デフォルトの名無しさん :2010/03/02(火) 21:31:02
くそすれに見えた
くそすれです。 どうもありがとうございました。
244 :
デフォルトの名無しさん :2010/03/04(木) 10:39:41
from Numeric import* a=array([3,6,4,1,9,5,2,8,7,5,1,6]) a.shape=(4,3) print a で a[[3 6 4] [1 9 5] [2 8 7] [5 1 6]] のような配列を作成した時、真中の列のソートとともに 行も移動させる方法を教えていただけないでしょうか? ↓こんな感じに [[5 1 6] [3 6 4] [2 8 7] [1 9 5]]
Numeric は obsolete
246 :
デフォルトの名無しさん :2010/03/04(木) 12:52:46
では何を用いればよいのでしょうか?
ruby
>>> from numpy import * >>> a=array([3,6,4,1,9,5,2,8,7,5,1,6]) >>> a.shape=(4,3) >>> ind = argsort(a, axis=0) >>> ind[:,1] array([3, 0, 2, 1]) >>> a[ind[:,1]] array([[5, 1, 6], [3, 6, 4], [2, 8, 7], [1, 9, 5]])
numpyか numpy+PyCUDAとか覚えないといかんかな。 「Python?遅くね?」 とか言っている奴が泡を吹く。
エンヴィディアさんが最近ちょっとおかしいのが不安要素ではある
pythonインスコしました メモ張に「print "Hello world"」と書いて拡張子pyで保存しました ダブルクリックで起動させるのですが、すぐに窓が閉じて結果がわかりません 助けてください
自己解決しますた!
かわいい
pythonでtwitterクライアントを作っていますが、IDとパスワードはどう管理すれば良いですか? 暗号化してファイルに保存するのは安易すぎますか?
python関係ある?
>>255 複数のアカウントを暗号化して、それを1つのパスワードで管理するなら
手間は減らせる。
でなければ都度入力させる方が安全。
258 :
255 :2010/03/07(日) 14:36:50
>>257 アカウントは現状1つしか想定していないので、
その都度入力するように実装しようと思います。
ありがとうございました。
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) [GCC 4.0.1 (Apple Inc. build 5493)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import oppai Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named oppai >>>
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) [GCC 4.0.1 (Apple Inc. build 5493)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from __future__ import sex File "<stdin>", line 1 SyntaxError: not a chance >>>
おっぱいをマルチするなw くらえっ >>> import this
263 :
デフォルトの名無しさん :2010/03/07(日) 22:19:38
local_netモジュールはおもにどんなスクリプトを書く時に使うのでしょうか? またモジュール一覧などがみれるサイトはありますか?
265 :
デフォルトの名無しさん :2010/03/07(日) 22:39:14
ありがとうございます 今日pythonを一通り理解したばっかでまだまだ全然わかんない‥ 初心者用のお題とかありますか?
>>263 ドラマで使われてたやつらしいけど
local_netっていうモジュールが実際にあるわけじゃないから
(誰かが真似て作ってるかもしれないけど)
ここで聞いても意味ないと思うよ
>>265 チュートリアルのコードの部分を中心に読むとか
説明でわからないところは調べるか飛ばすかここで聞けばおk
>>265 どの言語でも同じ。まずは何に使うか、だね。
でも一通り理解したって凄いね。
漏れなんか半月やってるのに未だに良く分からん。
ドキュメントの見方が。結局ライブラリのソース拝んでる。
269 :
デフォルトの名無しさん :2010/03/07(日) 22:57:54
すいませんあげてしまいました
>>267 どおりでググっても出ない訳ですか
自分でつくったってことですね
>>268 本当に基本的な事ですよ
クラスの書き方とか
イテレータとかめんどいのは覚えてないし
何やってんだ‥さげれてない
>>264 オヌヌメが開けないんですが
pythonがプログラミング初体験なんです
無難に電卓ですかね?
だとするとTkinter と wxpythonどっちがいいですか?
>>270 ブロックを解除したら開けました
>>272 電卓程度ならTkinterで良いと思うよ
みなさんありがとうございます
>>275 ここはみた事あるんですがよく分からなかったです‥
>>277 有難うございます
素晴らしいです
メールを送るようにするのはどうすればいいでしょうか?
すいません質問ばかりで
スパマーは死ね
>>279 プログラミングのきっかけは以前メールを千件一人に送りつけるツールをみたことですのでwww
>>281 まぁなんだ、最初は自分のアドレスにちまちま送るぐらいにしとけ。
宛先如何に関わらず、大量に発信するとISPにマークされる。
対策:
・インターネットに負荷を掛けないよう、ゆっくり送る
・沢山のISPに分散して実装し、それぞれから少しづつ送信する
補足:
・逆引き可能なドメインでないと拒否されることがある。
・ホワイトリスト/ブラックリストに載っているドメインだと拒否されることがある。
・相手ごとに同意が必要(携帯の場合。サイトで同意を取り、アドレスを教えてもらう)
・クリーニングされてないメールアドレスを使った場合
携帯キャリアが送信をブロックすることがある。
・一度に沢山送ると携帯キャリアはブロックする。
なお、その閾値は公表されてない。冒険するか、無難なスピードにしておくこと。
>>282 うわすげえ
ありがとう
ヘッダがよくわからないからまだまだ先になると思うけど
モジュールの相互参照ってできないのでしょうか? たとえば (./a.py) import b class a_class: def __init__(self): b_class() a_class() (./b.py) import a class b_class: def __init__(self): return のようなコードではNameError: global name 'b_class' is not definedとエラーになってしまいます. ひとつのファイルに書けばいい話なのですが、 それぞれのクラスが巨大になってきてファイルを分割したい欲求に駆られました よろしくお願いします
285 :
デフォルトの名無しさん :2010/03/08(月) 22:58:33
pythonで def __init__(self, title, description, duedate, addeddate=None) これのaddeddate=Noneってどういうこと?
>>284 クラスのガワだけ定義して置いて、
後から代入すればいいんじゃね?
試してないけど。
チュートリアルの9.4いろいろな注意点辺り。
代入したらそのインスタンスのみに効くような気がしなくもないが
よくわからん自分で試してみてくれ。
>>284 b.b_class
という意味じゃなくて?
>>287 失礼しました
./a.pyのb_class()はb.b_class()が正しいです.
エラーメッセージも正しくは
AttributeError: 'module' object has no attribute 'b_class'
です.恥ずかしい・・・
>>286 C言語で宣言文のみ先に読み込ませるようなことでしょうか?
pythonでのサンプルコードがパッと思いつかないのでもうちょっと勉強してみます.
>>288 1) import b を、 def __init__(self) の中に入れる。
2) a_class() とインスタンスを作る部分をさらに別モジュールに分ける。
3) b.py で import a を止める
290 :
284 :2010/03/09(火) 00:21:00
>>289 ありがとうございます.
2)までの手順でエラーなく実行できました.
import bを関数内部に書くことで
import aを行っている最中にb.pyを読まないようにする,
という理解でいいんですよね?
>>290 そうですね。
でも、相互参照しているのはやはりモジュールを分割するときの切り口が悪いかもしれないです。
>>284 a_class()のインスタンス化する場所に問題があると思う。
importってのは、実質的にそのスクリプトを丸ごと実行しているので、
グローバルなスコープに書かれたコードはimport時に実行されてしまう。
for x in range(1,10) inの意味がわかりません xにrange(1,10)を入れるということでしょうか
xに1から10までを順に入れるということです。
rangeについてはわかっておりました ご丁寧にありがとうございます もう一つなんですが度々出てくるinについて教えていただけないでしょうか
for x in hoge: はhogeという集まりから一つずつ取り出してxに入れろよボケナスという意味です
>>296 それじゃちょっとニュアンスが違うよ。
hogeという集まりから一つずつ取り出してxに入れろよハゲ
って感じかと。
なるほどわかりやすい説明ありがとうございます
ボケナスかもしれませんがハゲではありません
いやPython2.5以降はhoge→ハゲが推奨されると聞いていたので。
>>301 なるほどかゆいところに手が届きました
ありがとうございます
>>296 ふと、
ランダムに値を返すイテレータ作ったら面白そうな気がした。
304 :
デフォルトの名無しさん :2010/03/09(火) 13:43:17
>>303 こうですか?わかりません ><
import random
class randomIter(object):
def __iter__(self):
return self
def next(self):
return random.randint(0,100)
if __name__ == '__main__':
ra = randomIter()
for x in ra:
print x
305 :
デフォルトの名無しさん :2010/03/09(火) 13:50:12
from Numeric import * を用いてarrayでからの2次元配列を作成し、 [2,5,3] [9,1,7] [8,4,6] を順に加えながら配列の大きさを拡大していく方法を 教えていただけないでしょうか?
arrayは入れ子にできないんじゃない? arrayじゃないとだめなの?
307 :
デフォルトの名無しさん :2010/03/09(火) 14:56:03
listなら出来そうなのですが、計算させたいのでarrayを使おうかと・・・
list みたいな可変長配列つかって、計算する部分だけ array にしたら? そう言えば、list から array への変換ってデータをコピーするのかな? OpenCVの vector<*> から cv::Mat への変換はデータのコピーをしないけど numpyではどうなってるのだろう。
309 :
デフォルトの名無しさん :2010/03/09(火) 18:08:14
for i in [1 5 6 3 7]: n=a[i] for j in range(n): a=n[0] b=n[1] : z=n[] ある値を格納するとき委は変数を指定しなければなりませんが、 上のようなとき(イメージ)にnの数によって変数を作成していく方法ってありますか? nの長さによって変数を増やすのはどうやればできますか?
>>309 グローバル変数なら可能。メンバ変数などでも可能。
ローカル変数なら不可能。
関数は関数オブジェクトを生成する時にローカル変数一覧が決定されるので、
動的にローカル変数を増やすことができない。
そもそも、何をやりたいの?
絶対、配列か辞書を使う方が賢いよ。
>>309 仮に n が 100 だった場合 100 番目の変数にはどうやってアクセスするんだ
バラバラに展開した変数と目的の値の対応を覚えておくのは大変じゃないか
いずれにしろ別の方法を探したほうがいいと思うよ
普通はリストのまま使ったほうがいい
>>> board = [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
>>> board[1][1]
1
>>> board[0][0] = 1
>>> board
[[1, 0, 0], [0, 1, 0], [0, 0, 0]]
>>285 デフォルト引数と呼ばれ、引数を指定しなかったとき=以降の値が引数として扱われる。例えばこんな感じ:
>>> def foo(bar=123):
... return bar
...
>>> foo(456)
456
>>> foo()
123
ちなみに、デフォルト引数は関数を定義した時にしか評価されないので以下のようにはしないこと:
>>> import time
>>> def report(now=time.time()):
... print now
...
>>> report()
1268135316.33
>>> report()
1268135316.33
初心者がPythonをはじめる場合、あえてActivePythonをインストールしたほうが 良いのかな? pywin32が最初からインストールされているし、GUIのパッケージマネージャが 付いてくるらしいし。
否
横からだがなんか落とし穴でもあるんだっけ featuresを見たらPyPMってビルド済みパッケージを落とせるマネージャや pywin32やCOMが最初から付いてくるようだし Windowsユーザには特に良さそうなんだが
否
否定すんなら理由書け それともいつもの荒らしか
Nein
バカが引っ越してきたか?
Non
バッテリ同梱なのにパッケージマネージャいるのきゃ?
>>321 いくら標準ライブラリが充実しても、外部ライブラリが要らない言語なんてないだろ。
より強力なバッテリ(外部モジュール)が欲しいんじゃね
よっぽどの理由がない限りはCPythonでいいと思う あえてActivePythonを選ぶ理由はない あとActivePythonいれたらTkinterがインポートできなくなった 速攻で元に戻した
PyPMとか普通使わない。pip or easy_installで十分だし、他の人もそうしてる。
>>324 ActivePython が CPython とバイナリ互換をうたってるから、互換性がすごく高いと
思ってたけど、そんな問題もあるのね。
>>325 俺は setup.py bdist_wininst やってアンインストールできるようにしているけど、
やっぱりGUIでPyPIを探してパッケージをインストールできるツールがあったほうが
いいと思う。特にWindowsの初心者プログラマ向けに。
PyGameとかあるんだし、素人向けの開発環境が簡単に構築できるようになったら
Pythonの魅力がもっと広がると思うんだ。
あれ、PyPMって別にGUIのインストーラを提供しているわけではないのか? だとしたら、pywin32がデフォルトでインストールされている以外はあまり 旨みが無いなぁ。
file = open('hoge.txt') file.close() としたとき、もう一度fileをファイル名を使わずにopenする方法ってありますか? 宜しくお願いします。
file = open(file.name)
330 :
デフォルトの名無しさん :2010/03/10(水) 20:15:10
>やっぱりGUIでPyPIを探してパッケージをインストールできるツールがあったほうが いいと思う。 なるほど作ったら面白そうな気がした ありがとうございます
Pythonとか時代遅れにも程がある 今はPerlにすべてにおいて負けてる
ruby厨がperl厨に一言↓
本スレでやれ
なんでPythonの初心者スレに定期的にRubyとかPerlとか言い出すゴミが現れるの?
>>334 本スレでは歯が立たないからだろう。
それにしても他の言語と比較するならちゃんと両方例示して欲しいもんだ。
ま、そんなことも出来ない程度の奴等なのかもな。
2.6の環境じゃPython Twitter 1.6使えないの? 上位互換かなと思ったんだけどorz
>>336 具体的にどんなエラーになってるの?
同じ Python twitter が現在 Python 2.5 なら動いているの?
Twitter側の変更のせいで動かなくなっている可能性は無い?
>>336 なんでわざわざpython-twitterなんて地雷を踏むんだ?
普通はtweepyやtwythonだろう。
普通とかあるのかよ
>>337 mkdir python2.6
touch /usr/include/python2.6/pyconfig.h
したらイケたorz
>>338 爾来なの?っつかそんなのあるんだ。
python twitterでググったらあったからなんだが。
>>340 実は python-dev or python-devel をインストールしていないとか?
python-twitter って拡張モジュール使うん?使わないのに pyconfig.h を参照する??
343 :
340 :2010/03/10(水) 21:35:00
>>341 python-twitterは2.6未対応、文字数をバイト数でカウントするので日本語で問題有り、
ごく一部のAPIしか使えない、作者も更新やめてほったらかし。
tweepy、twythonはそのままでも2.6対応している。
今からやるならtweepyが一番いいんじゃない?まだ情報は少ないと思うが。
すいません。色々調べてる時間が無いんでココで聞きます。 GAEでPython使ってwebアプリ構築する事にしたんですが(ここで意見あれば是非)、IDE使うべきかemacs使うか悩んでます。 emacsはもう10年近く触って無いんでちょこっと面倒ですが、慣れた時の便利さは分かってるつもりです。(現在Mac使い) IDEはeclipse考えてます。 皆さん意見お願いします。
完全に好みの問題だな emacsのキーバインドを忘れてるならeclipseでいいんじゃない
348 :
341 :2010/03/10(水) 22:53:54
>>347 ありがと〜
昔はemacs上でメールから何から完結してたけど今は違うからね、eclipseにするわ
こういう時に2chは頼りになるね。初pythonなんで今後も宜しくお願いします。
いちおうeclipse向けのemacsキーバインディングもあるよ
351 :
デフォルトの名無しさん :2010/03/11(木) 00:15:45
以前聞いたんですが結局調べてもわかりませんでした def __init__(self, addeddate=None) の=Noneってどういうことなんでしょうか?
>>352 うわあああああ
きづかなかった
ほんとすいません
354 :
328 :2010/03/11(木) 00:18:54
>>312 ありがとうございます
すごいわかりやすいです
つまりその例だと関数を定義した時の時間しか表示されないってことですね?
そう。その例とかはまだ分かりやすいけど default={} とかは俺も未だにうっかりする事があるので注意
>>356 はドジっ娘なだけでホントは分かってる人だろうからいいんだけど、初心者は、
数字/文字列/True/False/タプル以外の初期値はdefault=Noneにする習慣つけるといいよ。
関数内で
if default is None:
default = なんたらかんたら
ってする。
そのまま指定できる型でも、変に指定するよりも関数内で指定した方が処理がわかりやすくなることもある。
意図的に
_nonlocal_vars={}
って引数を付けて、その仕組みを悪用するという技もあるとかないとか……
便利だけどよくないってことで、python3からはnonlocalキーワードが追加されたよ。
それぞれの要素に対して操作するときは for i in ["a","b","c"]: print i でいいんだろうけど 要素の順番によって挙動を変えたいときってどうすればいいんですか たとえば、今は次のように書いてるけど l=["a","b","c"] for i in range(len(l)): print i, l[i] なんか見苦しく感じているのです
やりたいことがあってるかは分からないけど とりあえず、下のコードと同じことは l = ["a", "b", "c"] for i, j in enumerate(l): print i, j こういうふうにできる
for i, x in enumerate(l): print i, x
VB脳
>>356 うわ、これ初めて知った。
無意識のうちにNone使ってたから、やらかしたことはなかったが。
いい加減入門書嫁。
>>357 ん?どういうこと?シーケンスリテラルを初期値にするなってこと?
違う。デフォルト引数をmutable objectとすることは注意しないといけないって話 拡張型ならあまり考えないでも問題にならない事が多いけど class Hoge(object): a = [] の.aがHogeの所有でHoge()の所有でないのと同じ リストや辞書はそのまま書き換える事が多いので うっかりするとデフォルト引数にアイテムが貯まって行っちゃう
def hoge(self, default=[]): も危険?
>>366 >>> def hoge(default=[]):
... default.append('hoge')
... return default
...
>>> hoge(range(3))
[0, 1, 2, 'hoge']
>>> hoge()
['hoge']
>>> hoge()
['hoge', 'hoge']
>>367 知ってて利用するのはあり?
それとも可読性が下がるからだめ?
人生のレシピなんてないさ
>>368 なしとはいわないけどclassにして__call__実装しろ
>>367 む。これは気を付けないと。
教えてくれてサンクス。
def hoge(default=None): if default is None: default = [] default.append('hoge') return default こう書かないといけないのか
def u(f): def v(*args,**kwds): def w(default=None): if default is None: default = [] default.append("hoge") return default return w return v @u def h(): print("hello")#実行されない h(range(10)) >>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'hoge']
間違えた @u(range(10))#多分ここの数字は何でもいい 引数を与えないと動かないでした 連投スマソ
あれ?デコレーターに引数を渡す意味が分からない 何やってんだろ でも引数渡さないと動かない スレ汚し失礼
そもそも
>>373 が何をしたいのか判らない。
呼び出すたびにデフォルト値を生成するデコレータを作りたい?
>>376 ムシャムシャしてやったから無視していいです
if not addeddate: addeddate = datetime.now ってどういう意味ですか?
bool(addeddate) == Falseのとき、addeddateにdatetime.nowを代入する。 具体的にはaddeddateがNoneとか空リストとかFalseそのものだったとき。
デバッグ用のインスタンス表示メソッドってなんですか?
ディレクトリの中身一覧が欲しいとき os.walk(path).next() 以外の方法ってありますか?
os.listdir(path)
そうなのか。知らなかった。
>383 ありがとうございます。
今からpython始めたいんですが2.6と互換性のない3.1のどっちから勉強始めるべきでしょうか?
ちなみに今学生なのですぐに業務に使う予定はありません。2.6からスムーズに移行できるものなのでしょうか?
勉強だけなら3.1で良いと思う 外部ライブラリを使いたい or 使うかもしれないのであれば2.6の方が無難
>>388 >>389 2.6から勉強始めることにしました
非常に参考になりました
ありがとうございます!
まとめwikiに……と思ったら まとめwikiがない
皆さんはexeに、変換する時どのようにしていますか? いまいち分からなくて
cx_Freeze
cx_freezeはお手軽だがascii以外の文字コード使ってるときは要注意だな あと有名所はpy2exe どちらもググれば大量に実行例がヒットする
おれpy2exeばっかだ。 こんどcx_Freezeも使ってみよう。
PyInstaller, 開発はずっと続いているんだけど、リリースされなくてsvnから 最新版取って来いってのがなぁ・・・
皆さんありがとうございます 2.6に対応してないのが多いので困ってました
>>399 Python2.6に対応していないのって、あまり気にしないでいいよ。
俺もpy2exeをPython2.6で利用しているし。
msvcrtは別にインストールしてもらう必要があるけど。
>>400 そうなんですか!有難うございます
webアプリがpythonで作れるってしったんですがwebアプリがいまいちなんのことか理解できないです
例えば2chとかWikipediaとかYoutubeとかだな>Webアプリ
>>400 msvcrtもsetup.pyに書いておけばいいのに
405 :
400 :2010/03/14(日) 23:48:00
>>403 WinSxS でググってみて。
setup.py に msvcr9.dll を書くだけじゃダメだって判るから。
まじめに解決しようとしたら、Windowsプログラミングでは避けて通れないmanifest
を扱う必要があるんだけど、それが面倒だから「VC Runtime再配布可能パッケージ
をインストールして」とかで逃げる。
再配布だと.pydの配置とロードが問題になるんだよな setuptools+py2exeで一つのディレクトリにまとめる事はできるけど考えるのめんどくさいのでmsvcr入れろになる しかしインストーラのファイル名が全部vcredist_x86.exeとかMSは何考えてんだ
VSも10でSxS廃止するらしいな やれやれだぜ
何も考えてないにきまってるじゃないか
またぶん投げんのかよ
プログラムの学習目的でpythonを始めようと思うのですが、 ヴァージョンが2.xと3.xがありますがどちらを選べばいいんでしょうか? 特徴などあればあわせて教えていただきたいです。
pythonの学習目的 2.xと3.x プログラムの学習目的 2.xと3.x
>>410 2から3への橋渡しである2.6。
ほとんどのサードパーティ製ライブラリが利用できるし、3への移行も簡単。
学習目的ってことだと情報が多いかどうかが重要かなあ 現時点で情報が多くて、皆が使っている(と思われる)のは2.X系列なので そっちが無難だと思うよ ライブラリが揃っているという意味で、実用的でもあるしね
2ch
>>412 >3への移行も簡単。
善良な市民に嘘を教えるなよボケ。
移行の時は、実際Python3で動かしてみて、エラーが起きたらトレースバックを見て 問題を解決できるんだよな。 暗黙に壊れるより明示的にエラーになるという方針が嬉しい。 文字列と数値の間で暗黙に型変換されるような言語だったら、Python2から3へ みたいなアップグレードへの対応は気が狂うと思う。 php4からphp5への移行とかどんな感じだったんだろう? ほとんどのアプリ、フレームワークが、移行をあきらめて新規に作り直したんじゃ 無いだろうか。
>>417 Python 2.6用に書かれたプログラムはpython -3でエラーが出なくなるまで修正した後、2to3で普通にPython 3用のコードになるけどこれでも簡単ではない?
>>419 Dive Into Python3 の chardet モジュール移行を読むと良いよ。
b"foo"[0] が文字列から数値に変わってたりする。
>>420 それぐらいでしょ?-3オプションで訂正されないのは。
>>421 辞書の .keys() がリストではなくviewオブジェクトを返すようになったけど、
リストを期待しているコードは動かなくなる。
これも -3 じゃ検出できない。
-3 オプションや 2to3 でできるのは静的に自明な部分だけで、動的解析が
必要なものは検出できないよ。
2.xから3.xへの移行が簡単なら、Django移植してくれよ
タイムアウト
-3オプションは2to3で修正できないコードの警告を出して dict.keys()は2to3でlist(dict.keys())のように修正されるから良いじゃないの?
pygtkが使えません、インストールしたあと import gtk とやってもないと言われてしまいます どうすればいいでしょうか
import pygtk
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages の中のgtk-2.0とpygtkとついたファイルを4つ /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packagesに移したら サンプルのプログラムが動きました ありがとうございました
>>430 Google DocumentsやGmailみたいなのがWebアプリ
ショッピングカートとか機能性を有する物。
動的ページを吐き出すのが目的のwikiや2chはアプリという概念からはズレてる気がする。
>>431 いまいち分かんないんだけど見るだけじゃなくて何か機能があるって事ですか?
cx_freezeとpy2exeインストールからつまづくんですが
インストールは出来ました ただ使い方が
足の爪が伸びてきたな 先に爪を切ってきます
おすすめのエディタってありますか?
Windowsでファイル名とかディレクトリ名にUnicodeが含まれてると os.remove()とかos.renameが WindowsError: [Error 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。: ってなっちゃうんですが、解決法はありますか?
? >>> open(ur'C:\うにこーど.txt', 'wb').write('fugafuga') >>> open(ur'C:\うにこーど.txt', 'rb').read() 'fugafuga'
>>438 os.remove()やos.rename()にちゃんとunicodeでパスを渡せば問題はない
strだとダメだな
@property def members(self): この @property てなんですか?
442 :
438 :2010/03/15(月) 22:57:05
例えば for f in os.walk(path).next()[2]: os.remove(f) こんな感じのことがしたいんですが strからunicodeに変換する方法はどうすればよいのでしょう?
os.walk は UNICODE を扱うように出来ていないんじゃなかったかな 不便だけど os.listdir は UNICODE 対応なのでそっち使うとか
>>442 os.walk() に渡している path が str だから、戻ってくるのもstrになる。
unicode で path を渡せば、ちゃんとunicodeでファイル名が帰ってくる。
>>441 @が付くのはデコレータ
@propertyの使い方はいわゆるgetter
class MyClass(object):
_a = 100
_b = 100
@property
def total(self):
return self._a * self._b
c = MyClass()
print c.total
あれ、大嘘言ったようだ
>>443 は無視しておくれ
447 :
438 :2010/03/15(月) 23:13:28
あああ! ようやく>444の意味がわかりました。 ありがとうございました。
できるだけ os.walk を使わないようにします
449 :
441 :2010/03/15(月) 23:20:33
>>445 ありがとうございます
みんPyにはのってなかった
マジかよみんPy捨ててきた
Webアプリ編に書いてあるよ>デコレータ
今のところ、メモ帳を使ってプログラムを書いているんですが、どんなエディタを使えば良いんでしょうか? JmEditorやPyScripterなどが出てきたんですが、開発が止まっていたりして何を選べばいいのかさっぱりです。 よければ使っているものを教えてください。
xyzzy
xyzzy + py-mode
サクラエディタ
>>452 俺はvim使ってるが、万人に勧められる代物じゃないなぁ……
エディタは自分にあってるかどうかが重要なので、無料で使えるものでよさそうなのをとりあえず使ってみたら?
Pythonの場合、インデントの設定が詳細にできることは、必須条件。
エディタによっては自動インデントがお節介でスペースとタブの混ざったインデントにしてくれるものもあるが、
Pythonではそれやられると致命的だから、そんな設定は初めからないか、無効にできるものがいい。
KomodoEditって日本語でも大丈夫だっけ? vimとemacs以外に何をおすすめして良いのか判らん。
viとかemacsはときどき日本語の扱いに難があるから困る。
>>451 ありがとうございました!
本屋で見てきます!!
>>451 Webアプリ編のデコレーターの説明はすごく分かりづらかった気がする。
素直に初めてのPython買っておけばいいと思うけど。
このスレ気持ち悪い
Komodo Edit はGUIを日本語化できないけど、見た目は普通の テキストエディタっぽくて良いな。ちゃんとファイルのエンコーディングも 設定できる。 PythonWin は今時MDIだと古くさく見える。PyScripterはどうだっけ? IDEとしては、Pydev が盤石で、eclipse 重いという人は Eric かPyScripterだな。
>>452 俺が使ってるのは、PyScripterとEmEditorのフリー版。
PyScripterは、無限ループのスクリプトを実行させるとそのままIDEも
フリーズして強制終了しないといけなくなるとかの問題があるけど
統合環境の便利さと起動/動作の軽さは優秀。
EmEditorはそのままだとタブを使われるから、設定を変更して
スペースにする必要がある。
>>463 EmEditor はPythonのシンタックスハイライトに対応していますか?
あと、ファイルのエンコーディングでcp932とutf-8(bom無し)に対応していますか?
PyScripterは、たぶんRpycをインストールして、コードを別プロセスで動かすように
設定すればIDEが落ちなくなるはず。
みんなのPython Webアプリ編,読んでみたけど良い書籍だった気がする。
本の宣伝する時は名前欄に本名書くように
>>465 良く書けてる本だと思うよ
フレームワークの情報を期待すると肩すかしを食らうかもしれないが(w
468 :
452 :2010/03/16(火) 16:21:24
みなさんどうもありがとうございます。 eclipseは昔使ったことがあるので、とりあえずPydevを入れてみたいと思います。
>フレームワークの情報 本の中で自作してるんだっけ?
デスクトップアプリ作ってて、helpファイルを起動するときって、 みなさん何使いますか? 私は os.startfile か subprocess.popen あたりを使ったんですが、 普通は何を使うものでしょうか?
startfileって要するにShellExecuteでしょ? それでいいんじゃね?
しらねーよw すきなもん作ればいいじゃん
>>473 プログラミング言語は道具だ。
つまり、君の質問は、包丁の使い方一通り覚えて千切りと短冊切りできるようになったけど
次は何をすればいいの?って質問と同じだ。
そんな答え辛い質問ではあるが、
じゃあみじん切りに挑戦したら?に対応する答えは、じゃあクラスに挑戦してみたら?
じゃあカレーでも作ってみたら?に対応する答えは、自前でソートの実装してみたら?
にあたる。
>>473 pythonでCGIをやってみるとか
perlやphpで書かれたお気に入りのスクリプトをpythonに移植してみるとか。
GUIの2chブラウザ作るとか
>>473 そこ日本語の文字列のところの説明がめちゃくちゃだな
質問書いてたら自己解決したでござる ありがとうくだすれ!
>>480 Python Exercisesってのが面白そうだね
ライセンスも原著作者のクレジットだけ示せばいいらしいし
宿題スレにでも持ち込んでやってみるかな
EclipseにPyDevを導入したいんですが、詳しく解説してあるサイトってありますか?
483 :
482 :2010/03/20(土) 13:41:22
すみません、自己解決しました
pyfltkをインストールは出来たのですが、モジュールがインストールできません Traceback (most recent call last): File "<stdin>", line 1, in <module> File "fltk/__init__.py", line 31, in <module> _fltk = swig_import_helper() File "fltk/__init__.py", line 23, in swig_import_helper import _fltk ImportError: No module named _fltk どうすればいいでしょうか
487 :
�� :2010/03/20(土) 20:29:36
In [14]: l=[1,2,3,4] In [15]: for i in l: print i ....: ....: 1 2 3 4 In [17]: l=[1,2,3,4] In [18]: for i in l: print i if i < 3: l.remove(i) ....: ....: 1 3 4 なんで2が出ないのですか?
>>> l=[1,2,3,4] >>> for i in l: print i, l if i < 3: print l l.remove(i) 1 [1, 2, 3, 4] [1, 2, 3, 4] 3 [2, 3, 4] 4 [2, 3, 4] >>> l=[1,2,3,4] >>> for i in l[:]: print i, l if i < 3: print l l.remove(i) 1 [1, 2, 3, 4] [1, 2, 3, 4] 2 [2, 3, 4] [2, 3, 4] 3 [3, 4] 4 [3, 4]
for x in なんちゃら って、だいたいの人がx使ってるのはなんでだろう。 代入してxを宣言しなくても怒られないのは何でだろう。 そういうもんだと使ってたけど、ふと思うと気になってくる。
へ? 俺は慣習的にiを使う事が多いけどな。
for 単数形 in 複数形: かな。個人的に i は極力使わないようにしてる
俺も最近は492 HaskellやCloujureで推奨されてるみたいだし enumerateでインデックス取ってくるときは i か idx を使うな
iのほうが押しやすいという理由でi 小指と薬指のキーは嫌い、特に下段w
emacs使ってると左小指が強化される SSKで右小指も
そして潰れる 一日使っただけでEmacs小指になって捨てた。 元々指が軟弱なのかも知れないが俺は短足、短指、短小と3拍子揃ったイケメン
ごめん × SSK ○ SKK
SKK使うとタイプミスする メモメモφ(_ _)
>>496 俺は逆にCtrl+のショートカットで出来ることを
カーソルキーやファンクションキー、DEL、BS
あまつさえHOME、ENDを使わなきゃならない
ってことになるのが苦痛だなぁ
>>499 それは同意だな
Emacsの2ストロークも苦痛だが
>>490 明示的に代入(もっとPython風に言うと、名前への値の束縛)をしなくてもいいのは、
for x in l自体がxに値を束縛するって意味を含んでいるから。
def func()だって、funcに関数を束縛するって意味だから、funcに前もって代入しなくてもいい。
俺も
>>492 のいう単数形 in 複数形を心がける事が多いなぁ。
iは、ループカウンタとしての使い方、値はどうでもよくて回数のみが重要なときと
リストなどのインデックスとして使うときは極力使い、そうでないときは極力使わないようにしてる。
インデックスとしての利用はなんとなくPythonらしくない気がするので避けてるけど、その方が楽そうなときは無理には避けない。
その日の気分で大文字でAとかBとかやってみたりする事もあるな。 思考が止まるから深く考えた事無いや
>>500 2ストロークはタイプ自体は苦痛じゃないけど
数が多すぎて覚えられないのが苦痛だな
いや、別に、良く使うやつだけ覚えておけばいいんだけど
あと、右AltはIME切り替えに割り当ててるんで
Alt+左手キーがムチャクチャ押しにくいw
Python関係なさすぎ
>>501 単数形 in 複数形スタイルは時に自分の英語力の無さに絶望することになる
『dataの単数形ってなんだっけ?』みたいな
dataの単数形なんて知らないから for d in data: にしちゃうよ
まぁ単数形自体は "datum" なんだけど タイプ量も増えちゃうし 俺は data という単語自体を敬遠するようになったw
大丈夫。ネイティブの連中も知らんからw使うと→(゚Д゚)ハァ?
なんでもかんでも for item in items でおk
data/datasで意味わかるからおk
日本人が荻と萩の区別をつけにくいというのと同じような意味だ
剥げと禿げ
indexの複数形がindicesってのも、知らない人多いよな。
mouse の複数形とか
ペゾルト本でそんなネタがあったね ところでおまいら補償と保証と保障の区別はつきますか
質問が完全に無視された死のう
っドナーカード
単純に即答できる人がいなかっただけではないかと
質問には一時的に鳥つけた方がいいな 俺も一回、解決しますた!とか言われたわ
compensationとassuranceとguaranteeだな
必要なライブラリswig-1.3.40fとltk-1.1.10をソースからビルドした上で
pyFltk-1.1.5のディレクトリに移動して、python setup.py build;python setup.py install
を実行してインストールしました
site-packagesにfltkディレクトリとpyFltk-1.1.5-py2.6.egg-infoが生成されました
インタラクティブシェルで
>>> import fltk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fltk/__init__.py", line 31, in <module>
_fltk = swig_import_helper()
File "fltk/__init__.py", line 23, in swig_import_helper
import _fltk
ImportError: No module named _fltk
>>521 駄目でした
_fltk.pydはあるの?
>>524 えぇー。おかしいね
C:\Python26\Lib\site-packages\fltk\_fltk.pyd が存在するか
C:\Python26\Lib\site-packages\fltk をカレントディレクトリにして python 起動させて
>>> import _fltk
できるか
>>525 >>526 >C:\Python26\Lib\site-packages\fltk\_fltk.pyd が存在するか
_fltk.soの存在をfltkディレクトリに確認しています
>C:\Python26\Lib\site-packages\fltk をカレントディレクトリにして python 起動させて
>>>> import _fltk
>できるか
>>> import _fltk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(./_fltk.so, 2): no suitable image found. Did find:
./_fltk.so: mach-o, but wrong architecture
なんでー
cygwin使ってる?
拡張モジュールに関する質問をする場合は、使用しているOSや、Pythonのバージョン、 Windowsの場合だったらWindows版PythonかCygwin版Pythonかまで先に言っておかないと。
osxか。環境ないから俺はお手上げだな 依存関係の解決に失敗してるとかみたいね
xyzzyにpy-modeを適用しましたが、pyファイルを読み込んだ時にしか有効になりません。 新規ファイルで有効にする方法はあるんでしょうか? それとtabを押してもインデントが有効にならないんですがこれもどうすればいいでしょうか? OSはwin7 32bitです。
申し訳ないです。誘導ありがとうございます。
ImportError: dlopen(./_fltk.so, 2): no suitable image found. Did find: ./_fltk.so: mach-o, but wrong architecture
# encoding:utf-8 def fg(**kwargs): return dict={ u'いち':1} print dict[ u'いち'] d={ u'y':2 } print fg(x=1,**d) python2.6.4です. 上記のコードで前者のprintはちゃんと1を出力しますが, 後者はTypeError: fg() keywords must be stringsというエラーが出てしまいました. コード内の文字列をすべてUnicode型に統一したいのですが、 この場合はどう変更したらいいでしょうか?
どう変更したら良いも、キーワード引数にユニコード型を使わなければ良いだけの話なのでは? どうしても使いたいのならPython 3.xにすればいい
2.6.5なら大丈夫っぽい
539のリンクを辿った先にあるGuidoのコメントで 『キーワード引数をユニコードにする必要性がわからん』 って書いてるね
def fg(いち=1): return
542 :
535 :2010/03/22(月) 08:43:18
皆さん、回答ありがとうございます.
>>536 欧米で作成されたコードの日本語対応をしようとしてまして、
辞書にUnicode型が使えないとなると、ほぼ全部書き直しになってしまうのです。
Python3.xも検討しましたが、使用しているライブラリが対応していませんでした・・・
>>537 ,539,540
ありがとうございます。
2.6.5にしたところ動作しました。
Guido氏のコメントによると、自分のやろうとしていることは実は相当外道なのでしょうか。
>辞書にUnicode型が使えないとなると、ほぼ全部書き直しになってしまうのです。 なんで?
>Guido氏のコメントによると、自分のやろうとしていることは実は相当外道なのでしょうか。 外道かどうかはともかく 相当設計が間違ってると思う
キーワード引数のキーワードを日本語にしたい? 昔Windowsのとあるプログラムが、日本語化で、/ALL というオプションが /全 という 漢字オプションにされたというおそろしい話を思い出すのだが。
>>542 dictをキーワード付き引数リストとして渡す関数の方では
キーワードにUnicode型を期待していないはず
辞書のキーにはUnicode型が使えるが
キーワード付き引数のキーワードにはUnicodeが使えない
ってところで、542がなんで困ってたのかさっぱりわからん
まぁ、2.6.5になって解決したならいいけど
ただし、Python3では変数名に日本語が使えるようになるから、キーワード引数に日本語を使うのも 間違いじゃないね。 もちろん、英語じゃない単語を使うことはPEP8では推奨されず、標準ライブラリでは利用されないけど。
どんどんVB並みになっていくな
549 :
535 :2010/03/22(月) 11:46:59
535,542です.
あるスクリプト(ゲームスクリプトのようなもの)を構文解析してそれに応じて処理をするようなプログラムなのですが、
元のプログラムはそのスクリプトが英語で書かれていると仮定して作られているため.
日本語を書けるようにしたい、というのがそもそもの動機です.
元のプログラムでは、日本語で書けるべきtokenを辞書のキーとして用いているので、
辞書にUnicode型が使えないと困るわけです。
ただ
>>535 のように、辞書を引数として渡しているところでエラーが発生していたため、
対処法を質問した次第です.
>>546 ようやく理解できたような気がします.
そもそも自分はキーワード引数というものを理解していないことに気づきました.
要するにキーワード引数を使わないようにすべての関数を変更していったらよいのでしょうか?
>>535 では fg(**kwargs) ---> fg(args) みたいに
辞書キー全部UTF-8にすればいける
>>549 この場合問題は「キーワード引数」ではなく、「可変引数」で
たんに関数に辞書を渡したいだけなら、可変引数なんて必要なくて
辞書をそのまま渡せばいい。
fg(**kwargs)は、fg(foo=1,hoge='hoge)のようにして呼び出すための構文。
そういう関数の呼び方をしないなら、使う必要はない。
>>549 551が書いてるみたいに辞書を展開しないでそのまま渡すのなら
関数の内部で辞書の値を辞書のキーと同じ名前の変数に割り当てるか
もしくは、キー名の変数を使っているところで辞書を参照するようにする
例えば以下のような関数では
show(x=0, y=0):
print("X:%s, Y:%s" % (x, y)
前者の場合
show2(point):
for k in point.keys():
exec('%s = %d' % (k, point[k]))
print("X:%d, Y:%d" % (x, y))
前者の場合
show3(point):
print("X:%d, Y:%d" % (point['x'], point['y']))
ぐわミスった どっちも前者になってるw
>>551-552 細かい修正の仕方まで教えてくださってありがとうございます.
特にshow2の書き方は参考になりました.
本当にありがとうございました.
どうでもいいけどdict.items使おうぜ
>>554 ちょっと不安になったんで念のために
execは注意して使わないと危ないぞ
exec('%s = %d' % (k, v))
の時に 'k' の内容が
import os; os.rmdir('*');x
とかだと目も当てられない
pythonで2chの特定のスレに書き込むのはどんなライブラリを使えばいいの? 検索仕方とかも教えてください
urllib googleで「python urllib」で検索
>>558 ありがとうございます
ですが、私が言ったのはライブラリを検索する方法です
今回でいうurllibが分からなかった場合で
質問です。オブジェクトのリストを要素でソートしたいのですが sort(cmp=lambda x:???) の使い方がよくわかりません(これを使うのがスマートなのでしょうか) たとえば、 Class Point(object): def __init__(self,x,y): self.x=x self.y=y triangle=[ Point(0,0),Point(2,4),Point(2,2) ] このtriangleの要素を Pointクラスのyで昇順にしたいです
sort(points, key=lambda p: p.y) ただし、これだとyが同じ時の順番が未定義。 yが同じ時にはx順で並べたいなら sort(points, key=lambda p:(p.y, p.x))
ごめん、昇順か。reverse=Trueでもつければいいと思うよ
あとsortedだぜ
昇順なら別にreverse要らないんじゃないか
>>563-566 ありがとうございます!
lambdaで設定したkeyをフラグにして取り出すんですね
py2exeで自分が読み込んだモジュールはどうすればいいでしょうか?
#! /usr/bin/env python # coding=utf-8 from Tkinter import * root=Tk() buff=StringVar() buff.set("") label=Label(root,textvariable=buff) label.pack() # コールバック関数の生成 def make_cmd(n): return lambda : buff.set('button %d pressed' % n) # ボタンの生成 for x in range(4): button=Button(root,text="Button %d" % x, command=make_cmd(x)) button.pack() root.mainloop() @これのStringVar()とはどのようなものでしょうか? Aそれとlambdaをここで使うわけは何でしょうか?
>>569 1. 要するにLabelのテキストを簡単に設定するためのプロパティオブジェクト
configure すればいいけどこれ使う方が簡単
2. 使わなくてもいい。単にボタン4つ分のイベントハンドラを書くのが面倒だったと思われる
>>570 すいませんプロパティオブジェクトとconfigureは私のpython本には乗っていないので良く分からないです
>>572 英語ですか
見た所簡単そうな感じなので頑張って見ます
>>569 1 の StringVar は、StringVar の中身を変更すると
StringVar と対応付けられたウィジェットも自動で書き換わるという仕組み
以下を対話型プロンプトから試してみて
>>> from Tkinter import *
>>> root = Tk()
>>> svar = StringVar()
>>> b = Button(text='', textvariable=svar)
>>> b.pack()
>>> svar.set('Hello')
>>> svar.set(u'こんにちは')
2 は簡単そうに見えるけど実は相当難しい(クロージャってやつ)
ボタンの生成時に make_cmd(x) を実行しているのがポイントで、
make_cmd の返り値である無名関数はボタンを生成したときの番号( 0, 1, 2, 3 )を記憶している
わけわかんなかったら次みたいに素直に書くのもあり
def button0_onclick(): ...
def button1_onclidk(): ...
>2 は簡単そうに見えるけど実は相当難しい(クロージャってやつ) 実は簡単
関数を生成して返してるだけじゃん どこが難しいのやら
天才現わる
>>574 やっぱりクロージャですか
ありがとうございます
一つ目がよく分かんないです‥
もしかしてStringVar()は後から中身を書き換える時に使うんでしょうか?
もともとTk由来だから分かりにくいかもなあ 今のありがちなツールキットなら、label.textみたいにプロパティで アクセスさせるのが普通だし Tkだと、何の変哲も無いただの変数を label .foo -textvariable foo_value みたいにして、ウィジットと紐付けることができるんよ 一旦紐付けると、それ以後、変数foo_valueの値を書き換えれば自動的に ウィジットに転送されるし、逆もまた行われる tkinterのStringVarはそれをエミュレートするためのクラスね tkほどエレガントとは言えんけど、原理は同じ
下のような処理を書きたいんですが、 lambda x: x とか result[k] = result.get(k, 0) + 1 あたりはもっといい書き方ないですかね。 def count_by(iterable, func = lambda x: x): result = {} for e in iterable: k = func(e) result[k] = result.get(k, 0) + 1 return result
mod_wsgiを利用している際のimportについて質問です。 src/ path.py hoge.py huge.py のようなファイル構成で、path.pyに ROOTPATH ="D :/python/" と記述し、hoge.pyやhuge.pyから、 import path filePath = path.ROOTPATH というように利用するつもりなのですが、 ローカルでは動くのに、WSGI上ではエラーとなってしまいます。 解決方法をご存知の方はご教示願います。
バックトレース貼ってくれ あとsys.pathの確認
585 :
583 :2010/03/25(木) 22:32:12
バカゆとりどもの宿題タダでやってやるなんて、お人好しだなお前ら
tsv(csv)ファイルの計算について質問です。 カラムごとに数値の合計値を出力したいと考えています。 特定のカラムであれば, i = 0 for line in open('test.tsv').readlines(): item = string.split('\t') if item[0].isdigit(): i += int(item[0]) print i で大丈夫なのですが、 複数のカラムの場合はどのようにすればよいでしょうか?
>>582 collections.defaultdictを使うといいんじゃないかな
>>587 単に合計値をリストに格納すればいい
こんな感じでいいんじゃないの
sums = []
for line in open('test.tsv'):
cols = line.split('\t')
if len(cols) > len(sums):
sums += [0] * (len(cols) - len(sums))
for i, col in enumerate(cols):
try:
sums[i] += int(col)
except ValueError:
pass
for sum in sums:
print sum
import csv tsv = [map(int, line) for line in csv.reader(open("tsv.tsv","r"), csv.excel_tab)] print map(sum, zip(*tsv))
>>852 >>> from collections import defaultdict
>>> def count(iterable):
... result = defaultdict(int)
... for item in iterable:
... result[item] += 1
... return result
...
>>> x = ["foo", "bar", "baz", "foobar"]
>>> count(len(y) for y in x)
defaultdict(<type 'int'>, {3: 3, 6: 1})
Python 2.7 なら collections.counter というそのものズバリなものが追加されるけどね。
592 :
587 :2010/03/25(木) 23:38:00
>>> def foo(n): return lambda x: n * x >>> foo10 = foo(10) >>> foo10(100) 1000 >>> foo5 = foo(5) >>> foo5(11) 55 これのfoo(10)ではnにセットしているのですか? それともxにセットしているのですか?
foo(10)の10はn foo10 = foo(10) foo10(100)の100がx
何度見てもラムダがランバダに見えてしまう
>>594 ありがとうございます
ただ理屈がわからない‥
前の質問もそうだったけど どうわからないのか書いておくれ
>>596 foo(10)の10はnなのはわかるべ?
で、関数def foo(n):
の戻り値が「lambda x: n * x」でnに10を入れると、
foo10っていう変数には
lambda x: 10 * x
が代入される。
これは
def foo10(x):
return 10 * x
と同じだと思ってよろし
> lambda x: 10 * x が代入される これだと実行していない lambda の中身が一部評価されてることになるぞ
わからないうちはそう思っておけばいい
なるほど! ありがとうございます もう少し自分で考えればよかったですね…
602 :
582 :2010/03/27(土) 01:28:58
>>588 ,591
レスが遅くなりましたが、上手く出来ました。
ありがとうございます。
今日、みんなのPythonが届き勉強をはじめました。 がんばるぞ〜。
初めてのPython は読み応えありすぎてわろた
はじぱいはPython3が主流になる前に売り払った方がいいかな
>>605 地元の図書館に寄贈しろよ
Book Offとかで売ったってしれてるだろ
売ってもどうせ一食分にもならないから図書館に寄贈して未来の技術者に貢献するべき
図書館に寄贈したら一瞬で捨てられるぞ。 俺が寄贈した技術本は既に棚に並んでいない。
書庫の奥で眠ってるんじゃね?
技術書の場合はあまりに汚かったり古い本は捨てられるよ
新しい技術書はヤフオク 古い技術書はブックオフ これでおk
ミンぱいwebアプリ編買おうと思ってるけど、webアプリなんて作る事ある?
寄贈するなら新刊のうちに。 それと読みたいのに無いなら すぐにも購入希望を出したほうが全員の利益になる。
>>612 何か凄い特長でもあれば考えてもよいが、思いつかない。
PerlとかPHPの方が情報も書籍も多いと思われ。
617 :
デフォルトの名無しさん :2010/03/28(日) 16:58:14
図書館の本って鼻くそが挟まってたり動物の糞が挟まってる時があるよな
618 :
603 :2010/03/28(日) 17:39:52
>>604 >>605 みなさん凄いです。
早くそうなりたいです。
N88-BASICならある程度いろいろ出来るんですが…現在、変数と組み込み型のとこです。
馴れ合いなら他所でやれ
ごめんなさい
>>617 あるね
小学生の頃に借りた動物図鑑にはカエルの小さいヤツが干からびて挟まってた。
Python3の解説サイトでオススメのとこ教えてくれよ
固定長の配列を宣言するときの定型みたいなものはありますか? 例えば2×2のときに、 >>> a = [[0] * 2] * 2 とするとうまく動きません。
a = [[0 for x in range(2)] for y in range(2)]
625 :
623 :2010/03/28(日) 19:15:02
>>624 リスト内包表記を使うんですね。
参考になりました、これでいってみます。
ありがとうございました。
対話式インタープリタで >>> print(dir(sys.os)) のように、コマンドの実行結果をファイル出力したいんですが可能でしょうか?
>>626 ファイルオブジェクトへの書き込みなら
print >>fileobj, dir(sys.os)
だけど、まだ開いてないならややめんどくさく、
with open("filename.txt", "w") as f: print >> f, dir(sys.os)
>>627 サンクス
2もやったことないから3から挑戦してみる
dive intoってあまり話題になってないのが不思議 信者がウザいのが問題なのかな?
超初心者向けではないからここでは話題になりにくいだけじゃないか 前の版は定番で広く読まれてるよ
まあ宣伝乙ってことで(ww
>>629 初めてな人は2から始めた方がいいよ。
3は情報少ないし、ライブラリも対応していないのが多い。
初心者にどちらを勧めるかは、用途によって異なる。 すぐにWebアプリ作って公開したいとか、即戦力を求めるならライブラリの充実した2 とりあえずかんたんなスクリプティングから始めたいというなら、互換性を維持するための 種々の問題と無縁で将来のスタンダードになる3
おれはずっと2でいいや
>>634 >とりあえずかんたんなスクリプティングから始めたいというなら、互換性を維持するための
>種々の問題と無縁で将来のスタンダードになる3
簡単なスクリプティングのまま2〜3年過ごすのってどんな自宅警備員ですか?
なんのこっちゃ
もちろん将来は逆転するだろうけど 3で始めると足りない機能とかライブラリとか気付いたときに 2に乗り換えるとなると余計面倒なことになると思うし だからといって3の環境が整うのを待つのも微妙 なので今の段階では2から始めて置く方が無難なんだよね 2で分かってれば3になっても苦労しないと思う 逆は大変だよ
Googleがさっさと3に移行してくれねぇかなぁ
638はできる子。 634は非モテ。
641 :
638 :2010/03/29(月) 16:29:27
ありがとう はじめて2chで褒められた (*・ω・*)
毎度お世話になります 今回は初歩的な質問です 例えば def f(x): return x * 2 という関数を作ったときに、returnをつけなければならない理由は何でしょうか? また def print_a(): print "クルミポンチオ" のときにreturnを付けない理由は何でしょうか? 今一返り値がよく分からないんです
>>642 関数の呼びだし元で、返り値を利用するときはreturnで値を返す。
>>643 ようは、計算したらreturnってことですか?
>>642 def func1():
return 'hello world'
def func2():
print 'hello world'
modori = func1()
print modori
func2()
def counter(): x += 1 yield x みたいなのもなかったっけか
>>644 例えば、「このゴミ捨てといて」と頼む場合は、捨てたゴミは返してもらう必要がないので
返り値はいらない。
「この書類にサインして」と頼む場合は、サインされた書類を返して貰う必要がある。
その関数に、どういう役割をもたせるかの問題。
今時のゴミ投棄は廃棄証明が戻って来たりする罠
>>647 そのごみ捨てといてがprint文に当たる訳ですか
関数やらprintを使ったらreturnはいらないってことですか
これはあかん
>>> def counter(): ... x = 0 ... while True: ... yield x ... x += 1 ... >>> counter() <generator object at 0x01ACBCD8> >>> counter() <generator object at 0x01ACBCB0> >>> counter() <generator object at 0x01ACBD00> >>> counter().next() 0 >>> counter().next() 0 >>> counter().next() 0 >>> c = counter() >>> c.next() 0 >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 4
>>642 > という関数を作ったときに、returnをつけなければならない理由は何でしょうか?
xを受け取ってそれを2倍した計算結果をわざわざ捨てて
呼び出し側にNoneを返す関数なんて使い物にならないから
> のときにreturnを付けない理由は何でしょうか?
後者はその恥ずかしい文字列を出力さえしてくれればいいのでreturnしていない
>>649 関数の中身がどうなっているか(printを使ったか)ではなく、
その関数が結果を返す必要があるかどうか。
例えば、「2chのスレッドを読み込む」という関数は、ダウンロードしてきた
スレッドの内容を返す必要がある。
「2chのスレッドに書き込む」という関数は、特に何も返す必要がない。
どちらも似たような処理だが、役割が違う。
なんだか分かった気がします 確認のためにテストなどお願いします
ではさっそく いわゆるFizzBuzz問題を解いてください
for x in range(1,101) print x if x % 3 ==0: print "Fizz" elif x % 5 ==0: print "Buzz" ここまでできたが3と5の両方の倍数ってどうやって表現するのかわかりません まだまだアマチュアですね てかちげえwww
>>656 if x % 15 == 0:
print "FizzBuzz"
か
if x % 3 == 0 and x % 5 == 0:
print "FizzBuzz"
お好きな方をどうぞ
補足
andはhoge and hogeの二つの条件に当てはまった時
orはhoge or hogeのどちらか一方が当てはまったとき
>>657 それって、3と5の公倍数でしたっけ?
9とか10も入ると思ってたんですが
これってそんなに難しくないですよね?
FizzBuzz問題の標準制限時間は2分だそうです
>>656 if文の外で必ず通るところにprint xが書いてあるから
123Fizz45Buzzになりそうだけど
>>659 出来なくはないかも知れませんね
覚えてればの話ですけど
returnを省略すると暗黙の「return None」と同義と考えていいと思う。 def print_a(): print "クルミポンチオ" return None 返値を使うか使わないかは呼び出し側次第。
いや、そのりくつはおかしい
>>662 確かにreturnがない関数の戻り値を見るとNoneだけど、
なーんかしっくりこない。
pythonでは「何も返さない関数」=「Noneしか返さない関数」だけど、やっぱりしっくりこない。
実行したときの結果が同じに見えるとき、その処理の中身の違いが分からない程度の学習段階だと、
とりあえずもうちょっと先に進んでみろ、と言っておきたい。
関数に引数渡したり、関数を沢山使う場面に出くわすようになったら、意味が全然違うことに気付くはず。
それなりにPythonやってる方だと思うけど なんで省略=return Noneがおかしいのか分からん
関数が必ず戻り値を返すということにすると、関数をラップするとか、 関数オブジェクトを利用するコードが書きやすいんだよな。 あと、動的型付け言語だと、関数が戻り値を呼び出すのかどうかが 実行時まで判らないから、本当に戻り値の無い関数があると その扱いが難しい。
>>> def a(): 1 ... >>> a() == None True こうなるから間違ってなさそうだけどな
>>> import dis >>> def hoge(): ... 1234 + 5678 ... >>> dis.dis(hoge) 2 0 LOAD_CONST 3 (6912) 3 POP_TOP 4 LOAD_CONST 0 (None) 7 RETURN_VALUE
>>668 もちついてください
超初心者用スレでそんな低レベルの話されたらパニックになる人が最低1人は出ます
漏れです
Cでは「何も返さない関数」=「アキュムレータの値を返す関数」
Rubyでは「何も返さない関数」=「さいごに評価された値を返す関数」
省略=return selfだったら良かったのにと思うことはある
Ruby気持ち悪い
結局、FizzBuzz問題の答えはなんですか?
ファッションチェックお願いします for x in range (1,101): y = x if x % 3 == 0 : y = "Fizz" if x % 5 == 0 : y = "Buzz" if x % 15 == 0 : y = "FizzBuzz" print y
fizzbuzz?1行で書いてやんよ print '12fizz4buzzfizz78fizzbuzz'
>>678 学生に課題だすと必ずそういう解答するお調子者がいるんだよなぁ
>>672 >省略=return selfだったら良かったのにと思うことはある
これが噂のRuby脳か。
print(map(lambda x:'FizzBuzz' if x%15==0 else 'Fizz' if x%5==0 else 'Buzz' if x%3==0 else x,range(1,101))
m = {0:'fizzbuzz', 1:'1', 2:'2', 3:'fizz', 4:'4', 5:'buzz', 6:'fizz', 7:'7', 8:'8', 9:'fizz', 10:'buzz', 11:'11', 12:'fizz', 13:'13', 14:'14'} for x in xrange(100): print m[x%15]
ifは遅せえよ マップ型使えといわれてるだろ
>>681 省略=self は ruby じゃないだろ
#!/usr/bin/env python try: num_of_input = input("Input number of values: ") i = 0 vals = [] while i < num_of_input: val = input("Input value #" + `i` + ": ") if val >= 100: raise "TooBig" vals.append(val) i = i + 1 print "The following values are user inputs:" for val in vals: print val except "TooBig": print "The value is too big!!" これってどうゆうこと?コピペしても実行できないorz
>>690 どこからコピペしてきたのか知らないけど
`i` はたぶん 'i' か "i"
あと実行はコマンドプロンプトから行ってエラーメッセージ貼ってね
>>690 そういう英語がおかしいコードは読まなくてもよい。
694 :
692 :2010/03/30(火) 15:18:06
なんか別の言語と間違えてた
>>690 #!/usr/bin/env python
try:
num_of_input = input("Input number of values: ")
i = 0
vals = []
while i < num_of_input:
val = input("Input value #" + `i` + ": ")
if val >= 100:
raise "TooBig"
vals.append(val)
i = i + 1
print "The following values are user inputs:"
for val in vals:
print val
except "TooBig":
print "The value is too big!!"
インデントが狂ってたよ
ポップアップかソースで
>>690 python 2.6 だと文字列例外が取り除かれてるみたい
raise "TooBig" とかできなくなってる
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class TooBig(Exception):
pass
try:
num_of_input = input("Input number of values: ")
i = 0
vals = []
while i < num_of_input:
val = input("Input value #" + `i` + ": ")
if val >= 100: raise TooBig()
vals.append(val)
i = i + 1
print "The following values are user inputs:"
for val in vals:
print val
except TooBig:
print "The value is too big!!"
一応こんなふうにすればなる
あと `i` は python 3 で使えなくなるから repr(i) の方がたぶんいい
>>696 例外クラスのExceptionを継承するってことデスか
ねえねえ、例外処理とifってどっちが早いの?
ifで済む様なところまで例外使う奴が意外と多くて驚いた
>>701 だってパターンマッチがないんだからしょうがないないじゃん
C#かpythonのどちらかを勉強しようと思うのですが、どちらを勉強したらいいと思いますか? 将来的には物理演算とグラフィカルな表示をするプログラムを作りたいです。
706 :
704 :2010/03/30(火) 15:56:05
即レスどうもです。 ちなみに理由は何故ですか? 物理演算用のライブラリでも用意されてるんですか?
速度が重要な用途だから。 しかし、そんならC/C++でCUDA/PhisyXでも修行しなさいって ことになるか。
708 :
704 :2010/03/30(火) 16:40:46
計算速度はそれほど気にしません 強いて言えば習得できるスピードを重視してます
ものによっては速度100倍とか変わるで
単純な数値計算やバイト列の操作とかは、PythonはCに比べるとものすごく遅いよ Pythonを選ぶのなら、その手の処理は丸投げ可能なライブラリを使うか、 自分でC拡張を書いたほうがいいな
711 :
704 :2010/03/30(火) 17:36:02
なるほど、勉強になりました これ以上はスレチになりそうなので他所に行きます 答えてくださった方々、ありがとうございました
>>689 自己参照返しはメソッドチェーン作るときのお決まりのパターン。
Pythonじゃあんまりメソッドチェーン使わないけど
Rubyはメソッドチェーンだらけだし。
使わないというか使うなクソボケ氏ねっていう勢い
pythonだって文字列処理とかはメソッドチェーンじゃないですか 手癖によるけど
数値演算ならnumpy使えば全然速いだろ。
>>715 Pythonで値が返るのは、基本的に(selfではなく)「新たな値を返す」ケースだね
文字列もそう
self返しはあまり見ないな
ruby信者きもいで素(><)
あるオブジェクトだけが与えられた時、それがどのクラスのインスタンスか知る方法はありますか?
720は駄目な子
>>721 俺もそう思ったが、Python 3.xでは正解のようだ。
723 :
720 :2010/03/31(水) 10:15:13
うわぉ、 old-type-class だと
>>720 が上手くいかないんだな。
old-type-classなんて使うな!って思うけど・・・
ダサいけど、 obj.__class__ を使の方が汎用的なのか?
ああ、3.xということじゃなくて、new style classってことか。 2.5.x, 2.6.x でも__future__で全部new style classにして欲しいな。 つい忘れる事がある。
725 :
720 :2010/03/31(水) 10:40:34
>>724 __metaclass__ = type
class C: pass
↑ new style class
722はお花畑の住人。
リストの概念がむずかしい
pythonの #! はどう書いておけば無難なの? まだWindows版しか使ってないから分からない。
windowsはshebangではなく拡張子を見てるから つける必要はない
Windows専用なら書かなくてもいいけど *n*xにも持っていくなら書いた方がいいかもね 書かなくても python hoge.py で動くよ #!/usr/bin/env python この書きかたが多いみたいだけどこれを嫌う人もいるらしい #!/usr/local/bin/ptyhon 自分でインストールしたらなこんな感じ #!/usr/bin/python 元々インストールされてたのを使うならこんな感じ どっちみちポータビリティ考えてプログラム書いておかないといけないから ここだけ変えて動くってもんでもないことは意識しておいたほうがいいよ
#!/usr/bin/env python で十分。あとは setup.py をきちんと書いておくこと。 python setup.py install するときに、自動的に書き換えられるから。
今はバージョン混在期なので /usr/bin/python2.6 -O のように明示的にしておいた方が無難かもね。
自分で書いたソースの中で shebang 行に書かれている内容を参照出来ますか? 自己ファイル読むしかないですか?
735 :
デフォルトの名無しさん :2010/04/05(月) 16:28:24
DOSコマンドのroute printで表示される情報と同じものを取得する方法を教えてください
import win32com.client print u'%-16s%-16s%-16s%-16s' % ('Destination', 'Netmask', 'Gateway', 'Metric') for i in win32com.client.Dispatch('WbemScripting.SWbemLocator').ConnectServer().ExecQuery('Select * From Win32_IP4RouteTable'): print u'%-16s%-16s%-16s%-16s' % (i.Destination, i.Mask, i.NextHop, i.Metric1)
わあいわあい
738 :
デフォルトの名無しさん :2010/04/08(木) 01:13:11
Pythonの日本語コミュニティってどんなところがあるか教えてください。 出来ればIRCやチャットなんかでリアルタイムで参加できるといいんですが。 PyjugとかいうところはIRCもうやってないみたいだし。ここやhatenaのブログ群しかわからんです。 オンラインで一人でやっていく場合、何かいい手助けがあれば教えてください。おながいします。
>>738 そんなものはない。英語を勉強するか諦めるかどっちか選べ。
ついったーに#Pyjugってハッシュタグあるね。 あんまついーとされてないけど。。
2chのスレが一番マシなのか?www
>>738 マジレスすると最近はGAE周りに
初心者に手取り足取り教えてくれる
親切な人たちが集まっているようだ
GoogleAppEngine hack-a-thon
でググってみてくれ
743 :
738 :2010/04/08(木) 07:56:47
>>739 やはりそうですか、前にPython勉強しようとして挫折したのもそこからだった気がします。
調べたんですがなかった。今仰るとおり英語で勉強中です。
>>740 サンクスちょっと見てみます。
>>742 マジレスありがとうございます。やはり日本語コミュニティはありがたい手助けになると思うので、熱心にググってみますです。
ラブプラスを持ってゆくとカップル割引になりますか?
PythonのMLは、参加者の数に対して、質問を含めて、ネタを提供する人が 足りない状況ですね。 初心者が気兼ねなく質問するのは、活気が戻るので大歓迎です。
GoogleAppEngineのコミュニティなど存在しない。 厨房の妄想が作り出した幻想だ。
750 :
デフォルトの名無しさん :2010/04/08(木) 15:46:43
python challengeやったんだが一問目からわからん なにすればいいの?
たしかに最初にやったときは面食らった
モジュールなんてどこから探せばいいんだ?
名前さえわかるならeasy_installで一発
* ぐぐる * 公式マニュアル>ライブラリリファレンス * PyPI
効果から名前を知りたいんだよな ライブラリリファレンスも使いにくいし
画面キャプチャが import ImageGrab ImageGrab.grab().save('hage.png') だけで出来るとは気付かなかった
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
ironpython始めたんだけど みんなエディタ何使ってるの?TT
761 :
738 :2010/04/09(金) 10:20:41
一応irc.2ch.netにpythonのチャンネルがあるのは見つけました。 irc://irc.2ch.net/python
763 :
デフォルトの名無しさん :2010/04/09(金) 18:19:39
なんかこれだけは覚えとけってモジュールある?
peak hell
autolibがあれば他は不要
sysとかも必要かね?
PIL
769 :
デフォルトの名無しさん :2010/04/09(金) 20:14:27
iモードIDの取得方法を教えてください f = cgi.FieldStorage() if f.has_key('HTTP_X_DCMGUID'): print f['HTTP_X_DCMGUID'].value と書いてもダメのようです
携帯側でID送らない設定になっているとかいうオチだったり
from uamobile import detect dev = detect({'HTTP_USER_AGENT':os.getenv('HTTP_USER_AGENT'),'HTTP_X_DCMGUID':os.getenv('HTTP_X_DCMGUID')}) iid = dev.guid
できたぁ〜 771さんヒントありがとう import os dev = os.getenv('HTTP_X_DCMGUID') print dev
おめこ
沢山バージョンがあるんですがどのpythonがいいですか? やりたいことはxpでコマンドラインが扱えるツールを扱ったり webからファイルをダウンロードするようなものを作ろうと思ってます
ヘ⌒ヽフ ( ・ω・) dd / ~つと)
>>775 にいたるまでテンプレ消えても誰も指摘しなかったのかw
おおらかでいいな
自治は結構丸投げなんだよな
ID出ない時点で半分諦めてるからな モジュール書く時はsys.getdefaultencoding()に関係なく動くようにしたい思った春
>>775 そういう初歩的なことはどうでもいいから
さっさとファイル入手力のやり方が知りたいんだが
ヘルプにもどこにもそこのリンクには書いていないじゃないか
別に本格的にやるわけじゃないんだから
要所だけわかりゃいいんだよ
そうですか がんばってね
pyファイルでコマンドライン引数拾いたいんだが pyファイルにファイルドロップしようとしても無理だし ランチャに登録してパス渡しても無理なんだけど コンパイルしなきゃだめなの?
%s
argvs = sys.argv print argvs こうやってるんだけどさ、pyファイルのパスしか格納されてないんだよね
あーわかったわ、 なぜかわからないがipy.exeに対してやらなきゃならないのか ipy.exe test.py readme.txt
IronPythonは別スレがあるぞ
それはともかく
> こうやってるんだけどさ、pyファイルのパスしか格納されてないんだよね
ドロップしたファイルのパスがargv[1]に入らないってことか
なんかWindowsのコンソールは関連付けやパイプで妙な挙動をすることがあるから
変だなと思ったら
>>786 みたいに明示的にインタプリタに食わせるといいよ
>>787 お、スレチでしたか
ともかくありがとう
なんだactivepython入れたらエディタもついてくるじゃない これでいいやん
・・・
…
めんどくせーなこの言語は 何度も何度もshift-jisに変更させやがって 変換なしで文字列操作できないのかよ
っちらし
はあ?他の言語なら何も考えずに処理できるぞ 言語が糞なんだろうが いちいちエラー吐きやがってよ
〃∩ ∧_∧ ⊂⌒( ・ω・) はいはいわろすわろす `ヽ_っ⌒/⌒c ⌒ ⌒
なんだこれは 今度はソースのセーブすらできなくなってるし そりゃ過疎るわなこんな糞言語
〃∩ ∧_∧ ⊂⌒( ・ω・) はいはいわろすわろす `ヽ_っ⌒/⌒c ⌒ ⌒
∧_∧ ⊂(#・д・) わろすって言ってんだろ!! / ノ∪ し―-J |l| | 人ペシッ!! __ \ \  ̄ ̄
わざわざ何度も何度も変換するなんて、相当暇なんだな。 入力時にdecodeして出力時にencodeするだけでいいのに。
にわかとうじょう
>>795 >はあ?他の言語なら何も考えずに処理できるぞ
まちがったまま勝手に処理されても気付かない
(=文字化けしたり)ってことはCのヌルポと同じだよ
Javaみたいにヌルポを教えてくれるかどうかの違い
これはひどい ていうか悪態つくような子に触らないで
∧_∧ ⊂(#・д・) ヌルポって言ってんだろ!! / ノ∪ し―-J |l| | 人ペシッ!! __ \ \  ̄ ̄
uniのABCとsjisのABCを直接結合できないと知った春でした しかしそれくらいで500エラー出すかね、厳しい言語だね
>>805 もうちょっと弱い型付けの言語でも探せば?
ここまでなんとかできたんだけどもっとシンプルに書けませんか?
url="
http://yutori7.2ch.net/test/read.cgi/ana/1270636640/ "
lines=urllib.urlopen(url).readlines()
if os.path.exists("img") != True:
os.mkdir("img")
def getTitle(line):
return line[7:len(line)-9]
imgurls=[]
def getIMGurls(line):
strs=line.split()
for str in strs:
if re.search("
ttp://blog-imgs ",str) != None:continue
if re.search(".jpg",str) != None:
imgurls.append(str)
for line in lines:
if re.match("<title>",line) != None:
title= getTitle(line).decode("shift-jis")
if re.search("\.jpg",line) != None:
getIMGurls(line)
for imgurl in imgurls:
if re.match("ttp",imgurl) != None:imgurl="h"+imgurl
dest="img\\"+os.path.basename(imgurl)
urllib.urlretrieve(imgurl,dest)
time.sleep(1)
あー 3年位前に漏れも同じの作ったわw
>>808 めんどくさいから俺がどうにかする気はないが、シンプルにしたいのなら。
正規表現使う必要性があんまり分からん。それにもし使うなら文字列取り出しまでやっちゃえばいいのに。
そうするとgetTitle関数は不要になるか、タイトルにマッチするかどうかも盛り込んだ関数になるんじゃないかなぁ。
getIMGurls関数は、グローバル変数のimgurlsに依存してる時点であんまり処理の分割って役目を果たせていないのだから、
1回しか使わないのであれば関数にする必要ないんじゃないかなぁ。
あと、一度imgurlsに入れてから処理しなおさなくても、その場で処理してしまってもいいように思えるが。
ひどいコードだ まるでPHPを見ているようだ
>>805 エラーを出してくれる方が親切だろ。
しかし、その割には変数の宣言は必要ない。
厳しいのか緩いのかよくわからん謎仕様。
プログラミング初心者でも理解出来そうなpython入門書教えてくだしあ
>>812 漏れは
>>805 じゃないけど
python 学び始めた頃は文字列操作の度に
なんでこんなに例外ばっかり・・・と思ってた
unicode と (encoded) str の違いを理解して
例外の出る理由が判ったあとは考えかたが変わった
いいかげんな文字列処理で文字化けしてても動く言語
→どこにバグがあるか判らないけどとりあえず動くからプログラムに間違いがあっても放置
python の場合
→ちゃんと問題のある場所でエラーが出るからバグ修正が楽
ご指摘の参考にちょっとマシになったと思うのですがどうでもしょうか?
lines=urllib.urlopen(url).readlines()
title=""
dir=""
for line in lines:
if re.match("<title>",line):
title= line[7:len(line)-9].decode("shift-jis")
dir="d:\\img\\"+title+"\\"
if os.path.exists(dir) != True:
os.mkdir(dir)
else:
strs=line.split(">")
for str in strs:
m=re.search(r"
ttp://.+\.jpg ",str)
if m:
filename=title+"_"+os.path.basename(m.group(0))
print filename
try:
if os.path.exists(dir+filename) != True:
urllib.urlretrieve("h"+m.group(0),dir+filename)
print "success "+filename
else:
print "exists "+filename
finally:
print ""
raw_input("ダウンロード完了")
quit()
汚ねーコード貼るなって
>>817 * 行からタイトルを探す作業は一度見つかったら残りの行については探さなくて済むはず
* os.mkdirの引数は\で終端する必要は無い
* if not os.path.exists(dirname): と書くとすっきり
* strは組み込み関数にもあるのでできれば使わない
* (urllibはkeep-alive(ぐぐって)に対応してなかったような気がする)
あとはHTMLからリンクを抜き出す正規表現を勉強してみたり
HTMLでなくDATにアクセスするようにするともっとすっきり書けると思う
strs=line.split(">")のあたりはいかにも苦し紛れだ
DATについては monazilla 2ch dat でぐぐって
>>819 独学でやっているので動けばいいかなぐらいで妥協しがちだけど
こういう意見は非常に参考になります
思い切って意見聞いて正解でした
ありがとうございました
>>817 HTMLから持ってくるなら
HTMLParser使えよ....
datだろ常考
dat使った方が楽そうだけど、HTMLでやった方が汎用性は高いぞ
825 :
デフォルトの名無しさん :2010/04/11(日) 15:00:53
なんか開発するときってどうゆうてじゅんでやってる?
>>825 ・目的を考える。
・ターゲット考える。
それから開発
・既に出来上がったものがあるかどうかを調べる ・2chで聞いて誰かが作ってくれるかどうか確認する
HTMLParserとか汎用ライブラリの下請けに使うことはあっても
>>817 に使うケースは99%ないなw
怒らないでマジレスしてほしいんだけど おまえら、なんでこんな時間に書き込みできるわけ? 普通の人なら学校や会社があるはずなんだけど このことを知った親は悲しむぞ? もっと、現実を見ようぜ。
マルチうざい
そのコピペ流行ってるのか?
>>831 化石レベル。
コピペを知ったばかりのリアル厨房と思われ。
自演かもしれないがHaskellスレに見事釣られてるのがいて失笑した
いちいち報告せんでいいわ厨房
厨房ってなに?
そりゃあれだろ、料理を作る感じの
kitchen
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
Python 3 プログラミング徹底入門は評判どうなんでしょうか。 買った方いらしたらどんなもんか教えてください。
プログラミングとやったことない人でもはじめられる入門書ってないですか 3DCGのソフトのスクリプトがpythonになるので手をつけたいんですけど
本の質問多いな たぶん本でPython学んだ人って少ないと思うよ
>>840 最初の言語にPythonはやめとけ
VisualC#2008 Expressを落として、
「プログラムを作ろう! Microsoft Visual C♯2008 Express Edition 入門 (DVD付) (マイクロソフト公式解説書」
とか買ってみなさい。
>>842 Pythonは最初の言語としても優れている。
WindowsでGUIアプリを作るところから始めたいのなら、C#から始めるのが正解だと思うけど、
>>840 は別の目的があるのでPythonから始めたのでOK。C#はお門違い。
てか「最初の言語」という用途こそ 教育用言語由来であるPythonがもっとも得意とする分野だと思うがどうか 本ははじパイでいいんじゃない ちと高くて厚いけど
はじパイはunicodeまわりのところが全くといっていいほど書かれていないのでお勧めしない 昔とちがって今はネットの情報で充分だよ
問題は、「インストールしてIDLEで書いて動かせる」ところまでいけるかどうかだな!
みんなIDLEで書いてるの?
他に選択肢がないからな
俺はGinnieというマイナーエディタ使ってる
秀丸使ってます(キリッ
Emacs
PythonってCと比べて簡単?
簡単だよ
IDLEはPython2系ではクソ。非ASCII文字列の扱いがデタラメ。
デタラメってほどじゃないけどな 判らずに使ってると滅茶苦茶に見えるのは確かだな
馬鹿には使えません
馬鹿しか使いません
くやしいのう くやしいのう (AAry
ばーか
他所で解決しました もう結構です
>>860 さようなら。たびのひと。またおたちよりください。
>>855 判らずに使ってるとも何も・・・
UTF-8以外の環境で、 u"あいうえお" ってしてみ?
それIDLEの問題というよりはcode.pyの問題
初めての言語でパイソンはないよな この言語から学べるものって何もないが このソフト使うのってコマンドラインツール を利用するときぐらいしかないわ
そりゃ学ぼうとしなければ何も学べないわな
formatterモジュールって何をするモジュールですか? ドキュメント見てもわけわかりません・・・
>>865 言語から本気で何かを学び取りたいなら、
コンピュータそのものを学びたいならアセンブラかC
コンピュータサイエンス的なものを学びたいなら、LispかMLかHaskell
だと思うんだ。
けど、そういう言語こそ2番目以降でいい。
始めての言語にPythonはいい選択だと思うが
あとはちと古いがPascalなんかも
真面目に取り組みたいなら
>>869 の言うとおり
Pascal は良いね 矯正ギプスみたいな感じがする
言語としては入門に向いていても、現状では初心者が勉強していく 環境が十分に整ってないと思う。 あと、初心者がモチベーションを維持していくには、絵や音が出た方が いいと思うけど、Pythonでそれをするのは面倒なんだよね。 そういう点では、入門としてはSmallBasicが最高の環境だね。 文法がBASICなのがイマイチだが。
言語としては入門に向いていても、現状では初心者が勉強していく 環境が十分に整ってないと思う。 あと、初心者がモチベーションを維持していくには、レン鯖にCGIを置いたり Webサービスを簡単に利用できたほうがいいけれど、 SmallBasicでそれをするのは面倒なんだよね。 そういう点では、入門としてはPerlが最高の環境だね。 リファレンス周りで他の言語に乗り換える奴が続出するけどね。
ないない
結局C#一本やるだけで十分事足りる
なぜここいいるんだ?
C#強いわ〜。タダだし開発環境最強だし。
>>872 音は出ないけど、turtleモジュールとかはどうだろう。標準で付いてくるし、Pythonのソースコードを落とせばデモで遊べる。
音を出したいんだったらpygame辺りか。
Tkinterが標準で付いてくるのもポイント高いな
どうせGUIやるならC#でやるわ
C#はソース丸見えらしいがpythonもかい?
Pythonもそうだよ だから安心してWhitespaceにGUIライブラリを実装するといい
import win32com.client import re s = win32com.client.Dispatch('SAPI.SpVoice') vs = s.GetVoices() voicename = ['DTalker_Taro', 'MSSam', 'MSMary', 'MSMike', 'LHKENJI', 'LHNAOKO'] voice = {} for i in xrange(vs.Count): v = vs.Item(i) for n in voicename: if re.match(r'^(.*)(%s)' % n, v.Id): voice[n] = v s.Voice = voice['LHNAOKO'] if 'LHNAOKO' in voice else voice['MSSam'] s.Rate = 5 s.Speak(u'これはPythonでSpeech APIを制御してしゃべらせています。どうでしょうか。', 1) s.WaitUntilDone(30000) s.Speak(u'二つ目の文です。', 2)
>>884 時間待ち? が寂しいんだが。
スピーチ終了を知らせるイベントとか無いの?
s.WaitUntilDone(-1)
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに 知識として持っててあたりまえのことを質問する馬鹿が増えた
>>888 自分が利口になったからだ!
って考えれば末広がりんぐ
Pythonチュートリアルの日本語訳を探しているんですが、2.6や3.0のものが見付かりません。 Python本体は2.6や3.0を使って、チュートリアルは2.5のものを読むのでも大丈夫ですか? なんかチュートリアルが一番コンパクトにまとまってるみたいなので、入門にそれを使いたいんです。
みんなのPythonはどうですか?
>>892 2.5と2.6は大して変わってないので気にしなくていい。
>>892 2.5をやればいいと思うよ
多くのチュートリアルサイトも2.5以前のものが多いし
つまらないところでいちいち詰まるよりは効率的
どっちみち英語読めない奴は糞プログラマだしな
>>894 loggingは拡充されてた希ガス。configfileから読み込む辺りが。
最近pythonを始めました。そこで疑問がありましたので質問させてください。 listのindexでは該当項目がないとエラーになりますが、 count等でまずは該当項目があるかチェックするのが普通のやり方なのでしょうか? またcount以外でやる方法がありましたら教えていただけないでしょうか?
ValueErrorをトラップすればいいと思うけど 要素リスト内にあるかどうかを調べたいのなら、単に if x in [1,2,3]: とかでいいよ
エラーが起きたらエラー処理をする 簡単でしょ?
try: except LookupError: で処理するのが普通かな indexがなかったらデフォルト値を使うような処理ならdictを検討した方がいい あえて例外素通りさせるのもあり
>>901 がんがれ
if文というより、in演算子の機能だよ
>>> 4 in [1,2,3]
False
>>> 1 in [1,2,3]
True
すいません、途中で送信してしまいました。
>>898-900 なるほどif文でも調べられるのですね。
まだチュートリアルでtryまでいってなかったので、気づきませんでした。
親切に教えていただきありがとうございました。
>>902 なるほどin演算子でtrue,falseも返ってくるのですね。
in演算子はlistとかの中身を送るだけなのかと思っていました。
勉強になりました。ありがとうございます。
>>904 >in演算子はlistとかの中身を送るだけなのかと思っていました。
細かい話なので、混乱するようなら今は覚えてなくてもいいけど、
for x in lsのinのことを言っているのなら、それはin演算子じゃあないよ。
for文がfor ... inの形式で書くことになってて、ここでのinはfor文の一部。
in演算子と偶然同じ単語が使われてるだけね。
hoge = [None] * 10 とかして一定の大きさの配列確保してから代入して使ってた
import time import threading class TestA(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): cnt = 0 while True: print cnt, self.name cnt += 1 time.sleep(1) def testB(s): for i in xrange(5): print i, s time.sleep(1) for i in xrange(3): TestA('testA %d' % i).start() threading.Thread(target=testB, args=('testB %d' % i, )).start() これで testB が全部終了したときに TestA の方が自動で終了するようにしたいのですが どう書けば良いのでしょうか?
>>905 for文のinは違うのですね。
for文のinがまさしくin演算子だと思っていたから勉強になりました。
ありがとうございます。
RSSを取得してきて表示するのを書きました。 RSSはUTF-8で書かれているのですが、コマンドプロンプトで実行すると漢字だらけで文字化けしているようです。 うまく表示するにはどうしたらいいのでしょうか?
910 :
デフォルトの名無しさん :2010/04/19(月) 11:50:17
勉強ついでに5000件程度のファイルのサイズをチェックして重複を削除するプログラムを作ったのですが時間がかかりすぎて不便を感じてます。 より高速に処理するにはどう記述したら良いでしょうか? i = 0 path = '/hoge/' files = os.listdir(path) del_list = [] while i < len(files): File = path + files[i] j = i + 1 while j < len(files): File_check = path + files[j] if os.path.getsize(File) == os.path.getsize(File_check): del_list.append(File_check) j = j + 1 for del_file in del_list: os.remove(del_file)
ファイルサイズをキーにしたdictを使うといいよ
ファイルサイズだけで重複判定して削除って随分危険だな まあ勉強用ということならいいけど
>>911 ありがとうございます!
さっそく試してみます
>>910 つ、checksum 値。
e.g.) md5sum, sha1sum
915 :
910 :2010/04/19(月) 12:21:24
>>912 どうせエロ画像だからいいのです('A` )
>>914 ありがとうございます。
後で試して比較してみます
>>909 Python 2.X系と仮定しての話だけど
日本語WindowsのデフォルトのコードページはCP932という奴で、
UTF-8とは違うエンコーディングになるので、UTF-8なバイト列を
そのまま表示しようとしたら、当然文字化けになる
Windowsのコードページにあったエンコーディングに変換するには
Pythonでは'mbcs'というエンコーディング名を使う
sにデータが入ってるとして
u = s.decode('utf-8') # str->unicode変換
u.encode('mbcs', errors='ignore') # unicode->str変換
のようなことをやるとよいよ
運がよければ上だけで印字できる(print uとかやれば)
それでダメなら下で、再度strに変換する
普通に print u'おちんちんびろーんwwwww' みたいにユニコード文字列にするのでは駄目なの
>>917 RSSフィードみたいなのをプログラムの外から読み込むのと
ソースに書き込むリテラルは全然違う話だぞ
>>916 Windowsのエンコードを取得するとcp932なのに、
mbcsと指定しないとコケるのはなんとかならんのだろうか?
import locale
console_encode = locale.getpreferredencoding()
間違い?
間違い
>>916 C#なら何もしなくてそのまま表示できるのに
>>909 RSSはxmlだから、xmlのライブラリに突っ込んでやって、そこから値を取り出せば、
デコードされてunicodeになって帰ってくる。
unicode文字列をそのまま print したら、コンソールのエンコーディングにエンコード
されるから文字化けしない。
>>922 C#でも、ダウンロードしたバイナリをそのまま標準出力に流したら化けるだろうが。
言語の問題じゃなくて、処理フローの問題だよ。
参考書に載ってるソースコードそのまま書いて実行しても書いてある結果になりません。。。 print("Type integer, each followed by Enter; or just Enter to finish"); total=0; count=0; while True: line=input("integer:") if line: try: number=int(line); except ValueError as err: print(err); continue; total+=number; count+=1; else :break; if count: print("count=",count,"total=",total,"mean=",total/count); これで最後にEnterだけ押したら最後の行のが出力されるはずなんですが、 なぜかEnter押しても invalid literal for int() with base 10: ' ' となります。どうしてでしょうか。わかる方教えてください。
>>924 line=input()の後にline = line.strip()ってつけてみてもだめかなぁ?
>>925 ありがとうございます!載ってる答え通りになりました。
が、参考書のソースコードがこれ間違ってるってことになるんですかね。。
とりあえず書名と自分の使ってる Python のバージョンぐらい書いたほうがいいぞ
>>927 申し訳ないです。本は「Python3 プログラミング徹底入門」
バージョンは3.0で、開発環境はEclipseのPyDEVのバージョン1.5.6です。
半角スペースを入れずにEnterだけ押したのなら 本に書いてあるとおりの結果になると思う コマンドプロンプトや仮想端末から実行してみて line = line.strip()がなくても望みの結果が得られるようならEclipse+PyDevが怪しい
糞本買うととんでもないことになるな。
「はじめてのPython」にしとけとあれだけry
Eclipse+PyDevが怪しい
Python3が怪しい
バグ取りや例外処理の練習用だと思えば良い教材
プログラムの本質でない部分のバグで詰まるなんてかわいそう 素直にC#でやればいいのに
ありません
>>936 全く同じものはないけど、Cython, unladen-swallow, PyPy-JIT
>>929 コマンドプロンプトから実行したら望みの結果がでてしまいました。。。
ってことは開発環境周りが怪しいってことですね・・・
Windows XP上のPython 2.6.2とPyscripter 1.9.9.7で質問です。 Python command Lineで実行すると正常にプログラムが動き、Pyscripterで実行→実行すると decoding Unicode is not supportedとエラーをはきます。 文字列コードの変換がおかしいのかなと、文字列コード変換を別々にやらせるように修正。 今度は逆に、Pyscripterでは正常に動くのはいいんですが、Pythonのcommand lineでは動かなくなります。 可能性としては何かありますか?
ソースにエンコード指定行書いてないとか
>>940 とにかくさ、慣れるまで非効率的でも癖のないエディタを使うべきだと思うよ
もしくは併用するとか
大抵のテキストエディタはランチャ登録機能備えているしね
>>942 了解です。いろいろとエディタ探しの旅に出てみますね。
ありがとうございます。
>>940 何をしてエラーが出たのかくらい説明しないと答えようがない。
文字を出力したのか入力したのか、スクリプトを実行したのかシェルで入力したのか、
質問するには情報がなさすぎ。
通りがかりのエスパーですが
print u'日本語'.encode('hogehoge')
print u'日本語'
print '日本語'
と混在して出力させてると
>>940 の状態が起きそうな気がする
>>944 すみません。スクリプトを実行したときで文字を入力したときです。
>>945 さんの言うように混在してます。
ソース晴れ
Pyscripterは糞だから使うなっつーの
あほが湧いてるな。せっかく入学した学校で虐めにでもあってるのか?
907 ですがわかるかたいらっしゃいますでしょうか?
>>928 ぐぐったらその本に書いてあるサンプルが公開されてたからら見てみたけど
お前が勝手に
if not line: break
削ったせいじゃねーかwwwwww
>>951 スレッドBを先に作って、start()しない。
スレッドAの最後で、スレッドB.join()する。
スレッドB.start()する。
>>907 threading.Thread.__init__(self)
の次の行に
self.setDaemon(True)
>>952 ''はFalseだが' 'はTrueだぞ
>>924 そのスペースはどっから沸いたんだよwwwwwwww
windowsで2.6使っていますが、3.1も使いたいと思ってます。 同じ環境に3.1インストールしても問題ないんでしょうか?
かまへんかまへん
>>960 即答ありがとうございます
3.1入れてみます
>>960 優しさと弱さの区別が付かないのが、チョウセンヒトモドキ
日本語お上手ですね^^
タプルがわからん タプルの何がわからんかもわからん たぶんタプルの存在意義がわからん 使い方とか具体例だしてわかりやすく教えれ おねがいします
リストと似てるけど 最初の一回しか初期化出来ないのがタプル
タプルは辞書のキーにできるけど、リストはできないんじゃなかったっけ?
初期化じゃなかった代入
>>> {'hoge':'fuga',1:'hage',2:'hige',(1,2):'moge',('a','b'):'mage'} {(1, 2): 'moge', 1: 'hage', 2: 'hige', ('a', 'b'): 'mage', 'hoge': 'fuga'} >>> {'hoge':'fuga',1:'hage',2:'hige',(1,2):'moge',('a','b'):'mage',[1,2]:'a'} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: list objects are unhashable
ソートも出来ないな >>> sorted((3,2,1)) [1, 2, 3] >>> (3,2,1).sort() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'sort'
あと、タプルだと代入するときに綺麗に書けることあるよね
なるほどありがとうございます どうゆうときに使えばいいんだろう? 誕生日のデータとか固定されてて変更しないようなデータのときはタプル?
入門書を読め
>>971 mutableなオブジェクト全般に言えることだけど
listを安易にリターンすると、listの中身を弄られて壊される可能があるから
気をつけてね
return xs[:]
のようにコピーをリターンするのなら問題ないし
弄られていいのなら問題ないけど
tupleのようなimmutableな型なら、そういう心配はもともとない
つまりいじられたくないデータをタプルに、ムータブルでもかまわないようなデータはリストにってことか おおまかだけど認識できた ありがとう
リストとタプルの違いは、mutableとimmutableの違いや参照の話になるから ちょっと初心者には難しいね。 基本的には複数の値をひとまとめにするにはタプルを使っておけばいい。 ライブラリでリストを指定されたときだけリストで。 リストでできることは大抵タプルでもできる。 ただ、中身を頻繁に書き換えるような使い方だと、タプルでは効率が悪くなるだけで。
PHP.netの右上の「search for」みたいに、
横断的に関数・ライブラリのリファレンスを検索するには
どこで検索すればいいんでしょう?
http://docs.python.org/ の Quick Search では
例えば pycurl の情報が出ないし、何よりドキュメントが貧弱で
もう少しまともなのがあればと思って質問しました。
糞本めええええええええええええええええええええええええ
PIL の ImageWin で 「あるウィンドウの中身に BMPファイルから書き込む」 ことは出来たのですが 逆の 「あるウィンドウの中身を BMPファイルに書き出す」 のが ImageWin ではうまく出来ないようで 他にそれらしいモジュールとかも見つからないのですが PIL では出来ないのでしょうか?
981 :
デフォルトの名無しさん :2010/04/23(金) 21:22:27
>>980 なんでPILにこだわるの?
GetDIBits()で取れない?
そういうのは期待していない?
>>981 最後の手段でそれは考えていますが
自分で一通り作ったあとに
車輪の再発明とかだったらショックなので orz
wxPythonならwx.MemoryDCFromDC(dc)で取得したDCにBlitで取れるかな
車輪の再発明を怖がりすぎ
>>956 >>924 からわいてきてるじゃん。
> invalid literal for int() with base 10: ' '
>>952 の
if not line: break削ったのが原因って指摘は、
>>924 の
if line:
# ...
else :break
をちゃんと読んでいたらわいてこない発想。
>>980 wxPython で作った pnl (=wx.Panel) に書いた画像は取得&保存できた
from wx.lib.colourchooser.canvas import BitmapBuffer
import wx
bb = BitmapBuffer(width, height, wx.Colour(0, 0, 0))
bb.Blit(0, 0, width, height, wx.WindowDC(self.pnl), 0, 0)
bmp = bb.GetBitmap()
bmp.SaveFile(u'できたよ.png', wx.BITMAP_TYPE_PNG)
ちなみに Win32API を使うとこんな感じになるみたい
ttp://www.sm.rim.or.jp/~shishido/wincap.html
PIL試してみたけどImageWin使えねーwww
じゃあ2行分の予算でおねがいしますね
>>986 できました!!
ありがとうございました!!!
PyPIっていつもこんな重いんですか?
うめますね
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。