トップページ⇒tech
1001コメント300KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/04/23(金) 13:25:51
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その6
http://pc12.2ch.net/test/read.cgi/tech/1264686181/

関連スレ
Pythonのお勉強 Part37
http://pc12.2ch.net/test/read.cgi/tech/1268467168/
0655デフォルトの名無しさん2010/07/11(日) 23:56:47
漏れも知りたい鯛
0656デフォルトの名無しさん2010/07/12(月) 00:06:25
IDLE だったら Options -> Keys の history-next, history-previous で Alt+n, Alt+p じゃない
0657デフォルトの名無しさん2010/07/12(月) 00:07:19
つrlwrap
0658デフォルトの名無しさん2010/07/12(月) 00:13:30
>>656,657
ありがとうございます!
0659デフォルトの名無しさん2010/07/12(月) 00:57:43
>>654
ipython便利だよ。windowsだとpyreadlineといっしょにいれるとよろし。
0660デフォルトの名無しさん2010/07/12(月) 01:05:00
>>657
横からですが
ttp://stat001.ameba.jp/user_images/ba/be/10124970142_s.jpg
0661デフォルトの名無しさん2010/07/12(月) 01:18:27
ズバリtwitterクライアント作ろうと思ったら、何が必要ですか?

右も左も分からない初心者です
0662デフォルトの名無しさん2010/07/12(月) 01:29:26
189 デフォルトの名無しさん [] 2010/07/12(月) 00:13:57 ID: Be:
    Twitterクライアント
    クリップボード監視に向いてる言語は何ですか?
0663デフォルトの名無しさん2010/07/12(月) 01:57:28
お前の頭骨に入ってる塊より百段上等な脳みそ
0664デフォルトの名無しさん2010/07/12(月) 02:14:34
つ ttp://usy.jp/twitter/index.php?Twitter%20API
0665デフォルトの名無しさん2010/07/12(月) 03:22:15
Python3.12 の Windows 版で日本語を含むフォルダ内のC拡張モジュールを
インポートするスクリプトを実行するとUnicodeDecodeErrorが発生するみたい。
おそらく Python3 のバグ。
(importdl.c の _PyImport_LoadDynamicModule => _PyImport_FindExtension => PyDict_GetItemString等
=> ... => PyUnicode_DecodeUTF8 の流れで cp932 のバイト列が utf8 で変換されてエラーになる)

再現例:
D:/ほげほげ/winsound.pyd, D:/ほげほげ/a.py の状態で a.py を実行する。
winsound.pyd は Python31/DLLs のをコピー a.py の中身は import winsound のみ
0666デフォルトの名無しさん2010/07/12(月) 03:25:36
>>625 のエラーはこのせいだと思う
0667デフォルトの名無しさん2010/07/12(月) 05:40:41
>>653
混じってます
Vista HomeBasicSP1とwindows7の2台で利用していますが
VistaはCygwinの中にPython2.4と2.5が入っています。
cygwinは普段利用していなく、コマンドプロンプトを利用しています。
windows7では、最近2.7と2.6を入れました。
このエラーが起きてから入れたような気もします。定かではないですが・・・

Vista
C:\Python31 , C:\cygwin\lib\Python2.4 , C:\cygwin\lib\Python2.5
windows7
C:\Python31 , C:\Python27 , C:\Python26
こんな感じの場所にいます
0668デフォルトの名無しさん2010/07/12(月) 06:08:14
>>665
ありがとうございます
直りました

>>653
色々教えていただきありがとうございます
時間を取らせてしまって、ごめんなさい。
ここにレスするときに、ディレクトリ名が乗せられなくて、勝手に手で消してからレスしていました。
そのディレクトリ名の中に日本語が含まれていました。
申し訳ありません
一言、消していることを明記すべきでした。
b'C:\\Uers\\test\\******\\\x8d(ry
ごめんなさいごめんなさい....orz
0669デフォルトの名無しさん2010/07/12(月) 06:50:27
センスないな
0670デフォルトの名無しさん2010/07/14(水) 17:34:50
クラスにメソッドを後付けすることはできますか?
継承せずに、メソッドを定義したいのですが
0671デフォルトの名無しさん2010/07/14(水) 20:06:45
>>670
できます。
class Foo(object):
    pass
def _bar(self):
    pass
Foo.bar = _bar
0672デフォルトの名無しさん2010/07/16(金) 01:05:22
>>671
そんな簡単にできるのですね
ありがとうございました
0673デフォルトの名無しさん2010/07/16(金) 02:18:16
けどbuiltinなクラスには後付けできないという...
これって、できないようにする積極的な理由あるの?
0674デフォルトの名無しさん2010/07/16(金) 02:21:16
継承すれば済む話だろ
0675デフォルトの名無しさん2010/07/16(金) 02:29:31
builtin typeに追加できてもカオスになるだけだと思うわ
0676デフォルトの名無しさん2010/07/16(金) 02:33:04
それどこの Ruby on Rails www
0677デフォルトの名無しさん2010/07/16(金) 02:52:55
>>673
変更不可能にすることで、メモリ消費量を削減したり、呼び出しを高速化したりできる。
基本的に変更可能な属性は dict 型のオブジェクトを使って管理されているので、
その呼び出しはハッシュテーブルからの検索とかオーバーヘッドが少し大きい。

あと、基本型を弄るとどこに副作用が起こるかわからないという理由もあるな。
基本的に直接弄るんじゃなくて継承しろという方針。
0678デフォルトの名無しさん2010/07/16(金) 03:29:16
>>677
なんだ、実装上の都合なのか。

Pythonは理想追い求めるより現実的な落としどころ見つける言語だってのは知ってるけど、
それでも一貫性のなさを感じる。
0679デフォルトの名無しさん2010/07/16(金) 03:35:59
読解力のなさに絶望した
0680デフォルトの名無しさん2010/07/16(金) 05:00:38
builtinクラスに後付けしたいケースってありますか?
ちょっと思いつかないな
0681デフォルトの名無しさん2010/07/16(金) 07:36:12
list.joinしたいんだろ
0682デフォルトの名無しさん2010/07/16(金) 23:26:13
file.foo = 1 はできないのに、
StringIO.StringIO.foo = 1 ができる合理的理由が見当たらない。
0683デフォルトの名無しさん2010/07/16(金) 23:44:22
>>682
ttp://mail.python.org/pipermail/python-dev/2008-February/077167.html
0684デフォルトの名無しさん2010/07/17(土) 00:14:02
>>682
お前には cStringIO をやる
0685デフォルトの名無しさん2010/07/17(土) 14:34:23
__slot__
0686デフォルトの名無しさん2010/07/18(日) 03:35:53
aiueo = input()
import aiueo

みたいに読み込むモジュールを入力して与えることって出来るの?
0687デフォルトの名無しさん2010/07/18(日) 04:01:21
Yes, we can.
0688デフォルトの名無しさん2010/07/18(日) 05:05:59
>>686
__import__()
0689デフォルトの名無しさん2010/07/18(日) 11:49:25
imp モジュールもあるよ
0690デフォルトの名無しさん2010/07/19(月) 04:15:36
質問です
dictが入れ子になってるdictの構造だけをコピーしたいのですが
copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

In [2]: a = {"a":{"b":"con_b","c":"con_c"}}
In [3]: b = a.copy()
In [4]: a
Out[4]: {'a': {'b': 'con_b', 'c': 'con_c'}}
In [5]: b["a"].update({"b":"hoge"})
In [6]: b
Out[6]: {'a': {'b': 'hoge', 'c': 'con_c'}}
In [7]: a
Out[7]: {'a': {'b': 'hoge', 'c': 'con_c'}}

これを a["a"]["b"] == "con_b" としたいのですが
updateというアプローチは間違っているのでしょうか
0691デフォルトの名無しさん2010/07/19(月) 04:37:26
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = a.copy()
>>> b["a"].update({"b":"hoge"})
>>> a
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>>
0692デフォルトの名無しさん2010/07/19(月) 04:40:31
>>> import copy
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = copy.deepcopy(a)
>>> b
{'a': {'c': 'con_c', 'b': 'con_b'}}
>>> b["a"].update({"b":"hoge"})
>>> b
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>> a
{'a': {'c': 'con_c', 'b': 'con_b'}}
0693デフォルトの名無しさん2010/07/19(月) 05:07:31
>>692
おー、ありがとうございます
こういうケースはcopy.deepcopy()しないといけないんですね
0694デフォルトの名無しさん2010/07/19(月) 05:12:43
>dictが入れ子になってるdictの構造だけをコピーしたいのですが
>copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

質問の仕方が変だ
0695デフォルトの名無しさん2010/07/19(月) 10:08:58
>>693
浅いコピーってのは、
b = {}
for key in a:
  b[key] = a[key]
と同じだから、この場合
b["a"] = a["a"]
ってしたことになる。ここで、 a["a"]は辞書型なのでmutable。

浅いコピーでも完全にコピーされるのは、
・要素が全部immutable(int, float, str, tupleなど)
・要素の要素、要素の要素の要素、...が全部immutable
のときのみ。
もちろん、完全にコピーされないことを知った上で大丈夫だと分かっててコピーするのはOK

要素の要素がmutableで浅いコピーがうまくいかない例:
a=(1,(2,[3,4]))
b=a
b[1][1][1]=0
print b
# ==> (1, (2, [3, 0]))
print a
# ==> (1, (2, [3, 0]))
0696デフォルトの名無しさん2010/07/19(月) 12:32:02
pythonの初心者参考本を見て、elseを使おうとしたのですが
SyntaxError: invalid syntax
というエラーが出てしまいます。何か間違ってるところがあったら教えてください。コードはこんな感じです。

color = '緑'
score = 20
if color == '赤':
bonus = 0
  
ここでelseを入れるとエラーが出ます。あとインデント幅も妙です。
参考本ので説明に使われているpythonのバージョンと今使ってるバージョンが違うので
書き方に違いがあるのかと思ってぐぐってみたんですが分かりませんでしたorz
0697デフォルトの名無しさん2010/07/19(月) 14:26:45
>>696
こんな感じで普通に動くと思うけど。
インデントは全角スペースにしてるから気をつけてね

color = '緑'
score = 20
if color == '赤':
 bonus = 0
else:
 bonus = 20
print bonus


elseの後に:を入れ忘れているんじゃないかと予想。
0698デフォルトの名無しさん2010/07/19(月) 16:56:13
>>697
if color == '赤'
bonus = 0
この後改行するとbonusの"b"と同じ列から入力するようになっていてelseを入れてみると
   bonus = 0
    else:

SyntaxError: invalid syntax
というエラーが出てしまいます。丸々コピーしてみても駄目でしたすみません。
何かすごい根本的な問題のような気がするのでこのままスルーして頂いても結構です。ありがとうございました。
0699デフォルトの名無しさん2010/07/19(月) 17:10:01
>>698
elseを打つときはデデント(インデントの反対)して
ifと同じ桁から始めなきゃだめだよ

あともし統合環境使ってるのであればPythonに慣れるまでは凍結して
シンプルなテキストエディタとコンソール(コマンドプロンプト)を使ったほうがいい
0700デフォルトの名無しさん2010/07/19(月) 17:53:47
>>699
デデントしたらできました!ありがとうございます。
0701デフォルトの名無しさん2010/07/19(月) 20:31:18
なんだ自演か
0702デフォルトの名無しさん2010/07/20(火) 03:25:51
なんだかうまい方法を思いつかない

before =[
{"id":"0","aaa":"fdafdsadafdas"},
{"id":"0","bbb":"dafdgdfagdfsg"},
{"id":"0","ccc":"dafdgdfagdfsg"},
{"id":"1","aaa":"gdfagdfsgdsaf"},
{"id":"1","bbb":"dgfagdsdaffsg"},
{"id":"1","ccc":"dadfgdfddfasg"},
{"id":"1","ddd":"dadfgdfddfasg"}
]

という要素として辞書を持ったリストを

after =[ {"id","0","aaa":"fdafdsadafdas","bbb":"dafdgdfagdfsg","ccc":"dafdgdfagdfsg"}, {"id":"1","aaa":"gdfagdfsgdsaf","bbb":"dgfagdsdaffsg","ccc":"dadfgdfddfasg","ddd":"dadfgdfddfasg"}
]

のように"id"を共通のキーにしてまとめたい
どのようにすればいいだろうか
0703デフォルトの名無しさん2010/07/20(火) 03:50:43
[dict(reduce(operator.add, map(dict.items, b))) for a, b in itertools.groupby(before, operator.itemgetter("id"))]
0704デフォルトの名無しさん2010/07/20(火) 05:44:08
>>703
動きました。いいワンライナーですね!
itertools と reduce、 まだ怖くて使ったことがないです…
自分も使いこなせるようになろう
0705デフォルトの名無しさん2010/07/20(火) 07:22:19
ワンライナーにおしこめないで判りやすくするにはこんな感じかな。
t = defaultdict(dict)
for item in before:
    t[item['id']].update(item)
after = t.values()
0706デフォルトの名無しさん2010/07/21(水) 05:11:58
>>704
>怖くて

どういう意味?
0707デフォルトの名無しさん2010/07/21(水) 10:29:25
でもそういう便利機能を使いこなしちゃうとあとで読みにくかったりするわな
0708デフォルトの名無しさん2010/07/21(水) 23:16:18
>>688
出来ましたありがとうございます。
0709デフォルトの名無しさん2010/07/22(木) 02:24:28
コンパイル済ヘルプ chm (win) 形式の日本語言語リファレンスの
新しいのはないでしょうか。
2.5 まではあったんですが。
http://www.python.jp/pub/doc_jp/
0710デフォルトの名無しさん2010/07/23(金) 16:55:06
tkinterの良い勉強サイトや本ってない?
可能ならば3に対応してる奴で、英語か日本語のもの
0711デフォルトの名無しさん2010/07/23(金) 17:01:14
あるよどっかに
0712デフォルトの名無しさん2010/07/23(金) 17:29:23
pythonを勉強してたんだが全く意味がわからんのでまずはプログラムのイロハを学びたいと思います

LINUXでC言語でも勉強したいと思います
0713デフォルトの名無しさん2010/07/23(金) 17:32:24
こう言っては何ですがプログラミング自体を諦めたほうがいいのではないでしょうか
0714デフォルトの名無しさん2010/07/23(金) 17:38:39
pythonで学ぶプログラム作法おすすめ
0715デフォルトの名無しさん2010/07/23(金) 17:51:31
どうでもいいけど、このスレに居る奴って英語読めなさそうだな
0716デフォルトの名無しさん2010/07/23(金) 17:53:37
英語読めれば>>714もただで読めるのにね
0717デフォルトの名無しさん2010/07/25(日) 17:16:57
#!/usr/bin/python
# -*- coding:utf-8 -*-

if __name__ == '__main__':
 print 'java-ja great!!!'
0718デフォルトの名無しさん2010/07/25(日) 17:48:11
>>717
特定されました
0719デフォルトの名無しさん2010/07/25(日) 19:00:33
classを作って、アトリビュートaを設定してるつもりなのですが
インポートしてaを開こうとするとそんなアトリビュート無いと言われます
何が間違っているのでしょうか
http://www.dotup.org/uploda/www.dotup.org1051891.jpg.html
0720デフォルトの名無しさん2010/07/25(日) 19:14:35
>>719
1. class は import しない。 import test としたら、 class test と全く別の test モジュールが import され、 test クラスは消え去る。
2. self.a = 0 では、クラスではなく、クラスのインスタンスに属性を追加しているので、インスタンスを作らないと a は見えない。

class test:
    def __init__(self):
        self.a = 0

t = test()
t.a
0721デフォルトの名無しさん2010/07/25(日) 19:15:24
>>719
importはモジュールを読み込み、初期化する文。
classとは関係ない。

その例だと、testという名前でクラスを定義した後に、
testというモジュールをimportしている。
0722デフォルトの名無しさん2010/07/25(日) 19:20:46
>>720,721
なるほど!ありがとうございます。

0723デフォルトの名無しさん2010/07/26(月) 16:36:07
askopenfilenameって3.0以降でどう書けばいいの?
tkFileDialogのimportの変更点も分かってないから誰か解説してくれ
0724デフォルトの名無しさん2010/07/26(月) 17:09:13
2to3.py
0725デフォルトの名無しさん2010/07/26(月) 17:11:10
neetossan.py
0726デフォルトの名無しさん2010/07/26(月) 18:17:58
助かった、tkinterも変えてくれるのね
アスキーコード云々もsitecustomize.pyに2行足しただけですんなり行った
0727デフォルトの名無しさん2010/07/27(火) 00:34:17
__init__
とか__がやたら目につくのはなぜ?
気持ち悪いんだけど
0728デフォルトの名無しさん2010/07/27(火) 01:51:47
誰かいる??
0729デフォルトの名無しさん2010/07/27(火) 02:00:45
(゚Д゚≡゚д゚) 今ぱいスレには俺様しかいない!
0730デフォルトの名無しさん2010/07/27(火) 02:00:51
居ないけど何よ?
0731デフォルトの名無しさん2010/07/27(火) 02:03:38
pythonでmsecまでを表示したいんですが、
何か良い方法は無いでしょうか??

例えば

2:00:44.009727 の時だと

7244.010 みたいなかんじです。

マイクロsecをとって//1000すると、9 とかになるので、
マイクロsecから丸める方法でも3桁にしたいです・・

お知恵をお貸し下さい。
0732デフォルトの名無しさん2010/07/27(火) 02:07:07
俺じゃ答えはわからないけど一緒に考えることなら出来るよたぶん
0733デフォルトの名無しさん2010/07/27(火) 02:07:22
>>731
>>> sec = 12345.12345
>>> print "%.3f" % (sec,)
12345.123
0734デフォルトの名無しさん2010/07/27(火) 02:09:02
python] ミリ秒まで表示させる
■[python] ミリ秒まで表示させる 00:35 ミリ秒まで表示させる -
With skill and creativeness を含むブックマーク はてなブックマーク - ミリ秒まで表示させる - With skill and creativeness ミリ秒まで表示させる - With skill and creativeness のブックマークコメントCommentsAdd Star

参考URL

import datetime
now = datetime.datetime.now()
print now.strftime("%Y%m%d%H%M%S.") + "%04d" % (now.microsecond // 1000)
→ '20081118003037.0479'

これは?
ttp://d.hatena.ne.jp/shohu33/20081117/1226936130
0735デフォルトの名無しさん2010/07/27(火) 02:11:21
ありがとうございます。

datetime.datetime.now()とかで、
秒換算して取得することって出来ますか?

それと、>>733を組み合わせると、完璧の予感!
0736デフォルトの名無しさん2010/07/27(火) 02:15:28
>>> datetime.datetime.now()
datetime.datetime(2010, 7, 27, 2, 14, 21, 705000)

日本語が理解できない
これで秒取って、足したり引いたりじゃだめなの?
0737デフォルトの名無しさん2010/07/27(火) 02:27:16

d = datetime.datetime.now()

sec = ((d.hour*60 + d.minute)*60 + d.second)

print sec
print "%.3d" % (d.microsecond // 1000)

数値型で sec.msec にするには、あと、どうしたらいいですか・・・
行き詰まってしまいました
0738デフォルトの名無しさん2010/07/27(火) 02:39:45
d = datetime.datetime.now()
sec = ((d.hour*60 + d.minute)*60 + d.second)
msec ="%.3d" % (d.microsecond // 1000)
print sec + float(msec)/1000
これでいいか。
0739デフォルトの名無しさん2010/08/01(日) 23:52:56
readで引数を細かくとったり、urllib.urlretrieveを使うことで
ダウンロードの進捗状況を知ることができるのは分かったのですが

アップロードの進行状況(POST)を知る方法は標準ライブラリでありませんか?
urllib2とかurllibを使って
0740デフォルトの名無しさん2010/08/02(月) 00:12:41
windowsでeasy installを使いたいのですが、
c:\Python25\Scriptディレクトリ自体がありません
どうしたらいいでしょうか
0741デフォルトの名無しさん2010/08/02(月) 00:19:55
>>740
なくてもインストールできるからさっさと入れればいいだろ
0742デフォルトの名無しさん2010/08/02(月) 00:26:52
は?
0743デフォルトの名無しさん2010/08/02(月) 00:29:38
>>739
その方法で本当にDL進捗状況がわかるのか気になる
socket使えばアップ・ダウン両方できる
0744デフォルトの名無しさん2010/08/02(月) 00:30:31
easy install自体が見あたらないのです
http://www.python.jp/Zope/download/pythoncore
ここのpython-2.5.2.msiを使用しました。
0745デフォルトの名無しさん2010/08/02(月) 00:42:46
>>744
そうじゃない
まずeazy_installをいれろよアホがっつってんだよカス
0746デフォルトの名無しさん2010/08/02(月) 00:45:18
えっ、easy installは最初から入ってるものではなかったのですか?
その方向で調べてみます
ありがとうございます。
0747デフォルトの名無しさん2010/08/02(月) 00:57:01
>>743
すいません後出となって申し訳ないのですが、ソケットを直接つかうの以外で
無いだろうかと探していました

0748デフォルトの名無しさん2010/08/02(月) 01:12:31
eazy_installをeazy_installでインストール出来ないのは大問題だな
0749デフォルトの名無しさん2010/08/02(月) 01:59:53
今はsetuptoolsじゃなくてdistributeだから気をつけなよ>easy_installの入手
0750デフォルトの名無しさん2010/08/02(月) 03:17:27
一度タイムゾーンを設定したら
以後、時刻関係の関数は一律そのタイムゾーンで値を返してくるようにしたいのですが
そういうことできますか?
0751デフォルトの名無しさん2010/08/02(月) 03:32:50
環境変数で TZ=hoge する
0752デフォルトの名無しさん2010/08/02(月) 20:46:35
'''
プログラム超初心者です
↓のようなことをするときにbreakは書いたほうがいいのでしょうか、、、
あともっとスマートに書ける方法があったら教えてください。

ユーザーから続けて数字の入力を受け付け
合計が100に近づくまでその数値を足し続けるプログラムを書きなさい
'''
hundred = 100
value = 0
def numint(x):
  while True:
    try:
     y = raw_input(x)
     z = int(y)
    return z
    #break ←ブレイクは書いたほうがいいのでしょうか?
    except ValueError:
      print u'Error : 文字ではなく数値を入力してください'

value += numint('数値を入力してください>> ')

while value < hundred:
  print value, u'まだ足りないみたいです'
  value += numint('もっと大きな数字を入力しましょう>> ')
print value, u'合計が100以上になりました'

0753デフォルトの名無しさん2010/08/02(月) 20:49:01
また突っ込み所満載のネタを・・・
0754デフォルトの名無しさん2010/08/02(月) 22:06:48
>> 752 です
http://www.python.jp/Zope/intro/instant_hacking_jp
プログラムの練習に↑のInstant hacking をしていたのですが
例外処理を加えようとして pylint が到達不能code を警告していたので
どうしたもんかなぁと思って書き込みしてみたところです

ぐぐったところ while True はあまり書かない方がいいみたいなので
他の手を使ってみます、、、

while True したら break を書くものとばかり思っていたので
頭が混乱してしまいました…
■ このスレッドは過去ログ倉庫に格納されています