2get
これはどう見てもおかしいだろ。 まず、主語が2。で動詞がget。
2が単数形だとしたら、getsにしないとおかしい上に、目的語がない。
直訳すると「2が得る」 何を得るんだよ!!!いいかげんにしろ。
それを言うなら
I get 2. だろ。しかも現在形だし。 過去形、いや現在完了形ぐらいまともに使ってくれよ。
I've got 2. 少しはましになって来たが、まだ気に入らない。その2だ。
いったいお前は何を手に入れたんだ?2という数字か?
違うだろ、手に入れたのは2番目のレスだろ。
どうも日本人は数詞と序数詞の区別がよく分かっていない節がある。
これらを踏まえて、正しくは
I've got the second responce of this thread.
ここでtheにも注目してもらいたい。このスレの2ってのは
特定の、このレスだけなんだから。だからaでも無冠詞でも なく、the second responceなんだ。
もう一度おさらいしてやる。
I've got the second responce of this thread.
確かビルド済みしてバイナリぶち込んだ猛者がいたような
>>5-6 ありがとうございます
2.5 以上を想定していたので
とりあえず
>>6 さんの方法で出来たひとのサイトとかがみつかるか調べてみます
なんでこう、python はレンタルサーバーでの地位が低いんだろう。
インストールしても誰も使わないから
11 :
デフォルトの名無しさん:2009/05/24(日) 21:42:04
フィトン?ってパールより簡単ですか??
>>11 個人的にはフィトンのほうが簡単だった
ウェブだったらぺへぺのほうがいいけどね
個人的には(゚∀゚)ラヴィ!!のがおすすめだよ
sysライブラリの
stdin.readlineなど利用して
標準入力からキーボード入力したいのですが
バックスペースで日本語を消すと、半分(1byte)だけ消されて
文字化けします。
1文字は1文字としてバックスペースで消す方法を教えてください。
コンソールなに使ってんの?
円コーディングは?
class A(Foo):
def func(self, **kwargs):
super(Foo, self).func(**kwargs)
class B(Foo):
def func(self, **kwargs):
Foo.func(self, **kwargs)
AとBの違いはなんでしょうか??
今のやり方と、昔のやり方
super()を使うと実行時に依存関係から適切なメソッドが得られる
Foo.func()は明示的な指定
type()で動的にクラスを生成したりするときしか考慮する必要はないと思う
何も考えずにsuper()を使うのが楽
詳しく知りたいならmroでググってみてくれ
メソッド付き関数とか作れるんだな
かっこよすぎ
def Counter(n=0):
Counter.cout = n
def increment():
nonlocal c
c += 1
Counter.increment = increment
return Counter
c = Counter(2)
c.increment()
c.increment()
c.increment()
print(c.cout)
21 :
20:2009/05/26(火) 01:06:09
Counter.countだ
nonlocal cも
なんかに使えますかねこれ
22 :
20:2009/05/26(火) 01:11:34
インスタンスは1つじゃないとちゃんと動かないから無理か
関数である意味が無い
素直にクラスにしとけ
24 :
20:2009/05/26(火) 01:19:36
ですよね・・・
ところで"\u2020"とかいう表記はusc2ですか?
みんなのPythonすごく読みやすい。超面白いんですけど、毎日ガンガン読んでます。
26 :
デフォルトの名無しさん:2009/05/26(火) 03:18:29
class を関数の様に呼び出すのってどんなのでしたっけ
class Hoge(object):
def __init__(a):
print a
h = Hoge()
これはただのコンストラクタなんだろうけど
そうじゃなくて
h = Hoge()
h() が出来る香具師のことなんですが
>>> class Hoge(object):
... def __init__(self):
... print "init"
... def __call__(self):
... print "call"
...
>>> h = Hoge()
init
>>> h()
call
28 :
14:2009/05/26(火) 14:20:57
>>15 コンソールはlinuxのktermとかxtermとかgnome-terminalとか色々試したけど
どれも同じでした
>>16 エンコーディングはUTF-8です
ぐぐっても解消策が出てこないなぁ
エンコーディングは?
おい!
>>28 環境をもっと詳しく。
Linuxのディストリは何?
Python関係なく普通にシェル上で日本語を入力してバックスペース
押したらちゃんと日本語一文字消える?
32 :
14:2009/05/26(火) 16:30:10
>>31 ディストリはarchとubuntuで試しました
pythonに関係なくシェル上だとBSで日本語一文字消せます
ということは、皆さんは普通に消せてるんですね
シェルの普通の入力状態じゃなくて、
cat (とか)に何か入力しようとした状態のことを聞いている。
以下の例で、print a がposixを返すようにすることは可能ですか?
import os
print os.name
> posix
a = 'os.%s' % name
print a
> os.name
あと、ターミナル(xterm とか kterm とか rxvt)が何か、というのが
この場合環境として重要、かも。
36 :
14:2009/05/26(火) 16:43:45
>>33 あ、catとかでも同じ状態になります
てことはどこを修正すればいいんですかねこれ
38 :
34:2009/05/26(火) 16:52:40
40 :
14:2009/05/26(火) 22:18:20
ありがとうございました
もう少し調べてLinux板で質問してきます
シンプルなソフトウェアキーボードを
作りたいですがpythonだとwxpythonが
良いですかね?
やはりtkinterからおさえておくべき?
すでにあったような
43 :
41:2009/05/30(土) 11:33:20
このスレの閑散具合からすると
python自体を止めておいた方が
良いってことか
君は何やっても同じ
無駄なendを嫌うのと同じように
無駄な話を嫌う傾向にあると思ふ
filter(lambda x: x % 3 == 0 or '3' in str(x), range(1, 41))
filter(lambda x: x % 8 == 0 or x % 3 == 0 or '3' in str(x), range(1, 41))
48 :
デフォルトの名無しさん:2009/05/31(日) 21:07:22
で、実際python使ってみんなはなにをしているの?
なんかプログラムを作ってるのかな?
他に用途ないないと思うが・・・
どっちかっていうと日々の作業で使うかな
あと最近はウェブアプリに挑戦
変顔の自動化かなぁ
あたいは3Dソフトウェアのスクリプトで使ってるよ!
54 :
デフォルトの名無しさん:2009/05/31(日) 23:35:32
いまいちどんなことができるのかわからないんだけど。
例えば@ファイヤーウォールが反応したら携帯にメールで知らせるとかは?
Aひとつのフォルダに複数のmp3のデータが入っている。名前はごちゃごちゃ。
それを01.mp3〜0n.mp3にファイル名を変換することは可能ですか?
コンピュータならできて当たり前だろ……
>>54 1はどんなファイアウォールを使ってるかによる
ログをテキストで定期的に書き出してくれるFWなら頑張れば出来る
そうでない場合は可能だけどちょっと難しいかな
2は余裕。osやos.path見てみるといいよ
57 :
デフォルトの名無しさん:2009/06/01(月) 00:26:33
>>56 ご丁寧にありがとうございます。
見てみますね。
はじめてのpython みんなのpythonあたりを読破すればA位は簡単にできますか?
本屋で立ち読みした時に、複雑な電卓をいじってるようで…
いつになったらA見たいなことができるのかな?って疑問を持ちましたので。
ド素人ですいません。
>>57 初めてのPythonなら読破しなくても1/3ほど読めば十分じゃないかな
あとは使えそうなライブラリを探してマニュアルを読む
必要な時間については人それぞれ。数時間、数日、数週間・・・
まあ半年かかるなんてことはないから心配いらないよ
「はじめての」と「初めての」にとても大きな違いがあります
>>57はきっと「はじめての」なんでしょうな・・・
60 :
デフォルトの名無しさん:2009/06/01(月) 01:07:37
皆さん親切に本当にありがとうございます。
個人的にちょっと読んだだけですが「みんなのpython改訂版」が読みやすかったのですが
(ちょっとだけしか見てませんが…)
これでもOKですか?これでも1/3くらい読めば、ショボイプログラムが作れますか?
明日買ってきます。
それは初心者向けで突っ込んだ解説はしていない本だからすぐに全部読めるよ
しょぼいプログラムを作るのが目的でネットの検索と併用すれば十分かと
>>59 「はじめての」人柱になってもらおうとか思って
似たタイトルの本があるとはあえて言わなかった。反省している
>>60 1/3じゃ足りないかも。でもたいして問題にはならないよ
2を書くとしたら骨組みはこんな感じ
import os
for i, filename in enumerate(os.listdir(u'.')):
if filename.endswith('.mp3')
os.rename(filename, '%03d.mp3' % i)
みんなのPythonの改訂版ってPython3.0対応版でしょ
その辺に転がってるコードが多いのはPython2.x系
言語仕様が一部変わってるから気をつけな
新しいものをとるか古いのを選ぶかは趣味の問題ではあるが
標準以外のモジュールは3.0にはまだ対応してなかったりもするから気をつけなよ
まあ、仕様の変更点を把握しとかないといけないのはどちらを学ぶにしても同じだがね
本はちょっとしたプログラムを書きたいってだけなら挫折しないように薄いのにしときなw
あとはオンラインドキュメントとかで適当に調べつつ作りたいもの作ればいいさ
>>56 元々
03.mp3
02.mp3
01.mp3
というファイルがあったとき
01.mp3
02.mp3
03.mp3
に名前を付け替えるのって簡単?
一体どこが難しいんだ?
>>64 条件が良く分からないけど、番号を昇順に変えるの?
何とでも出来ると思うよ。
いや、お前達64が何言ってるのか理解してないだろう。
64が言ってるのはファイル名の重複でリネームするのに失敗する問題。
一度別の名前にリネームすればいいじゃん。
69 :
デフォルトの名無しさん:2009/06/01(月) 06:48:48
邪魔になってる方のファイルを別の名前にするんですね
rename前に既存調べて既存だったら飛ばせば医院で内科医?
さすがくだすれw
つーか、パイソンと全然関係ないしw
一般のアルゴリズムが分からないって、言語以前の問題だからw
swapなんぞ誰でも思いつくアルゴリズムだろ
76 :
デフォルトの名無しさん:2009/06/01(月) 21:12:23
>>62さん
素晴らしいコードありがとうございます。
勉強中でとても参考になります。完全に理解できていないのが申し訳ありませんが(汗
具体的な例をお願いできますか?
例えば、C:\Documents and Settings\user\デスクトップ\新しいフォルダ
の中に、
abc.mp3
def.mp3
ghi.mp3
jkl.mp3という4つのデータがあります。
これらをソートした順に01.mp3〜04.mp3にリネームする。
宜しくお願い致します。
>>76 その前に自分で書いたコードを貼ってみて
動かなくても全然構わないから
いきなり答え見たら実力つかないよ
78 :
デフォルトの名無しさん:2009/06/01(月) 21:47:43
全然そんなレベルじゃないんですよ(汗
すいません。
>>76 指定ディレクトリ内のファイル一覧を取得する
os.listdir、glob.glob等
ファイル一覧を並び替え
list.sort()
ファイル名を変更
os.rename
その他
os.path.join、os.path.abspath
このあたりを調べればいけるんじゃない?
とりあえずosとos.pathモジュールは一通りリファレンスに目を通しましょう。
80 :
デフォルトの名無しさん:2009/06/01(月) 22:19:21
>>79さん
本当にご親切にありがとうございます。
今日さっそく「みんpy」買ってきました。
面白いですね。まだプログラムって感じではないんですが…
とても参考になりました。
またわからない事がありましたら宜しくお願い致します。
>>62 のコードだと
mp3以外のファイルがあったら番号とばない?
>>81 飛ぶね。失礼しました
count = 1
for filename in os.listdir(u'.'):
if filename.endswith('.mp3'):
os.rename(filename, '%03d.mp3' % count)
count += 1
83 :
デフォルトの名無しさん:2009/06/01(月) 22:57:49
>>79さん
ちょっと片言の言語で作ってみましたがrenameでのアイデアが…
なにかヒントをお願いします。
#coding: UTF-8
import os
TargetPath = u'C:\Documents and Settings\user\デスクトップ\Mariah.Carey'
a=FileList = os.listdir(TargetPath)
print u"[曲名一覧]"
for f in a:
print f
else:
print u"以上"
b=len(a)
print u"全部で",b,u"曲"
c=range(1,b+1)
print c,u"までのリストを作成"
ここまででギブ…曲数分の数値をリストで作ってみて対応できればと…その後は…
そもそも間違った考え方なんですかね…ネットで調べながらなのですいません。
>>76 #-*- coding: utf-8 -*-
import os, sys, time, shutil
from math import ceil, log
def rename_to_number(srcdir, ext):
files = filter(lambda x: x[-len(ext):]==ext, os.listdir(srcdir))
tmpdir = os.path.join(srcdir, 'tmp%s_%s' % (os.getpid(), time.time()))
while os.path.exists(tmpdir): tmpdir += '0'
os.mkdir(tmpdir)
for f in files:
src = os.path.join(srcdir, f)
shutil.move(src, tmpdir)
fmt = '%%0%dd%s' % (ceil(log(len(files),10)), ext)
for i, f in enumerate(sorted(files)):
src = os.path.join(tmpdir, f)
dst = os.path.join(srcdir, fmt % i)
shutil.copy(src, dst)
#shutil.rmtree(tmpdir) # この行を有効にすると作業後テンポラリを削除します。
if __name__ == '__main__':
srcdir = sys.argv[1]
ext = sys.argv[2]
if ext[0] != '.': ext = '.' + ext
rename_to_number(srcdir, ext)
# 使い方。このスクリプトを hoge.py と保存(UTF-8)した場合。
# python hoge.py ターゲットディレクトリ 対象拡張子
# と入力
85 :
デフォルトの名無しさん:2009/06/01(月) 23:35:15
>>84さん
すごい。。。
レベルが違いすぎました。
出直してきます。
恥ずかしいですわ
86 :
84:2009/06/01(月) 23:55:00
要求にあってなかったところを訂正。
ファイル名の先頭が 0 になるようにする。(12行目)
× fmt = '%%0%dd%s' % (ceil(log(len(files),10)), ext)
○ fmt = '%%0%dd%s' % (1+ceil(log(len(files),10)), ext)
番号を 0からスタートじゃなく、1からにする。(15行目)
× dst = os.path.join(srcdir, fmt % i)
○ dst = os.path.join(srcdir, fmt % (i+1))
87 :
デフォルトの名無しさん:2009/06/02(火) 00:01:08
ディレクトリの指定は必要ないんですか?
けーすばいけーす
89 :
デフォルトの名無しさん:2009/06/02(火) 17:09:47
お勉強スレのほうに書いたのですが、ちょっと質問のレベルが低すぎたみたいなので、こちらで聞かせていただきます;;
初歩的な質問で申し訳ありません。
.pyのついたファイルをウィンドウズで実行したいのですが、どのように設定をしたらいいでしょうか?
python-3.0.1をインストールしてみたのですが、どうしたらいいのかイマイチよくわかりません;;
Python2.6.2をインストールして*.pyをダブルクリックしてみるよろし
>>89 Python 3.0 はプログラミングの初学者には今のところ向いてないよ
>>90 の言う通りにしてコマンドプロンプトの使い方も併せて調べておくといいと思う
92 :
デフォルトの名無しさん:2009/06/02(火) 18:13:35
ありがとうございます!
2.6.2ですね。
試してみます。
>>84 素敵だが初心者にやさしくないなぁ
無駄に丁寧だから本質じゃない部分につい目がいってしまう
>>93 本当にそうだな。
ただ、あそこまでやるなら、テンポラリディレクトリ作るのに何故
tempfile.mkdtemp()を使わないのかが非常に謎。
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
windows xp sp3
python2.5.3
try:
getattr(obj, 'undefined_method')
except AttributeError:
pass
だいぶ省略していますが、こんな感じのコードがあり、ここでmain内でエラーが発生すると
UnboundLocalError: local variable 'AttributeError' referenced before assignment
と出てしまいます
AttributeErrorが見つからない理由と、そもそもUnboundLocalErrorがなんなのかよく理解出来ていないのですが、
原因をご存知の方いますでしょうか?
97 :
96:2009/06/03(水) 18:24:44
ごめんなさい解決しました
その前に書いてあった
except ImportError, AttributeError:
の括弧忘れでした。
UnboundLocalError: ローカル変数名のリストにはあるけどまだ宣言されてないよ
NameError: とにかくそんな名前知らんよ
>>97 エラーが出なくなっただけで
解決はしていないと思うよw
100 :
デフォルトの名無しさん:2009/06/03(水) 19:19:47
学生時代に資格試験取得でcは勉強したのですが、
社会人になってからは言語は一切触れてません。
インフラ側の人間だったのですが、
言語もかじっておきたくpythonをと考えています。
web上の入門サイトをいくつかやってる最中ですが、
いまいち手応えがありません。
そこで、勉強になるような課題?に適したものってなにかありますでしょうか。
また、Django、Ploneも気になっているのですが、
そうした勉強というのは市販されているテキストを一通りできれば
掴めるものでしょうか。
*正直、業務でも活かせることができるまでを
意識した勉強の仕方がわからないのが困っています、、、
>>100 まず要点をまとめてわかりやすく説明することを勉強しるw
オラ、宇宙一強くなりてえだ!
DjangoにしろPlone(Zope)にしろ癖が強いから初めての人には勧められないな
>>100に明確な目的があるなら別だけど
時間に迫られてないけど面倒な作業を自動化してみる辺りからやってみたら?
クックブックでも読めば?
そして己の無知を自覚して初めてのPythonに取り組む
まあ、業務で即生かせるようにはならないがな!
105 :
デフォルトの名無しさん:2009/06/03(水) 23:23:42
みんなのPython改訂版のP.119の一番下のサンプルコードおかしくありませんか?
お持ちの方がいましたら、見てみてください。
>>>for cnt in range((len(seq)):
... print seq[cnt]
...
です
端から見ると特におかしくないようだが・・・
カッコ。
109 :
デフォルトの名無しさん:2009/06/04(木) 02:20:26
とりあえずver2.5の日本語ドキュメントでいいから目を通せ。
チュートリアルをひととおりやって、それが終わったらライブラリリファレンスを読む。
用途や意味の分からないライブラリがあったら調べて、どういう時使うのか理解する。
目的ありきでもいいのかもしれないけど、道具を徹底的に理解するのも大事だと思う。
標準ライブラリだけでも、かなり実用的なものが揃ってるから分かってくると楽しいよ。
>>105 ひどい書籍ですね!
ぜひとも買って確かめなければ!!!
>>100 > web上の入門サイトをいくつかやってる最中ですが、
> いまいち手応えがありません。
手応えがありませんって、
簡単すぎて全部わかっちゃったのか、
基本も理解出来ないのか、
どっちなんだ?
基本がわからないんだったら、何度も読み返して、
くだらない例題だと思っても、
自分で実際にコードを書きまくって理解しろよ。
113 :
105:2009/06/04(木) 23:00:47
>>>for cnt in range(len(seq)):
... print seq[cnt]
...
でした。でもこれでもおかしいですよね?
len()への引数で文字列を扱う際は""。
結果的にはどうしたいのか謎ですが、これが正解に近いですか?
>>>a="seq"
>>>b=range(len(a))
>>>b
[0,1,2]
>>>for cnt in b:
... print a[cnt]
...
s
e
q
>>>
ではないですか?
ってか単純に文字列に""が足りないだけで
>>>for cnt in range(len("seq")):
... print "seq"[cnt]
...
s
e
q
でしょうか?上記の例は詳しくやってみました。
seqが変数なんだろ?
前で代入されてるんでしょ?
105は友達がいないせいでmixi垢を持ってないんだな。
なによりそれが可哀想だ。
まあ、2ちゃんに貼ってあるmixiのリンクは普通踏まないがな・・・
117 :
105:2009/06/04(木) 23:14:00
>>114 かなり前までさかのぼっても代入された記述はないんですよ
>>115 確かに友達は少ないかな?w
mixi垢ってなに(汗
書籍のサンプルコードなんだから一部抜粋なんて
普通にあるだろ。そうでなければタダの誤植。
だいたいseqっていう名前から
何らかのシーケンスを表す変数だって想像しろよ。
"seq"っていう文字列だなんて普通は思わないよ。
>>113 range(len(seq))はforで添え字アクセスをしたい場合に使う慣用句
こんな感じに使う
>>> lines = [u'1行目', u'2行目', u'3行目']
>>> for linenum in range(len(lines)):
... print '%d: %s' % (linenum + 1, lines[linenum])
...
1: 1行目
2: 2行目
3: 3行目
後々わかる日が来るから深く悩まず先に進むのが吉
>>119 あ、linenumになってないね。
linenum → i に訂正
おかしいのは105の脳みそでした
>>105 さんの脳みそ本当にだいじょうぶかなぁ
ぜったい普通じゃないよね かわいそう
123 :
デフォルトの名無しさん:2009/06/05(金) 03:11:03
クラスAのなかで[1,2,3]というリストを作ろうとしています。
で、次のようにコーディングしたらselfが定義されてない、って怒られました。
class A:
def __init__(self):
self.x = []
for i in range(1,4):
self.x.append(i)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
class A:
File "<pyshell#5>", line 5, in A
self.x.append(i)
NameError: name 'self' is not defined
なにがまずいのかわかりません。どなたかご指摘くださるとありがたいです。
>>123 インスタンスメソッドの第一引数(慣習としてselfを使う)は
インスタンスオブジェクトを指す。
その for 文はインスタンスメソッドの外側にあるので、クラスを
生成するときに実行される。その時にselfは存在しない。
解決するにはインデントを修正する。
class A:
def __init__(self):
self.x = []
for i in range(1,4):
self.x.append(i)
ただし、こちらの方が綺麗
class A:
def __init__(self):
self.x = range(1,4)
インデントがずれてるんじゃねえの?
スペースを全角に変換してもういちどコード張れや>123
126 :
デフォルトの名無しさん:2009/06/05(金) 11:08:44
>>124 ありがとうございます。
インデントはつけています。投稿時につぶれてしまいました。すみません。
>>125 インデントは次のようにつけています。
class A:
def __init__(self):
self.x=[]
for i in range(1,4):
self.x.append(i)
>>126 バロス(wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
128 :
126:2009/06/05(金) 11:31:20
あ〜、
for i ...
のインデントは
def __init__ ...
より内側に来なきゃいけないのかな?
どうもselfがよくわからんorz
self.x = [] の次の行は
既に別の空間だ
コードは
$ sed -e "s/ /\ /g" test.py
みたいに正規表現でhtmlの空白に置換するといいよ
131 :
デフォルトの名無しさん:2009/06/05(金) 19:49:02
すごい初歩のことですみません。
リストでスライスのことですが、
a=range(10)
a[1:3]
1,2
となります。
なぜ、1,2,3にならないのでしょうか?
0からのインデックスという説明がされているのですが、
0,1,2,3,4,5,6,7,8,9
とするのならば、a[1,3]であれば、1,2,3ではないのですか?
こんなところでつまづいてしまっているのですが、どのように理解すればよいのでしょうか?
後ろから2行目に間違いがありました。
a[1:3]でした。
>>131 開始点は含み、終了点を含まない範囲を指定している。
記号で書けば、 [begin, end)
こうすると、長さ0の範囲を [n:n] で表せる。
もしくは、長さを end - begin で計算することができる。
C++でも同じ考え方をしているよ。
>>133 なるほど。文字と文字の隙間にインデックスが付けられているのですね。
文字自体についているわけではなかったのか。
疑問が解けました。ありがとうございました。
何につけ作法は作法で「そういうもの」と覚えてしまう方が早く学習進んで良い
理由付けやルールなんかは言語作者のもんだしさ…
134さんもありがとう。
133さんのリンク先の図解で理解できました。
また、計算する際にも利用できるのですね。
今のところ、図解が理解できたので良しとします。
m(_ _)m
>>136 確かにそうなのかも知れないですけど、モヤモヤしていて理解できないことって、気持ちが悪いです。
しかも難しくて理解できないことじゃなくて、誰でも疑問を持ちそうな初歩的なことでしたから。
インデックスが、文字自体に付いていないということに気付きませんでした。
小学校の算数レベルだろ
うーん、そうなのですか?
今の算数は、インデックスが0から始まりそれは文字に割り当てられてのではなく、
隙間に割り当てられているって習うんですか?
私に時には習った覚えはないです。
誤字になってしまったので、書き直します。
うーん、そうなのですか?
今の算数は、インデックスが0から始まりそれは文字に割り当てられるのではなく、
隙間に割り当てられているって習うんですか?
私の時には習った覚えはないです。
つーか、単に-1に合わせてるだけの希ガス。
end - beginで length が取れるのが一番の魅力だと思う
>>146 カウンタが1から始まったりendが含まれる系の言語では
あちらこちらに +1 とか -1 が散らばってて、一旦バグると
どの +1 が間違ってるのか判らないもんな。
C とかで書くときもやっぱり
for (i = begin; i < end; i++)
だな。
for (i = begin; i <= end; i++)
とか書いてるのみるとイラッとする。
>>148 場合によるね。
タグの値を順番になめる場合とか、結構 <= で比較する場合もあると思う。
for (tid = ID_START; tid <= ID_FINAL; ++tid) とか。
150 :
148:2009/06/06(土) 12:42:56
>>149 うん 場合によるとおもう 必要なときもあるよね
でも <= を使うときにちょっといやな気分になるのはおれだけかな
俺もなる。基本的に序数の場合はそれでいいと思う。
ただ
for (double alpha = 0.0; alpha <= alpha_max; alpha += step)
みたいに実数値の範囲みたいなのは<=じゃないとキモいと思う
普通はID_FINALってやつを最後の次の値として定義するけどな。
そうでないと斜め読みしてるときにいちいち目がとまって
本当にただしいか確認しないとといけない。
もちろん、
>>151みたいなalpha_maxとかINT_MAXみたいに
どうしようもない場合もあるんだが。
郷にいれば郷に従えみたいな感じかなあ。
と思ったけどそうでもないかな。
今のなしで。
0〜N-1なら、i<Nで、
A〜Bなら、i<=Bだな。
155 :
デフォルトの名無しさん:2009/06/06(土) 14:14:25
初心者には難しい話しているな(汗
おまえら、JDBCでも1ベースなのはなぜなんだぜ?
Pythonの場合xDBCは不要
DBAPI 使う罠
>>158 マジすか?
Mac から Microsoft Access データを読み書きする方法教えやがれです。
161 :
デフォルトの名無しさん:2009/06/08(月) 12:04:12
質問です!
最近、BlackJumboDogを使ってWindowsXPでWEBサーバを立てたのですが
PerlとRubyは動くのにPythonが動きません。
cmdから「perl -v」「python -v」「ruby -v」をやるとエラーの雰囲気は無い応答が帰ってくるので
問題ないとおもうのですが、何か原因がわかるかたいますか?
ちなみに「python -v」を打ち込むとperlやrubyではバージョンとかが出るのですが
pythonだけ対話モードみたいなのに入ります。
cgiの中身は以下のようになってます。
#!/python
# -*- coding: utf-8 -*-
import cgi
import cgitb
cgitb.enable()
print "Content-Type: text/html"
print
print "hello world."
アクセスすると真っ白です。
どなたかお助け願います。お願いしますよろしくお願いします!
>>162 まま、マジですか!
ありがとうございます。
原因がBlackJumboDogにあるとは考えてなかったので
それを念頭にまたググってみます。
164 :
デフォルトの名無しさん:2009/06/08(月) 13:15:30
>>164 多分bingoだろうな。どうして--helpとか、-hをまずしないのだろうか。
ついでに晒しとく
http://6924.teacup.com/kamezoh/bbs かめぞ〜掲示板
雑談 兼 避難所
げ! 投稿者:かめぞ〜 投稿日:2008年 9月 4日(木)20時34分22秒 返信・引用
勝手に広告なんか入れやがって・・・SPAM業者と変わらんではないか。
掃除掃除。( ´〜`)y-~~
空いた時間を有効活用
バイト探しはお任せ。高時給から短時間バイトまでおすすめ情報を比較。
リフォームしませんか
リフォーム情報が満載。人気のリフォーム会社を徹底比較。
おしゃれ女性かつら情報
ファッションから医療用まで、女性用かつら・ウィッグ情報はコチラ。
>>161 特別な事情やこだわりがない限り
WebサーバはApache使ったほうがいいんじゃまいか
>>161 俺はANHTTPDを使ってる
これならPythonだろうがなんだろうが動くぞ
Winなら、Linuxの仮想環境作ってその中でWeb鯖立てるのが本当はおすすめ
170 :
デフォルトの名無しさん:2009/06/08(月) 22:40:41
あの〜インタラクティブシェルでだらだらコードを書いた後にクリアしたい(今までのコードをを消したい)
時は再起動しかないですか?(プログラムを)
wsgiだろ常考
>>162 へえ、と思ってソース(TVWeb.cpp)を見たが、以下のようなロジックなので
pythonインタープリターとパラメーターがちゃんと1行目に書いてあれば
大丈夫っぽい。
1行目が#!で始まっている
→perlという文字があればperl、rubyという文字があればrubyと見なす
どちらでもなければコマンドへのフルパスと見なす(/は\に置換)
1行目が<?で始まっている
→phpと見なす
何がcgiモジュールなのかは、設定ダイアログで設定した拡張子で判断する。
ただし、拡張子と実行コマンドが紐付けされるわけではなく、上記のロジックで
判断される。
>どちらでもなければコマンドへのフルパスと見なす(/は\に置換)
じゃあ
#!c:/Python26/python.exe
って書かないといけない訳?
だっさ
/cygdrive/c/IronPython/py2/ipy.exe
海の日
178 :
デフォルトの名無しさん:2009/06/10(水) 11:44:06
つゆ入り
>>176 他の板に適切なスレがあるからと言って、即スレ違いということにはならん。
誘導自体は否定しないけどね。
アフォ毛
181 :
デフォルトの名無しさん:2009/06/11(木) 17:10:28
pythonもオブジェクト指向も初心者です。
次のようなことをしたいと思ってます。
クラスA、クラスB、クラスCがある。
1、クラスBからの出力を、クラスAが入力として受け、クラスAのなんらかのメソッドを実行する。
2、クラスAのメソッド実行終了後、クラスCのメソッド実行に移る。
どうやったらいいか、思考の材料さえ頭の中にない状態です。キーワードだけでも教えてください。
>>181 まず、何でもいいから
「クラスを定義してインスタンスを作ってメソッドを実行する」
くらいは出来るの?
184 :
181:2009/06/11(木) 20:18:11
>>183 ようやくそれができるようになった段階です。
185 :
デフォルトの名無しさん:2009/06/11(木) 21:57:35
前にも出ましたが、「ファイル名の書き換え」
例えばディレクトリ指定はコード内に書く。
フォルダ内のごちゃごちゃ名前のmp3ファイルをa01.mp〜a0n.mp3まで順に書き換える。
参考にさせて頂きたいのですが、サクサク書ける方いましたら宜しくお願い致します。
Python何が得意なの?
webサーバーのCIとか得意ですか?
>>186 Pythonは、汎用のプログラミング言語だから、大抵の事に適しているよ。
デスクトップアプリ: BitTorrent, DropBoxクライアントなど
Webアプリ: Zope, Django, TurboGears
埋め込み: 各種ゲーム、CG
サーバー: Webサーバー、FTPサーバー、メッセージングサーバー
それコピペ
それもコピペ
191 :
デフォルトの名無しさん:2009/06/13(土) 22:57:07
関数の戻り値ってのがちょっと理解できないんですが、
これってどういう目的で行うんですか?関数によって返されたオブジェクトを変数に代入すれば同じ
効果ですか?
ちょっとわかり難いので、噛み砕いてご説明いただけると幸いです。
プログラミング自体初心者です。宜しくお願いします。
一回スパゲッティを作ってみるといいよ
193 :
デフォルトの名無しさん:2009/06/14(日) 00:20:46
スパゲッティと関係あるんでしょうか
引数が入力なら戻り値は結果だよ
例えば足し算の関数 add を作ってみる
def add(x, y):
return x + y
これを answer = add(2, 3) と使うと、
add さんに 2 と 3 を足してくれーと頼んで、add(2, 3) はその結果の 5 に置き換わると考えてかまわない
つまり answer = 5 みたいになって、answer には 5 が代入される
answer = add(2, 3) * 3 なら answer = 5 * 3 みたいになって 15 が代入される
reduceがようわからんのですが
>>195 おれもよくわからんのですが、forループで書くよりreduceで書いたほうがカッコいいというのは分かる。
つまり結果が一個になるforループはreduceで書いてる…
おなじく結果の個数が変わらないforループは、mapで書いたほうがカッコいいのでそうしてる。
>結果が一個になるforループはreduce
とは限らないんだよねぇ
reduce は
x1 ⊕ x2 ⊕ ... ⊕ xn
のこと。
リストx1, ..., xnと2項演算子⊕を与えられればこの計算は定義できるでしょ。
200 :
デフォルトの名無しさん:2009/06/14(日) 12:39:17
>>194 ありがとうございます!
returnを使わないと、戻り値を変数に代入できないのですが、
それを代入できるようにするのがreturnと考えてもOKですか?
>>200 Pythonに代入というものはない。
すべてbindingだ。
>>200 不思議な頭の構造してる人だなぁ。
returnを使わないと、戻り値がそもそも「ない」。
あなた「戻り値」って何だと理解しているわけ?
203 :
デフォルトの名無しさん:2009/06/14(日) 12:55:10
「戻り値」=「結果」?
>>returnを使わないと、戻り値がそもそも「ない」。
っていうのがよくわからないんですよね
参考書などではreturnのところがprint文で結果を表示するようになってますよね。
その違いってなんですか
なんか着眼点がずれてる。
えー
newlist = reduce(lambda x,y: x+y, inputlist) リストの内容を全部連結したリスト作る
たとえばこんなreduceもあるかもしれんけど…
結局どういうとこで使うのが一番カッコいいのか良く分からんのですよ。
逆に正直に言うとですね、「コイツこういうとこではreduce使えよバカ」と思われないためには
どうしたらよいでしょうかw
>>203 呼び出して任せて何かさせて終わり、なら、戻り値は要らない。
呼び出して結果を報告させるには、戻り値が必要。
「関数の呼び出し側の都合」と、
「関数内部の都合」がごっちゃになってるんじゃね?
関数は作る人と使う人がいる。
>>205 速度面などで必要ないなら使わなくておk
>>205 使う意義がよく分からないものは無意味に使わないのが
Python的にはカッコイイ。
高階関数にreduce的な関数を渡す必要があるときは reduceを使う。
わざわざlambda でごちゃごちゃと車輪の再発明するのはカコワルイ。
もっともreduceをとる高階関数なんて、見たことないけど。
はっきり言うとreduceはいらない子。
使わなくてよろしい。
>>211 非常にすっきりしました。
map/reduceの兄弟、兄は本当に便利な子だけど弟は「はっきり言って要らない子なのよね」
とつぶやく母、それを聞いてしまい泣きながら家を飛び出すreduceくんということですね。
関数型プログラミングやろうとするとreduceの出番も出てくるけど、
Pythonの場合、関数型にこだわる意味がないからな。
>>203 初心者が対話型プロンプトで標準出力への出力と
関数の戻り値が区別つかなくなるのは典型的な落とし穴
print 'hoge' # 'hoge'を標準出力に書き出す。戻り値もへったくれもない
map/reduce/filterは使い始めると際限ないから基本使わない
小手先の技は、俺SUGEEだけのために存在する。
そういう奴に限って、アルゴリズムがさっぱりだったりするw
抽象化を「小手先の技」とか思っちゃう奴はこの先真っ暗だぞ。
これは抽象化じゃないだろw
219 :
デフォルトの名無しさん:2009/06/14(日) 13:56:24
>>標準出力への出力と 関数の戻り値
>>関数は作る人と使う人がいる。
難しいな
filterは普通に便利だし。
Cしか知らない人が「何なのこれ??」っていうから、
このmapってのがfor i = 0 to... のループで、filterってのがループの中のif文ですな、
展開してみるとこんな具合です。と説明したら「SUGEEEE」言ってた。
>>214 なるほど、式を評価してそのまま表示するから、
かえって分かりにくくなってるってことか。
>>214 printの戻り値は無視ですかそうですか
printの戻り値?あれはステートメントだろ。
printはもう文じゃなくて関数になったよ^^
変な煽りは本スレでどうぞ
少なくとも
>>214のprintは誰が見ても文
print関数も戻り値ないんだよ^^
reduceが抽象化じゃないとか、痛い人がいるな。
pythonは処理の構造を抽象化するオツムなんかプログラマに期待していなくて
バカでもちょっとだけ賢い人も同じ処理を書くと同じようなコードになるよう
誘導する言語だから、ループ書けという方向になってる。
reduceとかは、初期に有能なプログラマを魅きつけるためのプログラマホイホイ
みたいなもので、十分普及した今となってはいらん子扱い。
えっと
ネタだよね
228の要約
forを書くプログラマは馬鹿
頭がreduce
232 :
デフォルトの名無しさん:2009/06/15(月) 01:02:07
mapやreduceがなくても実際ほとんど困らないけど
なくなっちゃったらなんか味気ないよねえ
リスト内包表記がなかったら少し困るけどね
うちの嫁はreuse
mapは複数のリストに演算を適用したいときに使うかな
ベクトルの加算みたいな
+をoperator.addとかタイプせなあかんのはウザいが
forよりmapの方が速いんじゃなかったっけか?
operator.add と lambda x,y:x+y だとどっちが速いですか
リストの項目を文字列に入れたいんだ。
A = [1,2,3]
print "%d, %d, %d" % (A[0], A[1], A[2])
で出来るが、
print "%d, %d, %d" % A
これだと TypeError: int argument required と言われる。
エラーになるのはわかるんだが、そこをなんとか、
Aのインデックスをいちいち指定しないで、
そのまま文字列の場所に入れる方法ってないですか?
tuple(a)
tuple(A) だろ
もしくは A = (1, 2, 3)
ありがとうございます。
タプルの方は出来るのか・・
ディクショナリにして使うと、順番も気にしなくていいぞ。
print "%d, %d, %d" % *A
SyntaxError: invalid syntax
print "%d, %d, %d" % (*A)
SyntaxError: invalid syntax
print A
str(A)
str(A) .strip('[]')
reduce はいらないこだろ。
実際3.0からはreduceは無いわけで。
map、filterもなくなるの時間の問題でしょ。
>実際3.0からはreduceは無いわけで。
kwsk
>>251 3.0からはbuiltin関数ではなくなって、モジュールへと追いやられた。
Guido は、他のmapやfilterもbuiltinからは外すべしと主張してたが、これらは3.0ではなんとか残った。
4.0になったときには、builtinから外れてもなんら不思議ではない。
あと、上の方にあるベンチマークだが、
あれはかなり古いPythonのベンチ。
リスト内包表記はバージョンがあがるたびにスピードアップしてて、
現在では、lambdaなしのmapに準ずるほどのベンチスピード。
一方、mapでlambdaを使ったら、リスト内包表記どころか、
通常のforループと同じかそれより遅いぐらいになる。
ということは3.0以上ではreduceは
全部リスト内包に置き換えた方がよい
ということですね
>>253 それって、リスト内包では評価対象がイテレータになるんで速い、ってことなの?
>リスト内包表記はバージョンがあがるたびにスピードアップしてて、
>現在では、lambdaなしのmapに準ずるほどのベンチスピード。
現在とは3.0ですか2.6ですか
>>254 reduceをいったいどういう内包表現に置き換える積もりなんだ?
>>4-8 おかげさまでうまくいきました
無料の50MBだとコンパイルに失敗(というかソースの展開ですでに失敗)するので
quota3GBのお試し期間を申し込んだら2.5.4をまるごとコンパイルできました
setuptool/mysqldb等も放り込んでMySQLにもアクセスできました
お試し期間が終わるとquotaが50Mに戻るので放っとくとファイルが壊れるそうで
それまでに必要最小限サイズになるように標準ライブラリを削る必要がありました
結局バイナリCGIのケースとやってることはあまり変わらないかもしれません
>>253 mapで使う関数は、defしたほうがいいってことですか?
defしたリスト内包表記>defしたmap≒lambdaで書いたリスト内包表記>lambdaで書いたmap≒普通のfor
てことなんすかね。リスト内包表記はCで実装した部分を実行するのが多いってことなんだろか
>>259 普通に自分で def した関数ならば変わらない。
でも、自分で定義しなくても使える関数はC言語で実装されている
事が多いので、同じ事をする lambda よりも高速な事が多い。
速い順に並べると、
1. C関数の内包表記/map
map(str, l)
[str(x) for x in l]
2. Python式による内包表記
[x*2+3 for x in l]
3. Python関数による内包表記/map
def func(x):
return x * 2 + 3
map(func, l)
[func(x) for x in l]
map(lambda x: x*2+3, l)
なので、mapを使っても悪くは無い場合は、1か、3で既存のPython関数を
使う(map用に用意しなくてもいい)場面のみ。
261 :
デフォルトの名無しさん:2009/06/18(木) 23:38:12
ユニコード文字列に関して質問させて下さい。
python2.6を使用しておりますが、このVerはユニコード文字列は気にしなくてもいいんですか?
例)
#coding: utf-8
a={"abc":"123","bcd":"456"}
b="コード:%(abc)s 局:%(bcd)s"
print b%a #コード:123 局:456
ユニコードのu""は必要ないのでしょうか?
むしろu""を使用するとエラーとなります。
>>261 ファイルはちゃんとutf-8で保存してる?
どこに u を付けたの?
なんてエラーがでたの?
それはインタラクティブシェル上?それともファイルに保存したコードを実行したの?
環境はWindows?Linux?Mac?
264 :
デフォルトの名無しさん:2009/06/19(金) 21:45:53
261です。
utf-8の設定ミスでした。お騒がせ致しました。
違うPCでやったのが原因でした。
265 :
デフォルトの名無しさん:2009/06/20(土) 21:17:00
くだらない質問で悪い
文字列フォーマットで
>>>print "%+010.2f" % 100.123
+000100.12
となりますが、この10桁ってのは、符号と小数点(.)も含まれるってことでいいんだよね?
>>265 桁というか、文字数、と思ってたわ。
"前に符号付き0埋め10文字、小数点以下2桁の小数点表示"
とおれは理解してた。
C とはちがうんだっけ?
268 :
デフォルトの名無しさん:2009/06/21(日) 01:51:43
みんなのPython改訂版って誤字脱字多くね?
みんパイ(笑)
はじめてのPython3も誤字脱字が多いですね
正誤表もいまだ出ていません
272 :
デフォルトの名無しさん:2009/06/21(日) 16:53:32
やっぱりみんなも気づいてた?
電話してやろうかと思ってたw
日本語どころかコードも怪しい
変な太字のところとかあるしw
定期的にウジ虫が沸くな。
よう、ウジ虫!
馬鹿にすんな、今成長してハエになったところだぜ?
迷惑度急上昇だな。
>>277 呼んだ?
、 /⌒ヽ, ,/⌒丶、 ,
`,ヾ / ,;;iiiiiiiiiii;、 \ _ノソ´
iカ / ,;;´ ;lllllllllllllii、 \ iカ
iサ' ,;´ ,;;llllllllllllllllllllii、 fサ
!カ、._ ,=ゞiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!! __fカヘ.
/ `ヾサ;三ミミミミミミ彡彡彡ミヾサ`´ 'i、
i' ,._Ξミミミミミミミ彡/////ii_ |
| ;カ≡|ヾヾヾミミミミミミ、//巛iリ≡カi |
| iサ |l lヾヾシヾミミミミミ|ii//三iリ `サi |
| ,カ ,カll|l l lヾリリリリリ川川|爪ミミiリllカ、カi |
| ;iサ,サ |l l l リリ川川川川|爪ミミiiリ サi サi |
| iカ ;カ, |l l リリリリ川川川川l爪ミミilリ ,カi カi |
| iサ ;サ, |リ リリ川川川川川l爪ミミiリ ,サi サi |
| iサ ;iカ, | リ彡彡川川川川|爪ミミiリ ,カi :サ、 |
,i厂 iサ, |彡彡彡彡ノ|川川|爪ミミリ ,サi `ヘ、
,√ ,:カ, |彡彡彡彡ノ川川|ゞミミミリ ,カi `ヾ
´ ;サ, |彡彡彡彡川川リゞミミリ ,サi
;カ, |彡彡彡彡リリリミミミシ ,カi
,;サ, |彡彡ノリリリリミミミシ ,サi
;メ'´ i彡ノリリリリリゞミミシ `ヘ、
;メ ヾリリリリノ巛ゞシ `ヘ、
;メ ``十≡=十´ `ヘ、
ノ ゞ
IDLEをコンソールから呼び出すにはどうすりゃいいの。
vimと連携させようと思っているんだけど、IDLEショートカットのプロパティを
みても普通のショートカットと違うみたいで呼び出し方がわからないんだわ。
ちなみに、普通のpythonプロンプトなら
nmap <silent>;py :!"C:\python30\python.exe"<CR>
と_gvimrcに書いておけば;pyと書くだけで呼び出せて便利。
『書く』じゃなかった、『コマンド』したら。
うじ虫のAA
↓
0
∞
284 :
デフォルトの名無しさん:2009/06/24(水) 23:03:37
ファイル名の変換で困ってます。アドバイスをお願いします。
# -*- coding: utf-8 -*-
import os
TargetPath = r"C:\test"
FileList = os.listdir(TargetPath)
for i in FileList:
print i
for cnt in FileList:
c=1
os.rename("%03d.mp3"%c,cnt)
c+=1
※インデントは消えてると思います。。。
WindowsError: [Error 2] 指定されたファイルが見つかりません。
というエラーが出てしまいます。どういうことでしょうか
よくわからんが、cをforの前に持ってこないとずっと1のままじゃね?
俺だったらenumerate使うけど
まぁいいか
>>284 なんかいろいろまちがっててよくわからんけど
こうしたかったんじゃないか?
# -*- coding: utf-8 -*-
import os
targetpath = r"C:\test"
filelist = os.listdir(targetpath)
for filename in filelist:
print filename
c = 1
for filename in filelist:
oldpath = os.path.join(targetpath, filename)
newpath = os.path.join(targetpath, '%03d.mp3' % c)
os.rename(oldpath, newpath)
c += 1
288 :
デフォルトの名無しさん:2009/06/25(木) 18:43:09
>>287 スマートな正解をありがとうございます。
とても参考になりました。
renameへの引数はこのようにするんですね!
このプログラム添削してください。
animal = [dog,cat,pig,lion,deer]
num = [1,2,3,4,5,6]
print animal[0] "は"num[0]"番可愛いです。
print animal[2]"は"num[5]"番可愛いです。
あってますか?
ちなみに
dogは1番可愛いです
pigは6番可愛いです
と表示させたいです
>>289 1から勉強しなおせ
animal = ["dog", "cat", "pig", "lion", "deer"]
num = [1, 2, 3, 4, 5, 6]
print "%sは%d番可愛いです。" % (animal[0], num[0])
print "%sは%d番可愛いです。" % (animal[2], num[5])
センスとか関係ないし
釣りの可能性はあるが
でも具体的なコード貼って添削してくれってのはアリだね
初心者に説明してもらってもイミフなケース多いし
スレと関係ないんだけどさ、俺「釣り」とか「釣り師」っていうのは、
釣り師 ↓
. /| ←竿
○ / |
. (Vヽ/ |
<> |
゙'゙":"''"''':'';;':,':;.:.,.,__|_________
|
餌(疑似餌)→.§ >゚++< 〜
の組み合わせだと思ってたんだけど、
最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか
言ってるの多いよね。
これは、どっちかというと、
,〜〜〜〜〜〜 、
|\ ( 釣れたよ〜・・・)
| \ `〜〜〜v〜〜〜´
し \
゙'゙":"''"''':'';;':,':;.:.,., ヽ○ノ
~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ト>゚++<
ノ)
かと思うんだけど、どうよ?
296 :
デフォルトの名無しさん:2009/06/27(土) 00:15:10
他にも添削希望いないのかな
Pythonは、あることを書くときに「なるべく誰でも書き方が同じになるようにしよう」
というのはいいです。
でもあることをしたい時に「ライブラリがすごいたくさんあっちゃって混乱してるけど
すきなの選んで」って勘弁してほしいんですが
勘弁します
>>297 それはPerlのCPANじゃね?
Pythonは標準ライブラリが充実している分、たくさんのサードパーティー
ライブラリの中からマトモなのを探す手間が省けることが多いよ。
つきなみだけど
同意
301 :
デフォルトの名無しさん:2009/06/28(日) 09:18:41
ls -lR
303 :
デフォルトの名無しさん:2009/06/30(火) 22:07:59
すいません添削ってわけではないですが、質問させて下さい。
1から100までの数字で不定期に続くリストがあります。
cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
でどの数値が抜けているのかを調べる。
#coding:utf-8
cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
num=range(1,101)
for i in cnt:
#numから繰り返し変数iを引きたいんだけど、何が一番スマートだろ…
print num
304 :
デフォルトの名無しさん:2009/06/30(火) 22:13:41
書き忘れました。
#coding:utf-8
cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
num=range(1,101)
for i in cnt:
num.remove(i)
print cnt
がベストかと思うんですが…間違ってますか?
305 :
デフォルトの名無しさん:2009/06/30(火) 22:15:36
最後はprint num でした。度々すいません
setでも使え
[ x for x in range(1,101) if x not in [2,3,5,9,12,23,56,62,68,75,85,95]]
set(num) - set(cnt)
309 :
デフォルトの名無しさん:2009/06/30(火) 22:28:35
そういうのも可能なんですね
ありがとうございます。
どーしょーもない質問ですいませんでした
ちんこ生えてきた
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
if文で一度に複数の変数、たとえば
if a>0 and b>0 and c>0:
みたいなのは無理ですか?
>>313 そんなの聞くよりやった方が早いだろ。
普通に対話型でもできるし。
可能です
if 0 < a < 5:
と書いてもエラーにならない処理系はありますか
ある
Pythonにはない。
あと、エラーにはならなくとも、おもいがけない意味になることもある
(C言語とか)。
(回答者が)超初心者用
Rubyなら全部できるよ^^
>>318 0 < (a < 5)
または
(0 < a) < 5
ということですか?
#include <stdio.h>
int main(int ac, char *av[]){
int a;
for(a = 0; a <= 5; a++)
if(0 < a < 5) printf("%d: true\n");
else printf("%d: false\n");
return 0;
}
# if(0 < a < 5)
0: true
1: true
2: true
3: true
4: true
5: true
# if(0 < (a < 5))
0: true
1: true
2: true
3: true
4: true
5: false
0: false
1: true
2: true
3: true
4: true
5: false
になるようにするにはどうすればいいですか
>>324 C/C++スレに帰れ
0 < a && a < 5
Cはa < b < cはどうやってもダメだけどPythonは意図通りに動くだろ、確か
>>324はきちんと動いてないし
きっちり正しく動いていて、書いたほうがアホと言う方が正しい
まいんまいん
lispで
(< 0 a 5)
当然Rubyなんかには出来ません
(setq a 3)
3
(< 0 a 5)
t
>>> a = 3
>>> 0 < a < 5
True
a > b > c > dは
t = b
u = c
a > t and t > u and u > d
ってことか。これはきもいなー。
Python3でも変わってないのね。
まあ、気にしないことにしよう。
Cをはじめた初心者がうっかりやりがちなぐらい自然な記法なのに!
Pythonの三大ステキ機能のひとつにケチをつけるとはいい度胸だ
bが最大であることをテストするのに
a < b > c #これはいただけないよね?だからと言って
b == sorted((a, b, c))[2] #これは頭がおかしい
Python > Ruby > C
342 :
デフォルトの名無しさん:2009/07/04(土) 00:05:09
(a and c) < b
343 :
デフォルトの名無しさん:2009/07/04(土) 00:09:40
a, b, c, d のなかで bが最大であることをテストするのに
a < b > c に d を加えられない
sorted の方が正解
max(a, b, c, d) == b
346 :
デフォルトの名無しさん:2009/07/04(土) 00:15:07
reduce(lambda x, y: y if x < y else x, [5, 2, 7, 3])
347 :
デフォルトの名無しさん:2009/07/04(土) 00:16:53
reduce は 2.6 以上では使えないんだっけ
functools.reduce に移動しただけだから問題ないよ
any(x < b for x in (a, b, c))だろ、常識的に考えて……
つーか、もう比較アルゴリズムの話だろ。
351 :
デフォルトの名無しさん:2009/07/04(土) 00:50:00
web から取ってきた HTML を食わせて、XPath でデータを取り出したい。
正書式でなくても適当によしなに計らってくれるとなお嬉しい。
Ruby だったら Nokogiri みたいだけど、Python では何?
>>351 - BeautifulSoup
- lxml
>正書式でなくても適当によしなに計らってくれるとなお嬉しい。
lxml だと無理?
lxmlもがんばってくれるよ
any(x < b for x in (a, b, c))だろ、常識的に考えて……
any(b<=x for x in (a, b, c))
class Hogeがあったとして、
"Hoge"からはどうやってアクセスするんだっけ?
あと、こういうのを一般的に言って、どんな専門用語でしたっけ?
イントロスペクションとかリフレクションとかそのへんの用語を求めてる?
>>360 イントロスペクションってのは初めて聞いたので、調べてみます。
単に、eval("Hoge")みたいなのと勘違いしていた模様。
Hoge.py 内に
class Fuga があったとして、
"Hoge", "Fuga" からはどうやってアクセスするんだっけ?
Hoge.py 内に
class Fuga, method Hage があったとして、
"Hoge", "Fuga", "Hage" からはどうやってアクセスするんだっけ?
365 :
デフォルトの名無しさん:2009/07/07(火) 13:34:51
366 :
デフォルトの名無しさん:2009/07/10(金) 09:36:03
age
おはようございます。
わたし16歳の女子高生ですけど
Python始めるにあたって最初に読むべき本は
ありますか?
ないよ
こんにちは。
わたし15歳の巨乳グラビアアイドルなんだけど
みんなでPythonやろうよ。
370 :
デフォルトの名無しさん:2009/07/10(金) 13:59:45
みんなでPython www
Good Morning, Everyone!!!!
I am a thirteen years old girl.
I will start learning Oppaithon Programming.
Please teach me chome-chome.
chome-chomeとか団塊レベルじゃないと使わないだろう普通
コメコメ?アスタリスクのこと?
374 :
デフォルトの名無しさん:2009/07/11(土) 09:33:34
いつもの英語下手なひとか
375 :
デフォルトの名無しさん:2009/07/11(土) 12:39:50
OptionParserについて質問です
#!/usr/bin/env python
# coding: utf-8
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-f', '--fuga', action='append', type='string', dest='fugaList', help='fugafugafuga')
(options, args) = parser.parse_args()
print options.fugaList
※上記のスクリプト名を仮にfugaとする
実行例1:
$ ./fuga -f hoge piyo
['hoge']
実行例2:
$ ./fuga -f hoge -f piyo
['hoge', 'piyo']
複雑なオプション指定による処理分岐を行いたくてOptionParserを使い始めました
実行例1のように一つのオプションに多数の引数を渡して、
実行例2の結果['hoge', 'piyo']のように"options.fugaList"に
引数を代入したいのですが、可能でしょうか?
可能ならアドバイスをお願いします
一つのオプションに対して複数のオプション引数を許したら
後に続くであろう固定引数が存在するかしないか確認する術がない気がする
なので素人考えだけど -f"hoge,piyo" でごまかすとか
377 :
デフォルトの名無しさん:2009/07/11(土) 13:22:26
>>376 レスありがとうございます
>>275にこのスクリプトの使用目的を書いていなかったので
後出しになってしまいますが
$ ./fuga hoge_*
のようにコマンドラインからワイルドカードを使用して、
複数のファイル名をオプション引数に渡して利用するのがメインなので
-f"hoge,piyo" ではちょっとごまかせないです。。。
そういう場合-fオプションがあったらどういう動作をする、という風に作るものであって
-fオプションにパラメータをぞろぞろ渡すという風にはしないだろ、普通。
A/B/__ini__.py で変数を定義
hoge = 'hogehoge'
A/B/module_x.py というモジュール内でhogeを使いたい場合、どうすればいいのかを教えてください。
import hoge
ではダメなんですか?
>>379 コピーでよけりゃ
from . import hoge
381 :
375:2009/07/12(日) 02:57:27
>>378 確かに普通はそうかもしれませんね。。。
という訳でOptionParserではワタシがしたいことが出来なさそうなので
自分でモジュールをつくることにしました
どうもありがとうございました
どういたしまして
>>377 OptionParserなりgetoptで "hoge_*" を文字列として受け取ってから
glob でワイルドカードを展開すればいいんじゃまいか。
ためしてないけど Linux/Unix 環境だとワイルドカードはシェルによって
展開されてからプログラムに渡されるので
./fuga -f "hoge_*"
のようにコマンド引数をクオートして書く必要がある。
きたああああああああああああああ
UnicodeDecodeError出なくなった!
>>384 どうやった?
まさか setdefaultencoding() じゃないよな?
from __future__ import unicode_literals
して、テキストファイルのファイル入出力は
import codecs
codecs.open('foo', encoding='cp932')
のようにエンコーディングを指定してファイルを開くのが正しい方法だぞ。
リスト型で日本語を扱う場合一個ずつ取り出さないと文字が化けちゃうんですが
スライスで一度に複数の要素を扱えるようになる方法はないんでしょうか
>>386 実際に化ける場合のコードと、「一個ずつ取り出す」のコードを見せてみりゃれ
辞書を
hoge = {'fuga': 1}
print hoge.fuga
とJSの連想配列のようにキーをプロパティみたいにして
アクセスしたいんですがどうにか実現できないですか?
>>385 フッ…txtをUTF-8で保存することを覚えただけさ
ついでにだけどunicode_literalsって何?
2.5だとimportできなくていいのか?
>>389 うん、2.6からしか使えない。
たとえば、
#coding: utf-8
open("あいうえお")
ってやると、"あいうえお"はutf-8のバイト列だから、Windowsとかでは
"あいうえお" という名前のファイルを開けない。
open(u"あいうえお")
と書くと普通にファイルが開ける。
で、 Python 3.0 以降では普通に "あいうえお" と書くと Python 2系の u"あいうえお"
相当になるんだけど、Python2系でもu無しにUnicode文字列を書けるようにするのが
unicode_literals
>>388 例えば、
>>> class JSObject(dict):
... def __init__(self, o):
... self.__dict__ = o
...
>>> o = JSObject({'foo': 1})
>>> o.foo
1
他にも __getattr__, __setattr__ を使った方法とかもある。
>>387 こんな感じです
#ファイルの2行目からの文字列を3行ずつリストの1要素にまとめて扱いたい
fhnd = open('spam.txt','r')
lines = []
add_up = []
line_start = 2
line_end = 5
for temp in fhnd:
lines.append(temp)
for temp in lines:
if (line_start > line_max) or (line_end > line_max):
break
add_up.append(lines[line_start] + lines[line_start+1] + lines[line_end-1]) #←化けない
# add_up.append(lines[line_start:line_end]) #←上の代わりに実行すると化ける
print str(add_up[0]) + str(add_up[1]) + str(add_up[2])#←上のfor文内のうち上の行を実行なら化けない
print str(add_up[0:3])#←上のfor文内のいずれでも化ける
抜けてたけど
line_max = len(lines)
です
>>391 おお!ありがとうございます!
勉強になりました!
>>392 > add_up.append(lines[line_start] + lines[line_start+1] + lines[line_end-1]) #←化けない
> # add_up.append(lines[line_start:line_end]) #←上の代わりに実行すると化ける
上の場合、appendの引数は文字列だけど、下の場合はリスト
なので下を上と同じくするならadd_up.append( ''.join( lines[line_start:line_end]))じゃまいか
> print str(add_up[0:3])#←上のfor文内のいずれでも化ける
リストをstrしたときに得られるのはprintできる文字列
>>> L = [1, 2, 3]
>>> str(L)
'[1, 2, 3]'
>>392 まずはstr()とrepr()の違いが判らないとな。
>>> astr = 'あいう'
>>> alist = [astr]
>>> print astr
あいう
>>> print alist
['\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86']
リストを文字列にしようとしたら、リストの要素にはstr()ではなくてrepr()が適用される。
repr()されると、文字列のうちASCII文字以外は\xでエスケープして表示される。
三行分の文字列を配列にして add_up を2重配列にしたい?
それとも三行分の文字列を一つの文字列に連結したい?
lines = open('spam.txt').readlines()
add_up = []
for i in range(1, len(lines), 3):
add_up.append(lines[i:i+3]) # 2重配列にしたい場合
add_up.append(''.join(lines[i:i+3])) # 連結したい場合
エンコーディング方面の問題かと思って
見当違いな方向に進むところでした
ありがとうございました
399 :
デフォルトの名無しさん:2009/07/13(月) 22:41:07
[1,2,3,1,4,5]のようなリストの重複した要素を削除して[1,2,3,4,5]のようなシーケンスを作る。
※並び順は問わない。
set型を使わず、for文とif文を組み合わせるなどして作成する。
模範解答をお願い致します。
とりあえず、初歩的にはこんな感じだろう。
ListA = [1,2,3,1,4,5]
ListB = []
for x in ListA:
if not x in ListB:
ListB.append(x)
print ListB
401 :
デフォルトの名無しさん:2009/07/13(月) 22:53:49
>>400 レスありがとうございます。
削除する方法ばかり考えてましたが、追加するって考え方もあるんですね
すごく参考になりました。スマートな回答どうもです!
a = [1,2,3,1,4,5]
print list(set(a))
最初に空リスト作るってのはよくある
宿題だからでは・・・
あれ、だとすると宿題スレだなw
2ちゃんに書き込みたいけどcookieがよく分からん
どうやってResponseから取り出してrequestに追加するの?
firefox使えばok
というかwgetだけでできるじゃん
409 :
デフォルトの名無しさん:2009/07/15(水) 06:59:12
インスタンスに勝手に属性をつけられないようにはできませんか?
クラスの定義に書いてある属性だけで打ち止めにしたい・・・
def __setattr__(self, name, value):
if hasattr(self, name):
object.__setattr__(self, name, value)
else:
raise AttributeError(name)
そうか!
__setattr__ をオーバーロードすればよかったんですね.
__slots__ とどこが違うの?
413 :
410:2009/07/15(水) 09:58:48
415 :
406:2009/07/15(水) 13:29:32
いやPythonから書き込みたいんだけど
417 :
デフォルトの名無しさん:2009/07/15(水) 13:34:45
過去スレに(r
from cookielib import CookieJar
cj = CookieJar()
cj.extract_cookies(res,req)
cj.add_cookie_header(req)
フォルダの中にあるtxtファイルを全て読み込むことってできますか?
>>420 import glob
for i in glob.glob('*.txt'):
d = open(i).read()
>>421 ありがとうございます
os.walk使って無理矢理やってました
glob() はサブディレクトリ見に行かないぜ
paverいろいろおすすめ
from paver.path import path
for f in path('.').walkfiles('*.txt'):
print f
425 :
デフォルトの名無しさん:2009/07/16(木) 05:05:09
くそう・・・なんで俺のコードじゃpickleが使えないんだ・・・
もう寝る
gzip解凍できねえぞくそお
428 :
デフォルトの名無しさん:2009/07/16(木) 16:49:39
文章の中から単語の数かぞえんのどうやんの?
countを使ってどうやんのさ
wc --words
430 :
デフォルトの名無しさん:2009/07/16(木) 17:16:57
pythonって何のために使うの?
汎用です
夜のお供に使ってみるか・・・
perlをわすれるため
雑用を処理させていますよ。
gMailを読んでDBに格納しておいて月末にExcelにまとめさせるとか
グラフ描くのに色々モジュールあるみたいだけど何がいいかな
今os.systemを使ってUNIXコマンドを組み込んでるんですが
bashとかでお馴染のリダイレクトやパイプを
Pythonでも使いたいのですが可能ですか?
os.system は system(3) 経由 sh 経由でコマンドを起動するはずだからできると思うが、
subprocess モジュールを勉強したほうがいいと思う。
>>437 。。。すまんm(_ _;)m
勘違いして別のコマンド実行してたみたいです。。。
確認したらちゃんとできました。
回答ありがとうございましたm( __ __ )m
しかし乗り換えるにはsubprocessは面倒くさい罠
popen2.popen3()
441 :
デフォルトの名無しさん:2009/07/18(土) 05:44:16
4コアでガンガンまわしてるつもりになってても、
実は1コアしか動いていないのが悲しい
スタックレスなんとかをかんとかすればアレなのかな?
つmultiprocessing
スレッド回すよりは好きだわ
unko = [1, 3, 5, 7, 11, 13]
for i in unko:
if i < 10:
unko.remove(i)
for i in unko:
print str(i)
3 <---?
7 <---?
11
13
なして?
ループ中に回してるリストをいじるのはやめましょうという話
どうしてもやりたければ for i in unko[:]: unko.remove(i)
リストについて舐める操作をしながら、そのリストに副作用が起きる操作をしてるから。
リストの1番めを見て、1を削除。その次はリストの2番めを見るので、1番めに入った
3は無視されちゃう。
unko.remove(i) ワロス
447 :
デフォルトの名無しさん:2009/07/18(土) 21:28:25
ちんこ
フルーチャートを書けばすぐわかることだろうに
フローチャートを書けばすぐわかることだろうに
flo'u tʃɑ':(r)t
クラスの中で変数を宣言したいのですが、
self.unko = 0
で、いいんでしょうか?
はいそれで大丈夫です
外部アクセスを防ぎたい場合はself.__unkoとしてください
ありがとうございます!
外部アクセスを防ぐ、ということは宣言した後予期せぬ状況で中身が書き換わるのを防ぐ、ということでしょうか?
no
うーんどういうことなんでしょう。
内容を事ある毎に変化させていくパラメータとして使いたいので普通に宣言すれば良いと思っているのですが、それで問題ないでしょうか?
no
>>455 余計なことを言って混乱させてすいませんでした
self.__unko
のように先頭に__を付けると外部アクセスのできないいわゆるprivate変数の様な感じになります
C言語で言うとstaticをつけたりつけなかったりという話なのでしょうか?
no
python楽しいお
461 :
デフォルトの名無しさん:2009/07/21(火) 22:20:03
python 面白いよね
ショボイのしかまだ書けないけど、(きっと今後もw)
日々の作業が楽で、楽しくなるようなコードが書けるまで勉強するのだ
インタラクティブシェルだけで勉強してたら、ショボーンだけど、ファイルに書き出しとかになると
ちょっとプログラムって感じで楽しい
Python、神のごときライブラリが色々あって面白いすね。
python組み込みのhash関数って完全ハッシュ関数ですか?
衝突しませんか?
>>462 新参の俺にbeautifulsoup意外詳しく
_mssql、VisualBasic.netでADO.netとか何だったんだろうと。
pyExcelerator、Excelネイティブのファイルが簡単に出来たですよ。
reportlab、PDFが(ry
Barcode for Python、bzr branch lp:barcodesforpython/beta、バーコードが(ry
最近、データベースからの書類生成は全部Pythonで書いてます。
searchとmatchの挙動の違いを詳しく解説してくれる方いませんか?
re.match("foo", s) == re.search("\Afoo", s)
match(r'foo',unko)のようにrオプション付けるとどういう効果があるのでしょうか?
findを忘れないで
よくわかりました!
ありがとうございます''
>>473 明確に記載されている資料があればお願いします
どのソースに書いてあるかドキュメントに書かれていればいいんだがなー
組み込み関数だとgrepしてもノイズ多くてゲンナリ
help(hash)したら書いてあるだろうが
480 :
476:2009/07/23(木) 10:22:52
Summer holidays
機能性文盲はつらいよ
いいからやってみろよ
上で求められてるような情報は出てこないから
求められてるのって、完全hashかどうかだよな?
> Return a hash value for the object. Two objects with the same value have
> the same hash value. The reverse is not necessarily true, but likely.
明快に書いてあるよな、「逆は真とは限らない」って。
hash()の入力の値域と出力の値域を比較すれば見当がつくじゃまいか
出力は整数なんだから衝突せずにすむ入力の範囲はせいぜいそれと同程度だ
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
>>> hash(0)
0
>>> hash(1)
1
>>> hash(-1)
-2
>>> hash(-2)
-2
>>484 完全ハッシュって双方向に一意なんだっけ
って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな
>完全ハッシュって双方向に一意なんだっけ
no
>って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな
no
えっ
>> 完全ハッシュって双方向に一意なんだっけ
>
> no
>
no
>> って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな
>
> no
no
> no
no
なんだよおまえらww
> なんだよおまえらww
neet
なんなんだこのスレ
ソースやドキュメントなんて読むまでもないだろ。
もし仮に完全ハッシュだとしたとしたら
論理的に考えてhash関数の引数はシーケンスでないとならない。
そうなってないんだから当然hashは完全ハッシュじゃない。
たまには頭使わないと腐るぞ。
そもそも「ハッシュ」の意味さえ知っていれば、あんな疑問は湧かないはず
>>495 > 論理的に考えて
Python的に考えて、でしょ
型によって全く扱いが違う関数なんて
他の言語ではありふれてるわけで。
スレタイ読める?
例えば数値なら桁毎のシーケンスの生成なんて簡単なことだし
スレタイ読めるなら
いちいち「Python的に」なんて書かなくても補完できるはずなのにね。
>>498 桁毎のシーケンスって何?
整数型のbit数毎に異なるテーブルを用意する"なら"
整数型の完全ハッシュが作れるってこと?
条件を絞れば完全ハッシュなんていくらでも作れるに決まってるだろ?
たとえば同一性を判定するためだけのハッシュとか、
ある種のFSでファイル名をキーとするハッシュとか。
自分こそスレタイ読めるなら、型によってとか他の言語ではとか
勝手に条件付け加えないでくれ。
釣り針でかいなw
そんなもんがあるとして、少なくとも、引数の範囲とかも引数にしないと無理なんじゃまいか?
引数の範囲?bitwidth?
朝生はじめるよー
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
Output folder: C:\DOCUME~1\user\LOCALS~1\Temp
Install dir for actual installers is C:\DOCUME~1\user\LOCALS~1\Temp
"Target CPU handles SSE2"
"Target CPU handles SSE3"
XPにnumpyインストールしようとしたらこうなったんだけどどうしたらいいんだ?
あーインストーラー保存せずにそのまま実行したらできました
おれ、C:\temp\downloadsになんでもダウンロードして実行する癖あるんだけど、
俺の場合そうはならなかった気がするな?
Mac OS X + Python2.5です
ファイルの出力なのですが、
f = open('hoge', 'w')
f.write('line 1\n')
としても改行されません・・・
なにか間違って理解しているのでしょうか?
> write( str)
>
> 文字列をファイルに書き込みます。戻り値はありません。
> バッファリングによって、flush() または close() が呼び出されるまで
> 実際にファイル中に文字列が書き込まれないこともあります。
失礼しました。
close() はしているのですが、
ファイルには
line 1\n
と出力されてしまいます・・・
f = open('hoge', 'w')
f.write('line 1\n')
f.close()
こちらでは再現できない。
原因が少しわかりました・・・
PyDev(Eclipse)を使っていたのですが、\がバックスラッシュにならないようですorz
コンソールからvi で編集しなおして\(バックスラッシュ)で改行されました。
これはPyDevの挙動がオカシイんですかね、それとも仕方ないんでしょうか?
>>509 脊髄反射でバッファリングだと思ってしまった。ごめん
macのyen signには癖があるって話を聞いたことがある
% od -tx1 hoge して結果を貼ってみて
515 :
511:2009/07/26(日) 22:29:39
解決しました
Macに不慣れなので知らなかっただけで、通常に¥キーを押すと円記号、バックスラッシュを入力する場合はOption + ¥キーを押すようです。
ターミナルの場合は強制的にバックスラッシュなのかな?
516 :
デフォルトの名無しさん:2009/07/26(日) 22:35:46
pythonで皆さんどんなことしてるんですか?
具体的に何をしてるか教えて下さい。
pass
ナニしてるんだろうねぇ
>>516 お仕事に使えるよ?
ユーティリティ色々、前はVB.NETだったけど今は大概Pythonで書いてる。
この間は、ftpサーバーの状態をチェックして警報ショートメッセージ出すのを書いた。
Windowsアプリ作ってるよ。
Thinkpadとか、ツール類がPython使ってるから検索するとPython関連ファイルが
沢山入ってる。
バージョン古いし、ツール類の大半要らないからアンインストールして自分で最新の
Python入れるけど。
Python のコマンドラインシェルや、iPython 等で
タブ幅(tabstop)を指定するにはどうすればよいですか?
a = [' ','a',' ','b',' ','c',' ']
のように空白を要素に持つlistがあります.
このlistから空白要素を全部削除するのに,
for a in range(a.count(' ')):
a.remove(' ')
と書いているのですが,もっとスマートに書けないでしょうか.
a = [i for i in a if a != " "] とか?
a = [' ','a',' ','b',' ','c',' ']
print filter(lambda x: x != ' ', a)
or
a = [' ','a',' ','b',' ','c',' ']
print [x for x in a if x != ' ']
[e for e in a if e != ' ']
filter(lambda x: x != ' ', a)
filterって関数があるんですね.ありがとうございました.
全然スマートにみえないんだが気のせいかな?
リストそのものの書き換えと、リストから要素を除いた新しいリストを作るののどちらをやりたいんだ?
>>528 filterとかlambaとかスマートというか自己満足だよね
lambdaはともかくfilterはできる子
>>531 >filterはできる子
そういうことにしたいのですね。
全然スマートにみえないんだが気のせいかな?
全然スマートにみえないんだが気のせいかな?
reduce(lambda x, y: x + ([y] if y != ' ' else []), ' a b c ', [])
reduceって関数があるんですね.ありがとうございました.
[i for i in ''.join(a).split(' ') if i]
or
filter(lambda x: x, ''.join(a).split(' '))
filter(' '.__ne__, [' ','a',' ','b',' ','c',' '])
それいいね
一行野郎め
Tkinterで書いたものをwxで書き直してます。DnDが要件にあったので。
wxは初めてです。
wxってウィジェットの位置とかサイズを指定しますが、
あれって環境によってフォントサイズが変わったりした場合、
重なったり、端が切れちゃったりしないんですかね。
TKライクに並べて行けば自動的にサイジングしてくれる
配置のやり方があれば教えていただけないでしょうか。
sizerでどうにかするんだろうとは思うのですが、具体的なや
り方に行き当たっていない状態です。
あと、TKでいうところのLabelFrameってwxにはないんでしょうか。
現状StaticBoxとStaticTextで似たようなことしてます。
よろしくお願いします。
XRCed
Sizer
python 一行野郎ってジャンルはまだ無いのな
インデントのおかげで一行で書くのはむずかしいからな
>>544 いつ頃、どこで生まれた訳なんだろうな。
俺が初めて知ったのは『Effective Perl』の邦訳版で、これが10年前の本だけど。
Rubyしかないよなあ
>>516 C言語で書いたシミュレーションプログラムに Python で GUI を付けたり、シミュレーションの
一部で新しいことを試したいとき(例えばある方程式を解く時にニュートン法が有効かどうか確か
めたいときなど)に Python で試作プログラムを書いてみたりしています。
先日、線形計画問題を解く必要があって Python でシンプレックス法を書きました。線形計画問題
というのは、「製品Aには材料Sが3個、材料Tが2個必要で、製品BにはSが1個、Tが4個必要です。
Aは100円、Bは150円で売れます。手元にはSが40個、Tが30個あります。売上金を最大にするには
AとBを何個ずつ作るのが最適でしょうか?」というような問題のことです。この場合、未知の変数は
Aの個数とBの個数の2つなので手作業で解いてもいいのですが、未知の変数が増えるとたいへん
なので適当な計算方法で解きます。シンプレックス法はその1つです。で、Python の float 型で
計算したら計算誤差のせいか問題によっては計算が収束しませんでした。そこで、アルゴリズム
本体はそのままで、入力値(シンプレックス表の要素)のデータ型を fractions.Fraction クラス
に変えたところ、うまく解けるようになりました。Fraction クラスは有理数(分子と分母が整数で
表された分数)を実装したクラスで、float に比べて遅いですが計算誤差がありません。アルゴ
リズムはそのまま変更なしで、入力値のデータ型を変えただけで収束が改善されたので感激しま
した。他の言語(たとえばC言語)でも計算に使うデータ型を変えられるようにプログラムを作る
ことはできますが手間がかかります。その点で Python ははるかに手軽で強力だと思いました。
550 :
522:2009/07/30(木) 09:14:17
結局a = [i for i in a if a != " "] が分かりやすいので使わせて貰います.
ありがとうございました.
filterとかlambdaを無駄に使いたがるヤツには気をつけた方がいい
>>550 それで良いのかよw
if i != ' ' だろ?
俺はlispいじってたもんでホイホイlambdaやfilterを使っちゃうな
クラス皆無で関数だらけのスクリプトを量産する漏れみたいなもんだな
[e for e in a if e != ' ']
filter(lambda x: x != ' ', a)
どっちが速い?
要素が1000万個くらいあっても大丈夫?
>>555 速さなら前者の方が(たぶん倍以上)速い
要素の大きさは、速度よりもメモリの問題が発生する。
リストではなくジェネレータの利用を考慮するといい。
(e for e in a if e != ' ') もしくは itertools.ifilter
速さなんて考えたこともないぜ
> 要素が1000万個
PyCUDAとか使うべきだぜ!
(e for e in a if e != ' ')
[e for e in a if e != ' ']
1000万文字ほど用意して比べたら、
後者が圧倒的に遅く、前者はほぼ一瞬で終ったのですが
なんでここまで差がつくの?
ジェネレータ
そういえば、
1桁〜9桁くらいの数字だけで構成された文字列が大量に格納されたリストって
全部をint型に変換してソートするよりも
全部を文字列のままzfillで0埋めしてソートした方が速かったんだが
そういうもんなの?
今ジェネレータの意味がわかったw
関数系だとデフォで全部かYOって思ってわけわかめだったが、
こういう遅延評価ならわかりやすいな。俺でも使えそうだ。
そりゃ文字列だったのをそのままソートと
文字列だったのを数値に変換してソートだと
数値変換の処理が余計なステップになるよね
みんなエディタ何使ってるの?
zfillで0埋めする処理は余計なステップにならないのか
Pythonぐらい簡単でゲーム作るのに適した言語ない?
sqliteで、最後に挿入した行のrowidを取得する方法ってないのでしょうか?
c/c++なら「sqlite3_last_insert_rowid」というAPIがあるのですが・・・
cursor.lastrowid
>>561 そりゃ少なくとも2倍以上メモリ消費してるしな
>>567 RPGツクールに内蔵されたRubyだな。
質問なんですが
Linux上のPyGTK + Gladeで作ったアプリを
Pythonなどがインストールされていない
まっさらの状態のXPで動くようにしたいんですが
一緒にライブラリとかを同梱させれば可能になるんでしょうか?
可能ならそういった情報が乗ってるサイトとかを
教えてください
py2exeじゃダメなん?
574 :
デフォルトの名無しさん:2009/08/17(月) 14:06:43
3.1.1 の Windows インストーラ版はまだかな〜
Pythonの属性について。
モジュールオブジェクトやインスタンスオブジェクトobjに対して、
obj.x = x
のように、新しい属性をつけることはできますが、
文字列オブジェクト等でこれをやると、AttributeErrorが発生します。
これは文字列オブジェクト等の__setattr__()メソッドがエラーを発生するように定義してある、
という理解で良いのでしょうか?
>>575 組み込みオブジェクトは実装上そうなってる。
実際
class myStr(str): pass
と継承すれば望みのことが可能。
Pythonはそのへんの美しさは二の次なので好き嫌いが分かれるかも。
文字列はimmutableだし美しさを損なってるってほどでもないような
>>576 理解力が悪くてすみません。
strを継承したクラスのインスタンスには属性を追加できる
→ __setattr__()は関係ないってことで良いでしょうか?
579 :
575:2009/08/18(火) 00:14:45
連続で申し訳ないです。
今いろいろいじっていたら、そもそも組み込みオブジェクトが
__dict__属性を持っていないことがわかりました。
オブジェクトの属性は__dict__に格納されているみたいなんですが、
じゃあこの__dict__自身はどうなっているのでしょうか。
混乱してきましたw
>>579 __dict__ は dict型のオブジェクトだよ。
属性の管理方法は、組み込み型ならC言語で自由に管理できるし、Pythonのclassで
__setattr__ を定義しない場合はデフォルトの __setattr__ が __slots__ か __dict__ を使って
管理する。
581 :
575:2009/08/18(火) 15:50:11
>>580 ああ、なるほど__slots__ですか。
これを定義しておくと、これに格納されていない名前の属性は付けられなくなるんですね。
ありがとうございました。
582 :
デフォルトの名無しさん:2009/08/18(火) 17:49:09
# main.py
import mymodule
print mymodule.getmypath()
# mymodule/__init__.py
def getmypath():
return __file__
引数等に何も渡さずにgetmypath()でmain.pyのファイルパスを取得する方法はありますか?
python2.5を使ってます
os.fullpath(__FILE__)
これでいいの?
sys._getframe().f_back.f_code.co_filename
585 :
582:2009/08/18(火) 20:25:52
586 :
586:2009/08/19(水) 21:17:25
はじめまして。
BeautifulSoupを使っていて、
<class 'BeautifulSoup.NavigableString'>をstrに
変換するにはどうすればよいのでしょうか?
587 :
586:2009/08/19(水) 21:42:58
メソッドencodeを使ってもエラーになります。
<class 'BeautifulSoup.NavigableString'>オブジェクトから
1文字ずつとりだすとunicodeになるので、
無理やりunicodeに変換することはできました。
なので解決といえば解決なのですが、美しくないです…
unicode(s)
str(s)
unicode(s.prettify(), s.originalEncoding)
590 :
デフォルトの名無しさん:2009/08/20(木) 05:33:30
Pythonでは「文字列」と「ユニコード文字列」と「バイト列」
は異なるオブジェクトとして明確に区別されてるのでしょうか?
2でも3でも文字列とバイト列は同じ
文字列リテラルとしてソースに書く場合はやや注意が必要
>>591 いや違う
2: バイト列=文字列≠ユニコード文字列
3: バイト列≠文字列=ユニコード文字列
593 :
590:2009/08/20(木) 08:40:32
>>592 なるほど,その説明はわかりやすい
encode とか decode とかのメソッド見たとき,
何から何へなんだよ〜元と先が指定できなきゃ
だめなんじゃね?って悩んだ.
urllib.urlopenで読んできたHTMLをBeautifulSoupに渡すとunicodeにしてくれますが、
その中に囲み数字みたいな機種依存文字があるとencodeでeuc-jpとかにしようとすると
例外が発生しますよね?
これってみなさんどうしてます?
595 :
デフォルトの名無しさん:2009/08/20(木) 12:37:08
unicode-escape
596 :
デフォルトの名無しさん:2009/08/20(木) 12:40:43
encode('euc-jp', errors='replace')
encode('euc-jp', errors='ignore')
encode('euc-jp', errors='strict')
597 :
デフォルトの名無しさん:2009/08/20(木) 12:57:40
euc_jis_2004
600 :
594:2009/08/20(木) 19:51:48
ヒントありがとうございます。
色々試してみましたが、文字コード回りは今一つ良く分かりませんね。
みなさんのヒントとウェブ情報を参考にとりあえず次のようにしてみました。
html = urllib.urlopen(url).read()
html_coding = chardet.detect(html)['encoding'].lower()
soup = BeautifulSoup(unicode(html, html_coding, 'replace').encode('utf-8'))
text = soup......
print text.encode('euc-jp', 'replace')
単純にprintの時に text.encode('euc-jp', 'replace')とかだと、何故か全体がわけわからないコードになりました。
2.5.4でやってるんですが、3.xになるとこの辺もっとスッキリするんでしょうか。
>>600 html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
text = soup......
print text.encode('euc-jp', 'replace')
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
text = soup......
print unicode(text, soup.originalEncoding).encode('euc-jp', 'replace')
あのLinux使ってる人が一行目に書くのはなんだ?
shebang
606 :
デフォルトの名無しさん:2009/08/23(日) 22:49:29
はじめまして。
最近、pythonを始めました。 ipythonをとても便利に使っています。
ipythonに関して、一つ質問なのですが、代入式の場合に、評価の値が表示されるようにすることはできないでしょうか?
607 :
デフォルトの名無しさん:2009/08/24(月) 13:03:36
「はじめてのpython」で勉強しています
下記スクリプトを実行したとき、
Winで実行する場合とUbuntuで実行する場合とで
結果が違う(Ubuntuの場合はエラーになる)のですが
どうしてですか?
Ubuntuでエラーを解消するにはどうすればいいですか?
文字エンコード部分を変えたり消したりするのはやってみました。
#! /usr/bin/env python
# coding:shift_jis
while True:
str=input('> ')
print( str )
if str=='bye':
break
raw_input() にすれば動くよ。たぶんwinのはpython3なんだろう。
その本がどちらを使ってるかわからないけど、個人的にはまだ2.xを使ったほうがいいと思うよ
python2のraw_input() == python3のinput()
python2のinput() == python3のeval(input())
改行コード
win32api を使いたいです
ctypes から、windll.[DLL名].[関数名] で呼べるのはわかったのですが、
引数が要求したり、関数が返してくるような定数(?)の実際の値は普通どう確認するものなんでしょうか
他言語から win32api を使った経験は無いです
612 :
610:2009/08/25(火) 17:27:33
えーと WM_CLOSE とかそういったものが定義されてないので、
その実際の値がわからないとそれを要求したり返したりする関数が使えないんです
それで、普通はどうするものなのかと思って質問しました
少しぐらいならヘッダファイルから拾ってくれば済むけど
GUIまでやろうとするとものすごく大変な気がする
MSDNでしらべる。Mingwのw32apiとかみる
>>813 たまたま目に付いたものを書いただけで、今のところは GUI をやろうとしてるわけではないです
ヘッダファイル名でググって、定数名で検索掛けてコピペしてくればいいんですかね
他のコードからコピペして著作権的に大丈夫なんでしょうか
>>614 関数と、対応するDLLは、ググって出てきたMSDNのページを見てるんですが、定数が見つからないです
どこに何があるかいまいちわからない……
Mingwは調べてみます
pywin32 の win32con.py
>他言語から win32api を使った経験は無いです
>>616 おお、大抵の場合はこれで大丈夫そうです
というよりctypesじゃなくてpywin32でwin32apiを呼べるみたいですが、その方がいいんでしょうかね
でもpywin32のヘルプ読んでもどこに何があるのかわかりづらい……
>>617 一応書いておいた方がいいかなと
これから先、どのapiを使うかわからないのであえて書かなかったのですが、
DDEクライアントを書いてました
win32conにddeml.hの定数が見当たらなかったので、
Google先生にお願いしてヘッダファイルからコピペしたところ、とりあえず動きました
(コピペして大丈夫なんでしょうか)
pywin32にddeなるモジュールがあるようですが、使い方がさっぱりなので見なかったことにします
みなさん回答ありがとうございました
今回の件とは別ですが、
>>611も参考になりました
>DDEクライアント
win32com
COMはDDEとは別物じゃないですか?
それはMSに言っといてくれ
死語だけでもWindows DNAとかChromeEffectsとかいくらでも出てくる
>>619を読んで、win32comとDDEクライアントの関係がわからなかったので
>>620を書いたのですが……
COMはOLEクライアント
拡張子は opyで
.pyoのほうがいい
そのうち2.xようと3.xように
.pyo2とかになるのか
627 :
デフォルトの名無しさん:2009/09/01(火) 22:46:42
Windows環境でもPyreadlineをインストールしていれば
cmdモジュールのデフォルトでbash-like動作が有効になると思ってたんですが
普通に“^A”などと表示されてしまいます。
IPythonでは補完が効くので、cmdモジュールの使い方が間違ってるんだと思いますが
公式サイトのリファレンスではCmd.cmdを継承したクラスを作って
引数無しでインスタンスを作成するだけのように読めます。
何が間違ってるんでしょうか?
助けてください・・・
これからPythonを勉強しようと思ってるのですが、それ以前に「パスを通す」
ということができません。
Windows XP で、Python2.6.2 をインストールしたんですけど、初心者用の
サイトにある「パスの設定」というのを見ながらやっても
[操作可能なプログラムまたはバッチ ファイルとして認識されていません]と
でてしまい困っています・・・。どうすればパスを通せるのか教えていただけ
ないでしょうか。よろしくお願いします。
了解
スレ違い
パソコン入門スレとかにいってこい
↑
PATHの通し方すら教えられない。
しょせんPyヲタなんて、この程度。
逃げた?
言っちゃった…。
俺はあほの相手するのは疲れるんでぐっとこらえたんだけど。
636 :
628:2009/09/03(木) 19:12:06
637 :
デフォルトの名無しさん:2009/09/03(木) 21:35:11
>> 607
一行目の指定宣言ですが?
#! /usr/bin/env python
/* man env 引用 */
NAME
env -- set and print environment
余り どの様な形式の基礎かが理解 出来ないのですが…
この部分の基礎宣言の説明をして頂けますか?
638 :
デフォルトの名無しさん:2009/09/03(木) 21:51:11
ピートンっておぼえたほうがいいかな
639 :
BBS戦士ジョソコイダーGID@愛をください:2009/09/03(木) 21:52:46
ジョソコイダーを遊園地に連れてってって
>>637 その一行目は shebang という
二行目以降を入力として shebang に指定したコマンドを実行する
ややこしい話をすると
shebang に指定されたコマンドを実行するのはシェルでなくカーネルの仕事
シェルは環境変数PATHを知っているけど、カーネルは知らないので
原則 #!/usr/bin/python などではなく #!/usr/bin/python のように書く必要がある
ただこの方法だと他のマシンでの python インタプリタの場所が
/usr/local/bin/python だった場合に動かないので
env コマンドに環境の設定と python の実行をお願いする
o 原則 #!/usr/bin/python などではなく #!/usr/bin/python のように書く必要がある
x #!python などではなく #!/usr/bin/python のように書く必要がある
642 :
デフォルトの名無しさん:2009/09/03(木) 22:33:38
>>607 /* Line 2 */
# coding: 'Shift_JIS'
これで 通りますが… 何をする Program ですか?
643 :
デフォルトの名無しさん:2009/09/03(木) 22:38:14
644 :
デフォルトの名無しさん:2009/09/03(木) 22:48:02
>>640 読んだのですが?
文字列を入れても Syntax Error に為りますが?
直接 打ち込んでの作業では無いと云う事か…
まずは日本語の構文をマスターしてからのほうが
いいと思うんだ・・・
>>644 shebang を使うのはファイルに保存したスクリプトを
% python scriptname
ではなく
% chmod +x scriptname
% ./scriptname
のように実行したい場合
対話型プロンプトではそもそも必要ない
よくわからなかったら、慣れるまで
* スクリプト内でASCII文字だけ使うようにする
* 実行する際は % python scriptname
* 対話型プロンプトは使わない
そうすれば #!/usr/bin/env python や # coding: sjis を書く必要が無くなる
あとできればメール欄に sage って入れて
647 :
デフォルトの名無しさん:2009/09/04(金) 00:16:11
>>646 本人がレスして居るのでしょうか?
# coding: Shift_JIS
は 始めから省略が出来たと思いましたが…
書く必要性 1: どの coding: を使用して居るかを明確にする為
記憶では二行目は かなり about に書く事が出来る でしたか?
prompt を使用しないですか…
script が まだ入力待ちの状態だったと理解して居りますが?
>>607 「はじめてのpython」で勉強しています
下記スクリプトを実行したとき、
Winで実行する場合とUbuntuで実行する場合とで
結果が違う(Ubuntuの場合はエラーになる)のですが
どうしてですか?
どんなエラーが出たのか書けよ
649 :
デフォルトの名無しさん:2009/09/04(金) 01:05:22
OSが違うからです
>下記スクリプト
???
異なる環境で動かすことを考えているなら、 coding指定は必ず書いておけ。
標準入力も、inputに頼らず、codecs.getreader()で、
エンコード指定して、sys.stdinからファイル入力として扱うほうが、
トラブルは少ないかもしれない。
その変な日本語どうにかしてよ
str = codecs.getreader('UTF-8')(sys.stdin)
str = codecs.getreader('UTF-8')(sys.stdin).read()
っつーかstrをへんこうしたらなにがおこるんだ?
うちゅうのほうそくがみだれる
変更というよりは邪魔して見えなくしてるだけだ
__builtins__.str
py3なら文字コード余裕でした。
659 :
デフォルトの名無しさん:2009/09/04(金) 13:46:11
拙もはじめてのpython3で勉強してます。
本に載ってた下記スクリプトが、WinでもLinuxでも動きませんでした。
本のミスでしょうか?
■エラー内容:
print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
IndexError: list index out of range
■スクリプト:
#!usr/bin/env python
# coding:shift_jis
import sys
def gcd(m,n):
if n>m: m,n=n,m
while n>0:
m,n=n%m
return m
if __name__=='__main__':
print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
660 :
659:2009/09/04(金) 13:47:43
カキコしたらインシデントがなくなってしまいました。修正します。
■スクリプト
#!usr/bin/env python
# coding:shift_jis
import sys
def gcd(m,n):
if n>m: m,n=n,m
while n>0:
m,n=n%m
return m
if __name__=='__main__':
print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
>>660 sys.argv[1] と sys.argv[2] はそれぞれ、
python gcd.py 3 5 (もしくは ./gcd.py 3 5) としたときの 3 と 5 が入ります。
引数をつけずにプログラムを実行されたのではないでしょうか?
662 :
659:2009/09/04(金) 16:00:32
>>661 そのとおりでした。ありがとうございます。
WindowsでPython 2.6.2を使って機種依存文字を処理しようと思ったんですが、
cp932でエンコードして書き出すとき、PythonはNEC選定IBM拡張文字を優先して使うようなんです。
(例えば「ケ」の場合、fbb9ではなくee9d)
できたらIBM拡張文字の方で書き出せるようにしたいんですが、何かいい方法があるでしょうか?
664 :
デフォルトの名無しさん:2009/09/04(金) 16:48:19
>>663 Text 文書を保存して その儘 特定機種で Text を読み込むと どの様に為りますか?
>>> u"ケ".encode("mbcs")
'\xfb\xb9'
>>> u"ケ".encode("cp932")
'\xee\x9d'
666 :
デフォルトの名無しさん:2009/09/04(金) 17:03:13
>>664 plus
否… 表現が悪かった様で… 片方の機種で その文字を Text に保存して
もう片方の機種で その Text を読み込むと どの様に為りますか?
>>665 どうもありがとうございます。
何となく、Windowsではcp932を選べばいいのだと勝手に思い込んでました。
>>666 すみません、勉強不足でよく理解できていないんですが、cp932はWindows以外の環境も考慮してああなっているということでしょうか? もっとよく調べてみます。
668 :
デフォルトの名無しさん:2009/09/04(金) 17:32:22
うにcode か… 素晴らしいな…
>インシデント
u('-')
たまに出てくるけどかわいい
osごとに異なるモジュールをインポートするにはどうしたらいいのでしょうか?
C言語で言うifdefみたいなことがしたいのですがうまくいきません・・
import sys
sys.platform
>>675 ありがとうございます
sys.platformで取り込むモジュールを振り分けられました
importは先頭に書くものだと思っていました。。
677 :
デフォルトの名無しさん:2009/09/06(日) 00:20:31
普通はtry: import hoge except ImportError: import fugaみたいにするんじゃなかったっけ?
異なるシステムでもImportErrorでない書き方できるからsys.platform使う方が無難
sys.platformというのは初耳だわ
os.nameよりも詳しいのかな
platformモジュールとか初めて知った
>>680 そういえばそんなのもあったね。程度にしか使われてないよな
sysはビルトインの標準モジュールだから絶対に読み込めるという理由もあるかも
osはパス通ってないとimportできないし
682 :
デフォルトの名無しさん:2009/09/06(日) 18:33:13
スクリプトでテキストを立ち上げたり、IEを起動させたりは可能ですか?
yes you can
いろいろ試したんだけどwindowsでparamikoが使えない。
これは使えないでOK?
Windowsでparamikoつかえるよ?
bazaarなんてWindows用のデフォルトのsshクライアントがparamikoだよ。
>>685 俺にとってあんたは神様だ。
設定しかたを教えてくれ!
>>685 1. paramiko-1.7.5.zip をダウンロード
2. 適当なディレクトリに解凍
3. コマンドプロンプト開いて 2 のディレクトリに cd で移動する
4. python setup.py build
5. python setup.py install
これを順にやっていって、どこで引っかかるか教えて。
今やってみたら、依存ライブラリのpycryptoが手元の環境でインストール済みだったから
すんなりインストール終わった。
ひょっとしたらpycryptoインストールするときに拡張モジュールのコンパイルが必要かも
知れないから、Pythonのバージョンに対応するコンパイラをもっていない場合は
http://mirror.cameronbergh.com/pycrypto-win/ から対応するパッケージをダウンロードするといいよ。
親切にありがとう!
paramiko-1.7.4でやったらすんなりとおった。
689 :
デフォルトの名無しさん:2009/09/10(木) 16:31:07
n(適当な自然数)次元の実数値関数fを定義するときに
f = lambda x : (x**2).sum()
とか書いてあるコードがあって、意味がわかりません。
lambda式がわからないのではなくて、後ろについてる.sum()がわかりません。
インタプリタで上記定義をして、f(x=1.0)とかf(x=[1.0,2.0])とかやってみると、
sum()についてのattribute errorが出ます。
よろしくお願いします…。
xがnumpyのarrayなんじゃない?
691 :
689:2009/09/10(木) 16:43:10
>>690 それでした!
どうもありがとうございました。
BitTorrent以外でpythonで実装されたクライアントソフトあるいはスタンドアローンソフトって何がありますか?
砕けた言い方をすると、pythonで実装されていて拡張子がexeなそれなりに有名なソフトって何がありますか?
BTはPythonやめたんじゃなかったっけ?
拡張子がexeである必要がよくわからないけど、
bzr, mercurial といったVCSもそうだし、
Editra, Dropbox, TaskCoach, 他にもいろいろあるぞ。
LinuxにいったらさらにPython製デスクトップアプリだらけ。
yum
とりあえず2chviewerでも作って公開すれば有名になれるんかな
698 :
デフォルトの名無しさん:2009/09/14(月) 05:56:06
701 :
デフォルトの名無しさん:2009/09/15(火) 21:14:28
wikipediaのPythonのページに
「多くの異なる言語で書かれたモジュールをまとめるグルー言語」
とありますが、これは複数のプログラミング言語で書かれたモジュールを
まとめられるということでいいのでしょうか?
ワロタ
lambda : 1 + 2
が良くて
lambda : print "hoge2"
がダメな理由って何故ですか?
lambda式には式(expression)しか書けないから。printは文(statement)。
lambda : sys.stdout.write("hoge2\n")
707 :
704:2009/09/24(木) 04:34:27
ありがとう
・・・Pythonってそう言うのを区別するのか・・・先は長そうだ orz
python3ではprintは関数だよ^^
Pythonで
print "x=#{x}\n" if DEBUG (Rubyの例)
みたいに1行で完結させる書き方って可能ですか?
同じ物をPythonで書くと
if DEBUG:
print "x="+str(x)
となると思いますが出来ればデバッグメッセージごときに2行は使いたくない・・・
if DEBUG: print "x="+str(x)
だが、logging使え。
if DEBUG:
print "x="+ str(x)
logging.logger
714 :
デフォルトの名無しさん:2009/09/24(木) 13:37:14
716 :
デフォルトの名無しさん:2009/09/24(木) 13:53:55
ありがとござます
PILのpython3対応はまだか!
Python的には字下げだろう。
720 :
デフォルトの名無しさん:2009/09/27(日) 04:43:59
一度定義した変数を消去することは可能ですか?
python3.0で、
print = 5
とするとprintという名前の変数に5が代入されたのですが、
そのあと元のprintという関数を使いたい場合はどうすればよいのでしょうか?
__builtins__.print
もしくは
del print
722 :
720:2009/09/27(日) 05:15:58
urllib2でkeep-alive出来ない。助けて
policy = cookielib.DefaultCookiePolicy( rfc2965=True, strict_ns_domain=cookielib.DefaultCookiePolicy.DomainStrict)
cj = cookielib.LWPCookieJar(cookie_jar_path, False, policy)
cjhdr = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cjhdr, RefererAddHandler())
opener.addheaders = [
('User-agent', 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)'),
('Connection','Keep-Alive')
('Keep-Alive'','300')
]
r = opener.open( uri )
rinfo = r.info()
for key in rinfo.keys() :
print h, rinfo[key]
## Referer を Autoでつける為のハンドラ ########
class RefererAddHandler (urllib2.BaseHandler) :
def http_request(self, req) :
req.add_header("Referer", req.get_full_url())
return req
---------------------------
firefoxなんかでレスポンスヘッダを見ると、
Connection: Keep-Alive
と出てる。でも上記コードでは
Connection: Close
になる。なにか足りないですか?
724 :
723:2009/09/27(日) 11:26:39
訂正:
('User-agent', 'User-Agent: Mozilla/5.0 〜略)
の箇所は
('User-agent', 'Mozilla/5.0 〜略)
HTTPヘッダでkeep-aliveするようにしても
urllib2がそれを想定してないからうまく動かなかったような
ソース読んで絶望した記憶がある
urllib2 keep-alive でぐぐってみるといいんじゃないか
726 :
723:2009/09/27(日) 11:34:14
727 :
723:2009/09/27(日) 11:36:47
728 :
723:2009/09/27(日) 12:03:05
おまいらおちつけ
>>723のコードはPython2系列だ
733 :
723:2009/09/27(日) 23:14:59
みんな、アドバイスありがとう!
python 2.4 に拘っている訳ではないんだ。
v3.0に上げて
>>730のurllibとhttp.cookie_jarでやってみる。
>>732 ありがとう!参考にさせてもらうぜぃ
734 :
723:2009/09/28(月) 01:08:16
python3.1 ってif,for,printが式になってて、今まで書いてたコードが動かねーおwww
なんかLISPっぽいね。
2.6と変わりすぎててわらってしまったw
735 :
723:2009/09/28(月) 01:13:56
ひとりごと多くてすまん
>>734は気にしないでくれ。勘違いだったお
Twitterでやれ
Tkinterについて質問です
from Tkinter import *
root = Tk()
sub_win = None
def button_callback(event):
global sub_win
print 'button down'
sub_win.destroy()
def message_window():
global sub_win
sub_win = Toplevel()
button = Button(sub_win, text='window close')
button.pack()
sub_win.bind('<Escape>', button_callback)
button.bind('<Button-1>', button_callback)
Button(root, text='about', command=message_window).pack()
root.mainloop()
以上のようなコートなのですが、ESCキーを押してもコールバック関数が呼ばれません
何故でしょうか?よろしくお願いします
フォーカスの合ってるウィジェットにしか
イベントは送られない。
739 :
737:2009/09/28(月) 16:00:47
レスありがとうございます
>>738 >フォーカスの合ってるウィジェットにしか
>イベントは送られない。
もうちょっと単純にしてみて
from Tkinter import *
root = Tk()
def esc_down(event):
print 'esc key down'
root.destroy()
button = Button(root, text='close')
button.pack()
button.focus_set()
button.bind('<Button-1>', esc_down)
button.bind('<Escape>', esc_down)
root.mainloop()
こういう事ですよね?
これの「button.bind('<Escape>', esc_down)」を「root.bind('<Escape>', esc_down)」
としてもきちんとコールバック関数は呼ばれます。
上のコードのTkをToplevelにしてもESCキーのイベントの補足は成功するようです
>>737みたいな形にするとうまく行かないです。よろしくお願いします
UTF-8にエンコードする方法を教えて下さい。
例えばx = "あいうえお"のときyに"%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A"を代入したいんですが
どのようにすればいいでしょうか?
元の文字列がShift_JISだと仮定
import urllib
x = 'あいうえお'
y = urllib.quote(x.decode('sjis').encode('utf8'))
742 :
740:2009/09/28(月) 20:07:56
>>737 好きなのをどうぞ
- 2つ目のウィンドウをクリックしてからEsc押す
- sub_win.focus_set()
- root.bind('<Escape>', button_callback)
複数行の文字列xからどうすれば中身を1行ごとに分割して1つずつリストに代入させることが出来ますか?
複数行の文字列をどういうデータ形式で持っているのかによる。
"abc\ndef\nghi".split("\n")
747 :
737:2009/09/29(火) 03:59:51
>>743 レスありがとうございます
2枚目のウインドウは作っただけではフォーカスは動かないのか・・・il||li ○| ̄|_
真ん中の方法を使わせて貰いました
Tkinterについての質問です。
何らかのイベントが起きたときにフレームの内容を
丸ごと入れ替えるようなプログラムはどの用にする
ば書くことができますか?
virtualenvとpip
質問です。
環境はvine5.0 Python 2.5.4 です。
>>> from turtle import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named turtle
と出ました。
turtleが入ってないということでしょうか?
またその場合どうすればいいのでしょうか?
どうかご教授お願いします。
Tkinterが入ってないんじゃないか
vine tkinter でぐぐってみて
>>751 できました!
ありがとうございました!
os.startfileも、subprocess.Popenに置き換えたほうがいいのかな。
いちいち関連付けを調べなくてもいいもなら
それでおk
ふと思ったんだけど、Pythonてドイツ語だとピュトンみたいな読みになるの?
ぴゅちょん
757 :
デフォルトの名無しさん:2009/10/03(土) 22:39:25
webからの情報取得とメール(これはモジュール利用)を使ってプログラム開発を考えておりますが
アドバイスをお願い致します。
・為替のレートを取得(特に決めていないが、リアルタイムレート)
・特定のレートになったところでメール通知
これなんて簡単でしょうか?
webからリアルタイムに情報を取得するには?
あんまPythonに関係ないような。
HEADで定期的にポーリングで間に合う?
webで取れるのは殆ど20分お倉だけどそれで良いの?
760 :
757:2009/10/03(土) 22:58:51
>758
pythonしかわかりません(涙
勉強してみます。
>759
リアルタイム希望です。
urllibだとリアルタイムはできないですよね?
そういう問題じゃないし
763 :
デフォルトの名無しさん:2009/10/04(日) 14:24:38
Tkinterで動きのある表示をしたいのですが,
それほど重要な表示でもないので「暇な時」に
描画を更新したいと思っています.
「暇な時にコールバックして」というような
コールバックの枠組みは Tk にあるのでしょうか?
今は強引にループを回してますが,それだと他の処理に
対して影響が出るし(主処理はmultiprocessingで
いくつかのプロセスに投げてます),かといって
ウェイトを入れるとしても動的に調整したいし・・・
gtkを使うときには
import gobject
gobject.idle_add(update_graph)
のようにしています.
764 :
763:2009/10/04(日) 14:54:21
manager = pylab.get_current_fig_manager()
def run(*args):
shori()
manager.window.after(50, lambda : manager.window.after_idle(run))
こんな感じにしてみました.
単純なループよりは穏やかになりました.
765 :
デフォルトの名無しさん:2009/10/04(日) 23:44:48
cygwinでpyファイルを実行しようとすると
from pylab import *
No module named pylab
とエラーが出てしまいます。
ipython で
from pylab import *
としてもエラーが出ないので、Matplotlibはインストールされてるはずなのですが・・・。
どうしたらいいしょう?
>>765 Cygwin内のPython(/usr/bin/python)にインストールされてないのでは
767 :
デフォルトの名無しさん:2009/10/06(火) 01:50:22
コードから実行中のPythonのバージョンを得るにはどこから取り出せばいいでしょうか?
レンタルサーバのOSにインストールされていてCGIとして一応使えるようなので
使ってみたいのですが、わりと古いバージョンのようなので、
(webから)確認したいと思っています。
RUBY_VERSIONのような定数を期待したのですが、どうにも・・・
import sys
sys.version
import cgi
cgi.test()
770 :
767:2009/10/06(火) 02:10:04
>>768-769 確認できました!
バージョンは2.3.4でした。もっとずっと古い予感がしてたので少し安心・・。
ありがとうございました。cgi.test()の方も大助かりです!
2.3.4は古い
日本語codecすらない
773 :
デフォルトの名無しさん:2009/10/06(火) 18:54:48
web上で直接Pythonのコマンドが入力出来て反応が帰ってくる
サイトが有れば教えてください
Rubyとかは見たことある気がするのですが
urlからファイル名を取り出したいのですがurlparse.urlsplit(url).path.split('/')[-1]しか方法はありませんか?
os.path.basename(url)
URLのカオスっぷりったら半端ない
ファイル名で終わってるとは限らないよw
ウリ
782 :
773:2009/10/07(水) 06:15:51
>>774 遅くなりましたが ありがとうございます
TkinterのLabelに貼り付けた画像を親Widgetの大きさによって
拡大縮小させるにはどうすればいいですか?
expand
785 :
デフォルトの名無しさん:2009/10/08(木) 06:22:19
テキストファイルに保存した
◯◯.py
と言うファイルを
IPythonで実行することは出来るのでしょうか?
出来るのならその方法を教えてください
importすりゃいいんじゃね?
787 :
デフォルトの名無しさん:2009/10/08(木) 12:57:12
# -*- encoding: utf-8 -*-
import sys
import re
#数字四桁が入ったキーワードは役に立ちませんので検出して飛ばします。
year = re.compile("[0-9]{4}")
#驚くべきことにはてなキーワードには%00というキーワードがありますが、
#これがcsvとして提供されているダンプではヌル文字になっているのでシステム制御文字を非許可にします。
ng = [chr(i) for i in range(0,32)]
def main():
for x in sys.stdin:
if re.search(year,x):
continue #日付スキップ
k = x.split("\t")[1].strip()
if len(k) < 2:
continue #一文字スキップ
for word in ng:
if word in k:
continue #システム制御文字スキップ
k = k.lower() #MeCabはケースセンシティブなので小文字に統一して辞書作成
cost = int(max(-36000, -400 * len(k)**1.5)) #コストについては後述
print "%s,0,0,%s,名詞,一般,*,*,*,*,%s,*,*,はてなキーワード," % (k,cost,k) #0については後述
if __name__ == '__main__':
main()
789 :
デフォルトの名無しさん:2009/10/08(木) 15:55:39
for x in range(3):
pass
みたいな感じでループを回すのに range を使っているんですが,
Eclipse + PyDev 1.5 では x が Unused Variable だって
警告が出ます.無視すればいいんですが,なんか気持ち悪い.
単純にループを回す時こんなことするのはアホですか?
>>789 "x"のかわりに"_"をつかうとか、Ctrl+1で警告を消すとか
ループの中身がpassだけのときって最適化されてループがなくなったりはしないの?
バイトコードを見る限り、最適化されてない。
イテレータの中で何かやってるかもしれないので
安易に削れないのかもしれない。
できる
がんがれ
>>794 #このようにしてもできません
from Tkinter import *
root = Tk()
p = PhotoImage(file = "hoge.gif")
Label(root,image = p).pack(expand=True,fill=BOTH)
root.mainloop()
796 :
デフォルトの名無しさん:2009/10/08(木) 23:49:26
from Tkinter import *
import PIL.Image, PIL.ImageTk
EDGE = [-6, -4, -2][1]
class Root(Tk):
def __init__(self):
Tk.__init__(self)
self.p = PIL.Image.open('hoge.gif')
self.i = PIL.ImageTk.PhotoImage(self.p)
self.l = Label(self, image=self.i, relief=RAISED)
self.l.pack(expand=True, fill=BOTH)
self.l.bind('<Configure>', self.change_size)
def change_size(self, ev):
(w, h) = (ev.width + EDGE, ev.height + EDGE)
self.i = PIL.ImageTk.PhotoImage(self.p.resize((w, h)))
self.l.configure(image=self.i)
print 'resized %d %d' % (w, h)
Root().mainloop()
縁の幅を間違うと勝手にサイズが・・・orz
>>796 ありがとうございます。
縁の幅と言うのはどこを指しているんですか?
798 :
デフォルトの名無しさん:2009/10/09(金) 16:24:51
wxPythonの話題はここでいいですか?
wxPythonにおけるコントロールやパネルという用語の概念が整理できていません
Appは複数のFrameを抱えることができて
FrameはPanelを持ちPanelはControlを持つということでしょうか?
中身が全て半角英字である正規表現はどー書けば良いのでしょうか?
[a-zA-Z]+
こんなん?
^[a-zA-Z]*$
それは空文字列にもマッチするぞ
GUIを使うと関数だらけになってコードが見にくくなる・・・
Tkinterも例外じゃない・・・(TT
wxPython + XRCed で快適生活
コンストラクタをオーバーロードしたいんだけど、どうやればいい?
Baseクラスを継承してて、ctorの引数をそのままBaseのctorに渡したい
def __init__( self, argv4Base ):
Base.__init__( self, argv4Base );
def __init__( self ):
Base.__init__( self );
こんなことをやりたいんだけど、
def __init__( self, *argv ):
if len(argv)>0: Base.__init__( argv[0] );
途中で書き込んだ。続き。
def __init__( self, *argv ):
if len(argv)>0: Base.__init__( self, argv[0] );
else: Base.__init__( self );
なんてctorの中でifで切り分ける方法以外ない?
メタプログラミング使うようなcoolな方法おしえてくだしあ
**kwargs
808 :
デフォルトの名無しさん:2009/10/10(土) 12:54:24
>>808 コードがお望み?
import re
def isallalpha(s):
return re.match(r'^[a-zA-Z]+$', s) != None
ついでに正規表現じゃなかったら
def isallalpha(s):
return all([ c.isalpha() for c in s ])
関数呼び出しの中で直接内包表記を使えるぜ。
def isallalpha(s):
return all(c.isalpha() for c in s)
811 :
デフォルトの名無しさん:2009/10/10(土) 19:28:09
コードの中で次のような順番で書くとNameErrorになります。
some_method()
def some_method:
pass
このときCのプロトタイプ宣言のような書式はありますか?
それとも先に関数定義してから
if __name__ == '__main__':
some_method()
のように書くのがPython流でしょうか。
習慣的に、短いテストコードのようなときなど、関数定義を後の方にしておきたい気もして・・・
よろしくお願いします。
>>811 >>Cのプロトタイプ宣言のような書式
ない
>>先に関数定義
してから実行するのが普通
doctest.testmod() とか調べるといいよ
813 :
812:2009/10/10(土) 19:52:50
>>812 ありがとうございます。開発ツールも標準でいろいろ揃ってるんですよね。
だんだん試したいと思います!
814 :
デフォルトの名無しさん:2009/10/10(土) 21:28:20
質問です。
私は9月頃から『みんなのPython改訂版』(初版)で習得中の初心者です。
14章のToDo管理アプリケーションが起動しないのですが、
そのままのコードで起動した人はいますか?
(一瞬だけインタラクティブシェルが起動、エラー表示はありません)
また、何が起動しない原因と考えられますか?
初歩的な原因かもしれません。PATHは設定してます。
環境は、WindowsXP Python2.6 Eclipse3.5 Pydev1.4です。
ご回答よろしくお願いします。
スクリプトファイルです。
chapter14.zip (todoapp.py todoitem.py todocontainer.py)
ttp://www1.axfc.net/uploader/Sc/so/44301 キーワード: python
>>811 class Test(object):
def __init__(self):
self.some_method()
def some_method(self):
pass
Test()
>>814 root = Tk()
frame = ToDoApp(root)
frame.createwidgets()
root.mainloop()
入力ミスってるっぽいので、あとは自分でよろ。
>>816 ありがとうございます。
本にそのコードは書かれていませんでした。
後で追加します。
818 :
デフォルトの名無しさん:2009/10/11(日) 09:55:00
conn=open('2mega.txt')
data=conn.read()
save=open('save.txt', 'a+')
for line in data.splitlines():
save.write(line.decode('sjis').encode('utf-8'))
print line.decode('sjis').encode('utf-8')
文字コード変換を書いてみたら、なかなか終わらず
おかしいなとは思ったのですがそのまま一日放置
今日起きて処理を止めて確認してみるとそこには
12Gigaのテキストファイルがありました…
save.write(data) で書き込もうとするとハング状態になるから
ジェネレータで回して書き出す方針でやろう => なぜか無限ループorz
正しく書くにはどうかけば良いのでしょうか?
819 :
デフォルトの名無しさん:2009/10/11(日) 10:26:26
conn=open('2mega.txt')
data=conn.read()
for line in data.splitlines():
print line.decode('sjis').encode('utf-8')
うまくいく時とうまくいかない時があるみたいだ
というか上手くいってもこれだと順番に書き出せないのか…
infile=open('2mega.txt')
outfile=open('save.txt', 'a+')
for line in infile:
outfile.write(line.decode('sjis').encode('utf-8')
import codecs
infile=codecs.open('2mega.txt', encoding='sjis')
outfile=codecs.open('save.txt', 'a+', encoding='utf-8')
outfile.writelines(infile)
2MBのファイルの中身を読み込んでまるごと
decode -> encodeしたぐらいじゃハングしないだろう
いちいち標準出力に吐いてるから遅かったとかじゃない?
出来上がったファイルが12GBなのは謎
Python2.6/XP/512MBで何も考えずにreadしたら400MBくらいでMemoryError吐いたなぁ
どーしてもオンメモリで処理しなきゃいけないとき以外はイテレータ回すべきだね
823 :
デフォルトの名無しさん:2009/10/11(日) 15:36:30
MemoryError の前になんか予兆を検出できないもんかねぇ
出来た気がする
825 :
デフォルトの名無しさん:2009/10/11(日) 17:26:26
なんつー曖昧な…
エラー:メモリが足りないかもしれないけど足りるかもしれません。
>>> for x in range(10000000):
... pass
1)rangeの数字が充分小さいとき->無事実行完了
2)rangeの数字が充分大きいとき->実行前にMemoryErrorですぐに終了
3)rangeの数字がちょっと大きいとき->時間はそれなりにかかるがちゃんと実行されて終了
4)rangeの数字が限界ぎりぎりの大きさのとき->swap起こしまくってハングアップw
(辛うじてリモートからsshでkill出来たので助かった)
4)が起きないようにしたいんだけど
828 :
デフォルトの名無しさん:2009/10/11(日) 18:17:18
直接OSのシステムコール呼び出せばスラッシングって検出できる?
vmstatとかwindowsならパフォーマンスカウンタでわかるから
当然出来るのか…
自分ならめんどいからThreadつくって動かして見込んだ時間に終わらなければkillするな
>>830 xrangeは知ってるけど
問題の目的と違うから
っつーか空気嫁w
所持期目的がわからない
要領を得ない質問して空気嫁とか
思わず吹いてしまったよ
834 :
デフォルトの名無しさん:2009/10/12(月) 11:36:56
wxPython にはHTMLのレンダラが付いてますがこれは何ベースなんでしょうか?
WindowsでIEのエンジンを使って表示させることはできますか?
demo の ActiveX_IEHtmlWindow.py が IE 使ってる
836 :
デフォルトの名無しさん:2009/10/12(月) 16:13:52
wxPython、PyGTK、Tkinter、PyQt
GUIってどれ使えばいいかな?
PyQtでおk
PyScripterでUTF-8(BOM無し)の.pyファイルを開くと、ソース内の日本語部分が文字化けしてしまいます。
PyScripterのバージョンは1.9.9.7、エディタ設定で日本語フォントの指定・文字セットに日本語の指定はしてあります。
一通りググってみたのですが解決には至りませんでした。
既知の現象でしたらアドバイス頂けませんでしょうか。
スレ違いでしたら申し訳ありません。
839 :
デフォルトの名無しさん:2009/10/12(月) 16:41:11
え〜
俺は wxPython がすき
>>838 ファイルの頭に # -*- coding: utf-8 -*- はある?
PyQt > wxPython > Tkinter > PyGTK
俺は wxPython がすき
>>840 申し訳ありません。言葉が足りず語弊がありました。
まず扱っているのはPython3.0で、更に.pyファイルを実行した時の日本語表示に関する問題ではなく、
エディタ内でのファイル読み込み->ソースコード表示時、文字化けが発生するという問題です。
恐らくUTF-8(BOM無し)のファイルを開くときの文字コード認識がおかしいのだと思いますが、
やはりこれはPythonというよりPyScripterの問題の様なのでスレ違いですね…
>>840 仰るとおりファイル先頭に文字コード宣言を付加したら、ちゃんと表示されました。
通常ならエディタはファイル自体の文字コードから自動判断してくれるものだと考えていましたが、
PyScripterはファイルの文字コード判断方法が特殊なのですね…
ありがとうございました。
>>843 特殊というか、Pythonのやり方と同じにしただけでしょ。
Python以外のファイルは自動判定するとヘルプに書いてある。
>>844 やっぱ標準モジュールは強いって事でTkinter
まあwxの方が楽だけど
xulrunner使いたいけどビルド環境整える時点で面倒になった
>>843 UTF-8は自動判定は難しいよ。
だからMSはBOMを付けてるんだよ。
>>846 楽ってのはwxの方が最初から色々用意されてるって意味?
>>848 VisualStudioとかDelphiとか使ったことある人にはwxは触りやすい
Tkinterはtcl/tk使ったことないと取っつきにくい気がする
windowsでpy2exeでexe化するとき
wxPythonだとすっきりまとまるのに
Tkinterだとサブディレクトリが出来て使っていない色んなモジュールまでいっぱい付いてくるのが嫌
ほんとユニコード仕様はうんこすぎる。
理由を示さずたたいてるのは大抵Ruby厨
rubyって最近まで$CODE代入するしかなかったんだよね
やっと
# -*- coding: utf-8 -*-
って書けるようになった
854 :
デフォルトの名無しさん:2009/10/13(火) 14:25:06
why wxgtk is used in dropbox client?
DropBoxクライアントはwxPythonだと思ってたけど、wxgtkだっけ?
wxWidgetsのいいところは、GPLでもLGPLでもないところだね。
exeひとつにまとめても、クローズにしたい部分のソースはクローズのままにできる。
Tkinterのタイトルバーを非表示にすることって可能ですか?
857 :
デフォルトの名無しさん:2009/10/14(水) 15:48:56
ほかの人の書いたコードをメンテナンスしています
リストからのアイテムの削除で del 文を使うとき
(おそらくそう意図していると思われる)
del mylist[1]
じゃなくて
del (mylist[1])
という書き方に出会ったんですが
効果は同じでしょうか?
文なのに () を付ける意味が分からん…のですが
関数だと思ったんだろ
Rubyのpに相当する関数/メソッドってありますか?
非可視コードを確認するのにいちいちファイルに書き出すのは
非常にめんどくさいのですが・・・
p = print
p 3*9
863 :
デフォルトの名無しさん:2009/10/15(木) 05:56:45
Python用のプロファイラというとどんなものがあるのでしょうか?
できれば PyDev から便利に使えるとありがたいのですが・・・
クロールは控えめになw
雑談やノイズをスルーする機能と
ぬるぽにがっする機能をおながいします
869 :
デフォルトの名無しさん:2009/10/16(金) 13:11:02
ネットワークを利用するアプリケーションで
twisted.internet.reactor.registerWxApp
をリアクタとして使っているのですが
Qtを対象としたイベントループ兼リアクタはあるのでしょうか?
PythonとTwisitedが絡んでるのにQtスレ行けって鬼畜すぎる
872 :
デフォルトの名無しさん:2009/10/16(金) 13:40:04
>>871 QtスレいくとwxPythonスレに行けとかいわれそうで・・・
一つのリアクタでやらずに
別々のスレッドでやってもいい気もしてきましたが…
まぁあるものなら使ってみようか
878 :
デフォルトの名無しさん:2009/10/16(金) 15:05:23
Qtはシグナルによるイベントの伝播
wxPythonはコールバックによるイベント処理
ってことだと思うのですが
どちらの方がデバッグしやすいものなんでしょうか?
特に大規模なGUIになってきた場合
Qt4reactorくらいなら自分で書いても大したことが無いような気がしないでもない
Pythonのクラス定義を下記の様にして、valueアトリビュートを表示するとエラーになってしまいます。
>>>class□Myclass:
def□_ini_(self):
self.value = 0
print "make"
□は半角スペースを表し、インデントで次の行に行く際はエンターを一回押しています。
>>>i = Myclass()
>>>i.value
AttributeError: m instane has no attribute 'value'
まずi = Myclass()を実行しても"make"という行が出てきません。
次の行のi.valueを実行すると上記のエラーがでてしまいます。
クラス定義の仕方で間違っている個所があればお教えください。
よろしくお願いします。
_ini_
↓
__init__
Windows版のpython2.6にos.mknodが入ってないのはなぜ?
しょうがないからos.systemで代用したが。
>>882さん
できました! ありがとうございました!!
885 :
デフォルトの名無しさん:2009/10/16(金) 19:17:11
pythonからmysqlにinsertしたいのですが、どう書けばいいですか?
ググりまくったんですがセレクトしか出てこなくて。
ぼくらを乗せてしゅぽしゅぽしゅぽぽ
すいません質問です。御助言をお願いします。以下はWindows Vista SP1 のコマンドプロンプト上で行いました。
http://pyinline.sourceforge.net/をインストールし、ここに書いてあるサンプルをexample.pyとして
実行しようとしましたら、エラーとなりました。
----example.pyここから
import PyInline, __main__
m = PyInline.build(code="""
double my_add(double a, double b) {
return a + b;
}""",
targetmodule=__main__, language="C")
print my_add(4.5, 5.5) # Should print out "10.0"
----ここまで
C:\src>python example.py
running build
running build_ext
Traceback (most recent call last):
File "C:\src\example.py", line 7, in <module>
targetmodule=__main__, language="C")
File "C:\Python25\Lib\site-packages\PyInline\__init__.py", line 38, in build
return b.build()
File "C:\Python25\Lib\site-packages\PyInline\C.py", line 45, in build
self._compile()
File "C:\Python25\Lib\site-packages\PyInline\C.py", line 265, in _compile
raise BuildError(e)
PyInline.BuildError: error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.
そのためbuildフォルダと、site-packagesフォルダにできたファイルを削除してから、(続きます)
そのためbuildフォルダと、site-packagesフォルダにできたファイルを削除してから、
C:\src\PyInline-0.03>python setup.py build -c "mingw32"
C:\Python25\lib\distutils\dist.py:247: UserWarning: 'licence' distribution optio
n is deprecated; use 'license' warnings.warn(msg)
running build
running build_py
creating build
creating build\lib
creating build\lib\PyInline
copying PyInline\C.py -> build\lib\PyInline
copying PyInline\c_util.py -> build\lib\PyInline
copying PyInline\__init__.py -> build\lib\PyInline
C:\src\PyInline-0.03>python setup.py install --skip-build
C:\Python25\lib\distutils\dist.py:247: UserWarning: 'licence' distribution option is deprecated; use 'license' warnings.warn(msg)
running install
running install_lib
creating C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\C.py -> C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\c_util.py -> C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\__init__.py -> C:\Python25\Lib\site-packages\PyInline
byte-compiling C:\Python25\Lib\site-packages\PyInline\C.py to C.pyc
byte-compiling C:\Python25\Lib\site-packages\PyInline\c_util.py to c_util.pyc
byte-compiling C:\Python25\Lib\site-packages\PyInline\__init__.py to __init__.pyc
running install_egg_info
Writing C:\Python25\Lib\site-packages\PyInline-0.03-py2.5.egg-info
として、再びサンプルを実行したところ、上記と同じエラーになってしまいました(続きます)
889 :
887:2009/10/16(金) 19:53:54
実行時のフォルダに新しいフォルダが作られ、そこに
_PyInline_a5843fcd5b05a69bb7ab356b82740227.c
----ここから----
// Generated by PyInline
// At Fri Oct 16 19:33:58 2009
#include "Python.h"
/* User Code */
double my_add(double a, double b) {
return a + b;
}
static PyObject *
_a5843fcd5b05a69bb7ab356b82740227_my_add(PyObject *self, PyObject *args)
{
(後略)
----ここまで----
のようなファイルが作られていました。
環境は、
\src>mingw32-gcc --version
mingw32-gcc (GCC) 3.4.5 (mingw-vista special r3)
です。またCygwinは入ってますがVisual Studioはインストールされておりません。
Pythonは2.5.4です。
長々とスレを汚してしまい申し訳ありません。
>>887-889 PyInline.build() の引数に distutils_args=["-c", "mingw32"] を加えてみたらどうかな。
>>891 手段が目的なんだ、目的のための手段じゃないんだ
893 :
887:2009/10/17(土) 11:15:55
みなさんレス有難うございます。
>>890さん
成功しました!
running build
running build_ext
building '_PyInline_a5843fcd5b05a69bb7ab356b82740227' extension
creating build
creating build\temp.win32-2.5
creating build\temp.win32-2.5\Release
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python25\include -IC:\Python25\PC -c _PyInline_a5843fcd5b05a69bb7ab356b82740227.c
-o build\temp.win32-2.5\Release\_pyinline_a5843fcd5b05a69bb7ab356b82740227.o
writing build\temp.win32-2.5\Release\_PyInline_a5843fcd5b05a69bb7ab356b82740227.def
creating build\lib.win32-2.5
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.5\Release\_pyinline_a5843fcd5b05a69bb7ab356b82740227.o build\temp.win32-2.5\Release\_PyInline_a5843fcd5b05a69bb7ab356b82740227.def
-LC:\Python25\libs -LC:\Python25\PCBuild -lpython25 -lmsvcr71 -o build\lib.win32-2.5\_PyInline_a5843fcd5b05a69bb7ab356b82740227.pyd
10.0
PyInline自体のビルドではなくてPyInlineが行うビルドが問題になっていたという認識でいいのでしょうか。
>>891さん、
>>892さん
Cの簡単なテストに使おうかとおもいましたが、
ステップ実行して身の丈を思い知らされました・・
distutilsなど、もっと勉強しようとおもいます。
894 :
デフォルトの名無しさん:2009/10/17(土) 13:59:49
pythonで時間差を置いて処理をしていきたいのですが、何かいいアイディアはありますか?
Tkinterで「ボタンを押すとファイルを開くダイアログが表示される」と
いうよくあるファイル選択画面をを作りたいのですが、
http://d.hatena.ne.jp/Cassiopeia/20070819/1187479725にある例文を 無理矢理関数にしてボタンを押したときの処理にその関数を指定しても、
関数は呼び出されるものの、関数内の tk = Tkinter.Tk() が処理されません。
初心者的な内容かもしれませんが、アドバイス頂けませんでしょうか。
from Tkinter import *
from tkFileDialog import *
import Tkinter
import tkFileDialog
root = Tk()
root.option_add("*font", ("FixedSys", 14))
root.title("テスト")
def load_file():
tk = Tkinter.Tk()
tk.withdraw() # 小ウィンドウを表示しないようにする。
args = { "initialdir" : "/home/",
"filetypes" : [("テキストファイル", "*.txt")],
"title" : "テスト"
}
botton01 = Button(root, text = "ボタン",command = load_file)
botton01.pack()
root.mainloop()
>>895 釣られたの鴨試練が
def load_file():
args = {
'initialdir': '/home/',
'filetypes': [('テキストファイル', '*.txt')],
'title': 'テスト'}
filenames = tkFileDialog.askopenfilenames(**args)
print 'selected: [%s]' % ','.join(filenames)
#※ load_fileの中で
# tk = Tkinter.Tk()
# tk.withdraw() # 小ウィンドウを表示しないようにする。
#は不要
#※ tkFileDialog.askopenfilenamesを呼ぶのを忘れている
899 :
895:2009/10/17(土) 21:52:29
>>897 >>898 ありがとうございます。
>>898で教えていただいたやり方でできました。ありがとうございます!
まだまだ勉強したてで、根本的な理解が足りないようなので勉強しなおしてきます。
900 :
デフォルトの名無しさん:2009/10/18(日) 21:53:24
オライリーのpythonクイックリファレンスってどうですか?
kuso
902 :
デフォルトの名無しさん:2009/10/18(日) 22:10:13
本のいいリファレンスってないですかね?
>>903 ありがとう。
読めなくもないがめんどいw
py2exeはPython3.x系に未対応らしいですが、
Python3.x系のソースコードをWindowsの実行ファイル形式に変換する方法はありますか?
py32exe
pyinstaller
うがー日本語を使うなと言わんばかりの糞仕様は何とかならんのか・・・
ただでさえ文字コードがらみはめんどくさいのにencode/decodeでコードが冗長になるし
さらに変換を間違うと表示が化けるどころか例外で止まるってもう勘弁してヽ(`Д´)ノ
デバッグがめんどくさいPython組み込み系のコードとかコンソールに何も出したくなくなる
>表示が化けるどころか例外で止まる
コンソールじゃなくてログファイルに
codec 経由せずに出すのが正解
ログは tail -f で見てれば良い
ちなみに使ってる Python のバージョンに寄ってかなり違うからね
何も検出せずにただ文字化けするよりも、きちんと不正な処理を
検出してエラーを出してくれるほうが何倍も楽だと思うんだけど。
DSでpython動かしてるひといませんか?
forとかifがどうやってもエラーになってしまう
改行コードの問題じゃないかとエスパーしてみる。
もっともCPythonはCRLFでもLFでも行けたはずだが。
:
915 :
デフォルトの名無しさん:2009/10/20(火) 15:54:20
self.combo = XRCCTRL(self, 'Combo')←wxComboBox
とした場合、self.comboのchoicesにlist=["a","b","c"]を設定することは出来ますか?
#self.combo.Clear()
self.combo.AppendItems(["a","b","c"])
917 :
915:2009/10/20(火) 16:50:20
918 :
915:2009/10/20(火) 18:40:19
すいません、もう一つだけ質問させてください。
同じくwxComboBoxのchoicesにlistを追加することについてですが
listに日本語が含まれた瞬間デコードエラーが出てしまいます。
日本語の追加は出来ないのでしょうか?
unicodeでおk
920 :
915:2009/10/20(火) 19:21:24
すいません、出来ました。ありがとうございました。
921 :
デフォルトの名無しさん:2009/10/21(水) 01:56:51
50までの素数をリストに入れたいんですけどうまくいきません。
アドバイスよろしくお願いします。
ls = range(3,51)
for a in ls:
for b in range(2,a):
if (a%b) != 0:
continue
else:
del ls[a-3]
>del ls[a-3]
はなにをやろうとしてるんだろう?
ループ中にリストの要素削除とかめんどいことはやんないほうがいいと思うよ
普通に考えれば結果のリストを用意して、
ある数字が素数と判定出来たらそこに入れるとかでいいはずだろ?
>>921 エラトステネスの篩(ふるい) Python でぐぐっちゃいなよ
from itertools import ifilter, count
def primes():
g = count(2)
while True:
p = g.next()
yield p
g = ifilter(lambda n, p=p: n % p, g)
l=[]
for p in primes():
if p <= 50: l.append(p)
else: break
すいません、出来ました。ありがとうございました。
926 :
デフォルトの名無しさん:2009/10/22(木) 10:39:16
どんどん出来て行く
それに比べて俺と言ったら…
初心者です。
>>921を考えて見ました。
もっと短くするにはどうしたらいいですか?
#coding=utf-8
def primenumber(n):
for c in range(2, n):
if n%c == 0:
break
if c == n-1:
return n
else:
return u"素数ではない"
ls = [2]
for n in range(3, 51):
ls.append(primenumber(n))
if u"素数ではない" in ls:
ls.remove(u"素数ではない")
print ls
928 :
927:2009/10/22(木) 18:10:09
すみません。
コピペでインデントが外れました。
#coding=utf-8
def primenumber(n):
for c in range(2, n):
if n%c == 0:
break
if c == n-1:
return n
else:
return u"素数ではない"
ls = [2]
for n in range(3, 51):
ls.append(primenumber(n))
if u"素数ではない" in ls:
ls.remove(u"素数ではない")
print ls
全角スペースか & でインデントすれ
930 :
927:2009/10/22(木) 18:15:17
何回もすみません。
半角空白でインデントができないので全角にしました。
#coding=utf-8
def primenumber(n):
for c in range(2, n):
if n%c == 0:
break
if c == n-1:
return n
else:
return u"素数ではない"
ls = [2]
for n in range(3, 51):
ls.append(primenumber(n))
if u"素数ではない" in ls:
ls.remove(u"素数ではない")
print ls
>半角スペース消える
半角でインデントして置換するか、
もしくは専ブラの機能使えば意外といけたりする
>>930 primenumber関数の戻り値がカオスなので単に素数かどうか判定する関数にして、
名前もそれらしいものにしたほうがいいかと。
出力はリスト内包表記を使えばシンプルになる。
def is_prime(n):
for c in range(2, n):
if n%c == 0:
return False
return True
print [x for x in range(2,51) if is_prime(x)]
言った端からインデント消えててマヌケなので。
def is_prime(n):
for c in range(2, n):
if n%c == 0:
return False
return True
print [x for x in range(2,51) if is_prime(x)]
933 :
927:2009/10/22(木) 20:05:08
>>932 ありがとうございます!15行が7行になりました!
(補足:5行目コードと、リストに2を追加しました。)
def is_prime(n):
for c in range(2, n):
if n%c == 0:
return False
if c == n-1:
return True
print [2] + [x for x in range(3,51) if is_prime(x)]
import cgi,re
q=(正規表現)
line=(1行のデータ)
for r in re.finditer(q,line):
print r.group(0)
print r.group(1)
print r.group(2)
print r.group(3)
のように書いて正規表現でマッチさせたいのですがうまくいきません。
コマンドプロンプトで動かすとうまくいきますが、cgiにしてやるとダメです。
上から1行ずつ動かしていって、どうやら
for r in re.finditer(q,line):
を書くとエラーがでました。
原因はなんでしょうか?
>>935 ありがとうございます。
やってみたところバージョンは2.4.3らしいです。
もしかして対応していないのでしょうか?」
正規表現かCGIについて根本的に勘違いしているに一票
>>934 >を書くとエラーがでました
本当に助けてほしいんだったら、
まず、そのエラーの内容をそのままコピペしてくれ。
cgitb 使ってないみたいだし、
internal server error が返ってくるだけのような
ソースとURL貼るのがマナー
cgitb使っているのですが、うまく機能してくれません。
AddHandler cgi-script-debug .cgiでやっているのですが、これで見たところエラーは無いようですが
実行してみるとスクリプトエラーがでます。どうしたらいいでしょうか?
ちなみにxreaです
Script Error
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.
Depending on the server configuration, you can also run thisscript under CGIWrap debugging.
Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.
クロージャなんですが
def func1():
i = {'cnt': 0}
def _func1():
i['cnt'] += 1
return i['cnt']
return _func1
def func2():
i = 0
def _func1():
i += 1
return i
return _func1
func1みたいにリストもしくは辞書を使って書くと思った通りに動くんですが冗長に見えます
しかしfunc2みたいに書くとUnboundLocalErrorになってしまいます
もうちょっとすっきり書く方法って無いですかね?
>>945 content-typeは記述していますが、うまくいきません・・・
947 :
デフォルトの名無しさん:2009/10/23(金) 21:36:07
ソース貼れよ
次、shebang
>>943 def func2():
def _func2():
_func2.i += 1
return _func2.i
_func2.i = 0
return _func2
content-typeの\nを書き忘れてました。
お騒がせしました
zuko----
952 :
943:2009/10/24(土) 01:47:38
sql = "SELECT id,name FROM testnet WHERE user_id=user_id AND board_id=board_id AND year=year"
mysqlでこのようなselect文からヒットした結果をrow[0],row[1]に入れたいのですがいい方法はありますか?
普通の方法で十分だと思う。
だよね
MySQL-pythonを入れたのか?
ひょっとしたらODBCだったりするのか?
あるいは?
面倒糞いので答えない
クレクレ厨にエサを与えては逝けません
データ取れた後は
文字コードの質問や
データ型の質問が
出て来ると予想
MySQLです。
データがとれればそれでいいのでお願いします
import sqlite3
con = sqlite3.connect('testsqlite3.sl3')
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.executescript('''create table test (id integer, val varchar(8));''')
con.commit()
s = '''insert into test (id, val) values (%d, '%s');'''
cur.executescript(s % (3, 'abc'))
cur.executescript(s % (2, 'xyz'))
cur.executescript(s % (1, 'def'))
con.commit()
cur.execute('''select id, val from test order by val;''')
for row in cur:
print row['val'], row['id']
cur.close()
con.close()
963 :
デフォルトの名無しさん:2009/10/25(日) 00:09:44
ありがとうございました!!!
実行効率を測定するツールは有りますか?
ありがとうございました
n < 2^32 なのか n^2+2 < 2^32 なのか、どっちなのかな
前者ならPythonじゃ現実的な時間内に終わらないような
素数テーブル見て素数かどうか調べるので
n^2+2が素数テーブルの最大値以下
ということでよろしくおながいします
pass
m>=0
n=3m, (3m)^2+2 = 9m^2+2 = 3の倍数+2 ({3m: m>1} != 素数)
n=3m+1, (3m+1)^2+2 = 9m^2+6m+3 = 3の倍数 != 素数
n=3m+2, (3m+2)^2+2 = 9m^2+12m+6 = 3の倍数 != 素数
pass
973 :
デフォルトの名無しさん:2009/10/29(木) 11:34:04
岡田外務大臣キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
http://qb5.2ch.net/test/read.cgi/saku2ch/1256630318/1
早く記念カキコしないと埋まっちゃうwww
日本語をmysqlにinsertしたいのですが、UnicodeEncodeErrorとなってしまいます。
調べてみると日本語をアスキーとして扱っている事から起きるエラーとのことですが、
どうしたらエラーを回避できるのでしょうか?
mysql> show variables like '%char%'; の結果は?
my.ini の中で
[mysql]
default-characterset = utf8
[mysqld]
default-characterset = utf8
>>977 utf8を使うとして、
>>976のようにMySQLを設定
python側は、MySQLdb.connectのところでcharset= "utf8"
入れる文字列もutf8にエンコードで問題ないと思う。
db.execute("SET NAMES utf8")とかも意味あるかも
>>978 ありがとうございます
charset='utf-8'
c.execute("SET NAMES utf8")
q.encode('utf8')
したのですが、
q.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 76: ordinal not in range(128)
だそうです。
ちなみにqはselect文です。
もし
q = 'select ほげほげ from ふがふが where はげ=True;'
なら
ソースの2行目に
# -*- coding: utf-8 -*-
を書いた上で
c.execute(q)
あるいは
# -*- coding: cp932 -*-
を書いた上で
c.execute(q.decode('cp932').encode('utf-8'))
そうじゃなくて
q = u'select ほげほげ from ふがふが where はげ=True;'
なら
c.execute(q.encode('utf-8'))
>>980 ありがとうございます。何度もすいません。
*selectじゃなくてinsertでした。。
修正して実行すると、
q=u"INSERT INTO menu(name,id,name_j) VALUES (%s,%s,%s)"%(l_name,l_id,l_name_j)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 0: ordinal not in range(128)
となってしまいます。
l_name、l_idは英数字のみの変数、l_name_jは日本語を含む変数です。
それぞれ、shift-jisのhtmlファイルから正規表現で抜いたものです。
コーディングは# -*- coding: utf8 -*-としています。
こんなんかな
db = MySQLdb.connect(host= DB_HOST, user = DB_USER, passwd = DB_PASS, db= DB_NAME, charset= "utf8")
db_cursor = db.cursor()
db_cursor.execute("SET NAMES utf8")
l_name_j_utf8 = l_name_j.decode("Shift_JIS").encode("UTF-8")
db_cursor.execute("INSERT INTO menu(name,id,name_j) VALUES (%s,%s,%s)", (l_name,l_id,l_name_j_utf8))
>>982 おおおおおおおおお
いきました!!サンクスですwwww
本当に大感謝です。。