2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

1からPythonを学ぶスレ

1 :デフォルトの名無しさん:03/08/23 21:12
「Python」って何?


2 :デフォルトの名無しさん:03/08/23 21:13
人生の敗北者でも使えるPythonのお勉強 Part3
http://pc2.2ch.net/test/read.cgi/tech/1053955472/


3 :名無しさん@初心者:03/08/23 21:28
>>> a = 0;b = 10
>>> while a < b:
・・・ print a,
・・・ a = a + 1
・・・
0 1 2 3 4 5 6 7 8 9 ダァ〜!!
>>>数え杉。

4 :デフォルトの名無しさん:03/08/23 21:30
a += 1

5 :デフォルトの名無しさん:03/08/23 21:31
from 1 import python

6 :デフォルトの名無しさん:03/08/23 21:32
パイソンを覚えたらどんなメリットがあるの?

7 :デフォルトの名無しさん:03/08/23 21:43
CraftLaunchExが便利に使えるようになる

8 :デフォルトの名無しさん:03/08/23 21:51
Pythlon

9 :デフォルトの名無しさん:03/08/23 21:53
>>7
そんなわからんものが使えてもうれしくない

10 :デフォルトの名無しさん:03/08/23 22:05
zope を拡張できるようになれる

11 :デフォルトの名無しさん:03/08/23 22:16
>>10
ますますわからん
それはえっちなものなのか?

12 :デフォルトの名無しさん:03/08/23 22:56
>>2
学校の情報系の先生が皆python狂なんだど
皆、敗北者だったのか

13 :名無しさん@Emacs:03/08/26 00:12
>>1
Python は見やすい構文と、使えるライブラリ、とっつきやすいインタプリタが売り物。

これは個人的な感想だけど、Perl がワンライナーのような
「一発ネタ」に向いているのに対して、
Python はどちらかというとじっくり考えて組むようなプログラムに向いてると思う。
(ソースがきれいだし複雑なデータ構造が扱えるから。)

プロトタイプ作成とか、グルー言語 (C で書かれたモジュールをつなぎ合わせる)
として使う人もいる。構文が簡単なため、入門用言語としてすすめる人もいる。

欧米ではかなりの人気だが、日本では
Ruby のほうが相対的に有名なため、Python はマイナーだと思われている。


14 :デフォルトの名無しさん:03/08/26 00:34
>>13==1
重複スレの削除依頼はまだか?

15 :名無しさん@Emacs:03/08/26 00:45
これは「1から」だからいいんじゃないかと思ったんだけど。


16 :デフォルトの名無しさん:03/08/26 09:54
上級者と初級者での棲み分けは人気言語だけの特権だとでも?

17 :名無しさん:03/09/05 22:33
(゚Д゚)ゴルァ
学べや!


18 :デフォルトの名無しさん:03/09/12 19:26
http://www.python.org/~guido/
guidoマンセー


19 :デフォルトの名無しさん:03/10/12 10:56
削除以来しとけよ。

20 :デフォルトの名無しさん:03/10/12 10:57
─- 、::::;;;;;;;;;`゙゙''‐ 、    __,,,,......,,,,_/:::::::::/: !|   >>3->>10 ごめん >>1 は童貞だから許してやって
  . : : : : : : `゙'ヽ、:::゙ヾ´::::::::::::::::::::::`゙゙゙'''‐'、. l|
、、 . : : : : : : : : r'":::::::::::::::::::::::::,r':ぃ::::ヽ::::::::ヽ!                 ,、- 、
.ヽ:゙ヽ; : : : : : :ノ:::::::::::::::::::::;;、-、、゙:::     rー-:'、                /   }¬、
. \::゙、: : : :./::::::::::::::;、-''"::::::::::   ,...,:::,::., :::':、            _,,/,,  ,、.,/   }
   ヽ:ヽ、 /:::::::::::::::::::::::::     _  `゙''‐''"  __,,',,,,___       /~   ヾ::::ツ,、-/
     `ヽ、:::::::::;;;、、--‐‐'''''',,iニ-    _|  、-l、,},,   ̄""'''¬-, '  ''‐-、 .,ノ'゙,i';;;;ツ
   _,,,、-‐l'''"´:::::::'  ,、-'" ,.X,_,,、-v'"''゙''yr-ヽ / ゙゙'ヽ、,    ,.'      j゙,,, ´ 7
,、-''"    .l:::::::::::;、-''"  ,.-'  ゙、""ヾ'r-;;:l  冫、     ヽ、 /    __,,.ノ:::::ヽ. /
       l;、-'゙:   ,/      ゞ=‐'"~゙゙') ./. \    /  '''"/::::;:::;r-''‐ヽ
     ,、‐゙ ヽ:::::..,.r'゙         ,,. ,r/ ./    ヽ.   ,'     '、ノ''"   ノ
   ,、‐'゙     ン;"::::::.       "´ '゙ ´ /      ゙、 ,'            /



21 :デフォルトの名無しさん:03/10/12 13:14
許したる

22 :1:03/10/13 13:10
うんこが食べたいです。

23 :デフォルトの名無しさん:03/10/29 23:19
にゃあ

24 :デフォルトの名無しさん:03/10/30 09:15
perlとPythonとSchemeどれを学ぶのがおすすめですか

25 :デフォルトの名無しさん:03/10/30 12:35
python その後 Schemeかな?
私はScheme使ったこと無いのでえらいこと言えないが、
ttp://cruel.org/freeware/hacker.html
の IVの1を読んでみることをお勧めする。

26 :デフォルトの名無しさん:03/10/30 22:31
>>3
肝心のインデントが消えちゃってるぞ

27 :デフォルトの名無しさん:03/10/30 22:33
>>24
Perl以外

28 :デフォルトの名無しさん:03/10/30 22:35
>>24
Schemeでゲームやパズルを解くとかAI的な方面で勉強したらどうでしょ

29 :デフォルトの名無しさん:03/10/31 13:20
perlはよくないんだ

30 :デフォルトの名無しさん:03/10/31 23:51
全ての精子は大事〜♪

31 :デフォルトの名無しさん:03/11/01 10:37
>>30
それは、 Monty Python の映画、 Meaning of Life ('83) における
素晴らしいミュージカル風のシーンで歌われた歌の一節でしたっけ

32 :デフォルトの名無しさん:03/11/09 13:48
ここは1がPythonを教えてくれる所じゃないんですか?
邪路に訴えますよ。

33 :デフォルトの名無しさん:03/11/14 11:43
Every Sperm Is Sacred!

34 :デフォルトの名無しさん:03/11/25 00:22
Perlもやれよ

35 :デフォルトの名無しさん:03/11/30 19:25
sage

36 :デフォルトの名無しさん:03/12/04 16:57
pythonをプログラムの入門用に使うとき、良い入門書はないでしょうか?

37 :デフォルトの名無しさん:03/12/04 17:00
「爬虫類のひみつ」

38 :デフォルトの名無しさん:03/12/04 18:36
>>36
Python Tutorial(日本語版)
http://www.python.jp/pub/doc_jp/tut_2.3/

39 :デフォルトの名無しさん:03/12/04 18:41
これもいいかも。

インスタント・ハッキング
http://www.python.jp/Zope/intro/instant_hacking_jp

ちなみに上の二つは非プログラマ向けの文書の筆頭に挙げられている。
http://www.python.org/topics/learn/non-prog.html

40 :デフォルトの名無しさん:03/12/05 00:36
なんだ、>>1 から Python を学ぶスレかと思ったよ。

41 :1 ◆x0qRLOoQFY :03/12/05 01:19

もうね
赤裸々に答えますよ
気合入れて質問ください

42 :デフォルトの名無しさん:03/12/05 01:24
日本語の文字コードの変換はどうやればいいんですか?

43 :デフォルトの名無しさん:03/12/05 02:31
日本語環境でのPython http://www.python.jp/Zope/articles/japanese/Python4Japanese

44 :デフォルトの名無しさん:03/12/05 12:59
なんかヨさげですね。そのうち使ってみよう。

45 : ◆x0qRLOoQFY :03/12/06 10:32
>>43
>ファイル名操作
> [...] Windows環境では問題が発生します。Windowsではパス区切り文字が"\"で、
>全角文字の2バイト目が "\" に当たる場合があるためです。

Python2.3 + WinXP なのだけど、これはちょっと改善されているみたいで、
os.getcwdu() -> unicode が追加されています。

>>> import os
>>> os.chdir(unicode('/表\'))   #Shift_JISで'\'を含む文字をリテラルで書くためのよくあるクラッジ
>>> os.getcwd() #伝統的getcwdで、string型を返す
'C:\\\x95\\'
>>> os.getcwdu() #これは新機能で、unicode型を返す
u'C:\\\u8868'
>>> print os.getcwdu()
C:\表


46 :デフォルトの名無しさん:03/12/07 21:42
>>45 そーゆう Windows での注意点のがまとまってるとこ知らない?漏れ UNIX 環境なんだけど、
WindowsXP とかも考えなきゃならなくなってさ…。なんでパスの区切りが \
なんだろ…。鬱で氏にそうだったところを >>45 のおかげで思いとどまったよ。

47 :デフォルトの名無しさん:03/12/07 22:03
>>46
むしろ OS に依存しない書き方を追求すべきかも。
os.curdir とか os.path.join() とかその辺りを使う。限界あるけどね。

48 :◆x0qRLOoQFY :03/12/08 02:06
>>36
"How to Think Like a Computer Scientist"
  by Allen B. Downey, Jeffrey Elkner and Chris Meyers
ttp://www.ibiblio.org/obp/thinkCSpy/
(published under GNU Free Document License)
目次より〜
Chapter 1: The way of the program
Chapter 2: Variables, expressions, and statements
Chapter 3: Functions
Chapter 4: Conditionals and recursion
Chapter 5: Fruitful functions
Chapter 6: Iteration
Chapter 7: Strings
Chapter 8: Lists
Chapter 9: Tuples
Chapter 10: Dictionaries
Chapter 11: Files and exceptions
Chapter 12: Classes and objects
Chapter 13: Classes and functions
Chapter 14: Methods
Chapter 15: Sets of objects
Chapter 16: Inheritance
Chapter 17: Linked Lists
Chapter 18: Stacks
Chapter 19: Queues and priority queues
Chapter 20: Trees

49 :◆x0qRLOoQFY :03/12/08 03:38
>>45 で、
> os.chdir(unicode('/表\')) #Shift_JISで'\'を含む文字をリテラルで…
とありますが、Python 2.3 では、スクリプトファイルの先頭に

┃# -*- encoding: cp932 -*-
 …のように文字コードを宣言するディレクティブを書いておくと、この余分な '\' は不要です。
つまりリテラルの「表」が次のように書けます。

┃# -*- encoding: cp932 -*-
┃# このスクリプトファイルは Shift_JIS (cp932) で保存されています。
┃print unicode("表", "cp932")
┃print unicode("表", "mbcs")

さらに、わたしは \Python23\Lib\site-python\sitecustomize.py というファイルで
┃import sys
┃sys.setdefaultencoding("mbcs")
 …というように省略時の文字encodingを設定しているので、

┃# -*- encoding: cp932 -*-
┃print unicode("表")
┃print "表".decode()
 …のように、個別のencoding指定を省略できます。 ついでにこの環境では

┃# -*- encoding: cp932 -*-
┃print repr(unicode("表")
┃print repr(u"表")
 …というスクリプトの出力は、つぎのように直感に従った結果となります。
u'\u8868'
u'\u8868'

以上はWinXP 日本語版での経験ですが、要するに使ううえでShift_JISの問題というのは感じません。

50 :デフォルトの名無しさん:03/12/08 19:23
>>47
漏れ自身は WindowsXP はあんまり使わないので Win 流儀自体よく知らないんです。
つーかドライブレターウザ-。Win だと拡張モジュールも使いにくいよね。ソース付けて
終りってわけにゃいかないし。やっぱ Win は Win 流儀に合わせないといけない予感。

>>49
おぉぉぉぉ神降臨!! 知らなかったぜ。

51 :デフォルトの名無しさん:03/12/08 19:38
-*- encoding: XXX -*-
はファイル毎だからいいんだが、
sys.setdefaultencoding("XXX")
はシステム毎だから、それに依存したスクリプトを書くと
移植性が低くなる(他環境に持っていきづらくなる)のがなぁ……
でも u"表" とか書けるのは便利なんだよなぁ……

52 :デフォルトの名無しさん:03/12/12 05:34
>>51
Python 2.3 だと sys.setdefaultencoding("ascii") のままでも
-*- coding: XXX -*- の指定だけで u"ほげ" って書けるね。
漏れも最近まで知らなかったので age(何故

$ cat test.py
# -*- coding: EUC-JP -*-
import sys
print sys.getdefaultencoding()
print repr(u"ほげ")

$ /opt/Python-2.2.2/bin/python test.py
ascii
u'\xa4\xdb\xa4\xb2'

$ /opt/Python-2.3/bin/python test.py
ascii
u'\u307b\u3052'

53 :デフォルトの名無しさん:03/12/12 05:35
てかsageてるし(w

54 :ちょっとおかしくない?:03/12/12 06:45
1からPythonを学ぶ・・ってスレタイにあるけど

Pythonって何?・・・て、これではどうやって1からPythonを
学ぶことができるのだろう。1は初心者のようだけど。
1がベテランじゃないと、1からPythonは学べないよ!!

55 :デフォルトの名無しさん:03/12/12 06:48
重複すれなんだから、いいかげんageるのやめたら?

56 :デフォルトの名無しさん:03/12/12 06:51
>>55

57 :1 ◆x0qRLOoQFY :03/12/12 07:10
>>54
ぴちょんのことなら何でも聞け。自称上級者の俺サマがどんな質問にも答えてやるぞ。

>>55
シャラップッ!!

58 :デフォルトの名無しさん:03/12/12 10:39
>>54
まさか >>32 >>40 で2回も既出のネタを繰り返してるわけじゃないよな?


59 :デフォルトの名無しさん:03/12/12 16:05
>>52
をを、ホントだ。ありがd

前に試したときはrepr()抜きでprintしてエラー出してたよ。
print u'ほげ'.encode('euc_jp')
とかやればおけーなのね。

60 :デフォルトの名無しさん:03/12/13 01:46
これからは -*- encoding: XXX -*- でソースのエンコーディングを指定できるのか!
うぉー 1 は俺よりは上級者みたいだ。アゲアゲアゲ!


61 :デフォルトの名無しさん:03/12/14 15:44
>>60
ageなのかsageなのかはっきりシル


62 :デフォルトの名無しさん:03/12/14 19:26
(・∀・)ニヤニヤ

63 :◆x0qRLOoQFY :04/01/03 11:20
2005年もがんがんいくぜー。
ぴちょんのことなら何でも聞け。
自称上級者の俺サマがどんな質問にも答えてやるぞ。

64 :デフォルトの名無しさん:04/01/03 12:55
>>1のレヴェルの低さを見たら、自分に自信がついたよ。

65 :デフォルトの名無しさん:04/01/03 13:30
>>63
鬼が笑います


66 :デフォルトの名無しさん:04/01/03 16:18
「pythonで学ぶプログラム作法」という本を読みながら学んでいるのですが、
時々、解説を省かれていたりしてつまります。
そこで、どこか初心者向けのpython解説HPを知らないでしょうか?

検索しても適当なpythonHPはみつけられませんでした・・・・・

67 :デフォルトの名無しさん:04/01/03 16:38
>>66
適当に python sites
ttp://www.python.org/doc/current/tut/tut.html
ttp://www.honors.montana.edu/~jjc/easytut/easytut/
ttp://www.networkcomputing.com/unixworld/tutorial/005/005.html

68 :◆x0qRLOoQFY :04/01/03 17:12
>>67
ttp://www.honors.montana.edu/~jjc/easytut/easytut/
→こいつはナイスなHPだ! だが、日本では二番目だ。
一番ナイスなPythonHPは、この「1から」スレだ!
なぜなら、わからないことを自称上級者の俺サマが
妥協なく解説してやるからな。

>>66は、どこでつまづいているのかを、赤裸々に書け。
まず自分の使っているOS(例: Windows 98、Mac OS-X 10.3、
Turbolinux10、超漢字、など)を告白しろ。

次に、どのようなところでつまづいているのかを書け。
例:
 ・コンピュータを起動するやりかたがわからない。
 ・その「本」で、使われている言葉がわからない。
 ・自分が誰なのかさえもわからない。→適切な病院へ行け
 ・Pythonのソフトがどこにあるかわからない。
 ・Pythonをインストールするやりかたがわからない。
 ・Pythonプログラムを実行するやりかたがわからない。

69 :デフォルトの名無しさん:04/01/03 17:14
>>68>>66に感謝し給え。
>>66以外にも良いサイトがあるのだが晒してやらねぇ。

70 :◆x0qRLOoQFY :04/01/03 17:27
感謝するぜ! >>66
さあ、思う存分赤裸々に晒してくれ、良いサイトを!>>69

71 :デフォルトの名無しさん:04/01/03 17:55
>>70

>>38
>>39
>>43

72 :デフォルトの名無しさん:04/01/03 17:55
ttp://www.python.org/

73 :デフォルトの名無しさん:04/01/03 17:56
ttp://www.vex.net/parnassus/

74 :デフォルトの名無しさん:04/01/03 17:57
ttp://www.python.jp/Zope/articles/SoftwareTools

75 :デフォルトの名無しさん:04/01/03 17:58
ttp://www.python.jp/Zope/

76 :デフォルトの名無しさん:04/01/03 18:02
ttp://iblinux.rios.co.jp/PyJdoc/lib-j/

77 :デフォルトの名無しさん:04/01/03 18:12
跳ねられたのでここまで(あと200コほどある)

78 :◆x0qRLOoQFY :04/01/03 18:19
>>71-77
巳! (←乙と形がやや似ている)

79 :デフォルトの名無しさん:04/01/03 18:23
せめて已とか己とかにしとけ。

80 :デフォルトの名無しさん:04/01/03 22:27
『Pythonで学ぶプログラム作法』 (アラン・ゴールド著、松葉素子訳、ピアソン)[1]
この本のもとねたは、「Learning to Program」としてWeb↓で公開されているものですね。

http://www.freenetpages.co.uk/hp/alan.gauld/

[1] http://www.pearsoned.co.jp/washo/prog/wa_pro45-j.html
  原著 http://www.awl.com/product/0,2627,0201709384,00.html

81 :◆x0qRLOoQFY :04/01/03 23:59
>>79 乙と巳は似ているよ!
from Tkinter import * ;# 2004-01-04, placed in the public domain.
otsu = [(15,20),(77,20),(45,41),(15,59),(15,76),(22,85),(78,85),(71,68)]
mi   = [(15,45),(74,45),(77,20),(15,20),(15,76),(22,85),(78,85),(71,68)]
c = Canvas(width=100, height=100)
top = c.winfo_toplevel()
def dismiss(ev):
    top.winfo_toplevel().destroy()
c.bind_all('<1>', dismiss)
L = []
v = otsu[:]
(x0, y0), v = v[0], v[1:]
for x1, y1 in v:
    L.append(c.create_line(x0,y0,x1,y1, width=9, capstyle='round'))
    x0, y0 = x1, y1
def morph(n):
    for i in L:
        x0, y0, x1, y1 = c.coords(i)
        c.itemconfig(i, fill='#%02x%02x%02x' % (0,128-128*n/10,0))
        c.coords(i, mi[i-1][0] + (otsu[i-1][0]-mi[i-1][0])*n/10.0,
                    mi[i-1][1] + (otsu[i-1][1]-mi[i-1][1])*n/10.0,
                    mi[i][0] + (otsu[i][0]-mi[i][0])*n/10.0,
                    mi[i][1] + (otsu[i][1]-mi[i][1])*n/10.0)
    c.update()
    n>0 and c.after(1000, morph, n-1)
c.pack(expand=YES, fill=BOTH);
top.resizable(NO, NO)
c.after(2000, morph, 10)
c.mainloop()

82 :デフォルトの名無しさん:04/01/04 00:12
>>81
久しぶりに良い「技術の無駄使い」を見た気がする。乙

83 :プログラミングって何さ?:04/01/05 18:04
 

84 :>>83 そのまえに2chの使い方覚えろ:04/01/05 20:07
 


85 :デフォルトの名無しさん:04/01/06 00:31
オマエモナー

86 :デフォルトの名無しさん:04/01/24 09:56
あげ

87 :デフォルトの名無しさん:04/01/24 17:04
 あのー、スクリプトが始まる部分の意味が気になるですけど。
何と何が等しければ、動き出すの?
if __name__ == '__main__':
do()

88 :デフォルトの名無しさん:04/01/24 17:28
__name__にはそのモジュールの名前が入ってる。
インポートされたときにはspam.pyなら'spam'のように。
インタプリタに直接渡されたときにはどんなファイルでも'__main__'となる。

つまり直接呼ばれたときだけdo()が実行されて、
インポートされたときには実行されない。

89 :デフォルトの名無しさん:04/01/24 17:37
main()
{
python();
}

90 :デフォルトの名無しさん:04/01/24 20:04
正直Pythonの利点がわからんわけよ。
オブジェクト指向や可読性ではRubyに負けてるし
、拡張つってもたとえばTcl/TkやCPANのような
他言語のコミュニティに依存してんじゃないの?
速度ではlispやperlに負けてるし。何なの?

91 :デフォルトの名無しさん:04/01/24 20:10
利点がわからなければ使わなければいい。それだけのことだ。

92 :デフォルトの名無しさん:04/01/24 20:30
勝ち負けをきめたがるのはがきっぽい

93 :デフォルトの名無しさん:04/01/24 20:43
>>90
pythonの利点はc/c++との親和性にある。
この点で他の言語よりも優位な位置にいる。

94 :デフォルトの名無しさん:04/01/24 20:47
親和性って具体的には?

95 :デフォルトの名無しさん:04/01/24 20:48
>>93
FFI の話か、
ライブラリ拡張の話か、
組み込み言語として使う話か、
何れにしてもそんなに優れているかな。

96 :デフォルトの名無しさん:04/01/24 20:48
移植のし易さ

97 :デフォルトの名無しさん:04/01/24 20:57
>>88
親切にありがとう。本当に良くわかりました。
>>90
私は未だに、オブジェクト指向と関数型のどちらが有効か
確信が持てていません。その両方に対応しやすいスクリプ
ト言語として、実用と勉強のためにPythonを使っています。
それにZopeを活かしきるにも、pythonですね。

98 :デフォルトの名無しさん:04/01/24 22:18
>>90 オマエが使ってないと言うだけで十分メリットがある。
そうだよ Ruby のほうがいいよ。オブジェクト指向では
Ruby の勝ちだよ。可読性も Ruby のほうが優れてるよ。
んじゃそーゆうことで、さよなら〜。優位性を確認して
納得したなら二度と来ないで下さい。

99 :デフォルトの名無しさん:04/01/24 22:26
Python vs Ruby
"""So, how do Python and Ruby compare?
They look more similar to each other than
either does to Perl. What are the differences?"""
...
http://c2.com/cgi/wiki?PythonVsRuby

100 :デフォルトの名無しさん:04/01/24 22:41
>>90を言い換えてみるテスト。

正直日本語の利点がわからんわけよ。
グローバル指向や可読性では英語に負けてるし
、国際化つってもたとえばアメリカや国連のような
他言語のコミュニティに依存してんじゃないの?
話者数では中国語やアラビア語に負けてるし。何なの?

101 :デフォルトの名無しさん:04/01/24 22:50
正直 >>90 の存在がわからんわけよ。
ネタだとしたら人生終わってるし、本気だとしても
人間的として >>91 - >>92 に劣ってるし。
>>93-96 には余裕でマジレスされてるし。何なの?

102 :デフォルトの名無しさん:04/01/24 22:54
可読性は仏語だ馬鹿野郎。
>話者数では中国語
そもそも中国語など存在しない。北京語 広東語 等々に分けろ馬鹿野郎。


つーか Ruby キモイ

103 :デフォルトの名無しさん:04/01/24 23:08
>>101
>>94-95>>93 に対する突っ込みだと思うよ。

104 :デフォルトの名無しさん:04/01/24 23:52
pyがperlより遅いというのは、そうでない場合もありますよ。
次の実験によれば、heap sortの例では pyのほうが、やや速い。
http://dada.perl.it/shootout/heapsort.html

一方 regexpはperlが速いのですが、2倍以上速いというわけでもない:
http://dada.perl.it/shootout/regexmatch.html

文字列の結合は pyが遅く、実装を反映して結構差が出ている。
http://dada.perl.it/shootout/strcat.html

などなど…

105 :デフォルトの名無しさん:04/01/25 00:21
文字列と数をまとめて表示する方法で「`」ってのを
使うんですね。これって、どの言語から借用されて
いるんですか?
(b.toString()の方がいいけど、慣れの問題か)

a = "super"
b = 7
print a * `b`

106 :デフォルトの名無しさん:04/01/25 00:36
>>102
ネタにマジレスするならちゃんとボケろよ。

> 可読性は仏語だ馬鹿野郎。

まったく意味不明だし。

> そもそも中国語など存在しない。

これも意味不明。つーかMandarinとか言っても通じないだろうと思って
分かりやすく書いたわけだが、あなた、相手に合わせてしゃべることが
できない人?

107 :◆x0qRLOoQFY :04/01/25 00:47
>>105
`式` は、ABC言語からの継承だ。
http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS

Pythonの作者GvRはABC言語の開発チームに居たのだ。(1982-86)
http://www.python.org/~guido/Resume.html

108 :デフォルトの名無しさん:04/01/25 00:58
>>105
コードがヴァグってますよ。3行目で
TypeError: can't multiply sequence to non-int

>>> (7).__repr__()
'7'
というようにメソッド表記もじつはできるが変人以外は使わない。

109 :デフォルトの名無しさん:04/01/25 01:10
>>107
ABC言語って、初めて聞きました。Matzさんとは違って、
このあたりは主張してますねー。ども!
>>108
ありがとうございます。かけちゃいました(^^;
(7)._repr_() ってのは確かに変態的ですね。`7`も
きてるように感じますが、ここも慣れましょう。

110 :デフォルトの名無しさん:04/01/25 01:12
>>108
>>> print map((1).__add__, [0, 2, 4, 6, 8])

みたいな変態的なの書いたことがある・・・_| ̄|○

>>> import operator
>>> print map(lambda a: operator add(1, a), [0, 2, 4, 6, 8])

と比べてどっちが良さげだろう?

111 :デフォルトの名無しさん:04/01/25 01:13
「operator.add」だった。

112 :デフォルトの名無しさん:04/01/25 01:18
>>109
>Matzさんとは違って、
>このあたりは主張してますねー。
??

113 :デフォルトの名無しさん:04/01/25 01:26
>>109
`式` に違和感があるなら repr(7) または str(7) でしょう。
`式` は、わたしもすこし恣意的な表記すぎるように感じる。

>>105 のような場合だと(bの数値が変化するとして)わたしなら
b = 7
print "super%d" % b
のように書きます。

114 :デフォルトの名無しさん:04/01/25 01:28
>>112
すいません、ひっかかりました!?(^^;
Rubyって、やっぱり調べやすいんですよね。
Intオブジェクトのページを見れば、必要な
メソッドが見つかりますもの。
「`」を見つけるのに、googleで10分かか
ったです(600google)。pythonが悪いんじゃ
なくて、私の検索力かな。。



115 :デフォルトの名無しさん:04/01/25 01:34
>>113
うう、初心者に付き合ってくれて多謝です。
str(7)と`7`の両方に慣れないといけないですね。
私、どの言語も初心者なので、全く苦じゃないです(^^)
>>114
b = 7
ans = "super%d" % b のような感じの
アプローチがあればうれしいかな。
どうでしょう。




116 :デフォルトの名無しさん:04/01/25 01:45
>>110
map((1).__add__, 〜 の方はカリーイングしているわけですね。
気がきいている、うまい使いかただとおもいます!

でもこのスレッド的には、リスト内包表現のほうが
わかりやすくて好ましいのではないでしょうか。

「わかりやすくて」というのは、bound method
オブジェクトだの高階関数だのは、抽象レベルが
たかく、「1から…学ぶ」状態の人が理解するのに
ちょっとがんばらないといけないとおもうからです。

117 :デフォルトの名無しさん:04/01/25 02:07
>>114
あなたがいま話題にしているようなことは、Python チュートリアルの
「7.1 よりファンシーな出力の書式化」で説明されています。
http://www.python.jp/pub/doc_jp/tut_2.3/node9.html

今あらためて読むと、「逆クォート (``) ではさむのは repr() と等価であるが、
利用は推奨しない。 」と書いてあって、あっそう という感じだ。

118 :デフォルトの名無しさん:04/01/25 02:12
つーかRubyだの某氏だのと禿しく耳障りなんですけど。
どうしてRuby者はこうもステレオタイプが揃ってるんだろう。
ひょっとしてPython者も向こうで同じように振舞ってるのか?

119 :デフォルトの名無しさん:04/01/25 02:24
RubyスレにPython者なんていないし。

120 :デフォルトの名無しさん:04/01/25 02:32
>>116
> リスト内包表現のほうがわかりやすくて好ましいのではないでしょうか。

>>> print [a + 1 for a in [0, 2, 4, 6, 8]]

うぃ。
精進します・・・

121 :デフォルトの名無しさん:04/01/25 02:49
>>115 の後半:
b = 7
ans = "super%d" % b

も、正しいプログラムですよ。もしそういうことを訊いているのなら。
'super7' という値を ans という名前で参照することになる。

122 :デフォルトの名無しさん:04/01/25 10:36
>>117
"super%d" % b もOKなんですね。
>>121
正しいプログラムと好ましいプログラム。
「1から」の初心者としては、最初に基本形
のガイドラインがほしいですね。
>>120
内包表記は、基本形に入りますね。



123 :デフォルトの名無しさん:04/01/25 11:22
>>122
repr(b) と "%d" % (b) にはそれぞれの想定用途があり、
ここであなたが仮定しているかもしれない「本質的な好ましさ」
みたいなものはありません。  >>117のリンク先に従って
実際に手を動かした後でもなお両者の意味がわから
なければ、またきて(より具体的に)質問してください。

repr(式) と `式` とでは、機能は同じで、 repr を使うのを推奨と
Python Tutorial を書いた人は(理由も述べずに)言っています。

「正しいプログラム」とはエラーを生じないという技術的な
ことです。(「国会議員として正しい振る舞い」というのと違って)
価値判断を含みません。

124 :デフォルトの名無しさん:04/01/25 16:09
ようするに突出して優れたところがひとつも無いから
総合力で勝負ってことだな。よくわかった。

125 :デフォルトの名無しさん:04/01/25 16:16
なんだか、まだ野良犬がうろついているようだね

126 :デフォルトの名無しさん:04/01/25 17:28
アホはほっといて、インデントでもしようぜ。

127 :デフォルトの名無しさん:04/01/25 19:09
>>126
> インデントでもしようぜ。
    爆笑w
    またーり汁!、って意味か?

128 :デフォルトの名無しさん:04/01/27 16:07

 ん
  で
 ん
  と

129 :デフォルトの名無しさん:04/02/02 01:35
初心者の質問です。解説書を読んでもはっきりわからなかったり
するのですが、インデントが同じ階層を指しているための条件って、
正確にはどんなんなのでしょう。
たとえば、タブの挿入数とスペースの挿入数が同じなら、見た目は
ずれていても同じ階層? それともタブ1つと、タブが飛ぶ桁数と同じ
スペース(4つとか)が同じ階層? タブ・スペース・タブなどごちゃ
ごちゃにまぜたときは、きっちり同じ入れ方じゃないと同じインデント
とは見なされませんか?



130 :デフォルトの名無しさん:04/02/02 12:21
見かけがどうであろうと

タブ1個=スペース8個

とみなされる。混ぜるな危険。
インデントにタブは使わない。スペースを使うこと。
http://oldriver.org/python/pep-0008j.html


131 :デフォルトの名無しさん:04/02/02 15:06
Guido はインデントにタブの使用を許可したことをずいぶん後悔しているそうだ。

132 :デフォルトの名無しさん:04/02/02 15:06
ちなみに2chに貼るときは全角スペースに。

133 :デフォルトの名無しさん:04/02/02 17:50
&nbsp;に置き換えるのも可。
全角スペースと違って直接コピペができて嬉しい。

134 :129:04/02/02 21:58
>>130-133
どうもありがとうございました。タブは標準のインデントでは
ないのですね。
インデントに重要な役割を与えている割りに、いいかげんに
見た目だけ合わせられそうなのが、初心者としては結構怖い
感じでした。必ずスペースなら見た目とレベルが一致する
わけですね。

でもインデントはタブキーでしたいなあ。秀丸でできたっけ…

135 :デフォルトの名無しさん:04/02/02 22:35
>>134
KaaEditを使えば?

タブインデントは正直恥ずかしい
堂々と公開しちゃってる奴たまにいるけど

136 :デフォルトの名無しさん:04/02/02 22:47
>>134
IDLE 使ってれば問題無いよ。


137 :デフォルトの名無しさん:04/02/03 11:26
pythonを-tオプション付きで起動すれば、変なインデントにはwarning出るよ。
-ttにしとけばエラーになる。これだと、さすがに標準モジュールは動くけど、
サードパーティーのモジュールが時折動かないという弱点がw

138 :デフォルトの名無しさん:04/02/04 02:08
 

139 :デフォルトの名無しさん:04/02/05 14:46
シフト演算子

>>>x=1 #0001
>>>x<<2 #2ビット分左シフト:0100
4

これはいちいち2進数で考えないとわからんのでしょうか?
というか何故2進数であらわすのかから判りません。
2ビット分?

140 :デフォルトの名無しさん:04/02/05 14:49
>>139
何で「シフト演算子」って言うんだとおもう?

141 :139:04/02/05 15:15
一応手順は判ったのですが、          1×2**2
何故2進数で左にシフト?2ビットという意味も相変わらずわからない

142 :139:04/02/05 15:20
ビットの意味を理解しました。

143 :デフォルトの名無しさん:04/02/05 15:22
>>141
それはCPUの中の人は二進数でしか計算出来ないから。
ビットというのはつまり二進数での一桁。
左シフト2、というのはつまり「二進数で2桁ずらす」ということ。


144 :デフォルトの名無しさん:04/02/05 16:13
問題はなぜ python でビット演算子が必要なのか? ってことじゃないかな。
ビット演算をつかうと、ひとつの数値の中にいくつものデータを
埋めこむことができる。たとえば 8ビットの数値なら
2+3+3ビットの 3つの変数として使うことができる。

>>> (x,y,z) = (1,5,4) # 2bits, 3bits, 3bits
>>> byte = x<<6 | y<<3 | z
>>> print byte
108
>>> (a,b,c) = (byte>>6, (byte>>3)&7, byte&7)
>>> print (a,b,c)
(1, 5, 4)

まあ、今ではあまり使われないテクニックだけどね。。。
UNIX のシステムコールにはいまだにビット演算が必要なものもある。
たとえば chmod のパーミッションなどがそうだ。

145 :デフォルトの名無しさん:04/02/05 16:23
べつにビット演算をつかわなくても同じことはできる。
たとえば 0〜9 の値をもつ 3つの変数を 0 〜 999 の数値に
押しこめることはできる (1ケタを 1つの変数とみなせばよいのだ)。
でも、計算機の内部表現はぜんぶ 2進数なので、ビット演算が一番効率よい。

たとえば 0 〜 999 を計算機のメモリに格納しようとすると、
これは 10ビット必要になるが、実際には 10ビットあれば
0 〜 1023 までの数値を表現できるので、使われない部分の数値 (1000〜1023) が
でてくる。この無駄をなるべくなくしたいと思うと、
結局 2の乗数が一番キリがいいという話になる。

文字列を 256進数の数値とみなすこともできる。
この場合、ビットシフトに相当する作業は文字列の読みとばしということになるね。

146 :デフォルトの名無しさん:04/02/05 16:26
>>144
> 2+3+3ビットの 3つの変数として使うことができる。

スクリプト言語としては、そういうのは本来はビットフィールド型として処理すべきことなのでは?
シフト演算子を積極的に使うとしたら、ビットストリームを解釈/変換する時とか、かな・・・
例えばエスケープビットの処理とか。


147 :デフォルトの名無しさん:04/02/05 19:59
ガイシュツだと思うけど、16進数リテラルとか8進数リテラルとか
hex() とか oct() みたいに2進数リテラルや bin() があるといいと尾も我。

>>> 0b1101
13
>>> bin(13)
0b1101
>>>

148 :デフォルトの名無しさん:04/02/05 21:04
>>147
同意。
教育目的にはコンピュータの基本である二進数を手軽に表示出来ると良なんだけど。

MSX-BASIC とかだと有ったんだけどね。


149 :デフォルトの名無しさん:04/02/05 23:06
二進数の変換は、これでいいのかな?

>>> def bin(n):
        s = ''
        while n > 0:
                if n % 2 == 0:
                        s = '0' + s
                else:
                        s = '1' + s
                n >>= 1
        return s

>>> bin(42)
'101010'
>>> int('101010', 2)
42
>>> bin(43)
'101011'
>>> int('101011', 2)
43

150 :デフォルトの名無しさん:04/02/06 01:42
>>149
それの応用で oct も hex も変換可能だね。
「教育用」に敢て関数を作っていない?

151 :デフォルトの名無しさん:04/02/06 02:22
def tni(a,b):
 if not 0 < a < 10:raise "勘弁してください"
 s=''
 while a:
  s=str(a%b)+s
  a=a/b
 return s

tni(42,2)   #'101010'
int(tni(42,2),2) #42


152 :デフォルトの名無しさん:04/02/06 02:24
#bug fix
def tni(a,b):
 if not 1 < b < 10:raise "勘弁してください"
 s=''
 while a:
  s=str(a%b)+s
  a=a/b
 return s

tni(42,2)   #'101010'
int(tni(42,2),2) #42


153 :デフォルトの名無しさん:04/02/07 19:28
#上のを base 36までに拡張
def tni(a, b):
        if not 1 < b < 37: raise ValueError, b
        digit = '0123456789abcdefghijklmnopqrstuvwxyz'
        s = ''
        while a:
                s = digit[a%b] + s
                a /= b
        return s

>>> tni(42, 2)
'101010'
>>> tni(42, 16)
'2a'
>>> tni(1000000, 36)
'lfls'

154 :デフォルトの名無しさん:04/02/09 22:16
腹いせに age にょ★

155 :デフォルトの名無しさん:04/02/10 23:36
a,bという2つのarrayがあるときに
function(a[i],b[j])の結果が[i,j]番めの要素になるような行列を作りたいのですが
どうすれば可能でしょうか。
fromfunction()を使えば可能かと思ったのですが、うまくいきません。

例:
a=arange(1,4,1)
b=arange(-2,1,1)
def area(i,j):
return a[i]**2+b[j]**2
として
c = fromfunction(area,(3,3))
とすると、
IndexError: each subindex must be either a slice, an integer, Ellipsis, or NewAxis
というエラーが出ます。

単にループでまわして[i,j]の要素に代入する以外のいい方法はないでしょうか。

156 :デフォルトの名無しさん:04/02/11 12:04
def area() の中で print i, j すれば分かりますが,
Numeric.fromfunction(func, dimension) は,indices(dimension)
でインデクス行列をつくり,それを i, j として func(i, j) を一度だけ
しか呼び出しません.
従って,dimension=(m,n) なら, i, j はそれぞれ行列:
i=[[0,...,0],[1,...,1],...,[n,...,n]],
j=[[1,2,...,m],[1,2,...,m],...[1,2,...,m]]
になります.
Numeric には,インデクス集合から他の行列要素集合を参照するための
take() がありますから,それを使うとよいでしょう.
from Numeric import *
a=arange(1,4,1)
b=arange(-2,1,1)
def area(i,j):
 return a[i]**2+b[j]**2
c = fromfunction(area,(3,3))



157 :デフォルトの名無しさん:04/02/11 12:07
おっと...
from Numeric import *
a = arange(0, 3)
b = arange(0, 3)
def area(i, j):
 return take(a, i)**2+take(b, j)**2
c = fromfunction(area, (3,3))
です.

158 :155:04/02/11 23:42
>>156
take()というのがあったんですね。
これで目的の行列が作れるのも確認しました。
どうもありがとうございました。

159 :デフォルトの名無しさん:04/02/20 06:19
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: てゆーか 'age' なんて名前、定義されてねーし
>>>

160 :デフォルトの名無しさん:04/02/20 14:23
>>153 の逆関数らしきもの

def atoi(s, digits):
 return reduce(lambda n,c: n*len(digits)+digits.index(c), s, 0)

>>> atoi("1234abcd", "0123456789abcdef")
305441741     # 0x1234abcd
>>> atoi("10010101", "01")
149        # 0b10010101
>>> f("lfls", "0123456789abcdefghijklmnopqrstuvwxyz")
1000000

digits に含まれない文字を入力すると ValueError になる。


161 :デフォルトの名無しさん:04/02/20 14:49
>>160
カコイイ

162 :160:04/02/20 14:54
訂正: f(...) は atoi(...) の間違いね。

163 :デフォルトの名無しさん:04/02/20 20:50
>>> int('lfls', 36)
1000000
>>>

164 :デフォルトの名無しさん:04/02/21 11:31
>>163
"Guido's Time Machine"ってやつだな。
必要な機能を自前で実装したあとに、
すでにPython自体にその機能が備わって
いたことに気づく。

165 :デフォルトの名無しさん:04/02/21 19:34
>>164
そーゆーのって大きな言語(仕様とか蓄積とか)にありがちだよね。
JavaとかLispとか。そろそろPythonも大言語の仲間入りか。

166 :デフォルトの名無しさん:04/02/26 00:45
今まで人のソースを読むときはEmacsで
そのまま読んでいたのだけどただ読んでるだけだと
わかりにくいからもっといい方法ない?

167 :デフォルトの名無しさん:04/02/26 01:03
実行もしてみれ。

168 :デフォルトの名無しさん:04/02/26 09:21
ttp://www.python.org/emacs/python-mode/

169 :デフォルトの名無しさん:04/02/28 09:02
きょうぼくわファイルを分割したかったのですが
無かったのでつくりました。

"""div.py - file wo bunkatsu suru"""
import sys

SIZE = 1024*1024

fn = sys.argv[1]

infile = file(fn, 'rb')
n = 1
while True:
    buf = infile.read(SIZE)
    if not buf:
        break
    file(fn+'.%03d' % n, 'wb').write(buf)
    n += 1
infile.close()


170 :デフォルトの名無しさん:04/02/28 10:39
なぜ infile は close するのに出力ファイルは close しないの?

171 :デフォルトの名無しさん:04/02/28 18:29
>>169
下手な英語でも、コメントは外人さんも見る可能性があるから
自分は下手な英語で書いているけどどっちのほうがいいんだろ。

typoだと思うけど、「わ」はちょっと…。

172 :デフォルトの名無しさん:04/02/28 20:52
>>169
誤:"""div.py - file wo bunkatsu suru"""
正:"""bunkatsu.py - fairu wo bunkatsu suru"""

徹底しなくちゃ。


173 :デフォルトの名無しさん:04/02/28 21:04
>>171
君の場合どっちでも一緒ぽい。
日本語が既にヤバイ。1行目なんか主語がどれか分からんし述語ないやん。


174 :171:04/02/28 21:47
>>173
ガ━━ΣΣ(゚Д゚;)━━ン!!

よく見るとと無 馬太..._〆(゚▽゚*)ですね。
母国語の修行に行ってきます。

175 :デフォルトの名無しさん:04/03/01 04:42
>>136
うぅっ、やっぱりそうでしたか・・。
友人から種をもらったので軽い気持ちで育ててしまいましたが、
よく考えれば当たり前ですよね・・。

しかし、成体になるまで育ててしまったものを今さらどうしていいのやら・・
日曜の朝、エサを用意しわすれてでかけたら、
夜帰った時には80cm以上も移動していました・・・。

176 :デフォルトの名無しさん:04/03/01 08:49
つり革?

177 :デフォルトの名無しさん:04/03/01 11:18
>>175 何の種なのか、非常に気になる…。

178 :デフォルトの名無しさん:04/03/01 17:02
>>175
ワロタ

179 :デフォルトの名無しさん:04/03/02 02:27
if とか while とか for の条件部に = が指定できないんだけど。。

while line = file.readline():
print line

正しい書き方を見つけられなかったので>>1さん教えて。

180 :デフォルトの名無しさん:04/03/02 02:27
age

181 :デフォルトの名無しさん:04/03/02 02:56
>>179
例えばC言語では代入は式(expression)なのでifやwhileの条件部に書くことが
できるのに対して、Pythonの代入は文(statement)なので条件部に書くことは
できないにょ。よって次のように書く必要があるにょ。

while 1:
  line = file.readline()
  if not line:
    break
  print line

こういう書き方もあるにょ。ただしファイルの内容を一括して読み込むので
ファイルが大きいと大変なことになるにょ。ファイルが小さいことが分かってる
なら手抜きできて良いにょ。

for line in file.readlines():
  print line

Python 2.2以降なら次のように書けるにょ。この方法は実際には一行ずつ
読み込むのでファイルが大きくても大丈夫にょ。

for line in file:
  print line

動くプログラムは「正しい」ので好きなように書けば良いにょ。

182 :デフォルトの名無しさん:04/03/02 03:32
xreadlines() は?

183 :デフォルトの名無しさん:04/03/02 06:58
>>181
おお。サンキュー。なんだか面倒だなー。

んじゃ、そのループの中で

if result = title.match(line):
print result.group(1)

こういうことがしたい場合ってどうすればいいの?

184 :デフォルトの名無しさん:04/03/02 11:16
「にょ」はヤメレ。

185 :デフォルトの名無しさん:04/03/02 13:17
Pythonの代入はNoneさえ返さないにょろ。
result = title.match(line)
if result : print result.group(1)
もしくは例外を使うにょろ。
try:print title.match(line).group(1)
except AttributeError:hoge() #None.group() raises AttributeError


186 :デフォルトの名無しさん:04/03/02 15:26
いい書き方とは思えませんが,
for resitem in title.findall(line)[:1]:
 print resitem.group(1)



187 :デフォルトの名無しさん:04/03/02 19:32
フィゾンだと思ってたのに、パイソンだなんて・・・

188 :デフォルトの名無しさん:04/03/02 19:48
Pythonの本二冊購入して勉強してるプログラム初心者なのですが、
プログラムを実際どうやって組むのかがわかりません。

型と演算子、基本文の章を読み終えはしたのですが。
ただ読んで、知識としてある程度覚えたって感じです。
勿論まだ読んでないとこのが多いので読みますが、
次に実践的なステップを踏むとしたら(組むとしたら)、
何を参考にするのがよいでしょうか?

良い本、サイト(英語読めません…)を知っておられるなら、
教えていただきたいです。

189 :デフォルトの名無しさん:04/03/02 20:11
>>188
ttp://www.python.jp/pub/doc_jp/tut_2.3/
ttp://www.python.jp/Zope/articles/SoftwareTools
ttp://www.ibiblio.org/obp/thinkCSpy/
ttp://www.vex.net/parnassus/

190 :デフォルトの名無しさん:04/03/02 20:19
>>189
プログラム初心者の人はいきなりチュートリアルをよんでも、理解できないよ!

191 :188:04/03/02 20:35
>>189
1行目のリンクみたいなforとかrange()関数などを
具体的にどう活用すればいいのかがよくわからんのです。
今まで読んできた部分(本)を一応理解
(その場その場で言ってることを判ってはいる、という意)は
してるつもりですが、書けといわれたら書けそうにない。
…たとえば学校の数学の授業とかみたいに、
演習問題が欲しいのかもしれません。
…それをどういう方法で進め発展させていけばいいのか、とか。


192 :デフォルトの名無しさん:04/03/02 20:41
>>191
作りたいプログラム(最初は簡単そうなの)をとりあえず作ってみる。
似たようなプログラムを探して、そのソースの解読を試みる。

など。最初は設計とかしないで手あたり次第に作ってみたほうがいい
かもね。

それにしても何もプログラム経験なさそうだけど、いきなりpythonとは
ある意味猛者だな。。

193 :デフォルトの名無しさん:04/03/02 20:43
>>188
> プログラムを実際どうやって組むのかがわかりません。
どうやって組むか以前に、プログラムで何をしたいのか決まってますか?
cf: 「Word の基礎は覚えたのですが、どうやって小説を書くのかわかりません」



194 :デフォルトの名無しさん:04/03/02 20:45
> それにしても何もプログラム経験なさそうだけど、いきなりpythonとは
> ある意味猛者だな。。

python は教育用言語でもあるからいきなりでもええと思うが。

195 :デフォルトの名無しさん:04/03/02 20:53
英語がわからないといいつつ、Pythonをやっている時点で、、、

PHPとかRubyやればいいのに、、、
Perlは(ry

196 :188:04/03/02 20:55
>>192-194
皆さんありがとうございます!

とりあえず、>>192さんの方法でこつこつやっていくことにします。
Pythonは、プログラムはじめるには良い言語と某サイトにあったので・・
>>193 漠然とならあるのですが・・・・

197 :デフォルトの名無しさん:04/03/02 21:34
漏れがガキの頃にはプログラムのソースコードが載った雑誌があって
それをチマチマと打ち込むことがプログラムの勉強になってた気がするにょ。
結果的に他人が作ったプログラムを熟読することになるし、
変更を加えて遊んでみるのも自然な成行きだったにょ。

今じゃソースコードは電子媒体で手に入るから打ち込む必要はないし、
敢えてそうするメリットも感じられないに違いないにょ。
それだけに、意識して実際に自分の手で既存のプログラムをいじって
動かしてみることが必要だと思うにょ。

とは言うものの、初心者が読んでいじれる規模のプログラムってのは
意外と少ないかもしれないにょ。モジュール化が進んでブラックボックスが
増えてるし、プログラミングを実地に学びにくくなってる気がするにょ。

198 :デフォルトの名無しさん:04/03/02 21:58
minix のコードを全部 python に直す作業をすると上達するよ >>188

199 :デフォルトの名無しさん:04/03/02 22:02
Python で学ぶプログラミング作法 を買って演習問題を片っ端から…

200 :デフォルトの名無しさん:04/03/02 22:03
なんで今さら minix?w

201 :デフォルトの名無しさん:04/03/02 22:06
>>196
とりあえず「テキストファイルを加工するプログラム」あたりから
始めると良。

例えば 2ch のログを個別の発言に分離する、とか。


202 :デフォルトの名無しさん:04/03/02 22:08
> テキストファイルを加工するプログラム

100% python でできたエディタって無かったっけ?

203 :デフォルトの名無しさん:04/03/02 22:09
pygame も入れて、サンプルのチンパンジー叩きを改造してみる、というのもいいかも。


204 :デフォルトの名無しさん:04/03/02 22:12
>>201
>「テキストファイルを加工するプログラム」
といえば名著 "Software Tools"
邦題だと「ソフトウェア作法」ってやつ
RATFORで書かれたコードをPythonに変換するのも面白いんじゃないかな

# 若かりし頃Cに変換したヤシがこの板にも沢山いるはずさ

205 :デフォルトの名無しさん:04/03/02 22:13
100% python X window manager
ttp://sourceforge.net/projects/plwm/

206 :デフォルトの名無しさん:04/03/02 22:20
100% python editor
ttp://www.rexx.com/~dkuhlman/
ttp://sourceforge.net/projects/pype

207 :デフォルトの名無しさん:04/03/02 22:22
100% Monty Python
ttp://100montypython.tripod.com/

208 :デフォルトの名無しさん:04/03/03 02:56
ほら、やっぱり196みたいに真に受けて路頭に迷う奴がいるじゃないか。
Pyみたいに建て増しに次ぐ建て増しの
温泉旅館みたいな仕様の言語が教育に向くとかいうのはいいかげんやめろよ。>機じるし

209 :デフォルトの名無しさん:04/03/03 06:14
>>208
初めてプログラミングを学ぶ人に Python を勧めている人はたくさんいるよ。
漏れも勧めたい。

"Internet Programming with Python" by Aaron Watters, Guido van Rossum, and James C. Ahlstrom
http://www.fsbassociates.com/books/pythonchpt1.htm
> Python is also easy to learn and use, so it could also serve as an interface
> for naive users of advanced applications, or as a first programming language.

"Python as a First Language" by John M. Zelle
http://mcsp.wartburg.edu/zelle/python/python-first.html

"Python as a First Programming Language for Everyone" by Dr. Toby Donaldson
http://www.cs.ubc.ca/wccce/Program03/papers/Toby.html

"Python as a First Language" by Cameron Laird
http://www.oreillynet.com/pub/a/network/2000/06/02/magazine/python_first_language.html

210 :デフォルトの名無しさん:04/03/03 10:07
http://cruel.org/freeware/hacker.html
おれはこれ読んでPythonから始めたにょろ。

211 :デフォルトの名無しさん:04/03/03 10:57
ただ漠然と「プログラミングができるようになりたい」なんて奴は
どんな言語を使おうがものにはならない。
何が作りたいものがあるなら、熱意がさめないうちにひたすらそれをやれ。
最初から正しいやり方なんてものを求めていたら、すぐに飽きる。
ある程度慣れてから体系的な勉強をすればしっかり身につくようになる。

具体的な目標がなければ、プログラミングはあまり楽しくはならないだろう。
なにか別の趣味 (例: このスレで煽るとか) を見つけたほうがいい。


212 :デフォルトの名無しさん:04/03/03 11:45
>>208
そんなこと漏れらに言われてもこまるよー。TSPython行って機印に噛み付けば?
>>196
漠然でもいいからやりたいことを挙げて、ここでコード晒しながら勉強したら?
>>210
漏れもそこで興味持った。それまでBisonと区別できてなかった。

213 :デフォルトの名無しさん:04/03/03 12:00
>>196
動機付けしてあげよう。クラスや関数を学ぶのは後回しだ。
まずwgetをインストールして
http://pc.2ch.net/test/read.cgi/unix/979106537/
行って実践。for, %s, %i, 正規表現の使い方にまず慣れる。
stringモジュールも。(オレはHTMLParserまで逝っちまった)
そのうちに、「何か同じようなコードを何回も書いてるなー」
と思ったら関数やクラスを作る良いきっかけになるだろう。

ミイラとりがミイラになるかもしれんが。

214 :デフォルトの名無しさん:04/03/03 12:07
>>212
> それまでBisonと区別できてなかった。

Σ(・∀・;)エェーッ?!

215 :デフォルトの名無しさん:04/03/03 13:37
>>196 >>201
http://pc2.2ch.net/test/read.cgi/tech/1068824510/568-569
にある、過去ログ検索スクリプトを、Pythonに置きかえるとか。
オリジナルはRuby製です。
Programingだけじゃなくて、NamazuとかMakefileとか入ってしまうからつらいか………

216 :196:04/03/03 13:51
>>201 >>215
その辺のプログラムの組み方からしてよくわからんです。
手順がわからない。今まで本読み進めてただけの状態に近いので、
自分でイメージできてない模様。

>>210
私もそこ読んでpythonはじめました。

とりあえず、本に書いてある何かのプログラム組む様子を見ながら実際に書き、
わからないところは随時基本ページに戻る、というやり方に。

まずプログラム組む以前のとこがわかっていない気がするので、
組む以前対象の本を図書館で探しましたが・・・_| ̄|○

Pythonで書かれたソースコードを探しましたが見つけられませんでした・・・

217 :196:04/03/03 14:30
Code Beachというところで、ソースコードらしきもの発見

218 :デフォルトの名無しさん:04/03/03 16:31
> ythonで書かれたソースコード
>>189(ttp://www.vex.net/parnassus/)

# 学習を兼ねてアンテナを純 python で recoding してほしいな…

219 :デフォルトの名無しさん:04/03/03 22:26
>>218
ttp://sourceforge.jp/projects/pyano/

220 :デフォルトの名無しさん:04/03/03 23:42
>>219
やっぱりあったのか…
つーか
sourceforge.jp/projects/kittywalk/
が 188 向けじゃね?(活発さ0%だけどw)

221 :デフォルトの名無しさん:04/03/04 01:19
>>216
そこまで分かっていないレベルならそれこそ有りがちな「ワードカウント」あたりから始めるのが良。

それが出来たら今度は特定の文字列を含む単語のある行だけ表示するツールを作ってみる。

とにかくテキストファイルを読んで何かして print する、というプログラムをネタを思いつく限り作ってみる。

最終的には自分で考えた方式でマークアップしたテキストを変換し html を出すスクリプトを作る。

これくらいまでやれば何か得るところがあると思うよ。


222 :デフォルトの名無しさん:04/03/11 17:33
Pythonを勉強してちょっと判らないところがありましたので皆様にお聞きしたいと思ます

参考書の最初の所に「モジュールファイルの実行」と言う節がありまして、そこでは
テキスト
ファイルに保存されているPythonの実行方法が紹介されていました。具体的な内容としては
「spam.py」と言うテキストファイルを作成し、以下の文を保存するような内容が書かれていました。

import sys #←spam.pyの中身です
print sys.argv #

そして、保存し終えた「spam.py」をPythonコマンドへの引数としてこのファイル名を指定し
て実行してくださいと書かれています。

% python spam.py -i eggs -o bacon #←コマンドの実行例
['spam.py', '-i', 'eggs', '-o', 'bacon'] #←実行結果

参考書には上記のような実行例が紹介されています。しかし、自分の環境下で上記のコマンドを
実行しても参考書と同じような物になりません。

223 :デフォルトの名無しさん:04/03/11 17:35

>>> python spam.py -i eggs -o bacon #←Python付属のPython(command line)
で実行
File "<stdin>", line 1 #したらこのような形になりました。
python spam.py -i eggs -o bacon

SyntaxError: invalid syntax
>>>

ちなみにその参考書にはWindows環境で実行する例も紹介されています。

C:\book\tests>python spam.py -i eggs -o bacon
['spam.py', '-i', 'eggs', '-o', 'bacon']

上記の例を参考に「コマンドプロプトン」上で「spam.py」を実行しても、参考
書のと同じような結果を得る事が出来ません。何がいけないのですか?



224 :デフォルトの名無しさん:04/03/11 17:36
おい>>1、さっさと俺にPythonを教えろよ。

225 :デフォルトの名無しさん:04/03/11 17:41
>>223
> 上記の例を参考に「コマンドプロプトン」上で「spam.py」を実行しても、参考
> 書のと同じような結果を得る事が出来ません。
エラーメッセージか何か出るだろう。それを書きなさい。

226 :222:04/03/11 18:56
指定されたパスが見つかりません。
と出ます

227 :デフォルトの名無しさん:04/03/11 21:02
>>223
Windows 環境で使っているようなので(それならそうと書いた方がいいよ)
それを前提に話をすると,
Python (command line) を起動すると対話モードの Python が起動します.
つまり Python はもう起動されていて,「>>>」は Python 自体のプロンプト
です.ここではスクリプトを指定できません.参考書には対話モードのことも
書いてあると思います,よく読んで違いを理解してください.
二つめのコマンドプロンプトで実行する例では,Windows が python.exe
を見つけられないために失敗しています. python.exe のある場所を
指定するか,環境変数 PATH に python.exe のある場所を追加しなければ
なりません.python.exe のある場所はインストールした Python の
バージョンによって異なります.
(本家のインストーラを使った場合)
Python 2.2 -> C:\Python22
Python 2.3 -> C:\Python23
(PyJUG の日本語インストーラを使った場合)
Python 2.2 -> C:\Python22jp
Python 2.3 -> C:\Python23jp (だったと思う)
ですから,例えば本家インストーラの Python 2.3 系を使っているなら
C:\Python23\python.exe spam.py -i eggs -o bacon
のようにして Python のある場所を絶対パスで指定して実行します.
絶対パスだとか,環境変数の設定だとかいう話は,Python固有の話題ではなく
オペレーティングシステムの操作全般の話題ですから,コマンドプロンプト
の説明が載っている Windows の参考書を調べてみてください.



228 :222:04/03/11 21:37
ありがとうございます 参考書をよく読んでみます


229 :デフォルトの名無しさん:04/03/11 21:57
この質問は FAQ のような気がする。DOS 窓で python コマンドを実行できる
ようにする設定手順を示した(できれば日本語の)ページってないの?

230 :デフォルトの名無しさん:04/03/11 22:45
>>222
キリトリ線以下をメモ帳に貼りつけて
実行したいスクリプトと同じフォルダにdummy.pyという名前で保存。
dummy.pyをクリック
python spam.py 等の実行したいコマンドを入力
-----------キリトリ---------------
import os , sys
while 1:
 line=raw_input("$dummy>")
 if line[:6] == "python":line=sys.executable+line[6:]
 os.system(line)

231 :デフォルトの名無しさん:04/03/11 22:49
とりあえずHTMLからタグを取り除くコード書いてみました
if とかwhileばっかりで。
こんなのに丸1日近くかかったけど、でも楽しくなってきました。一応役に立ったし。

232 :デフォルトの名無しさん:04/03/11 22:59
>>231
次は re.compile("<[^>]*>", re.S).sub("", s) を使って1行で済ませてみよう。

233 :231:04/03/11 23:02
>>232
ガビーン…1行でなんてできるのですか。。
↓ちなみにこんなのです…。

infile = raw_input("どのhtmlのタグをカットしますか: ")
outfile = raw_input("カットしたファイルの名前を入れて下さい: ")

f1 = open(infile)
f2 = open(outfile,"w")

char = f1.read(1)
while char:
if char == '<':
while 1:
char = f1.read(1)
if char == '>':
char = f1.read(1)
break
if not char:
break

if not char == '<':
f2.write(char)
char = f1.read(1)

f1.close()
f2.close()

print "できました。"


234 :デフォルトの名無しさん:04/03/11 23:35
>>233
インデントが消えててよく分かんないけど
アプローチとしてはいいんじゃない?
コンパイラの字句解析器みたいで折れは好きだ。

235 :デフォルトの名無しさん:04/03/12 01:58
>>231 のプログラムを改良するとしたらこんな感じかな。

1. f1.read(1) を何回もやるのは長いファイルだと効率が悪い。
 これをいっぺんに 1000文字ぐらい読むようにできないか? つまり、バッファの実装だ。
 でも < 〜 > がバッファの境界をまたがることがあるので少し考える必要がある。
 (実際にはpython内部でバッファリングされているんだろうけど、こういう感覚は大事)

2. <!-- --> の中は SGML のコメントだが、これも取りだしたいと思ったらどうする?
3. カットするファイル名をコマンドライン引数から取れるようにしたい。

プログラミングはこうしたパズル的な感覚をつかめないと上達しないので、
いきなり re とかの高等なライブラリを使うのは感心しない。


236 :デフォルトの名無しさん:04/03/12 02:48
HTMLタグをとりのぞく:

>>> import urllib, sgmllib
>>> page = urllib.urlopen('http://www.python.jp/Zope')
>>> class MyParser(sgmllib.SGMLParser):
...     def handle_data(self, data):
...         print data.decode('euc-jp').encode('shift_jis'),
...
>>> p = MyParser()
>>> p.feed(page)

shift_jis等の文字エンコーディングは実行環境にあわせて変更してください。

              * * *

>>235におけるご意見に対して、わたしは目的にあった抽象度の
高いライブラリがあるならば、適宜、利用したらよいと思います。
すべての人がプログラミングに上達する必要にコトサラ迫られて
いるわけではなく、コンピュータを使って問題を解決できさえ
すればよいという状況もあるからです。
チナミニわたしは職業的プログラマではなく、将来そうなる
つもりもありません。

237 :235:04/03/12 11:09
>>236
もっともな意見ですが、231氏はまだ若そうに見えたので。
ラクをしたがるのは年寄りになってからでいい。

238 :デフォルトの名無しさん:04/03/12 11:32
>>237
> ラクをしたがるのは年寄りになってからでいい。
逆だと思う。
むしろ若い頃から既存ライブラリ機能の再利用を試みる癖をつけて、
バグの再発明を繰り返さないようにするべきだと思う。
職業プログラマになるのなら、なおさら。

239 :222:04/03/12 14:40
>>230
やってみたのですが次のようになってしまいます

$dummy>python spam.py -i eggs -o bacon
C:\Python22jp\python.exe: can't open file 'spam.py'

240 :デフォルトの名無しさん:04/03/12 17:06
>>222
dummy の下に spam.py がありますか?

241 :デフォルトの名無しさん:04/03/12 17:24
>>237
昔に比べれば相対的に楽になってるだろ
パンチカード使わなくてもコンピュータ動くし

242 :デフォルトの名無しさん:04/03/12 18:17
>>238
使える道具は使え、という説には同意。
ただ、>>233のコードは正規表現を使う方法とは別の発展の方向性がある。
正規表現は複雑なロジックは書けない(書きにくい)から、条件や反復を駆使して
自前で処理の流れを作る(努力をする)ことには意味があると思われ。

243 :デフォルトの名無しさん:04/03/12 19:21
要するにアルゴリズムを学べるよ、ってことだね。
メモリ管理の視野に入れて実装する感覚を養えや(゜Д゜)ゴルァ!!だろ?言いたいことは。

244 :デフォルトの名無しさん:04/03/12 19:52
(・∀・)え?

245 :230:04/03/12 20:49
>>239
dummyとspamは同じフォルダに有る?

246 :239:04/03/12 21:14
dummyとspamは同じフォルダに有ります
dummyの下にspamがあるとはどういうことでしょうか?

247 :デフォルトの名無しさん:04/03/12 21:40
コマンドプロンプトで dir と入力して,
$dummy>dir
ドライブ C のボリューム ラベルは ...
...
2004/03/12 21:36 <DIR> .
2004/03/12 21:36 <DIR> ..
2004/03/12 21:36 63 spam.py
...
$dummy>

のように spam.py が出ますか?
もし spam.py でなくて, spam.py.txt や spam~1.txt と出ている
ようなら,おそらくあなたは notepad.exe でプログラムを書いている
のでしょう.スクリプトを保存するときに,「ファイルの種類」を
「全てのファイル」にして保存してください.「テキスト形式」で
保存すると,名前の後ろに勝手に .txt を付けられるのでダメです.

248 :デフォルトの名無しさん:04/03/12 22:21
いつのなったらPythonの話に入れるやら

249 :239:04/03/12 22:47
>>247
spam.py.txtとでていました
ファイルを保存しなおしたら参考書と同じ実行結果になりました
本当にありがとうございました

250 :デフォルトの名無しさん:04/03/13 03:06
>>242
あたかも再利用が努力なしに可能だと言ってるような感じがするヨ。

>>233のやりたい事が正規表現からはみ出したら、
自分でコードを書く前に、再利用できるコードが他にないか探すべき。
どうしても見付からなかったら、最後の手段として自分で実装する。

大抵の若い子は、最初から自分で実装しようとする。
そのほうが楽だから。同じような事をしているコードを探し当てて、
そのコードを理解して、そのコードに対する正しい再利用の方法を考える、
これは努力を要する。
でも職業プログラマになるのならば、メンテへのコスト意識があれば、
ぜひとも習慣付けるべきことだと思う。


251 :233:04/03/13 14:23
なんか駄目な書き方をしてしまった?
モジュールとかライブラリの勉強をするべしってことでしょうか。
精進します。アドバイスくれた方ありがとう。感謝。

252 :デフォルトの名無しさん:04/03/13 14:32
>>233
書いたコードを元にいろいろやってみると面白いかもよ(235)
楽をしたければそのための手段もあるよ(232)
ということだと思うよ。


253 :デフォルトの名無しさん:04/03/13 14:35
>>250
> あたかも再利用が努力なしに可能だと言ってるような感じがするヨ。

冗談抜きで日本語の読解にかなり問題があると思われ。

254 :デフォルトの名無しさん:04/03/13 14:45
>>233
> if char == '<':
の後、">"まで読み飛ばした後、
> continue
を入れたほうがいい。
そうすると、そこより下ではchar == '<'の場合は考えなくてよくなる。
すると、
> if not char == '<':
の条件が不要になる。

今回は特殊な扱いをする対象が"<"だけだからそれほど面倒にはならないけど、
もっと複雑な条件になった時には、ちゃんとcontinueを入れないと混乱するよ。


255 :デフォルトの名無しさん:04/03/16 20:00
ハトに食パンやったら祭りになってた

256 :デフォルトの名無しさん:04/03/21 02:28
なんだかよくわからんが
暗い奴だ>>255

257 :デフォルトの名無しさん:04/03/21 03:25
今から Python-2.3.3 をインスコします。
次に何をすればいいのでしょうか?

258 :デフォルトの名無しさん:04/03/21 05:33
アンインストールしてください

259 :255:04/03/21 06:42
>>256
おめー氏にたもうことなかれ

260 :デフォルトの名無しさん:04/03/21 14:51
>257
Unix系ならログインシェルをPythonにする。

261 :デフォルトの名無しさん:04/03/21 15:04
>>260
できるの?できるのならばそれはどうやって?

262 :デフォルトの名無しさん:04/03/21 16:12
# chsh -s /usr/bin/python spam

263 :デフォルトの名無しさん:04/03/21 16:39
>261
当然できる。
ログインシェルがEmacsとかも普通にいる。
最近見かけたのではログインシェルがgaucheって人はちょと驚いた。

ただしログインシェルを変更する事による影響とかはPython以前の知識なので
それを知る必要はあるが。


264 :261':04/03/21 18:28
ログアウトしてログインしなおしたら、コマンドが全然使えなくなりました。
戻そうと思ったのですが、何度やっても
>>> chsh /bin/bash
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'chsh' is not defined
と出て戻せません。どうしたいいのですか?


265 :デフォルトの名無しさん:04/03/21 19:28
>>264
エラー目セージの通りじゃねえの?>>264さんのpythonのトップ環境に
'chsh'が定義されていないだけと思われ。というわけでlet's define 'chsh'!

266 :デフォルトの名無しさん:04/03/21 19:45
>264
Pythonで外部コマンド呼び出す方法御存知ですか?
chsh では直接呼べません。

267 :デフォルトの名無しさん:04/03/21 19:49
以下を参照してください。
http://www.python.jp/pub/doc_jp/lib/module-commands.html

import commands
commands.getstatusoutput('chsh /bin/bash')

はい、これで commands モジュールの利用方法覚えましたね?

268 :デフォルトの名無しさん:04/03/21 19:53
ほんとにログインシェル変更(する|させる)なんてあふぉだろ。
Python勉強するのに何の意味もない

269 :デフォルトの名無しさん:04/03/21 20:59
てゆーかネタだよ。ダッシついてるし。

270 :デフォルトの名無しさん:04/03/21 21:49
Perlをログインシェルにしてる人は結構いるけど、あまり初心者向けではない。
でも普段Shellでやっている事をPythonでやってみる事はモジュールの勉強にはなるかもしれない。


271 :デフォルトの名無しさん:04/03/22 00:03
http://tinyurl.com/2kwau
↑ここでやっている企画はもうやらないのでしょうか?

272 :デフォルトの名無しさん:04/03/22 09:44
>>270
まるでsタソみたいな言い草だな。藻前パイプもリダイレクトもジョブ制御も
使わないくせにシェル使い気取ってるだろ。モジュールの勉強って正気か?
あふぉ杉。

273 :デフォルトの名無しさん:04/03/22 10:42
いくら python をシェルにできるといっても
zsh を捨てる気にはならないよ。

274 :デフォルトの名無しさん:04/03/29 08:06
python

275 :デフォルトの名無しさん:04/03/30 21:15
ヤバイ超ヤバイ。不動産のチラシマジヤバイ。
まず。築五分。これだけでもやばいのに
築五分なんてもんじゃない。
駅から五年。
何処の駅からだよ。
とにかく不動産はチラシだす前に推敲したほうがいいとおもいます。

276 :デフォルトの名無しさん:04/03/30 22:06
>>275
import win32com.client, time, os, marshal, binascii
data = marshal.loads(binascii.a2b_base64(
  "WwgAAABzJQAAAIKxgvGCyYK/gs2BQo6EgsyWvJFPgs2DfYFbg4qDk4LFgreBQgpz"
  "CQAAAILGgrGC64LFCnMrAAAAg4SDb4NDkrSDhINvg0OBQpVzk66OWYLMg2CDiYNW"
  "g32DV4OEg2+DQ4FCCnMmAAAAgtyCuIFCknqM3JWqgUIKgrGC6oK+gq+CxYLgguKC"
  "zoKigsyCyQpzGwAAAJJ6jNyVqoLIgvGCxILggvGCtoLhgsiCooFCCnMNAAAAiXeC"
  "qYLnjNyUToFCCnMTAAAAib2PiILMiXeCqYLngr6C5oFCCnM/AAAAgsaCyYKpgq2V"
  "c5OujlmCzYNgg4mDVoK+greRT4LJkISdyIK1gr2C2YKkgqqCooKigsaCqILggqKC"
  "3IK3gUIK"))
mpath = None
for i in ['WINDOWS', 'WINNT']:
  path = "C:\%s\MSAGENT\CHARS\MERLIN.ACS" %(i)
  if os.path.exists(path):
    mpath = path
if mpath == None:
  print "No merlin. Had you asked him about a martin?"
  raise SystemError
Agent = win32com.client.Dispatch("Agent.Control.2")
Agent.Connected = 1
Agent.Characters.Load("Merlin", mpath)
Merlin = Agent.Characters("Merlin")
Merlin.Show()
for i in data:
  Merlin.Speak(i)
  time.sleep(len(i)/5.5)
Merlin.Hide()

277 :デフォルトの名無しさん:04/03/31 00:31
漏れだったらこう書くかな。

for i in ['WINDOWS', 'WINNT']:
  mpath = r"C:\%s\MSAGENT\CHARS\MERLIN.ACS" % i
  if os.path.exists(mpath):
    break
else:
  print "No merlin. Had you asked him about a martin?"
  raise SystemError

278 :デフォルトの名無しさん:04/03/31 00:58
mpath = os.path.join(os.getenv('WINDIR'), r'MSAGENT\CHARS\MERLIN.ACS')
if os.path.exists(path):
  ...
else:
  print "No Merlin. ...


279 :デフォルトの名無しさん:04/03/31 23:22
PerlやRubyにおけるtrのようなものはPythonではどうやればいいんでしょ。
おしえてえろい人

280 :デフォルトの名無しさん:04/04/01 00:46
re.sub(pattern, replace, input)
ttp://www.python.jp/pub/doc_jp/lib/node103.html#l2h-826
input.replace("fromstr", "tostr")
ttp://www.python.jp/pub/doc_jp/lib/module-string.html#l2h-811

281 :デフォルトの名無しさん:04/04/01 19:10
280はエロいな・・・・

282 :279:04/04/02 22:37
ttp://age.s22.xrea.com/talk2ch/trip_new.txt
280のを参考に↑をPythonで書こうとしたけど俺の頭じゃ無理でした。
$salt =〜 tr/\x80-\xFF/\x00-\x7F/;
これをPythonではどのように書けばいいかご存知の方いませんか?

283 :デフォルトの名無しさん:04/04/02 23:47
chars = ''.join([chr(x) for x in range(256)]) # 0x00-0xFF までの文字列
table = chars[0x47:0x5B] # 0x00-0x13 の置き換え
    +chars[0x61:0x7B] # 0x14-0x2D の置き換え
    +chars[0x2E:0x7B] # 0x2E-0x7A は置き換えない
    +chars[0x2E:0x33] # 0x7B-0x7F の置き換え
    +chars[0x00:0x80] # 0x80-0xFF の置き換え
としておいて
trip = crypt.crypt(string.translate(salt, table))



284 :デフォルトの名無しさん:04/04/02 23:50
table作るときの行の折り返しには¥を使ってね

285 :1 ◆x0qRLOoQFY :04/04/02 23:52
>>282

>>> import string
>>> table = string._idmap[:128] * 2
>>> s = '\x7f\x80\xff'
>>> s.translate(table)
'\x7f\x00\x7f'
>>>

286 :デフォルトの名無しさん:04/04/03 00:24
正攻法で tr を実装してみた。エラーチェックしてないけど一応動くっぽい。
このコードは public domain に置くものとする。

import re

re_range = re.compile("(.)-(.)")

def expand_range(match):
    i = ord(match.group(1))
    j = ord(match.group(2))
    return "".join(map(chr, range(i, j + 1)))

def expand(e):
    return re_range.sub(expand_range, e)

def tr(s, f, t):
    def replace(match, f=expand(f), t=expand(t)):
        return t[f.index(match.group())]
    r = re.compile("[" + f.replace("[", r"\\[").replace("]", r"\\]") + "]")
    return r.sub(replace, s)

if __name__ == "__main__":
    assert tr("ABRA-CADABRA", "ABCDR", "abcdr") == "abra-cadabra"
    assert tr("ABRA-CADABRA", "A-DR", "a-dr") == "abra-cadabra"
    assert tr("ABRA-CADABRA", "-A-DR", " a-dr") == "abra cadabra"
    assert tr("ABRA-CADABRA", "A-DR-", "a-dr ") == "abra cadabra"

287 :279:04/04/03 09:18
レスをくれた方々ありがとうございます。とりあえずできたっぽいので晒しておきます。
>>286
これ相当に便利ですね。
本体に取り込んでもらえると幸せになれる人が結構いそう。。。
#!/usr/bin/env python
# -*- coding: japanese.shift_jis -*-
import japanese, string, crypt
from tr import * # from http://pc5.2ch.net/test/read.cgi/tech/1061640768/286

tripkey = unicode('kami', 'sjis')
salt = tripkey.encode('sjis') + 'HG'
salt = tr(salt, ':;<=>?@[\]^_`', 'ABCDEFGabcdef')
salt = tr(salt, '\x80-\xFF', '\x00-\x7F')
salt = tr(salt, '\x7B-\x7F', '\x2e-\x32')
salt = tr(salt, '\x14-\x2D', '\x61-\x7A')
salt = tr(salt, '\x00-\x13', '\x47-\x5A')
trip = crypt.crypt(tripkey.encode('sjis'), salt[1:3])
print trip[-10:]

chars = ''.join([chr(x) for x in range(256)])
table = (chars[0x47:0x5B] + chars[0x61:0x7B]+ chars[0x2E:0x7B] + chars[0x2E:0x33]) * 2
table = string.translate(table, string.maketrans(':;<=>?@[\]^_`', 'ABCDEFGabcdef'))
tripkey = unicode('kami', 'sjis')
salt = tripkey.encode('sjis') + 'HG'
salt = string.translate(salt, table)
trip = crypt.crypt(tripkey.encode('sjis'), salt[1:3])
print trip[-10:]


288 :デフォルトの名無しさん:04/04/15 20:39
緊急不浄

289 :デフォルトの名無しさん:04/04/16 19:48
(^Д^)ぬるぽ

290 :デフォルトの名無しさん:04/04/18 23:43
hoge

291 :デフォルトの名無しさん:04/04/26 18:32
http://heika-love.cool.ne.jp/futasuke.htm

292 :デフォルトの名無しさん:04/04/28 23:15
Numericのarrayで質問です。

あるarrayに対して、その値が条件を満たしているインデックスを
取り出す方法はありますでしょうか。
たとえば[1,2,3,4,5,]というarrayに対して
3以上という条件を与えたときに[2,3,4,]を返すといったような
感じです。

ご存知の方がいらっしゃいましたらご教授御願します。

293 :デフォルトの名無しさん:04/04/29 02:02
>>292
こゆこと?
>>> [index for index, item in enumerate([1, 2, 3, 4, 5]) if item >= 3]
[2, 3, 4]
>>>

294 :デフォルトの名無しさん:04/04/29 08:30
>>293 だと Numeric.array 型を返さないから,
a = array([1,2,3,4,5])
Numeric.compress(greater_equal(a, 3), a)
( x>3 なら greater(a, 3), x>=3 なら greater_equal(a, 3) )
を使ってはどうですか.
ttp://www.pfdubois.com/numpy/html2/numpy-7.html
ttp://www.pfdubois.com/numpy/html2/numpy-9.html#pgfId-36520

295 :デフォルトの名無しさん:04/04/29 08:34
質問を読み違えていました...
nonzero(greater(a, 3))
です.
ttp://www.pfdubois.com/numpy/html2/numpy-9.html#pgfId-58067

296 :292:04/04/29 23:16
>>295
ありがとうございました。
ご教授いただいた方法でできました。

マニュアルの該当箇所も示していただいて感謝です。

297 :デフォルトの名無しさん:04/05/01 00:30
PythonでCGIみたいなものを作るときにZopeを使って作るのと
直接(printf関数を使って)作ることの違いを教えてください。

298 :デフォルトの名無しさん:04/05/01 01:00
>297
逆に一緒だと思う理由が知りたい

299 :デフォルトの名無しさん:04/05/01 01:13
>>297
基本が分かっていない印象
Pythonで簡単なCGIでも作ってみれば?
たとえば掲示板とかさ
で、Zopeでおなじ機能のものを作ってみれば
2つの差が身に沁みてわかるだろう

考えるより手を動かしてみれ

300 :デフォルトの名無しさん:04/05/01 01:39
#!/chroot/bin/cgipython
# -*- encoding: japanese.euc_jp -*-

print u"Content-type: text/html; charset=EUC-JP\n"
print u"<html><body>\u306c\u308b\u307d</body></html>"


301 :デフォルトの名無しさん:04/05/01 11:54
>>300

#!/chroot/bin/cgipython ←これどこかの商用サービス?

302 :デフォルトの名無しさん:04/05/01 14:00
>>300
charset=EUC-JP???

303 :デフォルトの名無しさん:04/05/02 00:54
モグリ?>>301

304 :デフォルトの名無しさん:04/05/03 20:44
モーグリ

305 :<ヽ`∀´>:04/05/05 22:24
<ヽ`∀´> ageニダ!

306 :デフォルトの名無しさん:04/05/24 02:55
>>> import lib2ch
>>> thread = lib2ch.open("tech", "1061640768")
>>> thread.age()
>>>

307 :デフォルトの名無しさん:04/05/24 13:48
代入文が値を返さないようですが、次のように書きたいときはどうしていますか?

if spam = get_spam():
spam.sell()
elif eggs = get_eggs():
eggs.eat()

やっぱりこのように書かなければいけないのでしょうか:

spam = get_spam()
if spam:
spam.sell()
else:
eggs = get_eggs()
if eggs:
eggs.eat()

308 :デフォルトの名無しさん:04/05/24 14:36
うん。

309 :デフォルトの名無しさん:04/05/24 15:34
>>308
どうもです。タブインデントを失敗してすみませんでした。

310 :デフォルトの名無しさん:04/05/25 00:43
>>309
navi2ch だとちゃんと見えてるからいいよ。

311 :デフォルトの名無しさん:04/05/26 23:52
保守

312 :デフォルトの名無しさん:04/05/27 22:58
http://python.org/2.3.4/

313 :R:04/05/29 10:59
>>81
感銘を受けました。
Tkinterを私は使った事がなかったので、これを機会に勉強してみようと思いました。

314 :デフォルトの名無しさん:04/05/29 15:07
最近Pythonはじめた。正確にはJythonだが。かなりいいね

315 :デフォルトの名無しさん:04/06/02 02:37
Jythonのアドバンテージって何?

316 :デフォルトの名無しさん:04/06/02 11:31
Java でコードを書かなくても JVM で動くプログラムを作れて、
jar 化して配れる。
Java で作ったクラスを Jython から呼べるし、 Jython で書いたクラスも
Java から使える。


317 :デフォルトの名無しさん:04/06/05 23:55
>>316
これはすごい便利。
Javaって,書きにくいし

318 :デフォルトの名無しさん:04/06/07 00:20
>317
BeanShellでよくネ?
Python文法好きだけど.

319 :デフォルトの名無しさん:04/06/07 16:12
漏れはJavaの方が書きやすいな。Pythonの方が読みやすいが。
つまり他人はPythonで書いてくれ、漏れはJavaで書く、ってのが
理想。

320 :デフォルトの名無しさん:04/06/07 17:34
すると自分で書いたJavaを読むのは他人ということか。

321 :デフォルトの名無しさん:04/06/07 22:16
>>320
自分の書いたPerlよりましでしょ

322 :デフォルトの名無しさん:04/06/08 03:59
自分の書いた下手な字は何とか読めるが
他人の書いた下手な字は読めないしな。


323 :デフォルトの名無しさん:04/06/08 15:50
過去の自分という他人の書いた下手な字も。

324 :デフォルトの名無しさん:04/06/26 02:10
"""Knight 2000"""
from Tkinter import Tk, Canvas
W, H, N = 400, 20, 8
root = Tk()
can = Canvas(root, width=W, height=H, highlightthickness=0)
scanner = []
for i in range(N):
    scanner.append(can.create_rectangle((W/N)*i, 0, (W/N)*(i+1), H, fill='#000000'))
def decrhex(val):
    return '%02x' % (int(val, 16) / 2)
def move(item, direction):
    for i in scanner:
        color = can.itemcget(i, 'fill')
        newcolor = '#%s%s%s' % (decrhex(color[1:3]), decrhex(color[3:5]), decrhex(color[5:7]))
        can.itemconfig(i, fill=newcolor)
    item += direction
    can.itemconfig(item, fill='#ff0000')
    root.after(150, lambda: move(item, direction))
    if item <= 1 or item >= N:
        direction = -direction
can.pack()
move(1, +1)
root.bind_all('<Escape>', lambda ev: root.destroy())
root.title(__doc__)
root.mainloop()

325 :デフォルトの名無しさん:04/06/26 22:23
"""Karr in wxPython"""
from wxPython.wx import *
W, H, N = 400, 20, 10
class KarrApp(wxApp):
  def OnInit(self, *args, **kw):
    self.frame = wxFrame(None, -1, __doc__)
    self.panel = wxPanel(self.frame, -1, size=(W, H))
    self.frame.SetSizer(wxBoxSizer(wxVERTICAL));
    self.frame.GetSizer().Add(self.panel);
    self.mdc = wxMemoryDC();
    self.mdc.SelectObject(wxEmptyBitmap(W, H))
    self.brushes = [wxBrush(wxColour(0xff>>i, 0, 0)) for i in range(N, 0, -1)+range(N)]
    self.colour_stat = [N/2-1, 1]
    self.frame.Fit()
    self.frame.Show(True)
    self.timer = wxTimer(self, -1);
    EVT_TIMER(self, self.timer.GetId(), self.OnTimer)
    self.timer.Start(100)
    self.SetTopWindow(self.frame)
    return True
  def OnTimer(self, evt):
    for i in range(N):
      self.mdc.SetBrush(self.brushes[i+self.colour_stat[0]])
      self.mdc.DrawRectangle((W/N)*i, 0, (W/N)*(i+1), H)
    if self.colour_stat[0]%N == 0: self.colour_stat[1]*=-1
    self.colour_stat[0] += self.colour_stat[1]
    wxClientDC(self.panel).Blit(0, 0, W, H, self.mdc, 0, 0)
app = KarrApp(0)
app.MainLoop()


326 :デフォルトの名無しさん:04/06/27 03:08
>>324 GJ。わろた
>>325 動かない…なぜだろう

327 :デフォルトの名無しさん:04/06/27 09:33
>>326 wxPython を入れていないか、全角スペースを半角スペースに置き換えてない。

328 :デフォルトの名無しさん:04/06/29 08:40
>>325
wxTimerにGetIdがないと言われる…… -1で置き換えたら動いた


329 :デフォルトの名無しさん:04/06/29 20:06

         ∧_∧
  (○)   (∀・  )
  ヽ|〃    (∩∩  )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

330 :デフォルトの名無しさん:04/06/29 20:31
if文で括弧を使いたい・・・

331 :デフォルトの名無しさん:04/06/29 21:25
>>329
tupleタソ参上ッ(*´ω`*)

332 :デフォルトの名無しさん:04/06/29 22:12
>>330
if (hoge < 2):
  pass

333 :325:04/07/02 00:21
"""Jython-based ImiTaTion of K2000"""
from java import lang, awt, util
W, H, N = 400, 20, 8
s_colors = [awt.Color(255>>i, 0, 0) for i in range(N, 0, -1)+range(N)]
class JITT(util.TimerTask):
  def __init__(self):
    self.frame = awt.Frame(__doc__, windowClosing=self.exit)
    self.canvas = JITTCanvas()
    self.canvas.setSize(W, H)
    self.frame.add(self.canvas)
    self.frame.pack()
    self.color_stat = [N/2-1, 1]
    util.Timer().schedule(self, 0, 100)
  def run(self):
    if self.color_stat[0]%N == 0: self.color_stat[1]*=-1
    self.color_stat[0] += self.color_stat[1]
    self.canvas.marker = self.color_stat[0]
    self.canvas.repaint()
  def exit(self, evt): lang.System.exit(0)
class JITTCanvas(awt.Canvas):
  def __init__(self, config=None):
    awt.Canvas.__init__(self, config)
    self.marker = 0
  def setmarker(self, i): self.marker = i
  def paint(self, g):
    for i in range(N):
      g.setColor(s_colors[self.marker+i])
      g.fillRect(i*W/N, 0, W/N, H)
JITT().frame.setVisible(1)


334 :デフォルトの名無しさん:04/07/02 21:49
テレビは部屋を明るくして見ましょう。

from Tkinter import *

def exchange():
    if canvas["bg"] == "blue":
        canvas.config(bg="red")
    else:
        canvas.config(bg="blue")
    root.after(30, exchange)
root = Tk()
canvas = Canvas(root, bg="blue")
canvas.pack(fill=BOTH, expand=True)
root.after(30, exchange)
root.mainloop()

335 :デフォルトの名無しさん:04/07/03 08:21
jython JDK1.5で動かん。

336 :デフォルトの名無しさん:04/07/03 14:23

m9っ・∀・) ドーン!!!

337 :デフォルトの名無しさん:04/07/03 17:29
JDK1.5はJythonをソースからコンパイルしなおさないとmojix。

338 :デフォルトの名無しさん:04/07/05 14:08
あの方の名前は勘弁してよ。

339 :デフォルトの名無しさん:04/07/05 21:20
mojix さんって有名人なのでしょうか?

どこのページを見ればそのひとについてわかりますか?

340 :デフォルトの名無しさん:04/07/05 22:32

>>339 釣りがどうか知らんが、
http://pc5.2ch.net/test/read.cgi/php/1079778836/


341 :デフォルトの名無しさん:04/07/06 00:16
オープンソースWeb技術をやっている人なんですか?

342 :デフォルトの名無しさん:04/07/10 20:01
ロジックの質問になるんですけど、
次数を指定して順列をリストにして返す関数を作りたいです。

順列って、次数3の時は、これの結果ですけど、
[(x,y,z) for x in range(3) for y in range(3) for z in range(3) if x != y and y != z and z != x]
これの次数を引数にして、順列を返してくれる関数ってのが、うまく作れません。
うまい方法があれば教えてくだたい。>>1

343 :デフォルトの名無しさん:04/07/10 21:36
いまだにスレタイの真意が分からん
初歩から学ぶのかあるいは1が神なのかが

344 :デフォルトの名無しさん:04/07/11 00:09
>>343
イイヨイイヨー
実にxxxxxxをやってそうな奴の書き込みだ。

「初歩から学ぶ」 なら「1からPythonを学ぶスレ」
「1が神」なら「>>1からPythonを学ぶスレ」

と自明だろうに。

345 :名無しさん@そうだ選挙に行こう:04/07/11 07:20
ttp://www1.u-netsurf.ne.jp/~merita/python/python40.html
ttp://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/126037


346 :名無しさん@そうだ選挙に行こう:04/07/11 07:51
>>344
それは自明でない。
そうではなくて>>1の内容から前者であることが自明である。

347 :名無しさん@そうだ選挙に行こう:04/07/11 11:54
いや、>>1 はクイズ形式で教えようとしていたのかもしれん。

348 :名無しさん@そうだ選挙に行こう:04/07/11 16:57
>>342
順列生成は古典的な例題だからアルゴリズムの本を見ればソースが載ってるよ。
それを Python で書き直せばよいと思われ。

349 :デフォルトの名無しさん:04/07/11 20:48
2ちゃんねるにPythonコードを貼り付ける前にインデントを&nbsp;にするWin用ツールです。
実行すると、クリップボードのテキストデータを書き換えます。

(その1)
"""htmlify clipboard data (for Windows)"""
#2004-07-11, placed into the public domain.
#c.f. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/150115
import re
from cStringIO import StringIO
import win32clipboard as cb
from win32con import CF_TEXT

def htmlify(src, dst):
    for line in src:
        line = line.expandtabs(8)
        line = line.replace('&', '&amp;')
        line = line.replace('<', '&lt;')
        line = line.replace('>', '&gt;')
        line = re.sub(r'\s{2,}', (lambda m: m.group().replace(' ', '&nbsp;')), line)
        dst.write(line+'\r\n')


350 :デフォルトの名無しさん:04/07/11 20:49
>>349 (その2)
def getText():
    cb.OpenClipboard()

    s = cb.GetClipboardData(CF_TEXT)
    cb.CloseClipboard()
    return s

def setText(s):
    cb.OpenClipboard()
    cb.EmptyClipboard()
    cb.SetClipboardData(CF_TEXT, s)
    cb.CloseClipboard()

def main():
    buf = StringIO()
    htmlify(getText().splitlines(), buf)
    setText(buf.getvalue())

if __name__ == '__main__':
    main()


351 :1 ◆x0qRLOoQFY :04/07/11 21:14
>>342 再帰構造を見つけるのだ!
>>343-344,346 1は紙だ!

def removed(elem, seq):
    newseq = list(seq[:])
    newseq.remove(elem)
    return newseq

def permute(seq):
    if len(seq) < 2:
        return list(seq)
    elif len(seq) == 2:
        return [[seq[0], seq[1]], [seq[1], seq[0]]]
    else:
        out = []
        for head in seq:
            for tail in permute(removed(head, seq)):
                out.append([head] + tail)
        return out

if __name__ == '__main__':
    from pprint import pprint
    pprint(permute(range(4)))

352 :342:04/07/12 20:55
ブラボーです。神ですね。>>351>1
再帰関数って私は学校の時に、なんか演習でフラクタル図形を描いた以外にはやった事がなくて、参っていました。今後、>>351を参考に作りたいと思いますね。

>>348
実は、私はこれについて、なにも調べたりせずに独自で作ってました。で、こんなのが出来てきました。凶悪です。
作成中で、まだ関数にしてないですし、変数の名前もヒドイですが、結果は結構出ています。インデントはここに貼るために全角スペースにしました。便利なので、Kaaeditで作っています。おまけに、コメントも

from operator import mul
from random import randint
deg = randint(2,5)
print '= '*20,deg
degKai = [reduce(mul, range(1,i+1)) for i in range(deg,0,-1)]+[1]
lsRet = []
for i in range(0,degKai[0],1):
  tmp =[]
  lsDeg = range(deg)
  for j in range(1,deg+1):
    tmp.append(lsDeg.pop((i/degKai[j])%(deg-j+1)))
  lsRet.append(tmp)
for l in lsRet: print l

353 :342:04/07/12 21:04
なんかコピペしたり、改行減らしたりしてたら、文章がおかしくなりました。
アイデアとしては、順列の作るときに pop を使おうと思ったのと、
順列に 0 から番号を振り、その番号から順列を作れないかな?と考えた点です。
自分で作って「これは激しいな」と思いました。

例えばこれが4次の時の pop のインデックスになるリストのリストです。↓
[(x,y,z,v) for x in range(4) for y in range(3) for z in range(2) for v in range(0)]
あまりうまい説明が見付かりませんけど。

354 :342:04/07/12 21:12
>>353のリストで1箇所間違ってました。
[(x,y,z,v) for x in range(4) for y in range(3) for z in range(2) for v in range(1)]
です。最後が for の range がの引数が違ってました。
>>352も改めて見ると、キタナ過ぎですね。w
手元で上手く直せたらまた、貼りますね。

355 :デフォルトの名無しさん:04/07/13 18:08
>>342

deg = 4
kai = reduce(lambda a,b:a*b, range(1,deg+1))

lsIdx = []
for i in xrange(kai):
  lsTmp = []
  for j in range(1,deg+1):
    lsTmp.insert(0,i%j)
    i = i/j
  lsIdx.append(lsTmp)

lsPer = []
for i in xrange(kai):
  lsTmp = []
  lsPop = range(deg)
  for j in lsIdx[i]:
    lsTmp.append(lsPop.pop(j))
  lsPer.append(lsTmp)

for i in xrange(kai):
  print i,lsIdx[i],lsPer[i]

356 :デフォルトの名無しさん:04/07/15 01:42
こんなのはどうかなぁ.

import copy, operator
def permute(n):
  if n == 0:
    return [[0]]
  return reduce(operator.concat, [[p[:i]+[n]+p[i:] for i in range(n+1)] for p in permute(n-1)])

for i in xrange(4):
  plist = permute(i)
  plist.sort()
  print len(plist), plist


357 :デフォルトの名無しさん:04/07/15 21:37
実行したら激しく低速だった.

358 :342:04/07/16 00:14
レスありがとうございます。>>356
コード量としては、最小ですね。
It's a sony!(スラング「こいつぁすげぇぜ」の意)
って感じですね。

最近になってやっとそのURLが私へのレスと分かり、その辺見入りました。>>345
下のURLにある、commentのアルゴリズムが全く完全に最強っぽかったです。
大変参考になりました。ありがとうございました。


359 :デフォルトの名無しさん:04/07/16 14:17
ソース見てたら
勃起した。

360 :デフォルトの名無しさん:04/07/16 16:16
list comprehension を入れ子にする必要なかったね.
def permute(n):
  if n == 0:
    return [[0]]
  return [p[:i]+[n]+p[i:] for i in range(n+1) for p in permute(n-1)]

にしたら大分高速になりました.
2.4 の generator expression を使って,generator を返させるとこうなります.
def permutec(n):
  if n == 0:
    return [[0]]
  return (p[:i]+[n]+p[i:] for i in range(n+1) for p in permutec(n-1))

g = permutec(6)
while True:
  try:
   print g.next()
  except:
   break

これだと generator を返すので,permute(10000000) とかやっても一瞬.

あと,>>351 のコードを2.4a1 で実行したら
TypeError: list objects are unhashable
になった.なぜだろう.

361 :デフォルトの名無しさん:04/07/16 17:17
>>359
正常です

362 :デフォルトの名無しさん:04/07/16 18:17
これはすごいですね。It's a sony過ぎですね。>>360
generatorとは、私はまだ触れたことがないのですけど、xrangeみたいなものですね?
ものすごく適切な実装に思えます。
ただ、結果の順序がlexicographic orderでないのですけど、sortって出来るのでしょうか?

363 :342:04/07/16 19:07
def permutec(ls):
  ln = len(ls)
  if ln == 1: return [ls]
  ls = [ls[i:i+1]+p for i in range(ln) for p in permutec(ls[:i]+ls[i+1:])]

  return ls

from random import randint
from time import time

n = randint(2,8)
cst = -time()
g = permutec(range(n))
cst += time()
#for i in g: print i
print n,'次順列',cst,'sec'

私も>>360さんに習って作ってみました。
そして、これはちゃんと辞書式順序で結果が返されます。
個人的には「出し切った」なと、思ってます。(w
あとgeneratorが気になるのですけど。

364 :342:04/07/18 22:05
さらにn個のリストからのm個の抽出に対応してみました。

def permutec_m(ls,m):
  if m == 1: return [[j] for j in ls]
  return [ls[i:i+1]+p for i in range(len(ls)) for p in permutec_m(ls[:i]+ls[i+1:],m-1)]
# # # test
from random import randint
from time import time

n = randint(2,6)
m = randint(1,n-1)
cst = -time()
g = permutec_m(list('ABCDEFGHIJK'[:n]),m)
cst += time()
for i in g: print i
print (n,m),'順列',len(g),cst,'sec'


365 :342:04/07/30 00:20
今度はLLサタデーを意識して、n-queen問題をやってたりして。<私

366 :デフォルトの名無しさん:04/07/31 09:50
342さん、待ってるから…

367 :デフォルトの名無しさん:04/07/31 12:48
in $PYTHON/Lib/test/test_generators.py l.967:
# A conjoin-based N-Queens solver.
...

368 :342:04/08/02 00:11
実は土曜日までにやろうと思い、上手くいかなくてグッタリしていました。
待っている人がいたとは、すいません。
斜めのロジックは後から付け足すとして、縦横の(nナイト問題?)にしてやってみます。

369 :342:04/08/02 13:29
だいぶアレですが、n-kight問題と言うことで
def nknight(deg,lst=None):
  if lst == None: lst =[[ '' for x in range(deg)] for y in range(deg)]
  return line(lst)
  
def line(ls):
  if len(ls) == 1:
    tmp = ls[0][:]
    tmp[ls[0].index('')] = '○'
    return [tmp]
  lsRet=[]
  for i in range(len(ls[0])):
    tmp=[]
    tmp.append(['●']*len(ls[0]))
    for l in ls[1:]:
      tmp.append(l[:])
    if ls[0][i]=='':
      tmp[0][i] = '○'
      for l in tmp[1:]:
        l[i] = '●'
      for s in line(tmp[1:]):
        lsRet.append(tmp[0]+s)
  return lsRet

# # # # # # # # # # # # # # # # # # # #
print '# '*20
rec = nknight(4)
for i in rec: print i


370 :デフォルトの名無しさん:04/08/02 15:09
パイソンとリスプってどっちがハッカーっぽいですか?

371 :デフォルトの名無しさん:04/08/02 15:14
漏れも書いてみた.
q は [3, 0, 1, 2] のようなリストで,
この例だと,コマが (0, 3), (1, 0), (2, 1), (3, 2) に
置かれているという意味.
hit の条件式を変えれば,queens にも knight にもなる.

def hit(x1, y1, x2, y2):
    return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)

def safe(q, ny):
    nx = len(q)
    for x, y in enumerate(q):
        if hit(x, y, nx, ny):
            return False
    return True

def queens(q, n):
    if len(q) == n:
        return [q]
    else:
        Q = []
        for y in range(n):
            if safe(q, y):
                for i in queens(q + [y], n):
                    Q.append(i)
        return Q

def nqueens(n):
    return queens([], n)

print nqueens(4)


372 :デフォルトの名無しさん:04/08/02 15:33
ジェネレータ版

def queens(q, n):
    if len(q) == n:
        yield q
    else:
        for y in range(n):
            if safe(q, y):
                for i in queens(q + [y], n):
                    yield i


373 :デフォルトの名無しさん:04/08/02 15:45
q を最初から [(0, 3), (1, 0), (2, 1), (3, 2)] のようなリストで
持つようにすると,毎回 enumerate しなくて済む.

あと,毎回 len で q のリストの長さを求めるかわりに
queens の引数に渡してしまうようにした.

def safe(q, nx, ny):
    for x, y in q:
        if hit(x, y, nx, ny):
            return False
    return True

def queens(q, L, n):
    if L == n:
        yield q
    else:
        for y in range(n):
            if safe(q, L, y):
                for i in queens(q + [(L, y)], L+1, n):
                    yield i


374 :342:04/08/02 17:56
やっと見られるようになってきた。
私のは全パタン網羅するように作ってます。

def nknight(deg,lst=None):
  if lst == None: lst =[[ '' for x in range(deg)] for y in range(deg)]
  return line(lst)
  
def line(ls):
  if len(ls) == 1:
    tmp = ls[0][:]
    tmp[ls[0].index('')] = '○'
    return [[tmp]]
  lsRet=[]
  for i in range(len(ls[0])):
    tmp=[]
    tmp.append(['●']*len(ls[0]))
    for l in ls[1:]:
      tmp.append(l[:])
    if ls[0][i]=='':
      tmp[0][i] = '○'
      for l in tmp[1:]:
        l[i] = '●'
      for s in line(tmp[1:]):
        lsRet.append([tmp[0]]+s)
  return lsRet

# # # # # # # # # # # # # # # # # # # #
print '# '*20

rec = nknight(4)
print rec
print len(rec)

375 :342:04/08/02 18:11
やった、n-queenが出来たっぽい。あ、関数名がknightのままだ。

def nknight(deg,lst=None):
  if lst == None: lst =[[ '' for x in range(deg)] for y in range(deg)]
  return line(lst)
def line(ls):
  if len(ls) == 1:
    tmp = ls[0][:]
    try: tmp[ls[0].index('')] = '○'
    except: return []
    return [[tmp]]
  lsRet=[]
  for i in range(len(ls[0])):
    tmp=[]
    tmp.append(['●']*len(ls[0]))
    for l in ls[1:]:
      tmp.append(l[:])
    if ls[0][i]=='':
      tmp[0][i] = '○'
      for l in tmp[1:]:
        l[i] = '●'
      j=1
      for l in tmp[1:]:
        try: l[i+j] = '●'
        except: pass
        try:
          if i>=j: l[i-j] = '●'
        except: pass
        j += 1
      for s in line(tmp[1:]):
        lsRet.append([tmp[0]]+s)
  return lsRet

376 :342:04/08/03 12:37
てっきりチェスでknightが縦横に動けるのかと思ってましたが、
実際はルークR(ook)がそうでした。
うう、n-hisyaにすれば良かった。。。knightは4方向移動可能な桂馬でした。
ttp://www.jca-chess.com/chess-2.htm

>>367
見てみました。こんなところでも扱われているなんて、とてもメジャーな課題なんですね。
>>371
ありがとうです。
> q は [3, 0, 1, 2] のようなリストで,
ってのも、最初はエッと思いましたけど、慣れるともっともに思えました。
次は私もこの形で値を返すロジックにしてみたいと思います。

次のアイデア:
1.n次の盤面をあらわす、n個のrange(n)を含むリストを用意する。
 →
2.そのリストを受け取って、その0行目のリストのindexにQを配置すると考える。(配置不可能なら空リストを返す。)
 リスト長が1なら、Q配置可能なindex値全部をリストのリストで返す。
 そのQにより、配置不可能になるindexをリスト[1:0]より、removeする。
 そうして更新されたリスト[1:]を再帰的に処理する。
 Qの配置を全部尽くした結果のリストのリストを返す。

これで、出来るかな?この次はユニーク解とかを考えるかな?
実は私は先週はLL土曜だと思っていて出来なくてグッタリしてたので、今週だと分かってからはガゼンやる気が出ています。
LL土曜では、分散処理とかをやるのかな?現在n=23だったか24までの解が出るんでしたっけ?それを超えるアイデアが発表されるのかなぁ?
generatorはこうだよって話になるのかなぁ?

377 :342:04/08/03 12:42
てっきりチェスでknightが縦横に動けるのかと思ってましたが、
実際はルークR(ook)がそうでした。
うう、n-hisyaにすれば良かった。。。knightは4方向移動可能な桂馬でした。ううぅ
ttp://www.jca-chess.com/chess-2.htm

>>367
見てみました。こんなところでも扱われているなんて、とてもメジャーな課題なんですね。
>>371
ありがとうです。
> q は [3, 0, 1, 2] のようなリストで,
ってのも、最初はエッと思いましたけど、慣れるともっともに思えました。
次は私もこの形で値を返すロジックにしてみたいと思います。


378 :342:04/08/03 12:44
あ、書き込まれてないと思って間違えてまた出してしまいました。すいません<377

379 :デフォルトの名無しさん:04/08/03 21:35
LL Weekend のプログラムを読むと対戦形式のようですよ

380 :342:04/08/03 22:49
改めて読んでみると、本当ですね!対戦型ですね。>>379
それで、言語別に対戦させるとか、コード自体の美しさを見るとかするんですね、きっと。多分。

381 :342:04/08/03 23:03
□■■□ んー。となると、これはロジックの問題で、
■□□■ 先手必勝とかになりそうだなぁ。(予想)
■□□■ ちなみに、4×4のボードだと、
□■■□ 先手が□(左図)に打てば、必勝だと思う。


382 :342:04/08/04 00:15
□■■■■□ 奇数×奇数なら、
■□■■□■ 先手が最初にド真ん中に打って、
■■□□■■ 後は後手の打った場所の中心対象に打てば、必勝。
■■□□■■ (これは数学者秋山仁がよく書く話)
■□■■□■ 6×6の場合は今のところ私には、
□■■■■□ Queenを4つ置いて5つ目が置けないパターンが見付からないので、
多分、先手がこの図の□に置けば必勝になると思う。

で、やっと通常の8×8のチェッカボードに行き着くのだけど、
これもやっぱりQueenを6つ置いて7つ目が置けないパターンがあれば別だけど、
先手がQueenを8つ置ける配置を崩すだけで、先手必勝になると考えられそう。

6*6でQueenを4つ置いて5つ目が置けないパターンを探すプログラム、
8*8でQueenを6つ置いて7つ目が置けないパターンを探すプログラムはすぐに作れるかなぁ、、。



383 :デフォルトの名無しさん:04/08/04 00:22
いや、常に後手必勝。先手の初手の隣に後手が置けばそこで手詰まり。

□○●□□□□○
□□○●□□○●
□□□○●○●□
□□□□○●□□
□□□○●○●□
□□○●□□○●
□○●□□□□○
○●□□□□□□

このゲーム破綻してない?


384 :342:04/08/04 00:38
○●●●●● >>383
●●●●●○ え、Queenは縦横斜めにキクから、
●○●●●● そうはならないと思うのだけど?
●●●●●● でも、パターン数は少ないみたいなんで、
●●●●●● 総当りでいけるッポイですね。
●●○●●● ←382で言った直後に、
6*6で4つ以上置けないパターンを発見しました。(すごい汚いプログラムで)他にもあるかも、、。
そしたら、先手はこうならないように持ち込むアルゴリズムが必要ですね。
8*8も6個以上置けない配置が見付かるかなぁ?

私はこのゲームは'先手必勝'になると思う!

385 :342:04/08/04 01:03
○●●●●●●● 384に書いた6*6で5つ目が置けないパターンは、
●●○●●●●● ユニーク解として、あの形1個でした。
●●●●○●●● と、言うわけで、先手は、6個置けるパターンと、
●○●●●●●● 4個置けるパターンさえ崩せば、必勝。
●●●○●●●●
●●●●●●●● 8*8の場合は、驚いた事に、
●●●●●●●● 5個しか置けないパターンを見つけてしまった。
●●●●●●●● きっと、8,7,6,5個を置き次が置けないパターンがあり、
先手は8個と6個のパターンを避けると言う戦法で、必勝になる!たぶん!

私は、Pythonを応援しています。(sage

>>370
私はリスプって知らないですけど、
ttp://cruel.org/freeware/hacker.html
ここでPythonは良いように書かれているので、この文章が書かれた当時でもハッカーからの注目されてたんでないか?と思ってます。

386 :342:04/08/04 01:40
とかなんとか、ここまで来て気が付いたのだけど、
この対戦N-Queenのルールは「他のクィーンの効き筋に置いたらそのプレイヤーの負け」という事は、
手駒のキキ筋は考えなくても良いのね。
と、なるとこれまでの考察はいきなり無に帰してしまうなぁ。
明日は飲み会なので、あさってまた考えよう。。。

387 :342:04/08/05 21:10
対戦と言うことなので、
こんなふうにして調べようと思った。

0: 駒もなく、キキ筋でも無いマス
1: 先手の人のキキ筋のマス
2: 後手の人のキキ筋マス
3: 駒が置かれた または 先手と後手のキキ筋のマス

1311 例えば、4*4の盤で、
1110 先手(1,0)
0101
0100

1331 次に後手(2,3)とすると、こんな風になる。
3130 これで、上手く表されているんでないかなと。
0323
2332

388 :342:04/08/05 21:16
これまでに作ってたn-queen問題のプログラムは最終的にこんな形になりました。

def nqueen(deg,lst=None):
  if lst == None: lst =[[ '' for x in range(deg)] for y in range(deg)]
  return line(lst)
def line(ls):
  for l in ls:
    if not('' in l): return []
  if len(ls) == 1:
    n = len(ls[0])
    return [[['●']*(i)+['○']+['●']*(n-i-1)] for i in range(n) if ls[0][i] == '']
  lsRet=[]
  for i in range(len(ls[0])):
    tmp=[]
    tmp.append(['●']*len(ls[0]))
    for l in ls[1:]:
      tmp.append(l[:])
    if ls[0][i]=='':
      tmp[0][i] = '○'
      j=1
      for l in tmp[1:]:
        l[i] = '●'
        try: l[i+j] = '●'
        except: pass
        try:
          if i>=j: l[i-j] = '●'
        except: pass
        j += 1
      for s in line(tmp[1:]):
        lsRet.append([tmp[0]]+s)
  return lsRet

389 :342:04/08/06 12:37
返し値がリストになるように作り直し、今のところnルーク問題だけど、
どっかで見た事のある値が返ってくるなぁ。
hit()の条件を変えて、nクイーンにする予定。

def nqueen(deg,lst = None):
  if lst == None: lst = [range(deg) for i in range(deg)]
  elif deg == 0: lst = [x for x in lst]
  else: lst = [x[:deg] for x in lst[:deg]]
  return line(lst)
def line(ls):
  if [] in ls: return []
  if len(ls) == 1: return [[x] for x in ls[0]]
  lsRet=[]
  for idx in ls[0]:
    lsTmp = hit(idx,ls[1:])
    for p in line(lsTmp):
      lsRet.append([idx]+p )
  return lsRet
def hit(i,l):
  return [[y for y in x if y != i] for x in l]

n=4
rec = nqueen(n)
print rec,len(rec)


390 :342:04/08/06 20:00
x座標のリストを返すにして、簡潔にしました。
>>389のものと実行速度を比べて、それほど早くなってないので、ガックリ。

def nqueen(deg,lst = None):
  if lst == None: lst = [range(deg) for i in range(deg)]
  elif deg == 0: lst = [x for x in lst]
  else: lst = [x[:deg] for x in lst[:deg]]
  return line(lst)

def line(ls):
  if [] in ls: return []
  if len(ls) == 1: return [[x] for x in ls[0]]
  return [[idx]+l for idx in ls[0] for l in line(hit(idx,ls[1:]))]

def hit(i,l):
  return [[y for y in l[j] if y != i-j-1 and y != i+j+1 and y != i ] for j in range(len(l))]


391 :デフォルトの名無しさん:04/08/17 21:21
Pythonを大学で学びたいのですが、高知大学がいいのですか?

392 :デフォルトの名無しさん:04/08/17 23:08
大学で学ぶほどのものか?

393 :デフォルトの名無しさん:04/08/18 12:57
独学して、ソースの改良を提供したりして、いずれはHackerデビューというのではダメ?>>391
私は、どうしてPythonと大学を結ぶといつも高知大学がコメントされるのかから、
よくわからないけど、どーしてだろう?
(伯爵の人が高知大学の関係の人だったっけ??

394 :デフォルトの名無しさん:04/08/18 22:45
>>391
Pythonは学ぶというより使いこなすもの,って感じなんだが...
部外者からは敷居が高く見えるんかなあ?

395 :デフォルトの名無しさん:04/08/18 22:46
>>393
恐らくコーチだから....?













失礼!

396 :デフォルトの名無しさん:04/08/18 23:38
>>393
> 私は、どうしてPythonと大学を結ぶといつも高知大学がコメントされるのかから、
> よくわからないけど、どーしてだろう?
過去レス参照しれ
本スレでPythonの宿題を丸投げした奴がいるがそいつがコーチ大らしいので
そういう流れになったということ

397 :デフォルトの名無しさん:04/08/19 01:22
>>396
あれは出題者本人の書き込みらしいよ。

398 :デフォルトの名無しさん:04/08/19 01:40
ははぁ、高知大にはPythonをやる講義があるのね。>>391
珍しいとは思うけど、それを求めて高知大学を選ぶってのは、受験生と言う段階では見切り過ぎなんでないかと私は思う。
「オタク学の講義を受けたいから、〜(忘れた)大学行く」と言うのと変わらないとは言わないが、
例えば「俺も高知大学を卒業する頃にはきっとPythonバリバリになってるぜ」と言うと、
なんだか「技能取得」とは「時間が解決してくれる問題」みたいに聞こえないだろうか。
大学卒業のために大学に行こうと考え、その付加価値として高知大学に行ってPythonの講義が受けたいと言う、そんな人も大学は受け入れていると思うが、
大学は本来、研究者を受け入れるための地盤なので、
「うぉお、学内の全学食の全メニュー制覇してやる。ジュルジュル」じゃなかった、
「うぉお、新しいプログラミング言語を作ってやるぜ。ぐへへ、ジュルジュル」みたいな熱い情熱を燃やす人には、とても良く機能してくれると思う。多分、そのハズ。
そんな時にPythonなんて数ある言語のひとつでしかないし、なにも今からPython一本に絞って考える事はないと思う。
それに高知大学のあの先生だって、Pythonが専門の先生ではないだろうよ。つーか、そんな大学教授いたら怖い。いない。

399 :デフォルトの名無しさん:04/08/19 02:45
なんで Python 関係のスレではみんなネタにマジレスするの?

400 :デフォルトの名無しさん:04/08/19 03:54
>>399のネタにもマジレスすべきなの?

401 :デフォルトの名無しさん:04/08/19 14:01
Pythonはコード量を最も少なくできるのでもっと注目されてもいいはずなのにね。

402 :デフォルトの名無しさん:04/08/19 14:53
注目されてるじゃん
日本国外ではさ

403 :デフォルトの名無しさん:04/08/19 17:34
>>401
> Pythonはコード量を最も少なくできる

そうなのか?

404 :デフォルトの名無しさん:04/08/19 20:04
programming+language=python
これ、世界の常識アルヨ

405 :デフォルトの名無しさん:04/08/19 20:23
>>404
+1

406 :デフォルトの名無しさん:04/08/19 20:28
>>404
-1

407 :デフォルトの名無しさん:04/08/20 01:32
>>401
いや、確かにCだのJavaだのよりは少なくなるけれど「最も」という形容は不適当だと思うぞ。

スクリプト言語の中でだと冗長な部類だろうし。

408 :342:04/08/21 12:48
n-queenは、3人以上(CPU含む)での通信対戦だったみたいで、対戦プログラムのロジックを見ると、
置ける場所にランダムに駒を置くロジックだったので、少々がっくり、、、。


409 :デフォルトの名無しさん:04/08/21 13:03
>>408
他の言語もだいたいそんなだったらしいね。
もっと準備期間があれば変わったのかも。

でも、LLでゲーム解探索プログラムってのはいいかも、と思った。
もう少し規模と準備期間を大きくして、ロボコンみたいなイベントに
できないかな(LL人口がもっと大きくならないとダメだけど)。

410 :342:04/08/21 13:03
あれから、また練習に行列式を計算するプログラムを書いてみた。
コード量が少ないって話題も出てるので、遅いけどコード量が少ないパターンをここ貼る。
行列式とは → http://ysserve.cs.shinshu-u.ac.jp/Lecture/linear/node20.html


def det(mtrx):
  deg = len(mtrx)
  if  deg == 1: return mtrx[0][0]
  return reduce(lambda a,b:a+b ,[0]+[cmp(0.5,(j)%2)*mtrx[j][0]*det([l[1:] for l in mtrx[:j]+mtrx[j+1:]]) for j in range(deg) if mtrx[j] not in mtrx[:j]+mtrx[j+1:]])
# # # test
from random import randint
from time import time
n = randint(2,8)
matrix = [[randint(0,1) for x in range(n)] for y in range(n)]
for i in matrix: print i

t = -time()
ret = det(matrix)
t += time()

print n,'次',t,'sec det(M) =',ret


411 :342:04/08/21 13:10
>>409
なんと早いレスにビックリ。
次からは実装の方法での対決と合わせて、
ゲームのロジックでの対決がメインになるといいですね。

2*2行列の行列式:
[[1,2],[3,4]] → 1*4-2*3 = -2
さっきの参照のページには一般の次数の定義が書いてあります。

412 :デフォルトの名無しさん:04/08/24 23:42
2日ほど前から Python 始めました。Perl とお別れできそう。
しょうもないことだけど、教えてください。
リストの各要素ごとを足すのってどうすればいいの?
a=[[1.2],[3,4]] と b=[[5,6],[7,8]] から [[1,2,5,6],[3,4,7,8]] を作りたいんです。
どうしてもできなくて、今は

def add(x,y):
return x+y
c=map(add,a,b)

とかしています。あまりの不恰好さに死にそうです。誰か私を助けて!


413 :342:04/08/25 00:40
いろいろ試した結果、いちおう成功しましたけど。。。>>412
>>412の方が直感的で良いように思いました。

a=[[1, 2], [3, 4]]
b=[[5, 6], [7, 8]]
print [[z for y in x for z in y] for x in zip(a,b)]


414 :デフォルトの名無しさん:04/08/25 00:45
>>412
それでいいと思う。
一行に収めるなら、lambda を使って、
c = map(lambda x, y: x+y, a, b)

415 :デフォルトの名無しさん:04/08/25 00:57
>>> map(list.__add__, a, b)
[[1, 2, 5, 6], [3, 4, 7, 8]]


416 :デフォルトの名無しさん:04/08/25 01:06
みんな書いてるんで漏れも

[a[i]+b[i] for i in range(len(a))]

>>412が不恰好とは思わないけど。

417 :412:04/08/25 01:17
>>413
zip は有用そうですね。覚えておきます。リストの中での for の使い方
も特徴的ですごく面白い!

[x+y for x in a for y in b]

でどうよ?って思ったら直積になっちゃうのね。私バカすぎ。

>>414

なるほど! たかが足すだけのために add を定義しているところが
耐えられなかったんだけど、lambda って方法があるんですね。
調べてみると Lisp からきたキーワードとか。(でも Lisp 知らない)
Java の匿名クラスの関数版みたいなもの??

>>415
あ〜それ!!それを知りたかったの!始めは
map(+,a,b)
とか書いて怒られたり… __add__ って list の static method なのかな??

>>416
あ、それもシンプルでいいかも。っていうかそれくらい気付けよ>自分
上でも書いたけど、ちょっと使うだけのために def で関数定義がなんか
格好悪いかなぁ〜と。

やっぱりPython デスクトップリファレンスだけじゃだめだな、こりゃ…
ちゃんと本買ってこよ。

413さん、414さん、 415 さん、416さんありがとうございました。


418 :デフォルトの名無しさん:04/08/25 01:41
>>417
書籍形態にこだわるならともかく、そうでないなら
http://www.python.jp/pub/doc_jp/
で充分だったり。

lambdaは匿名クラスというより匿名関数/匿名メソッド

list.__add__は別にスタティックメソッドというわけじゃないんだけど、
a = [0]かつb = [1]だとして、a.__add__(b)はlist.__add__(a, b)
という意味であるっていうPythonの特徴を利用してる(これがメソッド定義で
必ず第一引数(self)がなければならない理由)。

419 :342:04/08/26 23:26
私のが、他の3倍ほど遅かったですね。
リストの内包表記の応用って事で。おねがいします

420 :デフォルトの名無しさん:04/08/28 19:23
「かえでIME」は欠陥品。
「辞書登録出来ない」なんてIMEにあり得ない。
しかも、ほいほい落ちるし。バグだらけ。

とても、商品とは思えないね。

BeOSはユーザーが少ないからどうでもいいやと思うなよ。 >PC-CRAFT


421 :デフォルトの名無しさん:04/08/28 19:51
わかったから誤爆はやめれ。

422 :デフォルトの名無しさん:04/09/09 20:13
質問させてください。
UTF-8の"−"をShift_JISの"−"に変換したいのですが、
JapaneseCodecsをインストールして.codec("sjis")で変換しようとしたら
UnicodeError: Shift_JIS encoding error: invalid character \uff0d
とエラーになってしまいました。
回避策をご存知の方はいらっしゃいますでしょうか?


423 :デフォルトの名無しさん:04/09/09 21:55
それってマイナスのつもり?それともダッシュのつもり?

マイナスならsjisやめてcp932にする
ダッシュなら−やめて―にする

でどうだろう。試してないが(ぉぃ

424 :デフォルトの名無しさん:04/09/09 22:05
あ、「―」はU+2015な。

425 :デフォルトの名無しさん:04/09/09 23:19
>>422
互換文字の「全角マイナス」を使っている事そのものが問題なので、
shift-JIS に encode する前に本当に使いたい文字に置換する必要が
あるかと。(あるいは 423 の言うように cp932 を使うか)

あらかじめ u"\u2212" (数学でのマイナス) に置換するのが正しい
処置でしょうね。


426 :422:04/09/10 19:47:41
>>423-425
ありがとうございます。
今XMLを利用したAA保管庫を作ろうかと思っていて、
−とか〜とかも扱う必要があったのです。
.codec("cp932")
.codec("ms932")
どちらでもいけました。

この2つはshift_jisを完全に包含してるものなんでしょうか?


427 :デフォルトの名無しさん:04/09/10 19:52:28
> この2つはshift_jisを完全に包含してるものなんでしょうか?
MS932 == CP932 は、文字セットはShift_JISの全文字+αなんだけど、
UnicodeとのマッピングルールがShift_JISと違う文字があるので注意。

428 :422:04/09/10 22:35:50
なるほど。基本はShift_JISで、例外的にCP932を使ったほうがいいのかな…?
ぱっと見はCP932オンリーでも問題なさそうなんですけどね。

とりあえず様子を見たいと思います。ありがとうございました。


429 :デフォルトの名無しさん:04/09/10 23:01:26
2chはたぶんcp932だから、AA庫ならそっち基本でいいんじゃないかと思う。

430 :デフォルトの名無しさん:04/09/10 23:33:50
>>428-429
つーか「混ぜるな危険」ってことだよ(w

431 :422:04/09/11 20:55:32
了解、シンプルにcp932オンリーで作ろうと思います〜


432 :862:04/09/12 22:41:10
特定のコードしか使わないんなら base64 化して保存したらいいと思いマース

433 :デフォルトの名無しさん:04/09/13 16:10:05
>>432
意味不明ー

434 :デフォルトの名無しさん:04/09/13 16:14:17
誤爆じゃねーの?

435 :デフォルトの名無しさん:04/09/17 19:34:23
>>432

[WebProg]【半角】メールで2chAAを使うには【Pゴシック】
http://pc5.2ch.net/test/read.cgi/php/1060009605/


436 :デフォルトの名無しさん:04/09/17 23:16:20
そんなことじゃなくてただバイト列として保存しろってことなんだけどな。
ただそのままPythonでXMLに突っ込むとEncodeErrorになるからBase64化したら?
っていう話。

437 :デフォルトの名無しさん:04/09/18 22:35:10
Ruby >>>>>>>>>>><>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<< Python

438 :デフォルトの名無しさん:04/09/19 01:29:40
>>436
やっぱりよく分からん。
base64 でエンコードされた XMLファイルなんて見たことないぞ。

439 :デフォルトの名無しさん:04/09/19 01:54:38
>>438
CDATA

440 :デフォルトの名無しさん:04/09/19 02:04:24
>>439
意味ねぇ。w

素直に文字参照使えよ。

441 :デフォルトの名無しさん:04/09/23 18:25:13
age

442 :デフォルトの名無しさん:04/09/23 18:35:22
こっちがPython本スレ?
スレタイが「1から〜」と0 originでないのが気になるが

443 :デフォルトの名無しさん:04/09/23 19:10:33
>>442
厨の立てた駄スレだけれど、Python入門スレという扱いでいいんじゃないかな。


444 :デフォルトの名無しさん:04/09/26 12:56:25
マイナー言語らしくつつましく。

445 :デフォルトの名無しさん:04/09/26 13:10:03
>>442
> こっちがPython本スレ?
厨の立てた重複スレだよ。


446 :デフォルトの名無しさん:04/09/27 00:52:14
>>445
だったら削除依頼しなよ。

するつもりがないんだったら、何らかの形で利用する道を模索しないと。
入門スレというのはひとつの手だと思う。

447 :デフォルトの名無しさん:04/09/27 01:18:34
入門スレでもなんでもいいから Python の質問しろ厨房ども!
メタ議論はどうでもいい。

448 :デフォルトの名無しさん:04/09/27 02:06:30
メタ議論はヤメタほうがいいということですか?
~~~ ~~~

449 :デフォルトの名無しさん:04/09/27 03:05:55
Zopeのインスコのやり方と使い方を教えて下さい
python2.3.4です


450 :デフォルトの名無しさん:04/09/27 03:07:09
あ、linuxで

451 :デフォルトの名無しさん:04/09/27 04:28:13
それ python の話題じゃないじゃん。
Zopeでpython使ってて問題起きたってならともかく、
インストールの方法すら知らないんでしょ?
Zopeはwebprob板にスレがあったと思うのでそちらでどーぞ。


452 :デフォルトの名無しさん:04/09/27 04:37:09
Python Jython
Zope BitTorrent
PyQt PyGTK

よく使うの(予定)

453 :デフォルトの名無しさん:04/09/28 01:14:05
Jythonのインスコのやり方を教えてください

454 :デフォルトの名無しさん:04/09/28 02:10:02
>>453
http://www.jython.jp/


455 :デフォルトの名無しさん:04/09/28 16:18:15
Pythonが遅いのは何が原因ですか?
遅い分だけ機能面で得をしている部分はどこですか?
普通に使っている分には困らないけど教えてください。


456 :デフォルトの名無しさん:04/09/28 17:16:43
>455
宇宙の法則

457 :デフォルトの名無しさん:04/09/28 17:53:52
すべてプラズマで説明できます。

458 :デフォルトの名無しさん:04/09/29 14:36:07
>>455
Python/ceval.c でも読んでみれば?

459 :デフォルトの名無しさん:04/09/29 14:52:32
>>458
あがとうです。真っ先に
/* XXX TO DO:
XXX speed up searching for keywords by using a dictionary
XXX document it!
*/
と書いてあるのが目に入りました。
有益な仕事をしている対価として遅いんじゃなくて
今までそれほど速くしようとは思ってこなかったということかな。と。

460 :デフォルトの名無しさん:04/09/29 15:04:11
コメント数行読むだけで

> 有益な仕事をしている対価として遅いんじゃなくて

こんな大胆な結論を出すとはかなりの電波ですね。

461 :デフォルトの名無しさん:04/09/29 15:28:51
えー、だったらなんで遅い遅い言われるの?「作るのは早い」じゃぁなくてさ。
べつにこれでいいと思ってるんだったら「速くしたい」ってコメント残しとく?


462 :デフォルトの名無しさん:04/09/29 15:36:15
ちなみに別に煽りや荒らしのつもりは無くて
他の言語でやってないこんなことやあんなことが実行速度を落としてる
みたいなことを聞いてみたいだけのアホですので。

463 :デフォルトの名無しさん:04/09/29 15:44:54
>>462
君がどの程度コンピュータの事を知っているか分からないので
答えようが無い、というのが正直な所。

Perl や Ruby も含めた中間言語インタープリタがコンパイラ系の
言語よりも遅い理由は理解している?
ここらへんからして分かっていないのならばまず「コンパイラと
インタープリタ」あたりの言葉でググって入門ページを探す事。
(コンピュータの入門書を読むのもいいね)


464 :デフォルトの名無しさん:04/09/29 16:01:26
型付けが動的か静的かという観点も知っておいた方がよいね。

465 :デフォルトの名無しさん:04/09/29 16:02:11
>>462
ごもっとも。CPUネイティブなコードにコンパイルするものとは比べてません。
ttp://www-6.ibm.com/jp/developerworks/linux/021220/j_l-psyco.html
とか読んで思ったのはPsycoでできるんだったらなんでPythonでさいしょから
組み込まないの、とか、そういう。
もしかして今や遅いという話そのものがプラズマ?


466 :デフォルトの名無しさん:04/09/29 17:12:09
>>464
あ、そうですね。Javaとは並べること自体おかしい。
PythonはPerlより便利でLispより読みやすいのはわかるので
> 有益な仕事をしている対価として遅いんじゃなくて
は撤回します。すみません。
でもRuby速いよという人にPythonもPsyco使えばとかいうと
Rubyはそんなもの使わなくてもいいと返されそう。
> 今までそれほど速くしようとは思ってこなかったということかな。と。
というのは合ってるのかな。

467 :デフォルトの名無しさん:04/09/29 18:34:40
Python はあくまで教育用言語です。これが大前提。
だから今のパフォーマンスなのね。

468 :デフォルトの名無しさん:04/09/29 18:48:36
>>466
単に Perl や Ruby との比較だったら「思想の違い」くらいの理由しか考えられないですね。

例えば Unicode 対応に対して、Python だと unicode 文字列型に変換して扱うのが
本道だけれども、Ruby だと素の多バイト文字テキストのまま扱おうとする、とか。

Ruby は sed&awk → Perl と来たUnix流テキスト処理言語の末裔だけれども、
Python は BASIC → ABC という流れを汲む教育用言語の末裔。
なのでコスト意識も違ってくる。

まあ、

>> 今までそれほど速くしようとは思ってこなかったということかな。と。
>というのは合ってるのかな。

というので正解だと思います。

そもそも Python の場合、本領は「実行可能な擬似コード」であって、本番の懸案は
(Python で十分に検討した後) C で作る、という発想が強いから、(所詮モックアップ
である)Python のコードでの速度は気にしない、というか下手な最適化によって本質
と関係ないバグが入り込むのを嫌う、というのもあるかも。


469 :デフォルトの名無しさん:04/09/29 20:38:27
>>467
>Python はあくまで教育用言語です。これが大前提。
えっ実用で使われてるじゃん。Redhatとかで。
そんなこと言わないほうがいいのでは?

470 :デフォルトの名無しさん:04/09/29 22:34:29
つい最近、Perl から Python に転んだ者です。
以下、FAQ 等であれば失礼します。検索してもそれらしき情報がなかったので。


http://www.python.jp/Zope/download/JapaneseCodecs
の日本語 codec を使うと、codecs.open() の errors 引数が無視され、何を指定しても
"strict" 扱いになるように思えます。
例えば codecs.open("filename", "r", "ms932", "replace") しても、sjis 範囲外の文字で例外が出ます。

調べた所、 Python/Lib/site-packages/japanese/c/ms932.py 等の StreamReader._read() の最後の return が、
return self.decode(data)[0]
ではなくて
return self.decode(data, self.errors)[0]
なのではないかと思いましたが、どうなんでしょうか?

何か使い方が間違ってたりしますか?

471 :デフォルトの名無しさん:04/09/29 22:50:07
>>469
別に問題ないです。

Python は Perl のような壊滅的な書式を許さないにもかかわらず「ラフに」
書くことができるという意味においての「教育的」配慮が汎用性を生み出して
いるのですから。

472 :デフォルトの名無しさん:04/09/29 22:54:05
つーか、Perl や Ruby が 「教育的」 じゃなさすぎるだけで、Python が普通なだけなんじゃないかと。
昔 Basic が教育用とされたのと同程度に教育的なだけじゃないかな・・・


Ruby は興味あるんだけど、Perl のダメな所を引き継ぎすぎって感じがするんだよなあ。

473 :デフォルトの名無しさん:04/09/29 23:01:11
Ruby ってデフォでマルチバイト対応ってのがウリなだけだろ?
そんなの各言語のUTF8化でお役目御免じゃんw
過去の汚物だな >Ruby

474 :デフォルトの名無しさん:04/09/29 23:26:52
>>470
使い方は間違っています。
対象のファイルは sjis (というか cp932)である事が大前提であって、
対象のファイルが sjis であるかどうか調べる関数ではないですし。
(sjis に無い Unicode 文字を書き込んだ時に replace するだけ)


でもそれはそれとしてバグっぽいですね。
codecs.open("filename", "r", "ascii", "replace")
だとちゃんと replace されますし。


でも仕様の範囲では正常動作している感じ。

import codecs
f = codecs.open("test.txt", "r", "cp932", "replace")
a = f.read()
f.close()
f = codecs.open("testascii.txt", "w", "ascii", "replace")
f.write(a)
f.close()
f = codecs.open("testsjis.txt", "w", "sjis", "replace")
f.write(a)
f.close()

===== test.txt の内容 ======
abcde.
ほげほげ
W
===== ここまで =====


475 :デフォルトの名無しさん:04/09/30 00:08:17
>>473
同じ言葉をSJIS版Pythonのインストーラーを作っている人にも言ってみよう。

476 :デフォルトの名無しさん:04/09/30 01:20:29
デフォでUTF-8なのはおまえらの大嫌いなTcl。

477 :デフォルトの名無しさん:04/09/30 02:07:58
>>476
大嫌いという訳でもないが(Javaの方が嫌いだ)。
Tkを入れるついでに入れてやってる付属品。
一度も使う機会はないけどな(これからもないだろう)。

478 :デフォルトの名無しさん:04/09/30 09:06:30
>>474
codecs.open() の引数に errors がある以上、未定義バイトの処理を選択できる所までが 「仕様」 だと思うんですけど・・・

ソースみる限り、codec 単体としては replace 等は実装もしてるし、テストにも入ってるんですよね。
ただ codecs.open() の引数が codec に伝わってないだけっぽくて。

479 :デフォルトの名無しさん:04/09/30 11:05:00
>>468 471 472
古いPascalがお手本兼実用だった時代みたいにPythonがお手本兼実用なのですね。
くだらない話にお付き合いいただき感謝します。納得しました。


480 :デフォルトの名無しさん:04/09/30 12:05:07
>>478
>codecs.open() の引数に errors がある以上、未定義バイトの処理を選択できる所までが 「仕様」 だと思うんですけど・・・

unicode よりも大きなセットの文字集合(例えばTRONのTAD)から "r" する時には意味が生じるので、
"r" でも errors を指定出来るのは当然の仕様ですから、それをもって『未定義バイトの処理を選択
できる所までが 「仕様」』とは言い切れない気がする。

まあ例え仕様外であったとしても、この場合 "ascii" での挙動に合わせるのが常識だから、単なる
ミスでしょうね。
作者にメールすれば直すのじゃないかな。


481 :デフォルトの名無しさん:04/09/30 20:12:53
>>480
作者様にメールしてみる事にします。

482 :デフォルトの名無しさん:04/09/30 22:55:54
switch文が無い・・・。萎えた・・・。なんで無いの?

483 :デフォルトの名無しさん:04/10/01 00:07:02
>>482 

入門者がみんな思う事です。
代わりにディクショナリかリストを使います。

foo = 'stop'
print {'go': 'green', 'slow':'yellow', 'stop':'red'}[foo]
->'red'
複雑にしたいならディクショナリに関数を仕込む



484 :デフォルトの名無しさん:04/10/01 00:50:54
>>483
PythonってCoolだね。

485 :デフォルトの名無しさん:04/10/01 01:19:15
値によって処理を変えるような場合どうやんのよ。ディクショナリに
関数を仕込むというのは、caseに書く処理を全部関数にすんのか。
なんか納得できないな。わざわざ関数ポインタで呼び出してるイメージだ。
めんどくさい気がする。。。
あと、ディクショナリだとswitchのdefaultはどうやって実装すんのよ。

486 :デフォルトの名無しさん:04/10/01 01:31:31
http://www.python.jp/pub/doc_jp/lib/typesmapping.html

a.get(k[, x]) a[k] if k in a, else x

487 :デフォルトの名無しさん:04/10/01 01:42:51
>>485
数個の場合は if 〜 elif 〜 else で済ませる。
数が多くてかつ速度が重要な場合、ディクショナリ。

ただ「値によって処理を変えるような場合」は class 定義して
多態を使うべき状況である事も多いから、shitc 文相当の
文法が無いから困る、という事は少ない。


488 :デフォルトの名無しさん:04/10/01 03:16:31
> shitc 文相当の

わざと?

489 :デフォルトの名無しさん:04/10/01 11:34:04
>>485
Cで if ... else if ... ではなく, switch - case を使う理由は
ジャンプテーブルで最適化されることを望んでいるからだよね?
Pythonはもともと遅いので,そんなことはあまり気にしないw.
まぁ条件の数が100とかになるなら,ディクショナリを使うのもあり.

490 :デフォルトの名無しさん:04/10/01 11:41:09
そういえば、行番号が付いてるBASICを使っていた時は、
速度を稼ぐために ON x GOSUB とか多用していたっけ。


491 :デフォルトの名無しさん:04/10/01 11:55:13
てゆうか分岐が 100個もあるものを switch で書こうとするのは、
そもそもの設計が間違っている。


492 :デフォルトの名無しさん:04/10/01 14:04:39
>>491
CPUのエミュレータとかでは結構あるんでは?

まぁ,Pythonでエミュレータなんか書かない…というか
書きたくても書けないけど.

493 :デフォルトの名無しさん:04/10/01 14:25:02
>>492
エミュレータなら命令ごとに関数化して、関数ポインタで呼び出したほうがスマートじゃないかな。

494 :デフォルトの名無しさん:04/10/01 18:28:55
なんでabsが組み込みなのよ。mathの中に入れろよ。

495 :デフォルトの名無しさん:04/10/01 20:06:04
なんでswitchが無いことに不満を感じないんですか?
非常に不思議です。

496 :デフォルトの名無しさん:04/10/01 20:07:28
煽りは無視の方向で。

497 :デフォルトの名無しさん:04/10/01 20:08:33
>>495
shitch どころか goto も無いよ。
ブロックを表す { 〜 } や begin 〜 end も無いし。
無い無い尽くしだね。


498 :デフォルトの名無しさん:04/10/01 20:11:52
まあ煽りだから無視しろというのは、臭いものに蓋だよね。
Pythonの痛い欠点を突かれたから黙殺っていうか。

499 :デフォルトの名無しさん:04/10/01 20:25:25
Pythonに無いのは、
- switch
- do while
- 後置系の条件文
くらいか?
増やそうと思えば簡単に増やせると思うんだが、
いままでそういう動きは今まで起こらなかったのかな?
開発陣の意向?

500 :デフォルトの名無しさん:04/10/01 20:25:55
( ゚д゚)、ペッ >>495,>>497,>>498

501 :デフォルトの名無しさん:04/10/01 20:36:16
>>499
あとよく言われるのは三項演算子。


502 :デフォルトの名無しさん:04/10/01 20:55:38
forはforeachに改名してほしい。


503 :デフォルトの名無しさん:04/10/01 21:00:37
>>500
排他的な態度はRuby厨と変らねえなプゲラ

504 :デフォルトの名無しさん:04/10/01 21:14:50
みんなコードの断片の混じっていないレスも飛ばさずに読んでるんだね。えらいなあ。

505 :デフォルトの名無しさん:04/10/01 22:20:49
>>495
おまいは論理回路がNANDだけで構成できることを知らないのか?

506 :デフォルトの名無しさん:04/10/01 22:36:50
>>505
なにが言いたいのかよくわからない。

507 :デフォルトの名無しさん:04/10/02 14:44:55
なんかswitchに拘ってる人がいるみたいだけど、べつに無くても困らないじゃん。

後置系の条件文は、見た目以外の機能的なメリットは何も無い完全なシンタックス・シュガーだから、
Pythonに取り入れられることはないと思う。

508 :デフォルトの名無しさん:04/10/02 15:00:42
Perl にもないよね > switch


509 :デフォルトの名無しさん:04/10/02 20:23:37
なくてもいいし困らないけど、あっても違和感はない。
Cと違ってcaseの終わりで暗黙的にbreakされるならだけど。

510 :デフォルトの名無しさん:04/10/02 20:27:41
そもそもswitchは便利なのかぁ?
言語によって変えるの面倒じゃん。

511 :デフォルトの名無しさん:04/10/02 21:25:12
>>507
実装できないことをごまかすための詭弁にしか聞こえない。

512 :デフォルトの名無しさん:04/10/02 21:30:27
>>508
最近のPerlにはswitchあるよ。

513 :デフォルトの名無しさん:04/10/03 00:00:11
>>510
Pythonを外せば主要言語間で変える必要ないな。

514 :デフォルトの名無しさん:04/10/03 00:01:33
いやあ python も妬まれるほど日本で有名になったんだね

515 :デフォルトの名無しさん:04/10/03 01:22:20
実装できないなら出来ないって言ってもいいよ?

516 :デフォルトの名無しさん:04/10/03 01:23:19
>>512
まだ無いよ。
6のは switch どころの騒ぎじゃない。

517 :デフォルトの名無しさん:04/10/03 01:35:10
>>515
釣りにしてもアホすぎ
C 相当の switch を、単に条件文が == な if ... else if ... の並びに置き換えるなんて実装できない訳がない。
単に作者の趣味で取り入れないだけだろ。

そもそも C 的な switch は条件が == に限られるのがスクリプト系言語から見ると嫌われる要因じゃないの。
実際 Perl6 の switch 案は大変な事になってるし。

C の switch は処理系次第ではテーブルに置き換わるから速いなんていうけど、
実際適当に作ったプログラムがテーブルで実装される事なんて滅多に無いだろ。
本当にそこまでのチューニングが必要なら必要なら自分でテーブル書くだろ普通。


switch が無いのを不満に思って他の言語に乗り換えるのも自由だし、それを埋めるメリットを見出して
使い続けるのも自由。

俺はあったほうが楽と思うこともあるけど、かと言って他に良いスクリプト言語が無いから使ってる。

518 :デフォルトの名無しさん:04/10/03 02:38:18
まぁ switch 文に関しては明らかにグイドタソに先見の明があったということでしょう。

519 :デフォルトの名無しさん:04/10/03 04:41:15
あきらかに分かってない煽りが多すぎて面白くない。
もっと勉強してから出直してきてくれ。

520 :デフォルトの名無しさん:04/10/03 05:47:35
>>518
もっと勉強してこいや

521 :デフォルトの名無しさん:04/10/03 07:28:44
Pythonやっててswitchが欲しいなんて思った事ない。gotoも。

522 :デフォルトの名無しさん:04/10/03 09:24:59
MLのmatchみたいなのはちょっとほしいかも.
match(xs):
  (car, *cdr):
    ...
  ():
    ...

あーPythonのリストは本当はリストじゃないから,ダメか.

523 :デフォルトの名無しさん:04/10/03 09:58:47
>>517
いくら苦し紛れの反論するとしても、もう少し勉強してからしたら?
無知のくせにしったかぶりしてるのがみっともない。

524 :デフォルトの名無しさん:04/10/03 10:36:30
>>517
ばか?

525 :デフォルトの名無しさん:04/10/03 11:07:15
>>516
Perl6のswitch見てきた.
…変態言語の名に相応しいと思った.

526 :デフォルトの名無しさん:04/10/03 12:14:53
>>525
Pythonごときが、そんな偉そうなことをいえるのか?

527 :デフォルトの名無しさん:04/10/03 12:28:38
>>525
どんなんなん?

528 :デフォルトの名無しさん:04/10/03 13:18:28
Pythonは糞。
キモイ作者にキモイ言語仕様で救いようがない。
Ruby >>>>>>>>>>>>>>>>>>>>>>Python糞>>>>Perl超糞
よかったな。まだ下がいて(大爆笑)
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

529 :デフォルトの名無しさん:04/10/03 13:59:28
↑安置Rubyごくろう

530 :デフォルトの名無しさん:04/10/03 14:10:52
俺は普段はCommonLisperで、スクリプト言語を使うときはPythonもRubyも使うけど、

lambda嫌いとか三項演算子がないのとか、Pythonというのは
思考のスピード > 書くスピード
のときにも、後者に合わせて面倒でもちゃんと書きましょう、という
考えがあるように思う。

LispとかRubyとかは逆に思考のスピードがブレーキを踏まなくて
済むような方向でデザインされてる。

俺はどちらかというとRubyの方が好き。でも使うときはライブラリを調べて
簡単にできそうな方でやってる。Rubyな人はどうも適当なところだけかじって後
はほったらかしというのが多くて、それがヤなところ。


531 :デフォルトの名無しさん:04/10/03 14:10:52
どこまでもオリジナリティのない荒らしだなあ。楽しいかい?

532 :デフォルトの名無しさん:04/10/03 14:12:24
糞言語pyてょんはぺrlと一緒に消えろ。

533 :デフォルトの名無しさん:04/10/03 14:13:03
ユーザの質から言ってRuby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Python >>>>>>>>>>>Perl

534 :デフォルトの名無しさん:04/10/03 14:15:37
Pythonは遅くて構文がキモイ
作者はしがないダッチ野郎
欧州の韓国人とい言われる事でも分かるとおり全てRubyのパクリ
インデント?ぷぷっなにそれまともな言語なの?たのしい?糞虫ども

535 :デフォルトの名無しさん:04/10/03 14:18:45
じきに「PythonからRubyへの移行ガイド 〜猿から人間へ〜」っていう本が出るって知ってた?

536 :デフォルトの名無しさん:04/10/03 14:20:30
Python は「馬鹿のための言語」だけど、
Ruby ば「馬鹿が作る言語」だな。

……Perl は「馬鹿な言語」だけど。


537 :デフォルトの名無しさん:04/10/03 14:23:26
Peerlと一緒に消えればいいのに。

538 :デフォルトの名無しさん:04/10/03 14:24:03
スレ乱立のせいで、
基地外荒しが住みついてしまったぞ。
責任とれ。

539 :デフォルトの名無しさん:04/10/03 14:24:24
Perl叩きでは連帯できるはず
Perlスレは全部WebProgに追い出せ

540 :デフォルトの名無しさん:04/10/03 14:33:19
俺が合理的に次期Pythonに必要な追加仕様を指摘してやろうと
思ってたのにRubyキチガイに議論を乗っ取られた。

541 :デフォルトの名無しさん:04/10/03 14:35:50
Ruby以外は消えろ

542 :デフォルトの名無しさん:04/10/03 14:38:08
スレッドが例外なく荒れるのも言語に魅力が無いから。
Rubyスレを見てみろ。淡々と話してるから。

543 :デフォルトの名無しさん:04/10/03 14:49:12
>>540
http://www.python.org/peps/pep-3000.html


544 :デフォルトの名無しさん:04/10/03 15:00:33
>>530
Python は「ちゃんと書きましょう」となっているには禿同。

Java, Python, Perl と使っているが、Python って意外ときっちりと書かない
といけないけど、Java みたいにキャストとかしなくてもいいから、その辺のバ
ランスがよいと思うんだけど。
# 虎は知らない


545 :デフォルトの名無しさん:04/10/03 15:04:11
Ruby 厨ウザいんだが、Ruby の良さがまったく分からんな。
どうせ、プログラムを作ったことがないような香具師が荒らしてんだろ。



546 :デフォルトの名無しさん:04/10/03 15:12:40
だからさあ、Ruby基地外っぽく振舞っている香具師は
安置Rubyだろ。
Pythonスレが荒らされるのは自業自得。

547 :デフォルトの名無しさん:04/10/03 15:29:16
荒れても気にしない

548 :デフォルトの名無しさん:04/10/03 15:48:11
Python...真の表現は唯一つ
Perl.....解決に至る方法は幾通りも存在する
Ruby.....Perlのパクリでもいいじゃん

549 :デフォルトの名無しさん:04/10/03 15:56:24
rubyはpythonからも色々パクってるじゃん

550 :デフォルトの名無しさん:04/10/03 16:03:03
> LispとかRubyとかは逆に思考のスピードがブレーキを踏まなくて
> 済むような方向でデザインされてる。

こういうこと言う人間に限って、大したもん作ってないんだよな。
反例求む。

551 :デフォルトの名無しさん:04/10/03 16:03:27
「%E3%82%AF%E3%83%A2%E3%81%AE%E5%B7%A3」=>クモの巣
と変換してくれるurlのdecode関数ってあるのでしょうか。
foo("%E3%82%AF%E3%83%A2%E3%81%AE%E5%B7%A3")って感じ
です。
urllib.urlencodeってのは見つけたのですが、上のように
decodeが見つかりません。

http://www.google.co.jp/search?q=%E3%82%AF%E3%83%A2%E3%81%AE%E5%B7%A3

552 :デフォルトの名無しさん:04/10/03 16:37:18
#!/usr/local/bin/python
# encoding: euc-jp

import urllib, cgi

s = 'http://www.google.co.jp/search?'
v = { 'q': 'クモの巣' }
print s
ss = urllib.urlencode(v, True)
print s + ss

r = cgi.parse_qs(ss)
print r['q'][0]


553 :デフォルトの名無しさん:04/10/03 17:16:33
>>552
foo(urlencoded_text)って感じのはなさそうですね。
アドバイスしていただいた方法を使います。
ありがとうございました。_O_


554 :552:04/10/03 17:46:50
>>553
urllib.unquote()

すんません...


555 :デフォルトの名無しさん:04/10/04 00:28:04
>>554
本当にありがとう。>>552 でやっても、urldecodeデータからは
できなかったです。

>>> a = urllib.quote("くもの巣")
>>> print a
%A4%AF%A4%E2%A4%CE%C1%E3
>>> print urllib.unquote(a)
くもの巣


556 :デフォルトの名無しさん:04/10/04 01:02:44
ようするに、Ruby使ってるひとってPythonが気になってしょうがない
だけでしょう。

俺は、Python使ってるけど、Rubyの動向なんて気にならないしな。
その証拠にRubyスレって荒れてないんでしょ。

Rubyスレが荒れてなくて、Python,Perlスレが荒れてんのは、
まつもと以下Ruby野郎が一生懸命荒らしてんでしょ。乙。


557 :デフォルトの名無しさん:04/10/04 01:09:00
517 なんだけど、何が変? >>523 >>524

俺は Perl から Python に乗り換えようと思ってる最中なんだけど、
はっきり言って Python のメリットは唯一つ、Windows との親和性が良い。今の所これだけ。
とゆーか少なくともファイル名に Unicode 使える。

prel5 は未だにシステムコール引数は非 unicode だし、ruby はソース見た感じ全く対応してないっぽかったんで。

自分で使うだけのスクリプトならそんなのどうでも良いんだけど、人に使わせるものになると
Win で動かないと意味ないし、とんでもないファイル名付けてる奴多いしね。


あと、標準ライブラリのエラーがちゃんと全部例外になってる (んだよね?) のも Perl5 と比べると良いなあ。
俺は、スクリプトはたまに使いたくなった時に使うだけだから、いちいち個々の挙動まで覚えてられない。

Perl のアドホックな挙動に時々泣かされた者としては、this.py は結構同感だなあ。

558 :デフォルトの名無しさん:04/10/04 01:11:46
>>556
ものすごく説得力あるけど、
でもそんな事言うと、さらに荒れそうだよ。

只今、Python勉強中..

559 :デフォルトの名無しさん:04/10/04 01:21:51
>>556
Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。

Pythonスレが荒れているのを根拠も無くRubyのせいにしていることこそ、
Rubyが気になって仕方がないように思える。

560 :556:04/10/04 01:54:15
>>559
>Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。
この意味不明な中傷はどうにかならないのか。
もっと具体的に言ってよ。

>Pythonスレが荒れているのを根拠も無くRubyのせいにしていることこそ、
>Rubyが気になって仕方がないように思える。
ここ最近のレス見て、Ruby野郎がうっとうしいなと思って煽ってみただけだよ。

ただのオウム返しみたいな煽りばっかしてないで、もっと具体的なの頼むよ。

ちゃんと実装の事いってる奴もいるけど、おまえみたいなオウム野郎は糞だ。


561 :デフォルトの名無しさん:04/10/04 02:30:08
↑糞虫w

562 :デフォルトの名無しさん:04/10/04 02:45:13
>>556
きみきみ、マジレスしちゃいかんよ。
それと Ruby のせいにするな。煽ってるのはどっちも知らないアホだ。
ESR もいっているように、相手を叩くのではなく、自分を高めることこそが
もっとも相手にダメージを与える。精進せいよ。

563 :デフォルトの名無しさん:04/10/04 09:22:40
switchねえ。
辞書に関数マッピングするか,
getattrとかでon_hogehogeみたいな関数を
動的に取得して呼ぶんじゃないの?

doがつかないのはバックワードコンパチのため。
doを予約語にすると困る人がいるから。

564 :デフォルトの名無しさん:04/10/04 09:38:48
>>560
562がいうとおり、rubyの名を騙って荒らしているのは、rubyもpythonもしらない
ただのアホだろう。それにのればのるほど、荒しの思う壺だってわからんのか?

565 :デフォルトの名無しさん:04/10/04 09:55:41
>>554
Googleではutf-8、yahooではeuc_jpを使っているそうで、
「くもの巣」という文字のurlエンコードが違います。
(Googleでは、%E3%81%8F%E3%82%82%E3%81%AE%E5%B7%A3)
(Yahooでは、%a4%af%a4%e2%a4%ce%c1%e3)

教えてもらった方法では、yahooタイプしかデコード
できません。Googleタイプのデコードってどうするので
しょうか?
[少し板違いになってきてます。すいません。]

yahoo= "%A4%AF%A4%E2%A4%CE%C1%E3"
print cgi.urllib.unquote(yahoo)
#=>くもの巣

google ="%E3%81%8F%E3%82%82%E3%81%AE%E5%B7%A3"
print cgi.urllib.unquote(google)
#=>沓



566 :デフォルトの名無しさん:04/10/04 11:20:26
google = "%E3%81%8F%E3%82%82%E3%81%AE%E5%B7%A3"
unko = urllib.unquote(google)
print unicode(unko, "utf-8").encode("shift_jis")
print unicode(unko, "utf-8").encode("euc_jp") # どっちかでちゃんと表示できるはず


567 :デフォルトの名無しさん:04/10/04 13:04:27
>>566
嘘つくな。お前試してないだろ。

>>> google ="%E3%81%8F%E3%82%82%E3%81%AE%E5%B7%A3"
>>> print unicode(urllib.unquote(google), 'utf-8')
くもの巣

568 :567:04/10/04 13:12:44
すまん俺が悪かった。
おまけに上げてしまったので死ぬ。

569 :デフォルトの名無しさん:04/10/04 13:23:20
試してから書いたが >>567
環境は Windows 2000, CJK Python 2.3.4 (CJK/SJIS)


570 :デフォルトの名無しさん:04/10/04 14:58:08
ttp://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Bruce+Eckel%A4%CE%A1%D6Ruby%A4%CB%A5%A4%A5%A4%A5%BF%A5%A4%A5%B3%A5%C8%A1%D7%A5%B3%A1%BC%A5%CA%A1%BC

ttp://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=Python%A4%CF%A4%B3%A4%F3%A4%CA%A4%CB%A4%B9%A4%B4%A4%A4%A4%F3%A4%C0%A4%BE

ttp://c2.com/cgi/wiki?PythonVsRuby

571 :デフォルトの名無しさん:04/10/04 21:40:08
>>566
下の方で表示できました。
>>567
こっちの方法でも動きました。
どうもありがとうございます。_O_

572 :デフォルトの名無しさん:04/10/04 23:25:44
重複スレをあげてんじゃねえよ。

以下のスレへ移動しやがれ。

http://pc5.2ch.net/test/read.cgi/tech/1081264387/
http://pc5.2ch.net/test/read.cgi/tech/1095684242/


573 :デフォルトの名無しさん:04/10/04 23:36:40


ここは Python VS. Ruby 専用


 

574 :デフォルトの名無しさん:04/10/04 23:51:44
本スレ認定

575 :デフォルトの名無しさん:04/10/05 00:38:24
ここのほかにPythonスレあるの?

576 :デフォルトの名無しさん:04/10/05 00:40:55
>>575
ないよ。ここだけ。

577 :デフォルトの名無しさん:04/10/05 00:42:05
>>575
あるけど、このスレ以外は重複スレだから気にしなくて良い。

578 :デフォルトの名無しさん:04/10/05 00:46:26
前スレ
http://pc.2ch.net/tech/kako/980/980786239.html

579 :デフォルトの名無しさん:04/10/05 01:18:11
>>560
> >Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。
> この意味不明な中傷はどうにかならないのか。
> もっと具体的に言ってよ。

これマジで言ってるの?理解力の無い相当な低脳だね。
重複スレで揉めだして、おまえのような馬鹿がスルーできずに相手になって
拍車がかかってるのに。

580 :デフォルトの名無しさん:04/10/05 12:08:55
おっ
次は「仲間のフリ」できたか!

581 :デフォルトの名無しさん:04/10/05 14:53:21
(・∀・)埋め!

582 :デフォルトの名無しさん:04/10/05 23:48:09
Ruby スレで放置されるようになったからこっちに来たんだろうね。。。

583 :デフォルトの名無しさん:04/10/06 00:19:15
Rubyで"end"をいちいちいちいち付けるのがメンドイので今日からPythonにしました

584 :デフォルトの名無しさん:04/10/06 09:21:36
そんな理由で変えるなよ

585 :デフォルトの名無しさん:04/10/06 11:03:48
同じ理由でPascalからCにかえたのでした・・・。

586 :ぬるぽ:04/10/08 22:23:17
ぬるぽ

587 :デフォルトの名無しさん:04/10/08 22:40:37
>>586
ガッ

588 :デフォルトの名無しさん:04/10/08 22:57:17
糞スレ上げんなヴォケ

589 :デフォルトの名無しさん:04/10/09 00:11:08
>>588
いいじゃないの、別に。
Pythonユーザって心が狭い奴ばかりなのね。

590 :デフォルトの名無しさん:04/10/09 11:43:36
588がPythonユーザということにしたい

591 :588:04/10/09 15:16:49
僕はcshユーザーでつ。

592 :デフォルトの名無しさん:04/10/09 17:13:18
たしか PyQt の config の方式で揉めたんだよねぇ・・・

593 :デフォルトの名無しさん:04/10/09 21:59:13
anyguiはどうなっちゃったの?
期待してたんだけど。

594 :デフォルトの名無しさん:04/10/10 13:03:05
anyguiに限らず,ネイティブのツールキットを使うGUI wrapperって
失敗する傾向にあるんだよなぁ.
Tkの見た目がもう少し良くなってくれれば,俺は十分なんだけど.

595 :デフォルトの名無しさん:04/10/10 13:05:36
fltkが unicode 対応してくれればなあ。。。

596 :デフォルトの名無しさん:04/10/10 14:56:50
PyQt と pygtk は日本語使えるよ

597 :デフォルトの名無しさん:04/10/10 15:38:18
それじゃ意味ない.X上でしかまともに動かないじゃん.

598 :デフォルトの名無しさん:04/10/10 18:44:47
>>594
時期Tk9ではスタイルが使えて、Gtkっぽい見た目も
使えるようになるよ。今でも実験的にtileという拡張で
スタイルを変えられるウィジェットが使えるよ。
PythonでTkの拡張が使えるのかどうかは知らんけど。

599 :デフォルトの名無しさん:04/10/10 23:57:26
>>598
おぉ.素晴らしい.
tk.eval()があるので,頑張れば拡張は使える…かな.

600 :デフォルトの名無しさん:04/10/11 07:09:11
from xml.sax.saxutils import XMLGenerator
from xml.sax import handler
from xml import sax

output_gen = XMLGenerator()
parser = sax.make_parser()
parser.setFeature(handler.feature_namespaces, True)
parser.setContentHandler(output_gen)
parser.setErrorHandler(handler.ErrorHandler())
f = file(u'test.xml', 'r')
parser.parse(f)
f.close()

なんでこのコードがこけるん……?

File "C:\Python23\lib\xml\sax\saxutils.py", line 131, in startElementNS
name = self._current_context[name[0]] + ":" + name[1]
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

601 :デフォルトの名無しさん:04/10/11 12:57:49
>>600
test.xml の中身は?
namespace 未使用の XML で、
parser.setFeature(handler.feature_namespaces, True)
だから? (未確認)


602 :デフォルトの名無しさん:04/10/11 20:01:04
>>601
2つの名前空間が混在<test.xml
当然validなXML。バリデータはXMLSPY 2004。
名前空間接頭辞の扱いにバグがあるくさい。

603 :デフォルトの名無しさん:04/10/12 23:40:43
投稿日も「ぬるぽ」なのが本物の「ぬるぽ」です。>>586

604 :デフォルトの名無しさん:04/10/16 08:33:59
http://mail.python.org/pipermail/python-list/2002-November/131620.html

これを改良して、クリックされた部分のテキストの位置を座標ではなく、
行と列で求めたいのですが、どうしたらよいでしょうか?

605 :デフォルトの名無しさん:04/10/16 09:57:01
GetInsertionPoint() を使って,キャレットのある場所の pos 値を求めた後に
PositionToXY() を使って x, y (列,行)に変換したらいいんじゃないでしょうか.

606 :R:04/10/16 15:11:39
最近、eclipseでPythonのソレをうまいことアレ出来るって本当ですか?
以前、個人的に試した時は、コンソールにEUCの日本語が出なくて参ったのだけど。

607 :デフォルトの名無しさん:04/10/16 15:23:52
python-mode.el では不満?

608 :デフォルトの名無しさん:04/10/16 16:05:10
dir()の返り値の文字列の配列からキーワードを探す時に、
filter((lambda s:s.find('key' != -1)), dir(target))
をいつもやっているのですが、毎回めんどうです。
apropos(target, 'key')みたいな感じの標準の関数ってないでしょうか?

609 :デフォルトの名無しさん:04/10/16 19:08:55
>>608 標準関数はないね。自分で作ってPYTHONSTARTUPか.pthで読み込むべし。
関係ないけど、[name for name in dir(target) if 'key' in name] のほうが好き。


610 :デフォルトの名無しさん:04/10/17 01:49:02
さらに関係ないけど,リストの内包表記で, if〜 の位置が in〜 より後ろ
ってのに違和感がある.

611 :デフォルトの名無しさん:04/10/18 23:27:40
>>606
Eclipseの出力コンソールにencodingを指定できないのが
原因。
Winなら、site.pyにShift_JISを指定すれば、Unicode文字列を
printするとコンソールで日本語が吐ける。

612 :デフォルトの名無しさん:04/10/20 22:22:05
別スレで質問したのですが、そこは本スレじゃないと指摘されたので、
こちらに移動させて頂きます。

ttp://www.python.org/doc/faq/library.html#threads
ttp://www.idg.co.jp/sw/back/200103/20010316_01_report.html

殆どの場合 Python のスレッドは同時に一つしか動かないと書いてありますが、
実際マルチプロセッサマシンでスケールしないのでしょうか?

Perl や Tcl, Gauche(Scheme) はスレッド毎に VM を持つ仕様のようです。

ttp://perldoc.jp/docs/perl/5.8.0/perlthrtut.pod
ttp://www.tcl.tk/doc/howto/thread_model.html
ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aMT%a4%c8%a5%b7%a5%b0%a5%ca%a5%eb

他の処理系も色々調べたのですが、Java 並みにスレッドを使える言語は
少ない感じです。Python に期待していたのですが、どんな感じでしょうか?

613 :デフォルトの名無しさん:04/10/21 00:06:49
スケールしないと思います.そういう試みもあったらしいけど,
シングルプロセッサでさくさく動く方を優先したらしい.
マルチプロセッサの恩恵を受けたいなら, C でも他の言語でもいいから
恩恵を受けられるソフトウェアに仕事をさせて,そのインタフェースだけ
Python で書けば?ということなんじゃないかな.
分散コンピューティングインタフェースなら,pyMPI(.sf.net) というのが
あるらしいけど,詳しくは知らない.

614 :デフォルトの名無しさん:04/10/21 00:41:47
>>613
やはりそうですか。細粒ロックを作っても処理速度が半分になってしまっては意味が薄い
ですよね。

615 :デフォルトの名無しさん:04/10/21 10:42:20
>>614
Java使えよ。

616 :デフォルトの名無しさん:04/10/21 17:38:51
Jython 使えよ。


617 :デフォルトの名無しさん:04/10/21 21:50:36
>>616
速度もCPythonより速いらしいね.
Jythonに負け,IronPythonに負けるCPython….

618 :デフォルトの名無しさん:04/10/21 22:37:05
>>617
>速度もCPythonより速いらしいね.

そうなの?

619 :デフォルトの名無しさん:04/10/21 22:53:15
>>618
らしい.自分で試したことはないし,そもそもJython自体よく知らないんだけども.
JythonってJavaVMのバイトコードへコンパイルするんだよね?
速いのも納得できる気がする.

ところで,Pythonにファーストクラス継続が導入されないのは,
Jythonで実装できないからだ,とどこかで読んだ気がするんだけど本当なのかな?

620 :デフォルトの名無しさん:04/10/21 23:11:23
rhino は first-class continuation を実装しているから、出来ない事は無さそうだけど。
要はメインのソースツリーに統合されるだけの需要があるかどうかなんじゃないかな。

621 :デフォルトの名無しさん:04/10/21 23:34:50
IronPython は速いようだけど、Jython が CPython より速いって
ソースどこ?
ぐぐってみたけどみあたらないんだが。

622 :デフォルトの名無しさん:04/10/22 00:10:23
じぶんで計測しれよ

623 :デフォルトの名無しさん:04/10/22 00:30:08
>>620
そういえばRhinoWithContinuationsなんてのがあったな.
でもRhinoは単なるJava上のインタプリタなのに対して,
JythonはJavaVMのバイトコードに落してるからきついんじゃないかな.
スタック触れないし.

624 :デフォルトの名無しさん:04/10/22 01:01:27
http://www.gnu.org/software/kawa/Features.html#Features

kawa はバイトコードを吐くけど、continuation を作れるらしい。
JScheme や Bigloo も確かそう。詳しい事は知らないけど。

625 :デフォルトの名無しさん:04/10/22 01:09:00
Kawa is not generally tail-recursive.
だからちょっと躊躇しちゃうなあ。


626 :デフォルトの名無しさん:04/10/22 01:20:42
まぁ、どれも実装を知らないので議論は出来ないな。
継続ってどうも一般受けしない技術みたいだから、それだけでも採用されてない
理由にはなりそうだけど。

627 :デフォルトの名無しさん:04/10/22 01:39:21
>>624
http://www.gnu.org/software/kawa/Restrictions.html#Restrictions
continuationに制限あるっぽい.

628 :デフォルトの名無しさん:04/10/22 01:45:58
大域脱出にしか使えないって事?

629 :デフォルトの名無しさん:04/10/22 05:31:20
Kawa の call/cc は catch/throw で実装してたはず。
……実装してるって言っていいのかなあ。

630 :デフォルトの名無しさん:04/10/23 13:45:50
>>629
努力賞.

Schemeなら限定的なcall/ccでもあった方が嬉しいけど,
Pythonはループ脱出や例外処理が一通り揃ってるから,
その程度のcall/ccじゃ実装したって意味ないよなぁ.

ちょっとStackless Pythonで遊んでみるか.

631 :デフォルトの名無しさん:04/10/23 14:03:08
>>1
 は や く 教 え ろ

632 :デフォルトの名無しさん:04/10/23 14:33:27
Stackless Python のドキュメントどこにあるんだ?

633 :デフォルトの名無しさん:04/10/23 22:37:19
Python と Ruby って、Ruby のほうがずっと遅いと思っていたんだけど、
実際はどうなのかな。性能比較した人いませんか?

634 :デフォルトの名無しさん:04/10/23 22:44:08
>>633
たぶん同じくらい.
ってか,さらに荒れそうな話題をageで書かないでくれ.

635 :デフォルトの名無しさん:04/10/23 23:34:10
>>633はトロール漁法

636 :デフォルトの名無しさん:04/10/24 01:14:02
631 :デフォルトの名無しさん :04/10/23 14:03:08
>>1
 は や く 教 え ろ

637 :デフォルトの名無しさん:04/10/24 20:08:32
>>436
妹の質による。
そこらのアイドルを軽く凌駕する可憐さと、家族の前でも汚い部分は見せない
気遣かいを兼ね備えた妹を持つ漏れの友人は、激しく実妹萌えしてた。

638 :デフォルトの名無しさん:04/10/24 21:32:22
>>637
何の誤爆???


639 :デフォルトの名無しさん:04/10/25 10:03:11
Pythonの妹は?

640 :デフォルトの名無しさん:04/10/25 10:04:16
>>639
Jython


641 :デフォルトの名無しさん:04/10/25 10:12:22
ある日突然、あなたに24個もの台風が発生したらどうしますか?

それも……とびっきり大きくて
とびっきり暴風で
とびっきり大雨連れて
とびっきりの土石流発生。
しかも、そのうえ……
台風達はみんなみんな、とびっきり!
日本のコトが大好きなんです……

642 :デフォルトの名無しさん:04/10/25 18:40:16
奥ゆかしい25号目萌え。

643 :デフォルトの名無しさん:04/10/25 18:42:50
次の命題は正しいか?
「Python はプロトタイプベースのオブジェクト指向言語である。」

644 :デフォルトの名無しさん:04/10/25 19:41:28
次の用語を定義せよ。
「プロトタイプベース」

645 :デフォルトの名無しさん:04/10/25 19:47:22
>>644
インスタンスベースのことです。

646 :デフォルトの名無しさん:04/10/25 20:55:06
試作品を基にしたOOPL?

647 :デフォルトの名無しさん:04/10/25 21:06:32
>>643
(Smalltalkの#become:みたいなズルをせずに)インスタンスの属するクラスを変えられれば
プロトタイプベースだよ。

>>> class A:
... def test(self):
... print "A"
...
>>> class B:
... def test(self):
... print "B"
...
>>> obj=A()
>>> obj.__class__=B
>>> obj.test()
B

648 :デフォルトの名無しさん:04/10/25 21:10:32
>>647
ありがとう。
やっぱり Python はプロトタイプベースと呼べる下地があるのですね。

649 :デフォルトの名無しさん:04/10/25 21:32:33
狭義のプロトタイプベースは、文字通り>>646的意味でしか使わないから、単発で使わずに
>>645のいうインスタンスベースとか、(オブジェクト指向と混同しない程度の文化度が
期待できるところでは)オブジェクトベースとか言い添えた方がいいよ。 老婆より。

650 :デフォルトの名無しさん:04/10/25 21:52:32
ここは ambiguous なインターネットですね

651 :デフォルトの名無しさん:04/10/25 22:00:24
オブジェクトベースるには,インスタンスメソッドが作りにくいのが難点かな.
普通にやろうとすると,
class object: pass
obj = object()
obj.method = lambda self: ...
obj.method(obj) # ←ここの引数が嫌.
なんか周りくどい方法で解決できた気はするけど.

652 :デフォルトの名無しさん:04/10/25 22:09:35
Zope serv はインスタンスですよ

653 :デフォルトの名無しさん:04/10/25 22:11:59
>>651
newモジュールを使うナリよ。
あと、 インスタンスメソッド→インスタンス特異的メソッド ね。

はいそこ、特異メソッド…とかつぶやかないように!w
その呼び名はあの界隈ローカルですから。
ちなみにあれは、ばりばりのクラスベースですから,斬り!

654 :デフォルトの名無しさん:04/10/25 22:16:04
プロトタイプが、、、なんて無知なまましったかで話してると、sumimさんに斬られますよ。

655 :デフォルトの名無しさん:04/10/25 22:18:55
残念! 拙者…Zopeは存じませぬから! 切腹!

656 :デフォルトの名無しさん:04/10/25 23:28:50
Python さわってて Zope で遊ばないなんて信じらんな…
apache よりもおもろいよ、Zope

657 :デフォルトの名無しさん:04/10/25 23:44:50
>>656
Zope ってドキュメントが少ないし、
まともなアプリ作れるようになるまでに相当勉強しないといけない。
PHP 使うほうがずっとまし。
[一年前に触った君 より]

658 :デフォルトの名無しさん:04/10/26 01:30:54
おもしろくても、Cのようにネイティブで高速な
わけでもなく、Javaのように最適化されまくって
速いわけでもない。おもちゃだな。

659 :デフォルトの名無しさん:04/10/26 08:10:39
pythonを勉強しようと思いpython日本語環境2.3.4というものをインストールしたのですが、
pythonIDEが見当たりません。
c言語を少しだけやった時には、コンパイラがあったのですが・・・。
python.exeを実行するとdos窓が開くのですが、皆さんはこれでpythonのプログラムを
作っているのでしょうか?

私の環境は
os;xp sp2
memory;512mb
cpu;pen4 2.4c Ghz
です。わかるかたいましたら、レスお願いします。



660 :デフォルトの名無しさん:04/10/26 11:18:35
>>659
Python IDE 使ったことない。
python.exe実行してDOS窓開くんじゃなくてDOS窓でpython.exe実行する。



661 :デフォルトの名無しさん:04/10/26 11:26:36
>>659
> python.exeを実行するとdos窓が開くのですが、皆さんはこれでpythonのプログラムを
> 作っているのでしょうか?

そういう人も多いと思われ。別の選択肢は IDLE という統合環境を使うこと。
スタートメニューの中に「IDLE (Python GUI)」というのがあると思う。

プログラムファイルには foo.py のように .py で終わるファイル名を付ける。
そうするとファイルのアイコンが蛇マークになる(もしならないなら関連付けが
無効になっているか、ちゃんと .py になっていない)。この状態でアイコンを
右クリックすると「Edit with IDLE」という項目が表示されると思う。これを選べば
IDLE で既存のプログラムファイルを編集したりプログラムを実行したりできる。

IDLE は一風変わった統合環境なので慣れが必要かも。よく分からなければ
メモ帳でプログラムファイルを作って、アイコンをダブルクリックして実行、
という方法でもいい。俺的にはこの方法が楽チン。

662 :デフォルトの名無しさん:04/10/26 16:15:01
instancemethodの定義を追ってくと,
class object:
  def method(self): pass
instancemethod = type(object().method)
と等価っぽいんだが,なんじゃこれは?

def instancemethod(self, f):
  return lambda *args, **kws: return f(self, *args, **kws)
ではダメなのかな?

663 :662:04/10/26 16:16:37
lambdaにreturn付けてしまった….鬱.

664 :659:04/10/26 17:07:44
>>660
>>661
レスありがとうございます。
pythonGUIありました。スタートアップにあったとは・・・orz

まだ、それほどわかっていないのですが、C言語よりはなじみやすく感じ、
この言語だったら長く続けられそうな気がします。ありがとうございました


665 :デフォルトの名無しさん:04/10/27 01:08:54
16進数文字列→intに変換する関数が見つからない.help!

666 :デフォルトの名無しさん:04/10/27 01:24:59
>>665
>>> s = '0a'
>>> eval( '0x' + s )
10
>>>


667 :デフォルトの名無しさん:04/10/27 01:27:47
>>> int("0xFF", 16)
255
>>> int("FF", 16)
255

668 :デフォルトの名無しさん:04/10/27 01:41:35
>>666, >>667
thx!

669 :デフォルトの名無しさん:04/10/27 19:37:38
new-style classってなに?

670 :デフォルトの名無しさん:04/10/27 20:45:23
http://www.python.org/moin/PythonGlossary
> new-style class - Any class that inherits from object. This includes
> all built-in types like list and dict. Only new style classes can
> use Python's newer, versatile features like slots, descriptors,
> properties, getattribute, class methods, and static methods.

object クラスから派生したクラスのこと。list や dict などの組み込み型もこれに含まれる。
新型クラスだけが Python の比較的新しい多才な機能(スロット、デスクリプタ、プロパティ、
getattribute、クラスメソッド、スタティックメソッドなど)を活用できる。

671 :デフォルトの名無しさん:04/10/27 21:37:58
SD 読んだけど Python が扱われなくて良かったよ。


672 :デフォルトの名無しさん:04/10/27 22:24:26
>>671
理由も

673 :デフォルトの名無しさん:04/10/27 22:24:58
いずみちゃんで(;´Д`)ハァハァ できるようでないと、
Pythonを使いこなすのは難しい。

674 :デフォルトの名無しさん:04/10/27 22:49:13
負け惜しみが多いスレですね

675 :デフォルトの名無しさん:04/10/28 01:06:41
Rubyスレの方がよほど潔いな

676 :デフォルトの名無しさん:04/10/31 00:50:24
>>671
結局理由はいえないのかよ

677 :デフォルトの名無しさん:04/10/31 01:17:05
671 じゃないが。記事のレベルがどうにもこうにも。

678 :デフォルトの名無しさん:04/10/31 13:06:01
Pythonでブラウザのレンダリングイメージを取得したいのですが、
可能でしょうか。
OSはLinux、ブラウザはなんでもOKです。
getScreen(URL,outfile,jpg)みたいな感じにしたいんですが。

679 :デフォルトの名無しさん:04/10/31 16:32:37

はい

680 :デフォルトの名無しさん:04/10/31 17:12:19
お前らの開発環境と開発ツール教えて下さいお願いします。
便利なやつ使ってんだろ?
俺はcygwinでIPython使おうと思ったけど、あれhelp()ですぐ落ちて不安定。

681 :デフォルトの名無しさん:04/10/31 17:18:30
>>678 >>679
ライブラリとかですか?情報をお願いします。

682 :デフォルトの名無しさん:04/10/31 19:00:07
>>680
Linuxの場合:
Red Hat Linux 7.3 標準の Python 2.2。エディタは Emacs (python-mode 使用)。
Windowsの場合:
Python.org 謹製 Python 2.3.4。エディタは本体に付属の IDLE。

何の変哲もないが特に不満はない。

683 :デフォルトの名無しさん:04/10/31 19:12:20
>>680
Exuberant Ctags はPythonも対応しているな。

684 :デフォルトの名無しさん:04/10/31 19:31:43
>>678
import os, commands

def getScreen(URL, filename, format):
    os.system("netscape -remote 'openURL(%s)'" % URL)
    os.system("sleep 10") # wait the rendering to finish...
    data = commands.getoutput("xwd -root | convert xwd:- %s:-" % format)
    open(filename, "w").write(data)

if __name__ == "__main__":
    getScreen("http://www.python.org/", "python.jpg", "jpeg")

レンダリングの終了を待つ確実な方法が思いつかなかった。
netscape -remote 'PageUp()' などの無害なコマンドを送ればいいのでは
とオモタけど、レンダリング終了前に PageUp してしまう。

-remote に関しては下記参照。Netscape.ad のコメントも参考になる。
http://wp.netscape.com/newsref/std/x-remote.html

685 :デフォルトの名無しさん:04/10/31 22:29:14
>>680
おまいが「ぱいきち」とか名乗ってPythonShell作れ。

686 :デフォルトの名無しさん:04/11/01 00:00:13
>>684
どうすればよいかまったくわからなかったのですが、684の
コードで理解できました。
ありがとうございました。
http://home.catv.ne.jp/pp/ginoue/memo/screenshot.html

687 :デフォルトの名無しさん:04/11/01 01:41:02
>>684
すんません、例えば
> os.system("netscape -remote 'openURL(%s)'" % URL)
                         ~
                         ↑
                       これ何ですか?


688 :デフォルトの名無しさん:04/11/01 01:47:10
「これ」が指しているのが俺のブラウザだと「R」の文字なんだが。
聞きたいのは %s のことか? それともその後の % のことか?

689 :デフォルトの名無しさん:04/11/01 02:52:57
すんません、
> それともその後の % のことか?
のことです

690 :デフォルトの名無しさん:04/11/01 03:21:51
>>687
python起動して、
>>> "hoge%s" % "fuga"
とかやってみろ。

691 :デフォルトの名無しさん:04/11/01 03:23:01
Cでいうsprintfみたいな機能のやつ
ttp://www.python.jp/pub/doc_jp/lib/typesseq-strings.html

692 :デフォルトの名無しさん:04/11/01 03:24:06
% という演算子(+ や * の仲間)だよ。

7.1 ファンシーな出力の書式化
http://www.python.jp/pub/doc_jp/tut_2.3.3/node9.html

693 :デフォルトの名無しさん:04/11/01 03:25:04
;・∀・)ハゥ!被ったっ!折れ以外にお節介野郎が二人もっ!

694 :デフォルトの名無しさん:04/11/01 03:54:11
>>690
'hogefuga' と帰ってきました。
なるほど。C だと , のやつですね>>%

695 :デフォルトの名無しさん:04/11/01 11:01:29
> C だと , のやつですね>>%

C だと、何だって?

696 :デフォルトの名無しさん:04/11/01 11:05:23
これは何に使うスクリプトなの?

697 :デフォルトの名無しさん:04/11/01 14:54:57
つーか,これでレンダリング結果を得るのは無理ありすぎ.

698 :デフォルトの名無しさん:04/11/01 19:32:58
代案きぼんぬ

699 :デフォルトの名無しさん:04/11/01 21:17:02
re.subとかstring.replaceとか使えば?

700 :デフォルトの名無しさん:04/11/01 23:09:29
何の話?

701 :デフォルトの名無しさん:04/11/01 23:22:15
"hoge%s" % "fuga"
の代案だと思われ。

702 :デフォルトの名無しさん:04/11/01 23:40:19
% のエスケープが \% じゃなくて %% なのが納得いかん

703 :デフォルトの名無しさん:04/11/02 01:11:16
JPythonのネタが全然出てこないねぇ。これも日本人は使ってないのかなと。

704 :デフォルトの名無しさん:04/11/02 01:12:40
JPython はなくなりました
いまは Jython ですので

705 :デフォルトの名無しさん:04/11/02 01:26:58
Python流のコーディング規約みたいなのってある?モジュール名は大文字、
メソッド名は動詞、XXにはプリフィクスをつける、とか、変数名に迷ったらspamとか。

706 :デフォルトの名無しさん:04/11/02 01:36:18
ここらへん
ttp://oldriver.org/python/pep-0008j.html

707 :705:04/11/02 01:51:32
>>706
thx.

708 :デフォルトの名無しさん:04/11/02 02:18:42
Jython使ってましたが、Groovyに移行してしまいました。
Javaとの連携はGroovyのほうが美しかったので。

709 :デフォルトの名無しさん:04/11/02 02:31:28
Python 使いが「Java でも使ってやろうかな」というときに使うのが Jython であって、
Java だけラップした Groovy(使ったことないからよくわかりませんが) は汎用性を犠牲にした分だけ
Java との親和性が Jython と比較して良いということなんじゃないのかな。
Java で生きる人には良い選択なのだろうけど、こっちとしては眼中にない。

710 :デフォルトの名無しさん:04/11/02 10:00:10
>>709
使ったこともないのに他の言語を批判して貶めるのがPython厨の
いつものやり方だよね。

711 :デフォルトの名無しさん:04/11/02 10:00:15
Jythonって開発がぜんぜん進んでないじゃん。

712 :デフォルトの名無しさん:04/11/02 12:55:06
>>708
正解でしょう。
たぶんGroovyのほうがずっと将来性あるし。

713 :デフォルトの名無しさん:04/11/02 15:29:19
Javaとの親密な連携が必要な場合はGroovyの方がいいかもね.
Groovyの特徴は,良くも悪くもJavaにべったりなところ.

714 :デフォルトの名無しさん:04/11/02 15:43:31
Javaで書いたクラスをそのまま呼び出せるの?

715 :デフォルトの名無しさん:04/11/02 15:50:28
>>714
じゃま
うざい
こっちいけ
http://pc5.2ch.net/test/read.cgi/tech/1080052050/

716 :デフォルトの名無しさん:04/11/02 16:32:52
def を使うとなんか
<function test at 0x006B1A70>
って出てくるんですけど、どうしたらいいんでしょう。
testは関数の名前のところにいれました。

717 :あぼーん:あぼーん
あぼーん

718 :デフォルトの名無しさん:04/11/02 16:36:10
>>716
まずPythonをアンインストールしろ.次に

719 :デフォルトの名無しさん:04/11/02 17:55:54
>>716
それは test の名前空間のアドレス

720 :デフォルトの名無しさん:04/11/02 18:27:25
えぇっと、、、理解しました。
スレ汚しごめんよ。(´・ω・`)

721 :デフォルトの名無しさん:04/11/02 20:19:13
>>720
まじで?折れ、蛇使いを自負してるけど>>719の意味が分からん。
def test: ... ってやっただけで print test したのと同じになる理由も思いつかない。
readlineモジュールでなんかやってる?

722 :デフォルトの名無しさん:04/11/02 20:23:04
>>> def hoge():
... pass
...
>>> hoge
<function hoge at 0x00A639F0>

こんな感じのことやったんでしょう

723 :デフォルトの名無しさん:04/11/02 22:42:48
「PerlユーザのためのPython移行ガイド」
読んだけど、実用書そのもの。ホントにPerlはこうでPythonはこう、ってい羅列しかなくて
面白みはなかった。薄めでオライリーより安いし、テーマはいいとこ付いてて実用むけなんだけど
もう一つなんか欲しかった。

オレとしてはclassの定義で
class Foo
def bar(self,boo)

な形の第一引数selfにたいして何のコメントもないのがすげぇひっかかった。
同じ構成のperlコードと比較しているのでわかれよ、ってことなんだろうけど
そこは普通解説するだろ。


724 :デフォルトの名無しさん:04/11/02 22:57:58
>>723
11月中に初めてのPython第2版がリリースされるよ

725 :デフォルトの名無しさん:04/11/02 23:45:24
てゆーか「名前空間のアドレス」って何

726 :デフォルトの名無しさん:04/11/03 00:16:09
お勉強に読むと楽しいソース教えて。
手頃なサイズのやつ。


727 :デフォルトの名無しさん:04/11/03 00:19:54
>>726
http://www.unixuser.org/%7Eeuske/doc/pygame/ChimpLineByLine-j.html

猿でも読める。


728 :デフォルトの名無しさん:04/11/03 01:28:20
>>715
Jythonでションボリなjava開発を楽しくする話はここでしてもいいでしょうか?
ドキドキ


729 :708:04/11/03 03:58:20
あ、Jython->Groovyに行きましたが、
Pythonは使いつづけてますんで。
念のため。

730 :デフォルトの名無しさん:04/11/03 04:50:33
#python-ja ってどうやったら繋げられるの?というかこのチャンネル生きてんの?

731 :デフォルトの名無しさん:04/11/03 07:51:46
>>730
生きてる価値がなぃょ

732 :デフォルトの名無しさん:04/11/03 16:05:09
>>730

ttp://www.python.jp/Zope/PyLog/1095147501/

ここ読んで駄目なら才能ない。

733 :デフォルトの名無しさん:04/11/03 18:15:05
Pythonって同名の関数定義しても警告とか出ないんだね…。言語仕様?
この動作を抑制する方法ってありますか?

あとperlのmy, perl -w のようなことはできない?

734 :デフォルトの名無しさん:04/11/03 18:25:22
>>733
See 'python -h' output.

735 :デフォルトの名無しさん:04/11/03 18:53:47
>>724
Scheme でも警告でないことが多い。
最も最近で定義された関数が有効になるというのは
それはそれできれいだと思う。

736 ::04/11/03 20:24:17
レス番ずれてね?

737 :デフォルトの名無しさん:04/11/03 21:01:41
ほんとだ。 >>733 の間違いだね
「ホットゾヌ2」のバグかな。。。

738 :デフォルトの名無しさん:04/11/03 21:50:41
ぬるぽ

739 :デフォルトの名無しさん:04/11/03 22:00:13
ガッ

740 :デフォルトの名無しさん:04/11/03 23:41:23
http://www.python.org/Mirrors.html
これ見るとHTTPのミラーは日本にはないんだね。
日本からだとどこが速いんだろう。

741 :デフォルトの名無しさん:04/11/04 20:42:16
>>740
Python.jp でなんでやらないんだろう?
見るものがあんまし多くないから水増しに良かろうに。

742 :デフォルトの名無しさん:04/11/05 17:57:04
なぜ Jython は Java 1.5 で動きませんか?

743 :デフォルトの名無しさん:04/11/05 19:39:39
文字列中のASCII範囲外の文字を文字参照(&#xxxxx)に変換したいのですが、
そういったライブラリはありませんか?

744 :デフォルトの名無しさん:04/11/05 19:57:19
リファレンスとにらめっこするか、練習問題だと思ってやってみれば?
ここで答えを待ってるより早い。



745 :デフォルトの名無しさん:04/11/05 20:00:12
      __--、、-へニ二、‐、
     ,,-´´, ‐´7 ~ `ヽ ̄ ヽ \
    / /   |     ll   \ ヽ.
   〃 /  ./ ,|  i  l || ヽヽ ヽ `、
  /  /  ./ /{l  |、 l. ||ヽ. } l.  ヽ l
  ! ./l 〃 fT lヽ. ヽ ''フT'ト | |  |. !
    |!| l| |. レ=、\ .y',=:、 | |、  ! |
.    !'ヽl !. {.l“{::f|     |i:::f}”| | } / ! .|i   おねえちゃん
      `| ゞ !. -‐ 、  ‐'-'  | |´/ | |.!   ぱんちっっっっっっっっ
.       r.、 l. i 、   ー   ./| |´| |. | | i 
     /l. l |. l. i _ 、 .. '|ッ、| | | ! | | l 
      / .| ,レヘ.∩/(.   / .l| | |  | | l. l.
    // 〈 'ニユ.|   ><   /l |`ヽ、.! | l. ll
   〃/, ‐ヽ  ヤ_〉=夫=.、/.| |  /`、! |. ||
  〃/./ | `、 `i 〃 ヽ、_》 ! |  | | ヽ.l ||



746 :743:04/11/05 20:18:13
>>744
ないと先へ進まないので書いてはあるんですが、
ちゃんとしたのがないのかなとおもった次第です。

tmp = ""
for ch in unicode:
 esc = ch.encode("unicode_escape")
 if ch != esc:
 ch = "&#%d;" % int(esc.replace("\\u", ""), 16)
tmp += ch
return tmp.encode("ascii")

>>745
姉ゲー?

747 :743:04/11/05 20:22:17
組み込みにord()ってのをみつけた。↑のコードのはずかしさ倍増

748 :デフォルトの名無しさん:04/11/05 20:34:37
# -*- coding: cp932 -*-

s = u"""\
      __--、、-へニ二、‐、
     ,,-´´, ‐´7 ~ `ヽ ̄ ヽ \
    / /   |     ll   \ ヽ.
   〃 /  ./ ,|  i  l || ヽヽ ヽ `、
  /  /  ./ /{l  |、 l. ||ヽ. } l.  ヽ l
  ! ./l 〃 fT lヽ. ヽ ''フT'ト | |  |. !
    |!| l| |. レ=、\ .y',=:、 | |、  ! |
.    !'ヽl !. {.l“{::f|     |i:::f}”| | } / ! .|i   おねえちゃん
      `| ゞ !. -‐ 、  ‐'-'  | |´/ | |.!   ぱんちっっっっっっっっ
.       r.、 l. i 、   ー   ./| |´| |. | | i 
     /l. l |. l. i _ 、 .. '|ッ、| | | ! | | l 
      / .| ,レヘ.∩/(.   / .l| | |  | | l. l.
    // 〈 'ニユ.|   ><   /l |`ヽ、.! | l. ll
   〃/, ‐ヽ  ヤ_〉=夫=.、/.| |  /`、! |. ||
  〃/./ | `、 `i 〃 ヽ、_》 ! |  | | ヽ.l ||
"""

def encode(c):
if c < u"\x80":
return c
else:
return u"&#%d;" % ord(c)

print u"".join([encode(c) for c in s])

749 :デフォルトの名無しさん:04/11/06 04:54:43
>>743
"ほげ".encode("ascii","xmlcharrefreplace")


750 :743:04/11/06 09:49:33
>>749
thx!

>>748
GJ!

751 :デフォルトの名無しさん:04/11/06 13:06:29
>>748
なんじゃこれ
ひどいげんごだね

752 :デフォルトの名無しさん:04/11/06 14:30:53
なぜに Python は 画像処理ソフトで人気がありますか?
画像処理ライブラリがすごいことになってたりすんのかな。

753 :デフォルトの名無しさん:04/11/06 17:05:44
>>752
あるよ。とりあえず PIL かなぁ・・・


754 :デフォルトの名無しさん:04/11/06 20:22:00
インスタントパイソンのページを読んでがんばってるんですが、
この、

class Basket:

# Always remember the *self* argument
def __init__(self,contents=None):
self.contents = contents or []

def add(self,element):
self.contents.append(element)

def print_me(self):
result = ""
for element in self.contents:
result = result + " " + `element`
print "Contains:"+result

のself.contentsというのがどういうことなのかいまいちよくわかりません。
誰か教えてください…お願いします。

755 :デフォルトの名無しさん:04/11/06 21:48:54
>>754
C++で言うメンバー変数、Smalltalkで言うインスタンス変数。


756 :デフォルトの名無しさん:04/11/06 22:05:06
>>754
selfはC++、javaとかのthisと一緒。
クラスでのメソッド定義の第一引数(self)は自インスタンスが生成されたときの
自インスタンスへの参照になる。

この場合self.contents は Basketクラスのインスタンスのcontents変数。

b=Basket()
b.contents

へのアクセスと同義。

でいいのかな。俺も最近始めたばかりだからスコープ定義とか
まだはっきり把握していない。
Pythonマスターからツッコミ希望。

で、俺も質問なんですが
・メンバ変数も宣言なしで使えるのはいいんですがtypoしたとき困らない?
・クラス変数ってどー定義するの?



757 :m9っ・∀・):04/11/06 22:10:45
>>754
self はオブジェクト自身を保持する変数だよ。
self.contents = ... という代入文は、self が指すオブジェクトの中に
"contents" という変数を作って、次の値を設定しなさい、という意味。

>>> class Basket:
...     def __init__(self, contents=None):
...             print self # 試しにオブジェクト自身を表示してみる
...             self.contents = contents or []
...
>>> foo = Basket() # Basket クラスのインスタンスを作る
<__main__.Basket instance at 0x816975c> # 作ったオブジェクト自身が表示された
>>> foo # 変数に代入されたオブジェクトを表示してみる
<__main__.Basket instance at 0x816975c> # 同じものが表示された
>>> bar = Basket([1, 2, 3]) # 別の Basket インスタンスを作る
<__main__.Basket instance at 0x816bf24> # 新たに作られたオブジェクト自身が表示された
>>> bar # 変数に代入されたオブジェクトを表示してみる
<__main__.Basket instance at 0x816bf24> # やはり同じものが表示された

foo1 と foo2 は別のオブジェクトであることが表示される数値(=オブジェクトID)の
違いから分かる。したがって foo1.contents と foo2.contents も別の変数ということになる。
これも表示してみると分かる。

>>> foo.contents
[]
>>> bar.contents
[1, 2, 3]

758 :m9っ・∀・):04/11/06 22:15:15
>>756
> メンバ変数も宣言なしで使えるのはいいんですがtypoしたとき困らない?

Pythonマスターは typo などしない!!

> クラス変数ってどー定義するの?

>>> class Basket:
...     contents = []
...
>>> foo = Basket()
>>> bar = Basket()
>>> foo.contents
[]
>>> bar.contents
[]
>>> foo.contents.append(1)
>>> foo.contents
[1]
>>> bar.contents
[1]
>>>

759 :デフォルトの名無しさん:04/11/06 22:21:19
typo の問題は、初期化 (代入) しないで参照するとエラーになるから、全くガー
ドがないわけではないはず...

まぁ、UT ちゃんとやりましょう... ということかな...



760 :デフォルトの名無しさん:04/11/06 22:29:36
import re
print re.search('(h.{1}ge)','hoge hage hige').groups()

とすると、

('hoge',)

こうなってしまうのですが、これを、

('hoge', 'hage', 'hige')

とするにはどうしたらよいでしょうか?

761 :m9っ・∀・):04/11/06 22:35:29
>>> print re.findall('(h.{1}ge)','hoge hage hige')
['hoge', 'hage', 'hige']

タプルでないとだめ?w

762 :デフォルトの名無しさん:04/11/06 22:40:01
>>761
本当はマッチオブジェクトが欲しいのですが、(マッチオブジェクトを使って
文字列の位置を知りたい)findallだとそれができないので、
どうしてもmatch/searchが使いたいのですがどうにかなりませんか?

763 :デフォルトの名無しさん:04/11/06 22:42:49
finditer()

764 :デフォルトの名無しさん:04/11/06 22:48:47
>>> import re
>>> print [x.span() for x in re.finditer('(h.{1}ge)','hoge hage hige')]
[(0, 4), (5, 9), (10, 14)]

765 :760:04/11/06 22:54:05
>>763
>>764

finditerを使ったらできました。ありがとうございました。

イテレーターが出たときは「難しそうだし、複雑なことは自分ではやらないので
覚えなくてもよかろう」と思って無視していたのですが、
こんなところで使うとは思ってませんでした。

766 :デフォルトの名無しさん:04/11/07 05:52:10
質問です。
・PythonではすべてのクラスのRootクラスは存在しますか?する場合、マニュアルのどのセクションに記述されていますか?
・__add__のようなオーバーロード可能な演算子の一覧はマニュアルのどのセクションに記述されているのでしょうか?
・ブロックごとに変数スコープは作成されますか?

767 :デフォルトの名無しさん:04/11/07 05:57:06
>>766
とりあえず全部嫁

768 :デフォルトの名無しさん:04/11/07 09:22:25
非常にレベルの低い質問だとは思いますが、釣りではありません。
”input”で文字列を格納するにはどうすればよいのでしょうか??
例えば
hello = input()
print hello
数字は可能ですが、文字列を入れるとエラーが出ます。
なぜでしょうか?

769 :デフォルトの名無しさん:04/11/07 09:32:41
文字列の入力には raw_input を使う

hello = raw_input()

input だと入力を式だとみなして評価してしまう.
たとえば input() で 1+2 と入力すると 3 が返る.


770 :デフォルトの名無しさん:04/11/07 09:48:54
- 旧形式クラスの場合には,Root クラスに相当するものはありません.
新形式クラスの場合には object 型が基底クラス.
簡単な説明はチュートリアルの用語集に書いてあります.
詳しい説明はリファレンスマニュアルの 3 章と 7 章に少し書いてあるけど
多分難解で参考にならないでしょう.オライリーの「Pythonデスクトップリファレンス」
に簡単でわかりやすい説明があったと思います.
- オーバロード可能な演算子は,リファレンスマニュアルの 3.3 節「特殊メソッド」
に詳しく書かれています.ライブラリリファレンスの 3.10.1 節には,よく使われる
一部の特殊メソッドについてまとめた対応表がありますよ.
- ブロック文ごとに変数スコープを張るわけではありません.
変数スコープについては,チュートリアルの 9.2 節,
リファレンスマニュアルの 4.1 節などに書かれています.

771 :768:04/11/07 09:51:12
>>769
出来ました!
ありがとうございました。

772 :754:04/11/07 10:16:33
>>755-757
ありがとうございました、助かりました。

773 :766:04/11/07 14:04:19
>>767
目次から当たりをつけてざっと目を通したつもりだったんですが、
「全部嫁」はおっしゃるとおりで。申し訳ないです。

>>770
ありがとうございます。大変助かります!


ドキュメント見て思うのは
「グローバルモジュールインデクス 」はあるけど
他のOOP言語でよくあるクラス階層図がないなぁと。
「Python ライブラリリファレンス」がそれに近い?

ドキュメントに {}はmapping型のdictonary型、
それにdict型が存在するとあったので
試しに
d=mapping()
d=dictory()
と書いてみたらエラー。
d=dict()
は正解。うぬぅ。わからんぜよ・・・。




774 :デフォルトの名無しさん:04/11/07 14:56:11
>>773
素直にまずチュートリアルから始めたら?

775 :デフォルトの名無しさん:04/11/07 15:03:45
流れ的にはオライリー待ちといっとけば正着

776 :デフォルトの名無しさん:04/11/07 16:28:01
>>773
推測するのが好きなら既存のコードを読んでみたら。
ライブラリなりアプリケーションなり好きなものを。
でもって、読んでて分からない部分をマニュアルで調べる、と。

777 :デフォルトの名無しさん:04/11/07 19:30:32
ライブラリリファレンスの 2 章が,だいたい組み込みオブジェクト型の階層に
合わせて書かれていますよ.それぞれの型の素のインスタンスを作成する関数
は,(読みにくいけど) 2.1 節の組み込み関数の中で列挙されています.

778 :766:04/11/08 23:05:41
>>774
マニュアル流し読みしてました。スンマセン。

>>777
有難うございます。


779 :デフォルトの名無しさん:04/11/09 00:05:11
>>773
> ドキュメントに {}はmapping型のdictonary型、
> それにdict型が存在するとあったので
どこに書いてある?
そんなこと今まで知らなかったorz

780 :773:04/11/09 10:08:26
>>779
・Python リファレンスマニュアル 3.2 標準型の階層
マップ型 (mapping)
辞書型 (dictionary)

とありますが、単なる概念の説明なわけですね。きっと。
しかしマニュアルでは論理上の型名と物理型名の
表記上の違いがないような気がする。

dict()は 
・Python チュートリアル 5.4 辞書
にdict()コンストラクタ という表現がありましたが・今見たら
・Python ライブラリリファレンス 2.1 組み込み関数
に説明がありました。

781 :m9っ・∀・):04/11/09 11:09:58
1.5.2あたりまでは、組み込み型のオブジェクトを作るための方法は
{} や [] や () がすべてで list() や tuple() は型変換のための関数に過ぎなかった。
dict() に至っては相互変換できる組み込み型が無いので存在すらしなかった。
だから例えばマニュアルに「辞書型(dictionary type)」などと書いてあっても
dict() と混同する気遣いはなかったよーに思う。
しかるに list, tuple, dict は今や型そのものなので、
型の名前=プログラム中で使える識別子かと想像するのも無理はないかも。
ある意味では、マップ型(mapping type)やシーケンス型(sequence type)は
説明のための型の分類(カテゴリ)だといえる。

しかし純粋に説明のための分類かといえばそうでもないところがややこしくて、
「Python/C API」の6章(特に6.3節や6.4節)を見ると同じカテゴリに属する型の
オブジェクトは同じAPIで共通して扱えるようになっていることが分かると思う。
これは、例えば sequence type に属するリストやタプルには等しく len() や
スライスが適用できることに相当する。

782 :デフォルトの名無しさん:04/11/09 11:14:48
>>780
Python で「型」と出ていたら JAVA で言うクラスではなく
インターフェイスだと思った方が分かりやすいと思う。


783 :m9っ・∀・):04/11/09 11:15:36
よーするに分類名=型名じゃないよってことです。

784 :デフォルトの名無しさん:04/11/09 12:58:59
urlで指定したファイル(画像等)はどのようにダウンロードするんですか?

785 :m9っ・∀・):04/11/09 13:37:25
import urllib
urllib.urlopen("http://www.python.org/pics/pythonHi.gif")

786 :デフォルトの名無しさん:04/11/09 14:05:02
jythonの話っでawtのコードが良く出てくるけど
webでの話ってあんまナイネ。
糊付け言語として使うならビューに使うのが正解かと
思ったがJSPコンパイラに相当するものなさげだし、
あってもインデントと相性悪いし。

ロジック・モデルをフルjythonで書くのが正解?
あとテストコード。

787 :デフォルトの名無しさん:04/11/09 17:15:10
>>780
なるほど.インターフェイスと実装の違いね.
で,今のところマップ型の実装は辞書型しかないと.
最初にmapとdictがあると聞いたときは
ハッシュと二分木とか,複数の実装があるのかと思った.

ちなみに,Pythonのクラスはオブジェクト生成関数みたいなモノなので,
dictはクラス名であると同時に,辞書オブジェクト生成関数であるとも言える.

788 :デフォルトの名無しさん:04/11/09 17:30:14
cvsをインストールして初めて名前を知りました。
pythonてどういう時に使うのでしょうか?


789 :デフォルトの名無しさん:04/11/09 17:35:42
>>788
おまいがいつもググっているときにPythonの恩恵を間接的に受けている

790 :デフォルトの名無しさん:04/11/09 18:50:52
どのような恩恵を受けているのですか?

791 :デフォルトの名無しさん:04/11/09 19:01:55
>>790
君がgoogleに文字列をPOSTしてからPageRankに従ってサイトのリストを
君のブラウザ上に返すまでがほどんどPython若しくはPython謹製でやっているという事実。

792 :デフォルトの名無しさん:04/11/09 19:31:53
謹製という言葉の謎な使い方がまたひとつ。


793 :デフォルトの名無しさん:04/11/09 19:58:46
Python燻製というのもいいな。


794 :デフォルトの名無しさん:04/11/09 20:18:00
Python で2万行の CVS データを読み込んだら
えらく時間かかった。たぶん Perl だと一瞬なんだろうけど。。
Python もう少し速くならないかな。

795 :デフォルトの名無しさん:04/11/09 20:18:34
CVS -> CSV でした。

796 :デフォルトの名無しさん:04/11/09 20:33:20
>>794
あのさ、時間計測してくれないかな?


797 :デフォルトの名無しさん:04/11/09 20:49:14
対Perl比でそこまで差がつくとは思えない.
単純なファイル読み込みなら,対C比でもそんなに悲惨な結果にはならないような.


Pythonが遅いという点には同意しなくもないが.

798 :デフォルトの名無しさん:04/11/09 21:34:18
>>794
csvモジュールを使ったのか、それともCSVパーザを自作したのか知りたいな。

799 :デフォルトの名無しさん:04/11/09 22:08:16
で、みなさんはPythonをてどういう時に使っているのでしょうか?
googleAPIでお話するとき?

800 :デフォルトの名無しさん:04/11/09 22:34:36
shell 自体が Python ですよ

801 :デフォルトの名無しさん:04/11/09 23:07:11
>>800
ファイル操作、外部ブロセス起動などの一般的なシェルタスクは
みなPythonでいちいち記述するんですか???
ネタじゃないなら詳しく。

802 :デフォルトの名無しさん:04/11/09 23:14:29
>>801
いや、今は ipython 使ってるだけだけど・・

803 :デフォルトの名無しさん:04/11/09 23:16:56
>>801 ipythonでぐぐってみてくれ。

804 :デフォルトの名無しさん:04/11/10 00:36:04
>>791
へー

ソースは?

805 :デフォルトの名無しさん:04/11/10 00:50:08
Pythonに
NekoHTML http://www.apache.org/~andyc/neko/doc/html/
みたいにタグの記述ミスにもまけず適当にパースしてくれる
HTMLパーサってない?

806 :デフォルトの名無しさん:04/11/10 01:04:28
>>804
http://www.python.org/Quotes.html

807 :794:04/11/10 03:48:12
>>798
1行に 30 個ぐらいの浮動小数データで、
単に "," で split() して float に変換しているだけなんだけど。。。
だいたい2万行で5秒ぐらいかかる。

808 :m9っ・∀・):04/11/10 18:37:07
from random import randrange
import time

f = open("float_test.csv", "w")
for i in range(20000):
    f.write(",".join(["%d.%d" % (randrange(-99999, 10000), randrange(0, 1000)) for j in range(30)]))
    f.write("\n")
f.close()

t = time.time()
buffer = []
for line in open("float_test.csv"):
    buffer.append([float(s) for s in line.split(",")])
print time.time() - t


WinXP SP2 (Pen4 3.4GHz), Python 2.3.4 で 1.8 秒前後ですた。
キャッシュがかなり効いてそうだけど。

折れの感覚だと2万行で5秒は許容範囲だなぁ。

809 :デフォルトの名無しさん:04/11/10 20:15:21
>>808の読み出し部分を取り出し、結果のファイル出力を加えてpython/perl/rubyで書いてみた。

プラットフォームはFreeBSD 4.8-RELEASE。実行時間をtimeコマンドで計測。
()内はそのうちの読み出しのみにかかった時間。

Perl 5.8.2: 7.5sec(2.4sec)
Python 2.3.4: 9.9sec(2.8sec)
Ruby 1.8.1: 14.5sec(4.3sec)

perlに書換えれば、1〜3割程度は速くなるかもしれん。OO税のようなものか。


810 :809:04/11/10 20:16:43
-- python
import time, string, sys

start = time.time()
buffer = []
for line in open("float_test.csv"):
buffer.append([float(s) for s in line.split(",")])
sys.stderr.write("%f\n" % (time.time() - start))
for s in buffer:
for t in s:
print("%f" % t)


811 :809:04/11/10 20:17:02
-- perl
use Time::HiRes qw ( time );

$start = time;
open(IN, "float_test.csv");
while (<IN>) {
chop;
my (@s);
foreach $s (split(",")) {
push (@s, $s + 0.0);
}
push(@buffer, \@s);
}
print(STDERR time - $start, "\n");

foreach $s (@buffer) {
foreach $t (@{$s}) {
printf("%f\n", $t);
}
}


812 :809:04/11/10 20:17:32
-- ruby
start = Time.now;
buffer = []
IO.foreach("float_test.csv") { |l|
s = []
l.chop!
l.split(",").each { |t|
s.push(t.to_f)
}
buffer.push(s)
}
$stderr.print((Time.now - start), "\n")

buffer.each { |s|
s.each { |t|
printf("%f\n", t)
}
}


813 :デフォルトの名無しさん:04/11/10 20:34:42
IPythonでパイプるには,やっぱりos.popen?()を使うの?
ログインシェルにするのは厳しいような….

814 :デフォルトの名無しさん:04/11/10 21:04:24
>>809 を鵜呑みにすると Ruby を未来永劫使わないことに決めました

815 :デフォルトの名無しさん:04/11/10 23:27:29
Perl,Ruby 版は各スレのエキスパートに書かせたほうがよろしいかと

816 :デフォルトの名無しさん:04/11/10 23:39:24
他言語との比較はこっちで↓やれば?

最速スクリプト言語決定戦!
http://pc5.2ch.net/test/read.cgi/tech/1074996153/l50

Pythonで書いたコードのボトルネックはCで拡張モジュールとして書き直すのが吉、
と言ってみるテスト。

817 :デフォルトの名無しさん:04/11/10 23:46:19
それなら Perl でも Ruby でも同じことだが

818 :デフォルトの名無しさん:04/11/10 23:49:04
>>809のコードをWindowsでも実行してみたよ。
Pentium4M 1.6GHz WindowsXP SP2。
cygwin bash shell で interpreter script > /dev/null して計った。
左が読み込むまで、右が出力も込み。
Ruby-1.8.1 (ruby-lang.org MSC) 2.764 9.374
Ruby-1.8.1-1 (cygwin gcc) 2.331 31.4
Python-2.3.4 (python.org MCS) 2.183000 6.940000
Python-2.3.4 (cygwin gcc) 1.399000 28.820000
Perl-5.8.5 (PXPerl ?) 1.17113494873047 5.11680889129639
Perl-5.8.5 (cygwin gcc) 2.41000008583069 31.1360001564026
cygwin死ぬほどI/O遅ぇ orz
ちなみにcsvモジュール使って
import csv, time, sys
start = time.time()
buffer = [map(float, row) for row in csv.reader(file("float_test.csv"))]
sys.stderr.write("%f\n" % (time.time() - start))
みたいにしたら、python(MSC) 1.962s python(cygwin) 1.009s だった。
Rubyにもcsvがあるみたいだけど、漏れ程度のRuby初心者が書いても全然速くならんかった。
Perlには標準のcsvモジュールみたいなのがなかった。どのみちなくても十分高速だね。いいなぁ。

819 :デフォルトの名無しさん:04/11/11 00:20:17
結論

Ruby使えねぇええええええええええええええええええええええええええ

820 :デフォルトの名無しさん:04/11/11 00:33:05
召喚するのはやめましょう

821 :デフォルトの名無しさん:04/11/11 00:35:09
ruby だと、read() が速いような気がする。一気に読んで...
ループにすると遅い (最速スレの結果より)。

ruby 分からないので、コード書けません


822 :デフォルトの名無しさん:04/11/11 00:37:14
>>819
そういう餌を蒔いておいてまた後になってしたり顔で

710 :デフォルトの名無しさん :04/11/02 10:00:10
>>709
使ったこともないのに他の言語を批判して貶めるのがPython厨の
いつものやり方だよね。

みたいな事言いにわざわざ来るわけ?
はっきりいってpython使ってるほとんどの奴にとって
rubyが速かろうが遅かろうがどうだって良いし、
自分で思ってる程相手にされてない事にいい加減気付けよ。

823 :デフォルトの名無しさん:04/11/11 00:54:51
Python 2.2.1 rlcompleter.py モジュールの
complete(self, text, state):メソッドの

46 __all__ = ["Completer"]
47
48 class Completer:
49

って記述の意味がわかりません。
__all__ に自分の名前を入れて、んでこの__all__を参照している
ところが見当たりません。名前空間の予約語みたいなもん?


824 :デフォルトの名無しさん:04/11/11 00:55:52
コンストラクタ

825 :デフォルトの名無しさん:04/11/11 01:50:17
ttp://www.python.jp/pub/doc_jp/ref/import.html

826 :デフォルトの名無しさん:04/11/11 02:43:17
q = "python"
urllib.urlopen("http://images.google.co.jp/images?q=" + q).read()

googleでの検索結果を表示したいんですが上手くいきません。
"http://images.google.〜?q=python"のようなURLが実在しない為、
403 Forbiddenとなってしまいます。
このようなCGI等で一時的に作成されるページを取得するには
どうすればよいでしょうか?

827 :デフォルトの名無しさん:04/11/11 08:15:16
URLが実在しないのではなくて,urllibが送信するUser-AgentがGoogleに
受け入れられないんじゃないかな.

828 :デフォルトの名無しさん:04/11/11 08:35:56
http://www.python.jp/pub/doc_jp/lib/module-urllib.html#l2h-2975
を参考にして,User-Agentを設定するといいよ.
class myopener(urllib.FancyURLopener):
 def __init__(self, *args):
  self.version="Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/2004"
  urllib.FancyURLopener.__init__(self, *args)
urllib._urlopener = myopener()
q = "python"
print urllib.urlopen("http://images.google.co.jp/images?q="+q).read()



829 :デフォルトの名無しさん:04/11/11 10:43:05
>>823
あなた、嫌な感じですね。穿ち過ぎでしょ。
みんなもうちょっと余裕を持とうよ。

830 :デフォルトの名無しさん:04/11/11 14:05:01
>>818
むしろCygwinとネイティブとの違いが面白いな.
概ね読み込みでCygwinが勝っているのは,gccの最適化能力が高いってことなんだろうか.

831 :デフォルトの名無しさん:04/11/11 14:51:38
cygwinのI/Oが遅いだけ

832 :デフォルトの名無しさん:04/11/11 16:11:59
HTMLParser.HTMLParserかhtmllib.HTMLParser,どっちを使うべき?

833 :m9っ・∀・):04/11/11 17:35:07
>>832
ぶっちゃけどっちでもイイけど、htmllib.HTMLParserの方が多機能。
特に、よく使われるタグに対して既定のハンドラが用意されているのが大きい。
よって、
(a)既定のハンドラをオーバーライドすれば足りる場合 → htmllib.HTMLParser
(b)save_bgn/save_end メソッド萌え → htmllib.HTMLParser
(c)<A>タグのhrefの値だけホスィ → htmllib.HTMLParser(.anchorlist)
(d)formatter モジュール萌え → htmllib.HTMLParser
(e)既定のハンドラは不要(デフォルトの動作が邪魔)な場合 → HTMLParser.HTMLParser
(f)handle_starttag() や handle_endtag() だけあればいい場合 → どっちでも桶

(e)の場合にsgmllib.SGMLParserを使っていたのも今は昔・・・。

834 :デフォルトの名無しさん:04/11/11 17:36:14
[Python-ml-jp 2879] でそんな議論してたよ.

835 :デフォルトの名無しさん:04/11/11 18:47:08
>>833
めちゃ親切なレスthx!
今回はHTMLParser.HTMLParserでゴリゴリ書くことに決めた.
htmllib.HTMLParserの萌え要素も捨てがたいけどw

836 :826:04/11/11 20:57:41
>>827-828
ありがとうございます!
早速調べてやってみます。


837 :デフォルトの名無しさん:04/11/11 23:21:45
googleをプログラムから使うならIDとってgoogle API使えよ。
そんなことも理解してないのか糞どもが。

838 :826:04/11/11 23:23:02
出来ました!
googleのイメージ検索結果を全て取得して、
URLをhtmlファイルに書き込みます。
そしてそのhtmlファイルを開くと全ての画像が表示されます。

実用性には欠けますが、
暇があったら試して見てください。
そしてできればアドバイス等頂けるとありがたいです。
ttp://eunjoo.jp/google.txt


839 :826:04/11/11 23:24:49
>>837
それも調べてみたんですが、イメージ検索には対応してませんでした。

840 :デフォルトの名無しさん:04/11/12 21:01:01
>>838
http://eunjoo.jp/seitan/
これ用のスクリプトでつか?

http://www.eunjoo.jp/blog/

841 :デフォルトの名無しさん:04/11/12 22:10:49
pythonからforkしてxpyをreleaseしますた

842 :デフォルトの名無しさん:04/11/12 22:57:37
HEADリクエストで情報を得たいときって,httplibで実装するしかない?
よく考えると,リダイレクトとか結構面倒なんだよなぁ.

843 :デフォルトの名無しさん:04/11/13 00:05:42
なぜHEADリクエスト?

844 :デフォルトの名無しさん:04/11/13 13:54:08
PyJUG に過去スレ一覧置いてくれないかな (w

845 :デフォルトの名無しさん:04/11/13 17:02:29
>>842
urllib2で実現できないことなのかな?

846 :デフォルトの名無しさん:04/11/13 22:02:15
Jython触ってみたけど結構使える印象。
いや結構どころかすごいパワフル。
しかし周りの人間がPythonわかんねーから
検証コードぐらいでしか仕事では使えなそうだ。
なんかもったいない。

847 :デフォルトの名無しさん:04/11/13 22:21:46
>>846
いや、Python を普及させるチャンスでしょう。

848 :デフォルトの名無しさん:04/11/13 23:34:42
Rubyスレが盛り上がっていると、見事にPythonスレは閑散としてるね。
みな工作員としてRubyスレに潜入してて忙しいのかな。

849 :デフォルトの名無しさん:04/11/13 23:34:45
>>845
正直,リファレンスを読んでもurllib2の拡張の仕方がよく分からないので,
urllib2で可能かどうか分からない.
まあ,GETリクエストでヘッダだけ読んで,すぐclose()するのも一つの選択肢では
あるんだけど,どうせデータ本体は必要ないしなぁ.

850 :デフォルトの名無しさん:04/11/14 02:15:14
>>848
pythonスレの活気なんてこのくらいがデフォだと思うけど。
彼らは自分のとこで話題がないからって
わざわざ暴れに来てたのかな。迷惑だよね。

851 :デフォルトの名無しさん:04/11/14 03:43:55
>>848>>850も種まきご苦労さん。

852 :デフォルトの名無しさん:04/11/14 07:44:51
流れ的にはオライリー待ちだから

853 :デフォルトの名無しさん:04/11/14 10:35:53
初めてのパイソン第2版
翻訳する人、第1版とちがうのねん

ttp://www.bitpranks.com/garage/natsume/yakusyo.htm

なんでイチローリポート?

854 :デフォルトの名無しさん:04/11/14 10:59:18
>>850
まあ超マイナー言語ですからね。

855 :デフォルトの名無しさん:04/11/14 11:39:31
まあ、日本人でも技術英語ぐらいは読めるようになれ、てところだろうな。

856 :デフォルトの名無しさん:04/11/14 11:46:29
>>855
まあ英語じゃなければろくなドキュメントがないですからね。

857 :デフォルトの名無しさん:04/11/14 13:44:09
(・ω・)

858 :デフォルトの名無しさん:04/11/14 13:58:43
既刊のオライリー本には
PyJugに置いてあるありがたいマニュアル以上のこと
書いてありますか?なんか一冊読んでおいたほうがええかな。

859 :864:04/11/14 16:02:52
>>847
同僚に勧めたら
「インデントがねぇ」
と言われた(w

まぁ僕も初めはそう思ったんだけど、
誰が書いても視覚的に同じ構造になるから
慣れたら気に入った。インデント。

860 :デフォルトの名無しさん:04/11/14 17:48:20
インデントといえば本家は python-mode.el をデフォに奨励しているけど
python.vim はなんで無視なんでしょうか?そもそも同じ整形ではない?

861 :デフォルトの名無しさん:04/11/14 19:00:13
vimユーザは虐げられている!

ところでcygwinのpythonでhelp()コマンド使おうとしたら$PYTHONDOCS
設定すれ、言われたんで
$export PYTHONDOCS=$(cygpath -u 'd:\python\Python-Docs-2.3.4-jp-html')
を設定しますた。結果、盛大に文字化け。
export PAGER='w3m'
ってやったら成功。ヤター!

でもscreenの中でやったらw3mがちゃんと動かなくてダメでした。鬱。

862 :デフォルトの名無しさん:04/11/15 00:02:15
しかし、いくら良いと主張されても、こうも人がいないというのは不安に
なるな。日本で使っている人、いるのか?

863 :デフォルトの名無しさん:04/11/15 00:20:17
しぶとく今宵も DiveIntoPython 中〜

864 :デフォルトの名無しさん:04/11/15 00:54:33
form = cgi.FieldStorage() で値を取得したいのですが、
<select multiple="multiple" name="test">
  <option>hoge</option>
  <option>huga</option>
</select>
というリストからhoge,hugaの片方あるいは
両方の値を取得するにはどうすればいいのでしょうか?

value_get=form['test'].valueとした場合、
hoge,huga両方選択すると以下のエラーが出ます。
   AttributeError: 'list' object has no attribute 'value'
args = ("'list' object has no attribute 'value'",)

以下を用いると、片方ひとつのみ選択した場合にエラーになります。
value_get=''
tmp = form['test']
for S in tmp:
  value_get = value_get + S.value

   TypeError: iteration over non-sequence
   args = ('iteration over non-sequence',)



865 :デフォルトの名無しさん:04/11/15 00:55:54
えっと今日からPython厨になろうと思う.Perl/Java/C使いなのです.
Pythonのlambdaはstatementを理解しないみたいなんだけど,
実行時に動的に関数を作りたい場合はどうすればいいの?
eval()つかってがんばってインデントした文字列を評価するしかない?

866 :デフォルトの名無しさん:04/11/15 01:07:49
>>859
俺も最初は戸惑ったほうだけどね。
慣れたら逆にendとか使っているほうが助長に見えるくらい中毒に・・・。

一年位前、仕事でPL/Iを使っていたけど、アレにはもう戻れないだろうなあ(苦笑

867 :865:04/11/15 01:25:00
>>866
プログラムを書く際のインデントは慣れの問題だと思うんだけど,
実行時にプログラムを動的に生成したいときにもインデント付の
文字列を生成してeval()する必要があるのはどうかと思う.
一時的にもはずせんもんかのぉ.

>>859
金曜にまったく同じことを同僚に話したんだけど,もしかしたら同じ会社か?
まぁ食わず嫌いもなんなので,今日からちょっとまじめにPythonを勉強しよう
と思ってるよ.
漏れ的にはPerlのObject指向でそこそこ満足してるので、perlにあと
Try/Catch/finallyだけが付けばいいのにと思う.


868 :デフォルトの名無しさん:04/11/15 01:33:28
>>864
複数選択可能なフォームコントロールから値を読む場合は,
http://www.python.jp/pub/doc_jp/lib/node404.html
にあるように,getlist() で値を取ってくるといいよ.

869 :865:04/11/15 01:38:10
と思ったらPerlにも例外機構をサポートするモジュール
(Exception.pmとかError.pm)がありますた.すれ汚しスマソ.

でもせっかくなのでPython勉強するデス(`・ω・´)

870 :デフォルトの名無しさん:04/11/15 01:53:30
Python用Vimの設定
http://www.nims.go.jp/cmsc/staff/arai/python/python-vim.html


871 :デフォルトの名無しさん:04/11/15 02:00:07
>>865
一応 lambda で関数作れることになってるけど,
式が1個書けるだけというきつい制限があったりで
あんまり大々的に使わんとです.
代わりにやるとしたらこうか?

def makeAdd(n):
    def add(x):
        return x+n
    return add

>>> f = makeAdd(365)
>>> print f(1)
366


872 :デフォルトの名無しさん:04/11/15 03:26:33
pickleって異なるランタイムのバージョンでも読み書きできますか?

873 :デフォルトの名無しさん:04/11/15 09:24:43
現状の pickle プロトコルは
ttp://www.python.jp/pub/doc_jp/lib/node63.html
新しいバージョンの pickle で古いバージョンの pickle ストリームを
書き出すときには, dump()/dumps() でプロトコルを指定する.
ttp://www.python.jp/pub/doc_jp/lib/node64.html
読み出した pickle ストリームのプロトコルバージョンを判別する方法は
ちょっと判らなかった.

874 :デフォルトの名無しさん:04/11/15 10:50:23
>>867
インデントは、いくら慣れだといわれても参入障壁が高すぎる。
慣れればよいといわれても信用できないし、慣れるとしてもそれまで
苦痛なのも嫌。。世の中に同じ意見の人はとてつもなく多いよ。

>>868
Perlで良いと思うよ。

875 :デフォルトの名無しさん:04/11/15 12:33:07
ソース書く時にインデントしないプログラマってそんなに多かったのか。


876 :デフォルトの名無しさん:04/11/15 13:59:33
メモ帳でコード書いてる人がこんなに多かったなんて。

877 :デフォルトの名無しさん:04/11/15 15:03:27
YAMLもそうだが、空白や改行に構文上の意味がある、というのは
CやSGML等の他の言語の慣習と異なるので、意外にやりにくい。
コードを他所からカット&ペーストしたときに、一時的にせよ構文的に間違った状態に
なってしまう、というのは、他の言語では味わえない不安感だ。
まあ人間は慣れるけどね。

878 :864:04/11/15 15:04:50
>>868
むぅ、こんなところに書いてあったとは…orz
助かりました、ありがとございます。

xyzzyのpy-modeで書いてます。便利ですよー

879 :デフォルトの名無しさん:04/11/15 18:28:24
この前,どうも変なところで構文エラーが出て困ってたんだけど,
タブとスペースが混じったのが原因だった.
インデント否定派ではないけど,こういうことがあるとチョット怖い.

{ ... }をインデントに変換するトランスレータ書いたら需要あるのかな.
lambdaの制限を取り除けるのは結構いいかも.

880 :デフォルトの名無しさん:04/11/15 20:07:51
jython2.1+JDK1.4に重大な問題が。
javaへのトランスレータ
 jythonc -a test.py
を実行するとPy.assertが予約語とかぶってるからコンパイルできない言われる。
手パッチ当てないとダメみたい。

http://sourceforge.net/mailarchive/forum.php?forum_id=5587&max_rows=25&style=nested&viewmonth=200405
>>---------------
if you really have to compile with JDK 1.4, the following changes are
necessary:

Py.java
-------
change the name of the two static assert() methods to assert_()

CodeCompiler.java
-----------------
change the two following lines in method assert_stmt() from
"org/python/core/Py", "assert",
to
"org/python/core/Py", "assert_",

Then make sure that you delete all your $py.class files.
I"m sorry to have no diff available, but the changes should be pretty
straightforward.

Please also note that this is solved in cvs HEAD.
>---------------
HEADじゃなくてリリース版で直して欲しい。
ついでにjythoncが内部で起動しているjavacからのメッセージが文字化けすると思われ。
UNIXならLANC=Cで解決したんだが、cygiwn上だと効かない…。
windowsではどう設定すればいいのでしょうカ。

881 :デフォルトの名無しさん:04/11/15 20:27:29
>>877
Pythonは読みやすくていいんだけど,自分が書くとなるとそれが恐
くてPythonに手が出せません.読んで天国書いて地獄


882 :デフォルトの名無しさん:04/11/15 20:49:08
おまいら,とりあえずこれで我慢汁.

from sys import *

nest_lv = 0
for line in stdin:
sline = line.strip()
if sline == "{":
nest_lv += 1
elif sline == "}":
nest_lv -= 1
else:
print "\t" * nest_lv + sline

883 :デフォルトの名無しさん:04/11/15 20:55:24
言ってる側からインデントが….orz

from sys import *

nest_lv = 0
for line in stdin:
    sline = line.strip()
    if sline == "{":
        nest_lv += 1
    elif sline == "}":
        nest_lv -= 1
    else:
        print "\t" * nest_lv + sline

884 :m9っ・∀・):04/11/15 21:34:33
みんな、煩雑で困るほどコードのコピペってするの?
個人的にはコピペが必要なことってほとんどない・・・。
Emacs だとインデントの削除は kill-rectangle (C-x r k)、
インデントの追加は indent-rigidly (C-x TAB) で楽勝、
というファクタも大きいかも知れず。

885 :デフォルトの名無しさん:04/11/15 22:48:14
pythonってよく分からないんだけど
インデントがずれてると違う動作になるの?

886 :デフォルトの名無しさん:04/11/15 23:33:41
*正しくインデントした場合*
sum=0
for i in range(3):
 print "%d を足しています" %(i)
 sum += i
print "合計は %d です" %(sum)
出力
0 を足しています
1 を足しています
2 を足しています
合計は 3 です
* sum += i のインデントを間違えた場合 *
for i in range(3):
 print "%d を足しています" %(i)
sum += i # <- ここが間違っている
print "合計は %d です" %(sum)
出力
0 を足しています
1 を足しています
2 を足しています
合計は 2 です # <- ループから抜けた後の i (=2) しか足してない

Cで単独の文をループさせるときに波括弧で囲わない癖のある人が時々ハマるミスに似てる.

887 :デフォルトの名無しさん:04/11/16 06:55:10
ここにコピペするとインデント無くなるけど、Cなら{}があるし
単独文でも{}が省略されていることが明らかだから復元可能だよね。

pythonはインデント無くなると元のソースがどっちだったのか分からなくなるよね。


888 :デフォルトの名無しさん:04/11/16 11:51:03
>>886
あたりまえだろボケ
だから使い物にならないって言ってるんだよ。

889 :デフォルトの名無しさん:04/11/16 12:38:50
使いづらいが、使いものにならない、というほどでもない。
perlの$みたいなもの。
慣れると、endがないことが(よくある小さなブロックで)可読性を上げる。

890 :m9っ・∀・):04/11/16 13:37:26
消えたインデントを見抜ける人でないと(Pythonを使いこなすのは)難しい。トカイッテミルテスト

891 :デフォルトの名無しさん:04/11/16 14:58:55
>>890
perl の $ とは全然違うよ。
何にしろ、pythonのインデントは使いたいと思う気持ちを萎えさせるのが最悪。

892 :デフォルトの名無しさん:04/11/16 15:39:30
perl の $ も使いたいと思う気持ちを萎えさせるわけだが。要は慣れだし。

893 :デフォルトの名無しさん:04/11/16 15:55:30
そうむきにならんでも。
python使ってればそういうインデントに
気を遣ってないコード読まないで済むだけで俺は満足。

894 :デフォルトの名無しさん:04/11/16 16:18:50
少なくとも、pascalのbegin〜endがベストということはない。
rubyのendも妙に浮いている。
個人的にはC風に{}が良いと思うが、
それも括弧の開きと閉じを関連づけるeditorの支援が得られるという前提だ。

895 :デフォルトの名無しさん:04/11/16 16:47:32
世の中に、インデントで制御構造の範囲を指示する言語なんて
極めて少数ということから考えても、その方式がわかりにくい・よみにくい
ということは明らか。慣れれば良いと言うのは、言うだけはいくらでも言える
が、まったく実際的ではない。


896 :デフォルトの名無しさん:04/11/16 16:59:06
つーか,元々,
> Cで単独の文をループさせるときに波括弧で囲わない癖のある人が時々ハマるミスに似てる.
このようなミスを防ぐためにインデントによるブロック構造を導入したわけだが.

897 :デフォルトの名無しさん:04/11/16 17:13:35
>>895
エディタの問題でしょ? 粘着ネチズンだなあ

898 :デフォルトの名無しさん:04/11/16 18:33:20
>>897
Perlのように波括弧必須にすればよいだけの話なのでその理由は却下

899 :m9っ・∀・):04/11/16 18:46:30
世の中に、ひらがなとカタカナと漢字を混ぜて書く言語なんて
極めて少数ということから考えても、その方式がわかりにくい・よみにくい
ということは明らか。慣れれば良いと言うのは、言うだけはいくらでも言える
が、まったく実際的ではない。

900 :デフォルトの名無しさん:04/11/16 18:51:03
ハングルのみのウリナラは実際的だぞ

901 :m9っ・∀・):04/11/16 19:02:16
そんなことより次スレのタイトルを考えよう。
俺的には↓これで。

◆PYTHONって死滅しちゃうの?◆

902 :デフォルトの名無しさん:04/11/16 19:11:12
>>901
とりあえず他のPythonスレを使い切る方向で.

903 :デフォルトの名無しさん:04/11/16 19:11:30
Python スレ多すぎると文句いわれるから
次スレは立てたくないんだがどうか

【たぷるタソ】Pythonのお勉強 5【ハァハァ】
http://pc5.2ch.net/test/read.cgi/tech/1081264387/
【self】ぱいそんぱいそん!4【pass】
http://pc5.2ch.net/test/read.cgi/tech/1098108764/
【たぷるタソ】Pythonのお勉強 5【ハァハァ】
http://pc5.2ch.net/test/read.cgi/tech/1081264387/
Pythonのお勉強 Part6
http://pc5.2ch.net/test/read.cgi/tech/1095684242/


904 :デフォルトの名無しさん:04/11/16 19:24:41
たぷるスレも920まで行ってるから,そっちも一緒に「Pythonのお勉強 Part6」に
移動ということでどう?

905 :デフォルトの名無しさん:04/11/16 19:26:59
何だこのスレはw

Jython、Groovy、JRuby - どれが一番効率的?
http://pc5.2ch.net/test/read.cgi/tech/1100563765/


906 :デフォルトの名無しさん:04/11/16 19:37:04
次はピクルスレを。

907 :デフォルトの名無しさん:04/11/16 20:18:47
>>900
事実、小学校で膨大な時間を漢字の書き取りに費やし、
PC使うにもIMEという面倒な機構が必要になっているわけで、
避けて通れるものなら避けたい言語だろう。

908 :デフォルトの名無しさん:04/11/16 20:22:45
>>902
立てといたよ

次スレ
http://pc5.2ch.net/test/read.cgi/tech/1100604113/

909 :デフォルトの名無しさん:04/11/16 20:47:10
早いよ。使い切ろうよ。あっちもこっちも読むの疲れるんだよ。
ってかスレ名からすると妨害か。

910 :デフォルトの名無しさん:04/11/16 21:08:17
これとこれ↓
http://pc5.2ch.net/test/read.cgi/tech/1098108764/
http://pc5.2ch.net/test/read.cgi/tech/1100604113/
を削除依頼したいと思うんだが,初めてなので助言よろ.

・そもそも削除依頼は簡単に通るものなのか
・削除理由は「荒らしによるスレ乱立」でいいのか.

911 :デフォルトの名無しさん:04/11/16 22:01:13
削除依頼するなら一つ残してあと全部削除依頼しなきゃ。
そうじゃないなら使い分けの基準を明確化してね。

912 :デフォルトの名無しさん:04/11/16 22:02:06
>>909
>>901

913 :デフォルトの名無しさん:04/11/16 22:17:06
>>911
このスレとタプルスレは既に900overなので,>>910の2つのスレを削除すれば
事実上「Pythonのお勉強 Part6」に一本化される.

914 :デフォルトの名無しさん:04/11/16 22:26:20
http://pc5.2ch.net/test/read.cgi/tech/1098108764/
は、まともなやりとりもされているので、削除はまずいと思う。

915 :デフォルトの名無しさん:04/11/16 22:39:10
このスレがそもそも重複スレなんだから、(ry

916 :デフォルトの名無しさん:04/11/16 22:46:14
>>914
確か,そのスレも今回のような流れで立てられたんだよな….
まともなやりとりも多少あるのは知ってるけど,ここは思い切って削除した方が
いいような気がする.
とはいえ,スレ削除の基準をよく知らないので,あまり強いことは言えないが.

917 :デフォルトの名無しさん:04/11/16 22:58:14
どーせまた立てられるだけだからほっとくのが吉。
そもそもどういう理由で削除依頼するんだ?

918 :デフォルトの名無しさん:04/11/17 00:15:09
>>914
昔そのスレに誘導されたんだけど、今にして思えば騙された気がする(w
初心者からするとただでさえ情報すくないのに
スレ開いたらネタスレで
ぱいそんぱいそん〜〜 AA略
以外書き込みなかったりしたらショック。せっかくPythonに興味持った人が
どっかいっちゃうかも知れぬ。

919 :デフォルトの名無しさん:04/11/17 10:23:07
ttp://www.python.jp/pub/doc_jp/lib/crypto.html
暗号化・復号化しようと思ったら追加パッケージ入れるしかないすかね?
rotorは撤廃って書いてあるし…


920 :デフォルトの名無しさん:04/11/17 13:35:56
> m9っ・∀・)
会社の仕事はPythonでやってるんですか?

921 :デフォルトの名無しさん:04/11/17 15:55:22
ゾープジャパンさん、活動がみえてきません。
関西支部を作りなさい。これは命令です。

922 :m9っ・∀・):04/11/17 17:35:32
>>919
何をどう暗号化したいかによるんじゃないの?
排他的論理和とかビットシフトによる単純な暗号化でも足りるとか、
別のアプリによって暗号化の方法が決まってるとかいろいろあるっしょ。

>>920
規模の大きな開発には使ってないなあ。電卓+α的な使い方が多い。
出力の検算とか、アルゴリズムのプロトタイプに使ったりもする。
日曜プログラミングはほとんど Python のみです。

923 :デフォルトの名無しさん:04/11/17 17:53:12
Win2K + VS2003でPython(2.3)をC/C++で組み込もうとPython.hをインクルードしたら
デバッグ用のlibファイルが必要とかコンパイルエラーが出てきた。
リンカ曰く、「Python23_d.libがネーヨ。」
リリースコンパイルなら通るんだけど・・・。

もしかして、Pythonを自前でコンパイルする必要あり?

924 :923:04/11/17 18:34:40
今のところは
#ifdef _DEBUG
#undef _DEBUG
#include <python.h>
#define _DEBUG
#else
#include <python.h>
#endif
で対処しています・・・。

925 :919:04/11/17 20:34:35
>>922
ビットシフトで事足りる気がしてきました…サンクスですた

926 :デフォルトの名無しさん:04/11/17 21:39:00
>>923
ttp://marc.free.net.ph/message/20040802.103348.973939b8.html
を読むと,自分でやれと書いてありますね...
python23.lib を python23_d.lib にコピーしたら一応動くそうです.

927 :デフォルトの名無しさん:04/11/17 21:55:38
>>925
Blowfishぐらい同梱されてても、、、とは思うよね。

928 :デフォルトの名無しさん:04/11/18 10:05:30
>>921
http://www.itmedia.co.jp/enterprise/articles/0411/17/news095.html
単にスタイルシートいじってただけでした。
つぅか年会費って何だ?オプソ精神に従ってドネーション整備しろよ。彼らは馬鹿ですか?

929 :923:04/11/18 17:50:21
>>926
thanx。自前でコンパイルしました。

930 :デフォルトの名無しさん:04/11/18 20:36:56
>>927
初めて知りますた。ぜひ取り込んで欲しいけどもう2.4には入んないかな

931 :デフォルトの名無しさん:04/11/19 11:09:17
すでにどのOSにも手軽なpackage systemがあるから
「標準で入ってた方が俺が楽だから」は、標準に含める理由にならないんじゃないかなあ。

あと、暗号関係のコードは多倍長演算ライブラリ(libgmp)にも依存して、Pythonの世界だけじゃ
済まないかもしれない。

932 :デフォルトの名無しさん:04/11/19 11:57:11
google先生はpythonでできています。
デスクトップサーチがリリースされるときにpythonを知っておくと良いことが
起きるでしょう。

933 :デフォルトの名無しさん:04/11/19 12:14:08
>>933
またそうやって誇大広告を・・・

934 :デフォルトの名無しさん:04/11/19 19:55:20
>>933
ぷっ

935 :デフォルトの名無しさん:04/11/19 22:12:19
もう暗号関係コードの輸出規制はなくなったんだっけ?

936 :デフォルトの名無しさん:04/11/20 00:18:53
PythonCardおもしれー

937 :デフォルトの名無しさん:04/11/20 00:26:01
っぱい

938 :デフォルトの名無しさん:04/11/20 14:52:22
Python製のblogは、pyblosxomとCOREBlog以外に何がある?

939 :デフォルトの名無しさん:04/11/20 15:58:11
pythonはblogツールに向いていないからダメだ

940 :デフォルトの名無しさん:04/11/20 16:48:43
>>938
http://pc5.2ch.net/test/read.cgi/tech/1081264387/882

pyblogger
blogninja
...

941 :デフォルトの名無しさん:04/11/20 19:00:04
f=File("test.txt",'w')
f.write("test")
ここで任意の漢字コードをいくつか適用したいのです。
文字そのものはpykf等で変わりますが、ファイルはShift_JISで保存されて化けてしまうです。
FAQっぽいので、どこか良さげな資料などないでしょうか。
PyJUGのPython 2.3.4(Win32)です。

942 :デフォルトの名無しさん:04/11/20 19:35:06
>>941
f.write("test") だと ascii でも Shift_JIS でも euc_jp でも utf-8 でも同じだね。w

ソース自体のエンコードは何になっているの?

# -*- coding: utf-8 -*-
# -*- coding: euc_jp -*-
# -*- coding: cp932 -*-
f=file("test.txt",'w') 
f.write("日本語文字列を書き込んでみる test.") 
f.close()

IDLE を使って、最初のエンコーディング指定を入れ替えて save して試してみれば
ちゃんとソースが書かれたエンコードに合わせて書き出されるのが分かると思う。


943 :デフォルトの名無しさん:04/11/20 20:40:11
書き出し用に漢字コードを指定したいのなら
import codecs
f = codecs.open("test.txt", "wb", "EUC-JP")
f.write(u"Unicodeの日本語文字列")


944 :941:04/11/20 22:33:45
>>942
コード省略しすぎました。本来は変数で行間で変換してるということで。
ソースはSjisです。一行目にその特殊なコメント入れてIDLEで走らせましたが、
結果変わらずでした。

>>943
これだ、と思ったのですが
codecs.pyがなにか文句言って処理してくれません。
UnicodeError: EUC-JP encoding error: invalid character \x83
求めるところはここなので、少し粘ってみます。

945 :m9っ・∀・):04/11/20 23:36:52
# -*- coding: shift_jis -*-
などのファイルエンコーディングを指定せずに
u"Unicodeの日本語文字列" のような文字列リテラルを書いている
と見た。

946 :デフォルトの名無しさん:04/11/21 00:19:15
当たりですた。
始めて3日目でして。みなさまのおかげで坊主にならなくて済みそうです

947 :デフォルトの名無しさん:04/11/21 06:02:43
>>946
http://www.python.jp/Zope/articles/japanese/Python4Japanese-2
ここを一通り読んでおくと良いよ。

翻訳物の本やテキストだと日本語がらみの問題は出てこないのでちょっと気付かないよね。
(付属のチュートリアルにも一通りは書かれているのだけれども)


948 :デフォルトの名無しさん:04/11/22 10:15:00


949 :デフォルトの名無しさん:04/11/24 11:52:54
test

950 :デフォルトの名無しさん:04/11/26 15:49:47
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< Boooooooooo!!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< BooBooBoo!!!
Boo〜〜〜〜!    >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /




951 :デフォルトの名無しさん:04/11/26 16:55:39
googleの結局どの部分にPython使ってるのさ。

952 :デフォルトの名無しさん:04/11/26 20:38:27
http://www-db.stanford.edu/~backrub/google.html

Most of Google is implemented in C or C++ for efficiency and can run in either Solaris or Linux.
Both the URLserver and the crawlers are implemented in Python.

953 :デフォルトの名無しさん:04/11/28 01:23:58
Pythonは影の主役としての役割が多いよね。
〜が得意っていうのがなくて何でもソツなくこなす感じ。
逆に言えばつまんない言語なのかも。
日本じゃ知名度もまーだまだな感じだし。

954 :デフォルトの名無しさん:04/11/30 01:48:53
>>952
URLserver ってwebサーバとは違うんかな。

955 :デフォルトの名無しさん:04/11/30 02:23:35
WebサーバがサービスするのはURLではないわな。

956 :デフォルトの名無しさん:04/12/21 17:00:33
すみません、超初心者な質問ですが、
ttp://www.honors.montana.edu/~jjc/easytut/easytut/node5.html#SECTION00530000000000000000
のExercisesで全てくっつけて表示しろというのができません。
とりあえず書いてみたのですが、

# Input Strings
str1 = raw_input("Please Input String 1:")
str2 = raw_input("Please Input String 2:")
# Input Integers
int1 = input("Please Input Integer 1:")
int2 = input("Please Input Integer 2:")
#Print Results
print "Result is ",str1 + str2,int1,int2 ←この行をどうすればよいかがわかりません
print "Multiplies the two numbers is",int1 * int2

どうすればよいのでしょうか。

957 :デフォルトの名無しさん:04/12/21 17:08:45
str1 + str(int1)

958 :デフォルトの名無しさん:04/12/21 17:48:17
>>957
str型に変換すればいいということですね。ありがとうございました。

959 :デフォルトの名無しさん:04/12/21 20:20:30
とりあえず Python チュートリアルは全部読もうね♪

960 :デフォルトの名無しさん:04/12/27 10:33:04
ぼくのようにプログラミングのPの字もしらなくてPythonはじめたいと思った場合は、
どのようなサイトから見たらよいですか?

.pyというファイルを作ってテキストでプログラムを打つことはだいたいわかるのですが、
ひらきかたがわかりません
ばかですごめんなさいでもおねがいします

961 :デフォルトの名無しさん:04/12/27 11:03:46
>>960
とりあえずIdleでいいんじゃない。

962 :デフォルトの名無しさん:04/12/27 11:36:51
http://ar.aichi-u.ac.jp/python/
http://ar.aichi-u.ac.jp/python/gui/
http://www.python.jp/pipermail/python-ml-jp/2004-April/002879.html
http://www.python.jp/pub/doc_jp/tut_2.3/

963 :960:04/12/27 11:57:29
ありがとうございます。
ぼく、がんばります。

964 :デフォルトの名無しさん:04/12/27 12:18:09
>>962
> http://ar.aichi-u.ac.jp/python/
これは参考にしないほうが良いような。

c:\にソースを置けとか言っちゃってるし。

965 :デフォルトの名無しさん:04/12/27 20:42:44
>>960
http://www.freeml.com/info/python@freeml.com
http://homepage1.nifty.com/kazuf/python_kikai.html
質問はここでするのがおすすめ。
わからないことがあったらまずはGoogleで検索しよう!

966 :デフォルトの名無しさん:04/12/28 13:24:29
>>965

いいトシこいたオトナのくせに自分を機械伯爵なんて呼ぶなよ。
警察に通報されるぜ。

967 :デフォルトの名無しさん:04/12/28 13:34:53
誰?

968 :デフォルトの名無しさん:04/12/28 18:57:37
関数(ローカルスコープ)の中で、モジュール(グローバルスコープ)の変数に代入するのにglobal文を使うように、関数(ネストスコープ)の中にネストされて定義されている関数(ローカルスコープ)の中で、外側の関数(ネストスコープ)の変数に代入する方法は、
ありますか?

969 :デフォルトの名無しさん:04/12/28 19:34:12
代入はどうがんばってもできません。でも変更はできます、なぜか。

def outer():
  c = 0
  d = []
  def inner():
    c = 100
    d.append(100)
  inner()
  print c
  print d
outer()

970 :デフォルトの名無しさん:04/12/28 19:53:45
> なぜか。
pythonの代入はbindだから。

内側で c=100 すると、cという同じ名前の新しい箱を別途用意して、100をそこに放りこむ。
0が入った外側のcの箱は、0が入ったままでかわらない。

d.append(100)は、dの箱に入った配列を操作するので、外側のdにも伝わる。

971 :デフォルトの名無しさん:04/12/28 20:51:21
最近ちゃんとプログラムを学び始めたんですが、何か簡単な目標というか
「これぐらいなら考えればできるだろ」みたいなお題をもらえないでしょうか。

972 :デフォルトの名無しさん:04/12/28 20:58:10
1~10000のうち素数である数を抽出する
簡単すぎるか・・

973 :デフォルトの名無しさん:04/12/28 21:03:54
2chのdatをフェチッてきて特定文字列をアボーンに書き換える。

974 :デフォルトの名無しさん:04/12/28 21:04:38
ふつうに電卓を作るとか

975 :デフォルトの名無しさん:04/12/28 21:10:19
Python処理系組込みエディタを作って公開するとか

976 :デフォルトの名無しさん:04/12/28 21:21:30
stableかつ十分な機能でドキュメントとサンプルコードがよく整備されたクロスプラットフォームGUIライブラリを作って公開するとか

977 :デフォルトの名無しさん:04/12/28 21:47:13
>>969
御回答ありがとうございました。
今、『はじめてのPython 第二版』を読んでいるのですが、
同書P243「13.3.1 変数の扱い」「変数に値を代入する」の記述は、誤りのようですね。

978 :971:04/12/28 22:07:46
ありがとうございます。とりあえず素数の抽出やってみます。

979 :デフォルトの名無しさん:04/12/28 22:28:45
>>977
> 同書P243「13.3.1 変数の扱い」「変数に値を代入する」の記述は、誤りのようですね。
間違ってないよ。「最も内側の関数で〜」と書いてあるでしょ。


980 :デフォルトの名無しさん:04/12/28 22:45:39
>>979

>>977と別人です。
まとめてみると

>最も内側の関数でネストスコープの変数Xに値を代入する(あるいは変更する)には
>最も内側の関数の中でのglobal宣言が必要です。

def outer():
c = 0
d = []
def inner():
global c
c = 100
d.append(100)
inner()
print c
print d
outer()

------------------
$ python scope.py
0
[100]
$
------------------
やっぱり間違ってるような。

981 :デフォルトの名無しさん:04/12/28 22:54:14
>>966
機械仮性に質問するとどうでもいい事とか役に立たない方法ばっかり答えてくるのがうざい。
お前は質問に答えたいのかと。しょぼい雑学を自慢したいだけちゃうんかと。
他の人が答えた後にいちいちしゃしゃり出てくるのもキモイ。
C57テクノロジー?馬鹿ですか?テストの点数合計ごときExcelでやれよ。オナニくさ杉。


と、まだ地球にいる漏れは思うのだが?

982 :979:04/12/28 23:15:07
なんか、ずれた解答をしてたようなので、もう一度。

>>977
「変数に値を代入する」の話なので、変数の値を“変更”といっているのは、
代入演算子を使ってのことと解するべきでしょう。
あとは 970氏のいうとおり。

>>980
こういうこと。

c = 50 ;グローバル変数
def outer():
c = 0 ;ローカル変数
d = []
def inner():
global c
c = 100 ;グローバル変数
d.append(100)
inner()
print c ;ローカル変数
print d
outer()
print c ;グローバル変数


983 :979:04/12/28 23:26:21
訂正。
やっぱり、『初めてのPython』の記述が変なのか。
ちょっと頭冷やしてから出直してきます。


984 :デフォルトの名無しさん:04/12/28 23:37:00
>>982
コメントは # で書くべきではないかと。

985 :デフォルトの名無しさん:04/12/28 23:46:21
元Lisper/Schemerなんだよ、きっと。

986 :デフォルトの名無しさん:04/12/29 00:12:15
ネストスコープの変数に、内側の関数から代入する方法はない、らしい。
http://mail.python.org/pipermail/python-list/2003-December/198875.html

987 :デフォルトの名無しさん:04/12/29 00:22:01
となると、『初めてのPython 第2版』のあの記述は…。
原書の正誤表にはそんなことは書かれていないし、訳がおかしいのかな。
http://www.oreilly.com/catalog/lpython2/errata/

988 :デフォルトの名無しさん:04/12/29 11:09:40
だれか原書持ってこーい

989 :デフォルトの名無しさん:04/12/29 11:38:35
http://www.rmi.net/~lutz/errata-lp.html

990 :デフォルトの名無しさん:04/12/29 11:54:03
>>989
それ1st ediition

991 :デフォルトの名無しさん:04/12/29 16:11:36
次スレ張っておきますね。
URL: http://pc5.2ch.net/test/read.cgi/tech/1104156256/

992 :デフォルトの名無しさん:04/12/29 16:59:24
降雪記念age!

梅!梅!

993 :デフォルトの名無しさん:04/12/29 18:41:21
梅doc! 梅doc!

994 :デフォルトの名無しさん:04/12/29 20:18:59
ume-

995 :デフォルトの名無しさん:04/12/29 20:48:53
このスレも終了でやっとPythonスレが統一されると思ったのに。

996 :デフォルトの名無しさん:04/12/29 20:49:47
正直、このスレが立った時は1000行くなんて思わなかった。

997 :デフォルトの名無しさん:04/12/29 21:24:16
DiveIntoPython厨〜

998 :デフォルトの名無しさん:04/12/29 21:36:29
Py

999 :デフォルトの名無しさん:04/12/29 21:37:58
Pyht

1000 :デフォルトの名無しさん:04/12/29 21:39:23
このスレは Pyhton の提供でお送りいたしました

次スレはこちらです
http://pc5.2ch.net/test/read.cgi/tech/1104156256/

        〜  終了  〜


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

272 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)