くだすれ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/
0666デフォルトの名無しさん
2010/07/12(月) 03:25:360667デフォルトの名無しさん
2010/07/12(月) 05:40:41混じってます
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ありがとうございます
直りました
>>653
色々教えていただきありがとうございます
時間を取らせてしまって、ごめんなさい。
ここにレスするときに、ディレクトリ名が乗せられなくて、勝手に手で消してからレスしていました。
そのディレクトリ名の中に日本語が含まれていました。
申し訳ありません
一言、消していることを明記すべきでした。
b'C:\\Uers\\test\\******\\\x8d(ry
ごめんなさいごめんなさい....orz
0669デフォルトの名無しさん
2010/07/12(月) 06:50:270670デフォルトの名無しさん
2010/07/14(水) 17:34:50継承せずに、メソッドを定義したいのですが
0671デフォルトの名無しさん
2010/07/14(水) 20:06:45できます。
class Foo(object):
pass
def _bar(self):
pass
Foo.bar = _bar
0672デフォルトの名無しさん
2010/07/16(金) 01:05:22そんな簡単にできるのですね
ありがとうございました
0673デフォルトの名無しさん
2010/07/16(金) 02:18:16これって、できないようにする積極的な理由あるの?
0674デフォルトの名無しさん
2010/07/16(金) 02:21:160675デフォルトの名無しさん
2010/07/16(金) 02:29:310676デフォルトの名無しさん
2010/07/16(金) 02:33:040677デフォルトの名無しさん
2010/07/16(金) 02:52:55変更不可能にすることで、メモリ消費量を削減したり、呼び出しを高速化したりできる。
基本的に変更可能な属性は dict 型のオブジェクトを使って管理されているので、
その呼び出しはハッシュテーブルからの検索とかオーバーヘッドが少し大きい。
あと、基本型を弄るとどこに副作用が起こるかわからないという理由もあるな。
基本的に直接弄るんじゃなくて継承しろという方針。
0678デフォルトの名無しさん
2010/07/16(金) 03:29:16なんだ、実装上の都合なのか。
Pythonは理想追い求めるより現実的な落としどころ見つける言語だってのは知ってるけど、
それでも一貫性のなさを感じる。
0679デフォルトの名無しさん
2010/07/16(金) 03:35:590680デフォルトの名無しさん
2010/07/16(金) 05:00:38ちょっと思いつかないな
0681デフォルトの名無しさん
2010/07/16(金) 07:36:120682デフォルトの名無しさん
2010/07/16(金) 23:26:13StringIO.StringIO.foo = 1 ができる合理的理由が見当たらない。
0683デフォルトの名無しさん
2010/07/16(金) 23:44:22ttp://mail.python.org/pipermail/python-dev/2008-February/077167.html
0684デフォルトの名無しさん
2010/07/17(土) 00:14:02お前には cStringIO をやる
0685デフォルトの名無しさん
2010/07/17(土) 14:34:230686デフォルトの名無しさん
2010/07/18(日) 03:35:53import aiueo
みたいに読み込むモジュールを入力して与えることって出来るの?
0687デフォルトの名無しさん
2010/07/18(日) 04:01:210688デフォルトの名無しさん
2010/07/18(日) 05:05:59__import__()
0689デフォルトの名無しさん
2010/07/18(日) 11:49:250690デフォルトの名無しさん
2010/07/19(月) 04:15:36dictが入れ子になってる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>>> b = a.copy()
>>> b["a"].update({"b":"hoge"})
>>> a
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>>
0692デフォルトの名無しさん
2010/07/19(月) 04:40:31>>> 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おー、ありがとうございます
こういうケースはcopy.deepcopy()しないといけないんですね
0694デフォルトの名無しさん
2010/07/19(月) 05:12:43>copyで浅いコピーをしているつもりが、入れ子の中までは担保されません
質問の仕方が変だ
0695デフォルトの名無しさん
2010/07/19(月) 10:08:58浅いコピーってのは、
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:02SyntaxError: invalid syntax
というエラーが出てしまいます。何か間違ってるところがあったら教えてください。コードはこんな感じです。
color = '緑'
score = 20
if color == '赤':
bonus = 0
ここでelseを入れるとエラーが出ます。あとインデント幅も妙です。
参考本ので説明に使われているpythonのバージョンと今使ってるバージョンが違うので
書き方に違いがあるのかと思ってぐぐってみたんですが分かりませんでしたorz
0697デフォルトの名無しさん
2010/07/19(月) 14:26:45こんな感じで普通に動くと思うけど。
インデントは全角スペースにしてるから気をつけてね
color = '緑'
score = 20
if color == '赤':
bonus = 0
else:
bonus = 20
print bonus
elseの後に:を入れ忘れているんじゃないかと予想。
0698デフォルトの名無しさん
2010/07/19(月) 16:56:13if color == '赤'
bonus = 0
この後改行するとbonusの"b"と同じ列から入力するようになっていてelseを入れてみると
bonus = 0
else:
SyntaxError: invalid syntax
というエラーが出てしまいます。丸々コピーしてみても駄目でしたすみません。
何かすごい根本的な問題のような気がするのでこのままスルーして頂いても結構です。ありがとうございました。
0699デフォルトの名無しさん
2010/07/19(月) 17:10:01elseを打つときはデデント(インデントの反対)して
ifと同じ桁から始めなきゃだめだよ
あともし統合環境使ってるのであればPythonに慣れるまでは凍結して
シンプルなテキストエディタとコンソール(コマンドプロンプト)を使ったほうがいい
0700デフォルトの名無しさん
2010/07/19(月) 17:53:47デデントしたらできました!ありがとうございます。
0701デフォルトの名無しさん
2010/07/19(月) 20:31:180702デフォルトの名無しさん
2010/07/20(火) 03:25:51before =[
{"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:430704デフォルトの名無しさん
2010/07/20(火) 05:44:08動きました。いいワンライナーですね!
itertools と reduce、 まだ怖くて使ったことがないです…
自分も使いこなせるようになろう
0705デフォルトの名無しさん
2010/07/20(火) 07:22:19t = defaultdict(dict)
for item in before:
t[item['id']].update(item)
after = t.values()
0706デフォルトの名無しさん
2010/07/21(水) 05:11:58>怖くて
どういう意味?
0707デフォルトの名無しさん
2010/07/21(水) 10:29:250708デフォルトの名無しさん
2010/07/21(水) 23:16:18出来ましたありがとうございます。
0709デフォルトの名無しさん
2010/07/22(木) 02:24:28新しいのはないでしょうか。
2.5 まではあったんですが。
http://www.python.jp/pub/doc_jp/
0710デフォルトの名無しさん
2010/07/23(金) 16:55:06可能ならば3に対応してる奴で、英語か日本語のもの
0711デフォルトの名無しさん
2010/07/23(金) 17:01:140712デフォルトの名無しさん
2010/07/23(金) 17:29:23LINUXでC言語でも勉強したいと思います
0713デフォルトの名無しさん
2010/07/23(金) 17:32:240714デフォルトの名無しさん
2010/07/23(金) 17:38:390715デフォルトの名無しさん
2010/07/23(金) 17:51:310716デフォルトの名無しさん
2010/07/23(金) 17:53:370717デフォルトの名無しさん
2010/07/25(日) 17:16:57# -*- coding:utf-8 -*-
if __name__ == '__main__':
print 'java-ja great!!!'
0718デフォルトの名無しさん
2010/07/25(日) 17:48:11特定されました
0719デフォルトの名無しさん
2010/07/25(日) 19:00:33インポートしてaを開こうとするとそんなアトリビュート無いと言われます
何が間違っているのでしょうか
http://www.dotup.org/uploda/www.dotup.org1051891.jpg.html
0720デフォルトの名無しさん
2010/07/25(日) 19:14:351. 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:24importはモジュールを読み込み、初期化する文。
classとは関係ない。
その例だと、testという名前でクラスを定義した後に、
testというモジュールをimportしている。
0722デフォルトの名無しさん
2010/07/25(日) 19:20:46なるほど!ありがとうございます。
0723デフォルトの名無しさん
2010/07/26(月) 16:36:07tkFileDialogのimportの変更点も分かってないから誰か解説してくれ
0724デフォルトの名無しさん
2010/07/26(月) 17:09:130725デフォルトの名無しさん
2010/07/26(月) 17:11:100726デフォルトの名無しさん
2010/07/26(月) 18:17:58アスキーコード云々もsitecustomize.pyに2行足しただけですんなり行った
0727デフォルトの名無しさん
2010/07/27(火) 00:34:17とか__がやたら目につくのはなぜ?
気持ち悪いんだけど
0728デフォルトの名無しさん
2010/07/27(火) 01:51:470729デフォルトの名無しさん
2010/07/27(火) 02:00:450730デフォルトの名無しさん
2010/07/27(火) 02:00:510731デフォルトの名無しさん
2010/07/27(火) 02:03:38何か良い方法は無いでしょうか??
例えば
2:00:44.009727 の時だと
7244.010 みたいなかんじです。
マイクロsecをとって//1000すると、9 とかになるので、
マイクロsecから丸める方法でも3桁にしたいです・・
お知恵をお貸し下さい。
0732デフォルトの名無しさん
2010/07/27(火) 02:07:070733デフォルトの名無しさん
2010/07/27(火) 02:07:22>>> sec = 12345.12345
>>> print "%.3f" % (sec,)
12345.123
0734デフォルトの名無しさん
2010/07/27(火) 02:09:02■[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:21datetime.datetime.now()とかで、
秒換算して取得することって出来ますか?
それと、>>733を組み合わせると、完璧の予感!
0736デフォルトの名無しさん
2010/07/27(火) 02:15:28datetime.datetime(2010, 7, 27, 2, 14, 21, 705000)
日本語が理解できない
これで秒取って、足したり引いたりじゃだめなの?
0737デフォルトの名無しさん
2010/07/27(火) 02:27:16d = 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:45sec = ((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ダウンロードの進捗状況を知ることができるのは分かったのですが
アップロードの進行状況(POST)を知る方法は標準ライブラリでありませんか?
urllib2とかurllibを使って
0740デフォルトの名無しさん
2010/08/02(月) 00:12:41c:\Python25\Scriptディレクトリ自体がありません
どうしたらいいでしょうか
0741デフォルトの名無しさん
2010/08/02(月) 00:19:55なくてもインストールできるからさっさと入れればいいだろ
0742デフォルトの名無しさん
2010/08/02(月) 00:26:520743デフォルトの名無しさん
2010/08/02(月) 00:29:38その方法で本当にDL進捗状況がわかるのか気になる
socket使えばアップ・ダウン両方できる
0744デフォルトの名無しさん
2010/08/02(月) 00:30:31http://www.python.jp/Zope/download/pythoncore
ここのpython-2.5.2.msiを使用しました。
0745デフォルトの名無しさん
2010/08/02(月) 00:42:46そうじゃない
まずeazy_installをいれろよアホがっつってんだよカス
0746デフォルトの名無しさん
2010/08/02(月) 00:45:18その方向で調べてみます
ありがとうございます。
0747デフォルトの名無しさん
2010/08/02(月) 00:57:01すいません後出となって申し訳ないのですが、ソケットを直接つかうの以外で
無いだろうかと探していました
0748デフォルトの名無しさん
2010/08/02(月) 01:12:310749デフォルトの名無しさん
2010/08/02(月) 01:59:530750デフォルトの名無しさん
2010/08/02(月) 03:17:27以後、時刻関係の関数は一律そのタイムゾーンで値を返してくるようにしたいのですが
そういうことできますか?
0751デフォルトの名無しさん
2010/08/02(月) 03:32:500752デフォルトの名無しさん
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:010754デフォルトの名無しさん
2010/08/02(月) 22:06:48http://www.python.jp/Zope/intro/instant_hacking_jp
プログラムの練習に↑のInstant hacking をしていたのですが
例外処理を加えようとして pylint が到達不能code を警告していたので
どうしたもんかなぁと思って書き込みしてみたところです
ぐぐったところ while True はあまり書かない方がいいみたいなので
他の手を使ってみます、、、
while True したら break を書くものとばかり思っていたので
頭が混乱してしまいました…
0755デフォルトの名無しさん
2010/08/03(火) 00:26:470756デフォルトの名無しさん
2010/08/03(火) 03:24:01質問に答えるなら、returnの後の行はどうせ実行されないのだから、breakは不要。
けれどこれ、except節はtry節が終わった直後に置かないといけないからSyntaxError出ると思うよ。
そしてお説教。
> hundred = 100
こういう名前の付け方は意味が無い。
変数は、
・いちいち書くと長ったらしい/処理を分けたいから名前をつけたい
・今後変更される可能性に備えて、名前をつけておきたい
ときに使うものだから。仮に200に変更したとき、
hundred = 200
にするわけにはいかないでしょう。
これもあんまりいい名前じゃないけど、俺ならNにしちゃうかな。
numintの引数xも、一目でxが何か分からないから問題あり。
例外が出なかったときに処理したいのなら、Pythonでは例外の後のelse節でそれができる。
N = 100
value = 0
def numint(msg):
while True:
y = raw_input(msg)
try:
z = int(y)
except ValueError:
print u'Error : 文字ではなく数値を入力してください'
else:
return z
0757デフォルトの名無しさん
2010/08/03(火) 07:03:55ありがとうございます!!! めちゃくちゃスッキリしました!!
なぜかerrorを出さずに実行できてしまっていたのでどうしよう…ってなっていたところでした
みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、
もっと基礎を勉強したほうがいいですねorz
多謝です!!
0758デフォルトの名無しさん
2010/08/03(火) 10:08:33>みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、
そんなことが書いてあるの!?
酷い本だ。
0759デフォルトの名無しさん
2010/08/03(火) 10:13:52オライリーのヘッドファーストシリーズお勧め
0760デフォルトの名無しさん
2010/08/03(火) 10:15:59自分の子供に「息子」という名前を付けるのと同じだ。
0761デフォルトの名無しさん
2010/08/03(火) 11:27:020762デフォルトの名無しさん
2010/08/03(火) 11:30:310763デフォルトの名無しさん
2010/08/03(火) 12:40:08半分ドレッドな臭い頭のひとのことです
0764デフォルトの名無しさん
2010/08/03(火) 12:41:39いえ、変数の名前のつけ方とかはみんなのPythonには書いてなかったので、、、
読んでみた感想は、なんとなくプログラムを大雑把に理解できる感じでした
ビット演算の項でつまずいてますけどorz
変数の名前にhundredを使ったのは私ですのでみんパイは悪くないです
図書館で借りたので文句のつけようがないです、、、
>> 759
「みるみるプログラミングがわかる本」掌田津耶乃
「 C言語プログラミング入門―C99対応―」田中敏幸
[改訂新版] これからはじめるプログラミング基礎の基礎]谷尻 かおり
あたりを図書館で借りて勉強しようと思います
「エキスパートPythonプログラミング 」Tarek Ziade
「Head First JavaScript」Michael Morrison
は買ってみます
0765デフォルトの名無しさん
2010/08/03(火) 21:40:06みんパイ読んだけどちんぷんかんぷんだった
で、Cの本を適当に読んだら非常に解りやすい
やっぱプログラム初心者にパイソンはむついのかなーと何気に感じた今日この頃
■ このスレッドは過去ログ倉庫に格納されています