「Python」って何?
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 ダァ〜!!
>>>数え杉。
a += 1
from 1 import python
パイソンを覚えたらどんなメリットがあるの?
CraftLaunchExが便利に使えるようになる
Pythlon
zope を拡張できるようになれる
>>10 ますますわからん
それはえっちなものなのか?
>>2 学校の情報系の先生が皆python狂なんだど
皆、敗北者だったのか
13 :
名無しさん@Emacs:03/08/26 00:12
>>1 Python は見やすい構文と、使えるライブラリ、とっつきやすいインタプリタが売り物。
これは個人的な感想だけど、Perl がワンライナーのような
「一発ネタ」に向いているのに対して、
Python はどちらかというとじっくり考えて組むようなプログラムに向いてると思う。
(ソースがきれいだし複雑なデータ構造が扱えるから。)
プロトタイプ作成とか、グルー言語 (C で書かれたモジュールをつなぎ合わせる)
として使う人もいる。構文が簡単なため、入門用言語としてすすめる人もいる。
欧米ではかなりの人気だが、日本では
Ruby のほうが相対的に有名なため、Python はマイナーだと思われている。
これは「1から」だからいいんじゃないかと思ったんだけど。
上級者と初級者での棲み分けは人気言語だけの特権だとでも?
(゚Д゚)ゴルァ
学べや!
削除以来しとけよ。
─- 、::::;;;;;;;;;`゙゙''‐ 、 __,,,,......,,,,_/:::::::::/: !| >>3-
>>10 ごめん
>>1 は童貞だから許してやって
. : : : : : : `゙'ヽ、:::゙ヾ´::::::::::::::::::::::`゙゙゙'''‐'、. l|
、、 . : : : : : : : : r'":::::::::::::::::::::::::,r':ぃ::::ヽ::::::::ヽ! ,、- 、
.ヽ:゙ヽ; : : : : : :ノ:::::::::::::::::::::;;、-、、゙::: rー-:'、 / }¬、
. \::゙、: : : :./::::::::::::::;、-''":::::::::: ,...,:::,::., :::':、 _,,/,, ,、.,/ }
ヽ:ヽ、 /::::::::::::::::::::::::: _ `゙''‐''" __,,',,,,___ /~ ヾ::::ツ,、-/
`ヽ、:::::::::;;;、、--‐‐'''''',,iニ- _| 、-l、,},,  ̄""'''¬-, ' ''‐-、 .,ノ'゙,i';;;;ツ
_,,,、-‐l'''"´:::::::' ,、-'" ,.X,_,,、-v'"''゙''yr-ヽ / ゙゙'ヽ、, ,.' j゙,,, ´ 7
,、-''" .l:::::::::::;、-''" ,.-' ゙、""ヾ'r-;;:l 冫、 ヽ、 / __,,.ノ:::::ヽ. /
l;、-'゙: ,/ ゞ=‐'"~゙゙') ./. \ / '''"/::::;:::;r-''‐ヽ
,、‐゙ ヽ:::::..,.r'゙ ,,. ,r/ ./ ヽ. ,' '、ノ''" ノ
,、‐'゙ ン;"::::::. "´ '゙ ´ / ゙、 ,' /
許したる
うんこが食べたいです。
23 :
デフォルトの名無しさん:03/10/29 23:19
にゃあ
perlとPythonとSchemeどれを学ぶのがおすすめですか
26 :
デフォルトの名無しさん:03/10/30 22:31
>>24 Schemeでゲームやパズルを解くとかAI的な方面で勉強したらどうでしょ
perlはよくないんだ
全ての精子は大事〜♪
>>30 それは、 Monty Python の映画、 Meaning of Life ('83) における
素晴らしいミュージカル風のシーンで歌われた歌の一節でしたっけ
ここは1がPythonを教えてくれる所じゃないんですか?
邪路に訴えますよ。
Every Sperm Is Sacred!
Perlもやれよ
35 :
デフォルトの名無しさん:03/11/30 19:25
sage
36 :
デフォルトの名無しさん:03/12/04 16:57
pythonをプログラムの入門用に使うとき、良い入門書はないでしょうか?
37 :
デフォルトの名無しさん:03/12/04 17:00
「爬虫類のひみつ」
なんだ、
>>1 から Python を学ぶスレかと思ったよ。
41 :
1 ◆x0qRLOoQFY :03/12/05 01:19
もうね
赤裸々に答えますよ
気合入れて質問ください
日本語の文字コードの変換はどうやればいいんですか?
なんかヨさげですね。そのうち使ってみよう。
>>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:\表
>>45 そーゆう Windows での注意点のがまとまってるとこ知らない?漏れ UNIX 環境なんだけど、
WindowsXP とかも考えなきゃならなくなってさ…。なんでパスの区切りが \
なんだろ…。鬱で氏にそうだったところを
>>45 のおかげで思いとどまったよ。
>>46 むしろ OS に依存しない書き方を追求すべきかも。
os.curdir とか os.path.join() とかその辺りを使う。限界あるけどね。
>>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
>>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の問題というのは感じません。
>>47 漏れ自身は WindowsXP はあんまり使わないので Win 流儀自体よく知らないんです。
つーかドライブレターウザ-。Win だと拡張モジュールも使いにくいよね。ソース付けて
終りってわけにゃいかないし。やっぱ Win は Win 流儀に合わせないといけない予感。
>>49 おぉぉぉぉ神降臨!! 知らなかったぜ。
-*- encoding: XXX -*-
はファイル毎だからいいんだが、
sys.setdefaultencoding("XXX")
はシステム毎だから、それに依存したスクリプトを書くと
移植性が低くなる(他環境に持っていきづらくなる)のがなぁ……
でも u"表" とか書けるのは便利なんだよなぁ……
>>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は学べないよ!!
重複すれなんだから、いいかげんageるのやめたら?
56 :
デフォルトの名無しさん:03/12/12 06:51
57 :
1 ◆x0qRLOoQFY :03/12/12 07:10
>>54 ぴちょんのことなら何でも聞け。自称上級者の俺サマがどんな質問にも答えてやるぞ。
>>55 シャラップッ!!
>>52 をを、ホントだ。ありがd
前に試したときはrepr()抜きでprintしてエラー出してたよ。
print u'ほげ'.encode('euc_jp')
とかやればおけーなのね。
これからは -*- encoding: XXX -*- でソースのエンコーディングを指定できるのか!
うぉー 1 は俺よりは上級者みたいだ。アゲアゲアゲ!
61 :
デフォルトの名無しさん:03/12/14 15:44
62 :
デフォルトの名無しさん:03/12/14 19:26
(・∀・)ニヤニヤ
2005年もがんがんいくぜー。
ぴちょんのことなら何でも聞け。
自称上級者の俺サマがどんな質問にも答えてやるぞ。
>>1のレヴェルの低さを見たら、自分に自信がついたよ。
66 :
デフォルトの名無しさん:04/01/03 16:18
「pythonで学ぶプログラム作法」という本を読みながら学んでいるのですが、
時々、解説を省かれていたりしてつまります。
そこで、どこか初心者向けのpython解説HPを知らないでしょうか?
検索しても適当なpythonHPはみつけられませんでした・・・・・
>>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プログラムを実行するやりかたがわからない。
感謝するぜ!
>>66 さあ、思う存分赤裸々に晒してくれ、良いサイトを!
>>69
跳ねられたのでここまで(あと200コほどある)
せめて已とか己とかにしとけ。
>>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()
>>81 久しぶりに良い「技術の無駄使い」を見た気がする。乙
83 :
プログラミングって何さ?:04/01/05 18:04
84 :
>>83 そのまえに2chの使い方覚えろ:04/01/05 20:07
オマエモナー
86 :
デフォルトの名無しさん:04/01/24 09:56
あげ
87 :
デフォルトの名無しさん:04/01/24 17:04
あのー、スクリプトが始まる部分の意味が気になるですけど。
何と何が等しければ、動き出すの?
if __name__ == '__main__':
do()
__name__にはそのモジュールの名前が入ってる。
インポートされたときにはspam.pyなら'spam'のように。
インタプリタに直接渡されたときにはどんなファイルでも'__main__'となる。
つまり直接呼ばれたときだけdo()が実行されて、
インポートされたときには実行されない。
main()
{
python();
}
正直Pythonの利点がわからんわけよ。
オブジェクト指向や可読性ではRubyに負けてるし
、拡張つってもたとえばTcl/TkやCPANのような
他言語のコミュニティに依存してんじゃないの?
速度ではlispやperlに負けてるし。何なの?
利点がわからなければ使わなければいい。それだけのことだ。
勝ち負けをきめたがるのはがきっぽい
>>90 pythonの利点はc/c++との親和性にある。
この点で他の言語よりも優位な位置にいる。
親和性って具体的には?
>>93 FFI の話か、
ライブラリ拡張の話か、
組み込み言語として使う話か、
何れにしてもそんなに優れているかな。
移植のし易さ
97 :
デフォルトの名無しさん:04/01/24 20:57
>>88 親切にありがとう。本当に良くわかりました。
>>90 私は未だに、オブジェクト指向と関数型のどちらが有効か
確信が持てていません。その両方に対応しやすいスクリプ
ト言語として、実用と勉強のためにPythonを使っています。
それにZopeを活かしきるにも、pythonですね。
>>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
>>90を言い換えてみるテスト。
正直日本語の利点がわからんわけよ。
グローバル指向や可読性では英語に負けてるし
、国際化つってもたとえばアメリカや国連のような
他言語のコミュニティに依存してんじゃないの?
話者数では中国語やアラビア語に負けてるし。何なの?
正直
>>90 の存在がわからんわけよ。
ネタだとしたら人生終わってるし、本気だとしても
人間的として
>>91 -
>>92 に劣ってるし。
>>93-96 には余裕でマジレスされてるし。何なの?
可読性は仏語だ馬鹿野郎。
>話者数では中国語
そもそも中国語など存在しない。北京語 広東語 等々に分けろ馬鹿野郎。
つーか Ruby キモイ
105 :
デフォルトの名無しさん:04/01/25 00:21
文字列と数をまとめて表示する方法で「`」ってのを
使うんですね。これって、どの言語から借用されて
いるんですか?
(b.toString()の方がいいけど、慣れの問題か)
a = "super"
b = 7
print a * `b`
>>102 ネタにマジレスするならちゃんとボケろよ。
> 可読性は仏語だ馬鹿野郎。
まったく意味不明だし。
> そもそも中国語など存在しない。
これも意味不明。つーかMandarinとか言っても通じないだろうと思って
分かりやすく書いたわけだが、あなた、相手に合わせてしゃべることが
できない人?
>>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`も
きてるように感じますが、ここも慣れましょう。
>>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])
と比べてどっちが良さげだろう?
「operator.add」だった。
>>109 >Matzさんとは違って、
>このあたりは主張してますねー。
??
>>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 のような感じの
アプローチがあればうれしいかな。
どうでしょう。
>>110 map((1).__add__, 〜 の方はカリーイングしているわけですね。
気がきいている、うまい使いかただとおもいます!
でもこのスレッド的には、リスト内包表現のほうが
わかりやすくて好ましいのではないでしょうか。
「わかりやすくて」というのは、bound method
オブジェクトだの高階関数だのは、抽象レベルが
たかく、「1から…学ぶ」状態の人が理解するのに
ちょっとがんばらないといけないとおもうからです。
つーかRubyだの某氏だのと禿しく耳障りなんですけど。
どうしてRuby者はこうもステレオタイプが揃ってるんだろう。
ひょっとしてPython者も向こうで同じように振舞ってるのか?
RubyスレにPython者なんていないし。
>>116 > リスト内包表現のほうがわかりやすくて好ましいのではないでしょうか。
>>> print [a + 1 for a in [0, 2, 4, 6, 8]]
うぃ。
精進します・・・
>>115 の後半:
b = 7
ans = "super%d" % b
も、正しいプログラムですよ。もしそういうことを訊いているのなら。
'super7' という値を ans という名前で参照することになる。
122 :
デフォルトの名無しさん:04/01/25 10:36
>>117 "super%d" % b もOKなんですね。
>>121 正しいプログラムと好ましいプログラム。
「1から」の初心者としては、最初に基本形
のガイドラインがほしいですね。
>>120 内包表記は、基本形に入りますね。
>>122 repr(b) と "%d" % (b) にはそれぞれの想定用途があり、
ここであなたが仮定しているかもしれない「本質的な好ましさ」
みたいなものはありません。
>>117のリンク先に従って
実際に手を動かした後でもなお両者の意味がわから
なければ、またきて(より具体的に)質問してください。
repr(式) と `式` とでは、機能は同じで、 repr を使うのを推奨と
Python Tutorial を書いた人は(理由も述べずに)言っています。
「正しいプログラム」とはエラーを生じないという技術的な
ことです。(「国会議員として正しい振る舞い」というのと違って)
価値判断を含みません。
ようするに突出して優れたところがひとつも無いから
総合力で勝負ってことだな。よくわかった。
なんだか、まだ野良犬がうろついているようだね
アホはほっといて、インデントでもしようぜ。
>>126 > インデントでもしようぜ。
爆笑w
またーり汁!、って意味か?
い
ん
で
ん
と
初心者の質問です。解説書を読んでもはっきりわからなかったり
するのですが、インデントが同じ階層を指しているための条件って、
正確にはどんなんなのでしょう。
たとえば、タブの挿入数とスペースの挿入数が同じなら、見た目は
ずれていても同じ階層? それともタブ1つと、タブが飛ぶ桁数と同じ
スペース(4つとか)が同じ階層? タブ・スペース・タブなどごちゃ
ごちゃにまぜたときは、きっちり同じ入れ方じゃないと同じインデント
とは見なされませんか?
Guido はインデントにタブの使用を許可したことをずいぶん後悔しているそうだ。
ちなみに2chに貼るときは全角スペースに。
&nbsp;に置き換えるのも可。
全角スペースと違って直接コピペができて嬉しい。
>>130-133 どうもありがとうございました。タブは標準のインデントでは
ないのですね。
インデントに重要な役割を与えている割りに、いいかげんに
見た目だけ合わせられそうなのが、初心者としては結構怖い
感じでした。必ずスペースなら見た目とレベルが一致する
わけですね。
でもインデントはタブキーでしたいなあ。秀丸でできたっけ…
>>134 KaaEditを使えば?
タブインデントは正直恥ずかしい
堂々と公開しちゃってる奴たまにいるけど
pythonを-tオプション付きで起動すれば、変なインデントにはwarning出るよ。
-ttにしとけばエラーになる。これだと、さすがに標準モジュールは動くけど、
サードパーティーのモジュールが時折動かないという弱点がw
139 :
デフォルトの名無しさん:04/02/05 14:46
シフト演算子
>>>x=1 #0001
>>>x<<2 #2ビット分左シフト:0100
4
これはいちいち2進数で考えないとわからんのでしょうか?
というか何故2進数であらわすのかから判りません。
2ビット分?
>>139 何で「シフト演算子」って言うんだとおもう?
一応手順は判ったのですが、 1×2**2
何故2進数で左にシフト?2ビットという意味も相変わらずわからない
ビットの意味を理解しました。
>>141 それはCPUの中の人は二進数でしか計算出来ないから。
ビットというのはつまり二進数での一桁。
左シフト2、というのはつまり「二進数で2桁ずらす」ということ。
問題はなぜ 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 のパーミッションなどがそうだ。
べつにビット演算をつかわなくても同じことはできる。
たとえば 0〜9 の値をもつ 3つの変数を 0 〜 999 の数値に
押しこめることはできる (1ケタを 1つの変数とみなせばよいのだ)。
でも、計算機の内部表現はぜんぶ 2進数なので、ビット演算が一番効率よい。
たとえば 0 〜 999 を計算機のメモリに格納しようとすると、
これは 10ビット必要になるが、実際には 10ビットあれば
0 〜 1023 までの数値を表現できるので、使われない部分の数値 (1000〜1023) が
でてくる。この無駄をなるべくなくしたいと思うと、
結局 2の乗数が一番キリがいいという話になる。
文字列を 256進数の数値とみなすこともできる。
この場合、ビットシフトに相当する作業は文字列の読みとばしということになるね。
>>144 > 2+3+3ビットの 3つの変数として使うことができる。
スクリプト言語としては、そういうのは本来はビットフィールド型として処理すべきことなのでは?
シフト演算子を積極的に使うとしたら、ビットストリームを解釈/変換する時とか、かな・・・
例えばエスケープビットの処理とか。
ガイシュツだと思うけど、16進数リテラルとか8進数リテラルとか
hex() とか oct() みたいに2進数リテラルや bin() があるといいと尾も我。
>>> 0b1101
13
>>> bin(13)
0b1101
>>>
>>147 同意。
教育目的にはコンピュータの基本である二進数を手軽に表示出来ると良なんだけど。
MSX-BASIC とかだと有ったんだけどね。
二進数の変換は、これでいいのかな?
>>> 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
>>149 それの応用で oct も hex も変換可能だね。
「教育用」に敢て関数を作っていない?
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
#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
#上のを 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 にょ★
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]の要素に代入する以外のいい方法はないでしょうか。
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))
おっと...
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))
です.
>>156 take()というのがあったんですね。
これで目的の行列が作れるのも確認しました。
どうもありがとうございました。
159 :
デフォルトの名無しさん:04/02/20 06:19
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: てゆーか 'age' なんて名前、定義されてねーし
>>>
>>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 になる。
訂正: f(...) は atoi(...) の間違いね。
>>> int('lfls', 36)
1000000
>>>
>>163 "Guido's Time Machine"ってやつだな。
必要な機能を自前で実装したあとに、
すでにPython自体にその機能が備わって
いたことに気づく。
>>164 そーゆーのって大きな言語(仕様とか蓄積とか)にありがちだよね。
JavaとかLispとか。そろそろPythonも大言語の仲間入りか。
今まで人のソースを読むときはEmacsで
そのまま読んでいたのだけどただ読んでるだけだと
わかりにくいからもっといい方法ない?
実行もしてみれ。
きょうぼくわファイルを分割したかったのですが
無かったのでつくりました。
"""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()
なぜ infile は close するのに出力ファイルは close しないの?
>>169 下手な英語でも、コメントは外人さんも見る可能性があるから
自分は下手な英語で書いているけどどっちのほうがいいんだろ。
typoだと思うけど、「わ」はちょっと…。
>>169 誤:"""div.py - file wo bunkatsu suru"""
正:"""bunkatsu.py - fairu wo bunkatsu suru"""
徹底しなくちゃ。
>>171 君の場合どっちでも一緒ぽい。
日本語が既にヤバイ。1行目なんか主語がどれか分からんし述語ないやん。
>>173 ガ━━ΣΣ(゚Д゚;)━━ン!!
よく見るとと無 馬太..._〆(゚▽゚*)ですね。
母国語の修行に行ってきます。
175 :
デフォルトの名無しさん:04/03/01 04:42
>>136 うぅっ、やっぱりそうでしたか・・。
友人から種をもらったので軽い気持ちで育ててしまいましたが、
よく考えれば当たり前ですよね・・。
しかし、成体になるまで育ててしまったものを今さらどうしていいのやら・・
日曜の朝、エサを用意しわすれてでかけたら、
夜帰った時には80cm以上も移動していました・・・。
つり革?
if とか while とか for の条件部に = が指定できないんだけど。。
while line = file.readline():
print line
正しい書き方を見つけられなかったので
>>1さん教えて。
180 :
デフォルトの名無しさん:04/03/02 02:27
age
>>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
動くプログラムは「正しい」ので好きなように書けば良いにょ。
xreadlines() は?
>>181 おお。サンキュー。なんだか面倒だなー。
んじゃ、そのループの中で
if result = title.match(line):
print result.group(1)
こういうことがしたい場合ってどうすればいいの?
「にょ」はヤメレ。
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
いい書き方とは思えませんが,
for resitem in title.findall(line)[:1]:
print resitem.group(1)
フィゾンだと思ってたのに、パイソンだなんて・・・
188 :
デフォルトの名無しさん:04/03/02 19:48
Pythonの本二冊購入して勉強してるプログラム初心者なのですが、
プログラムを実際どうやって組むのかがわかりません。
型と演算子、基本文の章を読み終えはしたのですが。
ただ読んで、知識としてある程度覚えたって感じです。
勿論まだ読んでないとこのが多いので読みますが、
次に実践的なステップを踏むとしたら(組むとしたら)、
何を参考にするのがよいでしょうか?
良い本、サイト(英語読めません…)を知っておられるなら、
教えていただきたいです。
>>189 プログラム初心者の人はいきなりチュートリアルをよんでも、理解できないよ!
>>189 1行目のリンクみたいなforとかrange()関数などを
具体的にどう活用すればいいのかがよくわからんのです。
今まで読んできた部分(本)を一応理解
(その場その場で言ってることを判ってはいる、という意)は
してるつもりですが、書けといわれたら書けそうにない。
…たとえば学校の数学の授業とかみたいに、
演習問題が欲しいのかもしれません。
…それをどういう方法で進め発展させていけばいいのか、とか。
>>191 作りたいプログラム(最初は簡単そうなの)をとりあえず作ってみる。
似たようなプログラムを探して、そのソースの解読を試みる。
など。最初は設計とかしないで手あたり次第に作ってみたほうがいい
かもね。
それにしても何もプログラム経験なさそうだけど、いきなりpythonとは
ある意味猛者だな。。
>>188 > プログラムを実際どうやって組むのかがわかりません。
どうやって組むか以前に、プログラムで何をしたいのか決まってますか?
cf: 「Word の基礎は覚えたのですが、どうやって小説を書くのかわかりません」
> それにしても何もプログラム経験なさそうだけど、いきなりpythonとは
> ある意味猛者だな。。
python は教育用言語でもあるからいきなりでもええと思うが。
英語がわからないといいつつ、Pythonをやっている時点で、、、
PHPとかRubyやればいいのに、、、
Perlは(ry
>>192-194 皆さんありがとうございます!
とりあえず、
>>192さんの方法でこつこつやっていくことにします。
Pythonは、プログラムはじめるには良い言語と某サイトにあったので・・
>>193 漠然とならあるのですが・・・・
漏れがガキの頃にはプログラムのソースコードが載った雑誌があって
それをチマチマと打ち込むことがプログラムの勉強になってた気がするにょ。
結果的に他人が作ったプログラムを熟読することになるし、
変更を加えて遊んでみるのも自然な成行きだったにょ。
今じゃソースコードは電子媒体で手に入るから打ち込む必要はないし、
敢えてそうするメリットも感じられないに違いないにょ。
それだけに、意識して実際に自分の手で既存のプログラムをいじって
動かしてみることが必要だと思うにょ。
とは言うものの、初心者が読んでいじれる規模のプログラムってのは
意外と少ないかもしれないにょ。モジュール化が進んでブラックボックスが
増えてるし、プログラミングを実地に学びにくくなってる気がするにょ。
minix のコードを全部 python に直す作業をすると上達するよ
>>188
Python で学ぶプログラミング作法 を買って演習問題を片っ端から…
なんで今さら minix?w
>>196 とりあえず「テキストファイルを加工するプログラム」あたりから
始めると良。
例えば 2ch のログを個別の発言に分離する、とか。
> テキストファイルを加工するプログラム
100% python でできたエディタって無かったっけ?
pygame も入れて、サンプルのチンパンジー叩きを改造してみる、というのもいいかも。
>>201 >「テキストファイルを加工するプログラム」
といえば名著 "Software Tools"
邦題だと「ソフトウェア作法」ってやつ
RATFORで書かれたコードをPythonに変換するのも面白いんじゃないかな
# 若かりし頃Cに変換したヤシがこの板にも沢山いるはずさ
ほら、やっぱり196みたいに真に受けて路頭に迷う奴がいるじゃないか。
Pyみたいに建て増しに次ぐ建て増しの
温泉旅館みたいな仕様の言語が教育に向くとかいうのはいいかげんやめろよ。>機じるし
ただ漠然と「プログラミングができるようになりたい」なんて奴は
どんな言語を使おうがものにはならない。
何が作りたいものがあるなら、熱意がさめないうちにひたすらそれをやれ。
最初から正しいやり方なんてものを求めていたら、すぐに飽きる。
ある程度慣れてから体系的な勉強をすればしっかり身につくようになる。
具体的な目標がなければ、プログラミングはあまり楽しくはならないだろう。
なにか別の趣味 (例: このスレで煽るとか) を見つけたほうがいい。
>>208 そんなこと漏れらに言われてもこまるよー。TSPython行って機印に噛み付けば?
>>196 漠然でもいいからやりたいことを挙げて、ここでコード晒しながら勉強したら?
>>210 漏れもそこで興味持った。それまでBisonと区別できてなかった。
>>212 > それまでBisonと区別できてなかった。
Σ(・∀・;)エェーッ?!
>>201 >>215 その辺のプログラムの組み方からしてよくわからんです。
手順がわからない。今まで本読み進めてただけの状態に近いので、
自分でイメージできてない模様。
>>210 私もそこ読んでpythonはじめました。
とりあえず、本に書いてある何かのプログラム組む様子を見ながら実際に書き、
わからないところは随時基本ページに戻る、というやり方に。
まずプログラム組む以前のとこがわかっていない気がするので、
組む以前対象の本を図書館で探しましたが・・・_| ̄|○
Pythonで書かれたソースコードを探しましたが見つけられませんでした・・・
Code Beachというところで、ソースコードらしきもの発見
>>219 やっぱりあったのか…
つーか
sourceforge.jp/projects/kittywalk/
が 188 向けじゃね?(活発さ0%だけどw)
>>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」を実行しても、参考
書のと同じような結果を得る事が出来ません。何がいけないのですか?
>>223 > 上記の例を参考に「コマンドプロプトン」上で「spam.py」を実行しても、参考
> 書のと同じような結果を得る事が出来ません。
エラーメッセージか何か出るだろう。それを書きなさい。
指定されたパスが見つかりません。
と出ます
>>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 の参考書を調べてみてください.
ありがとうございます 参考書をよく読んでみます
この質問は FAQ のような気がする。DOS 窓で python コマンドを実行できる
ようにする設定手順を示した(できれば日本語の)ページってないの?
>>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)
とりあえずHTMLからタグを取り除くコード書いてみました
if とかwhileばっかりで。
こんなのに丸1日近くかかったけど、でも楽しくなってきました。一応役に立ったし。
>>231 次は re.compile("<[^>]*>", re.S).sub("", s) を使って1行で済ませてみよう。
>>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 "できました。"
>>233 インデントが消えててよく分かんないけど
アプローチとしてはいいんじゃない?
コンパイラの字句解析器みたいで折れは好きだ。
>>231 のプログラムを改良するとしたらこんな感じかな。
1. f1.read(1) を何回もやるのは長いファイルだと効率が悪い。
これをいっぺんに 1000文字ぐらい読むようにできないか? つまり、バッファの実装だ。
でも < 〜 > がバッファの境界をまたがることがあるので少し考える必要がある。
(実際にはpython内部でバッファリングされているんだろうけど、こういう感覚は大事)
2. <!-- --> の中は SGML のコメントだが、これも取りだしたいと思ったらどうする?
3. カットするファイル名をコマンドライン引数から取れるようにしたい。
プログラミングはこうしたパズル的な感覚をつかめないと上達しないので、
いきなり re とかの高等なライブラリを使うのは感心しない。
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におけるご意見に対して、わたしは目的にあった抽象度の
高いライブラリがあるならば、適宜、利用したらよいと思います。
すべての人がプログラミングに上達する必要にコトサラ迫られて
いるわけではなく、コンピュータを使って問題を解決できさえ
すればよいという状況もあるからです。
チナミニわたしは職業的プログラマではなく、将来そうなる
つもりもありません。
>>236 もっともな意見ですが、231氏はまだ若そうに見えたので。
ラクをしたがるのは年寄りになってからでいい。
>>237 > ラクをしたがるのは年寄りになってからでいい。
逆だと思う。
むしろ若い頃から既存ライブラリ機能の再利用を試みる癖をつけて、
バグの再発明を繰り返さないようにするべきだと思う。
職業プログラマになるのなら、なおさら。
>>230 やってみたのですが次のようになってしまいます
$dummy>python spam.py -i eggs -o bacon
C:\Python22jp\python.exe: can't open file 'spam.py'
>>222 dummy の下に spam.py がありますか?
>>237 昔に比べれば相対的に楽になってるだろ
パンチカード使わなくてもコンピュータ動くし
>>238 使える道具は使え、という説には同意。
ただ、
>>233のコードは正規表現を使う方法とは別の発展の方向性がある。
正規表現は複雑なロジックは書けない(書きにくい)から、条件や反復を駆使して
自前で処理の流れを作る(努力をする)ことには意味があると思われ。
要するにアルゴリズムを学べるよ、ってことだね。
メモリ管理の視野に入れて実装する感覚を養えや(゜Д゜)ゴルァ!!だろ?言いたいことは。
(・∀・)え?
>>239 dummyとspamは同じフォルダに有る?
dummyとspamは同じフォルダに有ります
dummyの下にspamがあるとはどういうことでしょうか?
コマンドプロンプトで 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 を付けられるのでダメです.
いつのなったらPythonの話に入れるやら
>>247 spam.py.txtとでていました
ファイルを保存しなおしたら参考書と同じ実行結果になりました
本当にありがとうございました
>>242 あたかも再利用が努力なしに可能だと言ってるような感じがするヨ。
>>233のやりたい事が正規表現からはみ出したら、
自分でコードを書く前に、再利用できるコードが他にないか探すべき。
どうしても見付からなかったら、最後の手段として自分で実装する。
大抵の若い子は、最初から自分で実装しようとする。
そのほうが楽だから。同じような事をしているコードを探し当てて、
そのコードを理解して、そのコードに対する正しい再利用の方法を考える、
これは努力を要する。
でも職業プログラマになるのならば、メンテへのコスト意識があれば、
ぜひとも習慣付けるべきことだと思う。
なんか駄目な書き方をしてしまった?
モジュールとかライブラリの勉強をするべしってことでしょうか。
精進します。アドバイスくれた方ありがとう。感謝。
>>233 書いたコードを元にいろいろやってみると面白いかもよ(235)
楽をしたければそのための手段もあるよ(232)
ということだと思うよ。
>>250 > あたかも再利用が努力なしに可能だと言ってるような感じがするヨ。
冗談抜きで日本語の読解にかなり問題があると思われ。
>>233 > if char == '<':
の後、">"まで読み飛ばした後、
> continue
を入れたほうがいい。
そうすると、そこより下ではchar == '<'の場合は考えなくてよくなる。
すると、
> if not char == '<':
の条件が不要になる。
今回は特殊な扱いをする対象が"<"だけだからそれほど面倒にはならないけど、
もっと複雑な条件になった時には、ちゃんとcontinueを入れないと混乱するよ。
255 :
デフォルトの名無しさん:04/03/16 20:00
ハトに食パンやったら祭りになってた
今から Python-2.3.3 をインスコします。
次に何をすればいいのでしょうか?
アンインストールしてください
>257
Unix系ならログインシェルをPythonにする。
>>260 できるの?できるのならばそれはどうやって?
# chsh -s /usr/bin/python spam
>261
当然できる。
ログインシェルがEmacsとかも普通にいる。
最近見かけたのではログインシェルがgaucheって人はちょと驚いた。
ただしログインシェルを変更する事による影響とかはPython以前の知識なので
それを知る必要はあるが。
ログアウトしてログインしなおしたら、コマンドが全然使えなくなりました。
戻そうと思ったのですが、何度やっても
>>> chsh /bin/bash
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'chsh' is not defined
と出て戻せません。どうしたいいのですか?
>>264 エラー目セージの通りじゃねえの?
>>264さんのpythonのトップ環境に
'chsh'が定義されていないだけと思われ。というわけでlet's define 'chsh'!
>264
Pythonで外部コマンド呼び出す方法御存知ですか?
chsh では直接呼べません。
ほんとにログインシェル変更(する|させる)なんてあふぉだろ。
Python勉強するのに何の意味もない
てゆーかネタだよ。ダッシついてるし。
Perlをログインシェルにしてる人は結構いるけど、あまり初心者向けではない。
でも普段Shellでやっている事をPythonでやってみる事はモジュールの勉強にはなるかもしれない。
>>270 まるでsタソみたいな言い草だな。藻前パイプもリダイレクトもジョブ制御も
使わないくせにシェル使い気取ってるだろ。モジュールの勉強って正気か?
あふぉ杉。
いくら python をシェルにできるといっても
zsh を捨てる気にはならないよ。
python
275 :
デフォルトの名無しさん:04/03/30 21:15
ヤバイ超ヤバイ。不動産のチラシマジヤバイ。
まず。築五分。これだけでもやばいのに
築五分なんてもんじゃない。
駅から五年。
何処の駅からだよ。
とにかく不動産はチラシだす前に推敲したほうがいいとおもいます。
>>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()
漏れだったらこう書くかな。
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
mpath = os.path.join(os.getenv('WINDIR'), r'MSAGENT\CHARS\MERLIN.ACS')
if os.path.exists(path):
...
else:
print "No Merlin. ...
PerlやRubyにおけるtrのようなものはPythonではどうやればいいんでしょ。
おしえてえろい人
280はエロいな・・・・
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))
table作るときの行の折り返しには¥を使ってね
>>282 >>> import string
>>> table = string._idmap[:128] * 2
>>> s = '\x7f\x80\xff'
>>> s.translate(table)
'\x7f\x00\x7f'
>>>
正攻法で 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"
レスをくれた方々ありがとうございます。とりあえずできたっぽいので晒しておきます。
>>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
(^Д^)ぬるぽ
hoge
Numericのarrayで質問です。
あるarrayに対して、その値が条件を満たしているインデックスを
取り出す方法はありますでしょうか。
たとえば[1,2,3,4,5,]というarrayに対して
3以上という条件を与えたときに[2,3,4,]を返すといったような
感じです。
ご存知の方がいらっしゃいましたらご教授御願します。
>>292 こゆこと?
>>> [index for index, item in enumerate([1, 2, 3, 4, 5]) if item >= 3]
[2, 3, 4]
>>>
>>295 ありがとうございました。
ご教授いただいた方法でできました。
マニュアルの該当箇所も示していただいて感謝です。
PythonでCGIみたいなものを作るときにZopeを使って作るのと
直接(printf関数を使って)作ることの違いを教えてください。
>297
逆に一緒だと思う理由が知りたい
>>297 基本が分かっていない印象
Pythonで簡単なCGIでも作ってみれば?
たとえば掲示板とかさ
で、Zopeでおなじ機能のものを作ってみれば
2つの差が身に沁みてわかるだろう
考えるより手を動かしてみれ
#!/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>"
>>300 #!/chroot/bin/cgipython ←これどこかの商用サービス?
モーグリ
305 :
<ヽ`∀´>:04/05/05 22:24
<ヽ`∀´> ageニダ!
306 :
デフォルトの名無しさん:04/05/24 02:55
>>> import lib2ch
>>> thread = lib2ch.open("tech", "1061640768")
>>> thread.age()
>>>
代入文が値を返さないようですが、次のように書きたいときはどうしていますか?
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 どうもです。タブインデントを失敗してすみませんでした。
>>309 navi2ch だとちゃんと見えてるからいいよ。
保守
>>81 感銘を受けました。
Tkinterを私は使った事がなかったので、これを機会に勉強してみようと思いました。
314 :
デフォルトの名無しさん:04/05/29 15:07
最近Pythonはじめた。正確にはJythonだが。かなりいいね
Jythonのアドバンテージって何?
Java でコードを書かなくても JVM で動くプログラムを作れて、
jar 化して配れる。
Java で作ったクラスを Jython から呼べるし、 Jython で書いたクラスも
Java から使える。
>>316 これはすごい便利。
Javaって,書きにくいし
>317
BeanShellでよくネ?
Python文法好きだけど.
漏れはJavaの方が書きやすいな。Pythonの方が読みやすいが。
つまり他人はPythonで書いてくれ、漏れはJavaで書く、ってのが
理想。
すると自分で書いたJavaを読むのは他人ということか。
自分の書いた下手な字は何とか読めるが
他人の書いた下手な字は読めないしな。
過去の自分という他人の書いた下手な字も。
"""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()
"""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 wxPython を入れていないか、全角スペースを半角スペースに置き換えてない。
>>325 wxTimerにGetIdがないと言われる…… -1で置き換えたら動いた
329 :
デフォルトの名無しさん:04/06/29 20:06
∧_∧
(○) (∀・ )
ヽ|〃 (∩∩ )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
if文で括弧を使いたい・・・
>>330 if (hoge < 2):
pass
"""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)
テレビは部屋を明るくして見ましょう。
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()
jython JDK1.5で動かん。
m9っ・∀・) ドーン!!!
JDK1.5はJythonをソースからコンパイルしなおさないとmojix。
あの方の名前は勘弁してよ。
mojix さんって有名人なのでしょうか?
どこのページを見ればそのひとについてわかりますか?
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
いまだにスレタイの真意が分からん
初歩から学ぶのかあるいは1が神なのかが
>>343 イイヨイイヨー
実にxxxxxxをやってそうな奴の書き込みだ。
「初歩から学ぶ」 なら「1からPythonを学ぶスレ」
「1が神」なら「
>>1からPythonを学ぶスレ」
と自明だろうに。
>>344 それは自明でない。
そうではなくて
>>1の内容から前者であることが自明である。
いや、
>>1 はクイズ形式で教えようとしていたのかもしれん。
>>342 順列生成は古典的な例題だからアルゴリズムの本を見ればソースが載ってるよ。
それを Python で書き直せばよいと思われ。
2ちゃんねるにPythonコードを貼り付ける前にインデントを にする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('&', '&')
line = line.replace('<', '<')
line = line.replace('>', '>')
line = re.sub(r'\s{2,}', (lambda m: m.group().replace(' ', ' ')), line)
dst.write(line+'\r\n')
>>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()
>>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)))
ブラボーです。神ですね。
>>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
なんかコピペしたり、改行減らしたりしてたら、文章がおかしくなりました。
アイデアとしては、順列の作るときに 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)]
あまりうまい説明が見付かりませんけど。
>>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]
こんなのはどうかなぁ.
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
実行したら激しく低速だった.
レスありがとうございます。
>>356 コード量としては、最小ですね。
It's a sony!(スラング「こいつぁすげぇぜ」の意)
って感じですね。
最近になってやっとそのURLが私へのレスと分かり、その辺見入りました。
>>345 下のURLにある、commentのアルゴリズムが全く完全に最強っぽかったです。
大変参考になりました。ありがとうございました。
ソース見てたら
勃起した。
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
になった.なぜだろう.
362 :
デフォルトの名無しさん:04/07/16 18:17
これはすごいですね。It's a sony過ぎですね。
>>360 generatorとは、私はまだ触れたことがないのですけど、xrangeみたいなものですね?
ものすごく適切な実装に思えます。
ただ、結果の順序がlexicographic orderでないのですけど、sortって出来るのでしょうか?
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が気になるのですけど。
さらに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'
今度はLLサタデーを意識して、n-queen問題をやってたりして。<私
342さん、待ってるから…
in $PYTHON/Lib/test/test_generators.py l.967:
# A conjoin-based N-Queens solver.
...
実は土曜日までにやろうと思い、上手くいかなくてグッタリしていました。
待っている人がいたとは、すいません。
斜めのロジックは後から付け足すとして、縦横の(nナイト問題?)にしてやってみます。
だいぶアレですが、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
パイソンとリスプってどっちがハッカーっぽいですか?
漏れも書いてみた.
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)
ジェネレータ版
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
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
やっと見られるようになってきた。
私のは全パタン網羅するように作ってます。
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)
やった、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
てっきりチェスで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はこうだよって話になるのかなぁ?
てっきりチェスでknightが縦横に動けるのかと思ってましたが、
実際はルークR(ook)がそうでした。
うう、n-hisyaにすれば良かった。。。knightは4方向移動可能な桂馬でした。ううぅ
ttp://www.jca-chess.com/chess-2.htm >>367 見てみました。こんなところでも扱われているなんて、とてもメジャーな課題なんですね。
>>371 ありがとうです。
> q は [3, 0, 1, 2] のようなリストで,
ってのも、最初はエッと思いましたけど、慣れるともっともに思えました。
次は私もこの形で値を返すロジックにしてみたいと思います。
あ、書き込まれてないと思って間違えてまた出してしまいました。すいません<377
LL Weekend のプログラムを読むと対戦形式のようですよ
改めて読んでみると、本当ですね!対戦型ですね。
>>379 それで、言語別に対戦させるとか、コード自体の美しさを見るとかするんですね、きっと。多分。
□■■□ んー。となると、これはロジックの問題で、
■□□■ 先手必勝とかになりそうだなぁ。(予想)
■□□■ ちなみに、4×4のボードだと、
□■■□ 先手が□(左図)に打てば、必勝だと思う。
□■■■■□ 奇数×奇数なら、
■□■■□■ 先手が最初にド真ん中に打って、
■■□□■■ 後は後手の打った場所の中心対象に打てば、必勝。
■■□□■■ (これは数学者秋山仁がよく書く話)
■□■■□■ 6×6の場合は今のところ私には、
□■■■■□ Queenを4つ置いて5つ目が置けないパターンが見付からないので、
多分、先手がこの図の□に置けば必勝になると思う。
で、やっと通常の8×8のチェッカボードに行き着くのだけど、
これもやっぱりQueenを6つ置いて7つ目が置けないパターンがあれば別だけど、
先手がQueenを8つ置ける配置を崩すだけで、先手必勝になると考えられそう。
6*6でQueenを4つ置いて5つ目が置けないパターンを探すプログラム、
8*8でQueenを6つ置いて7つ目が置けないパターンを探すプログラムはすぐに作れるかなぁ、、。
いや、常に後手必勝。先手の初手の隣に後手が置けばそこで手詰まり。
□○●□□□□○
□□○●□□○●
□□□○●○●□
□□□□○●□□
□□□○●○●□
□□○●□□○●
□○●□□□□○
○●□□□□□□
このゲーム破綻してない?
○●●●●●
>>383 ●●●●●○ え、Queenは縦横斜めにキクから、
●○●●●● そうはならないと思うのだけど?
●●●●●● でも、パターン数は少ないみたいなんで、
●●●●●● 総当りでいけるッポイですね。
●●○●●● ←382で言った直後に、
6*6で4つ以上置けないパターンを発見しました。(すごい汚いプログラムで)他にもあるかも、、。
そしたら、先手はこうならないように持ち込むアルゴリズムが必要ですね。
8*8も6個以上置けない配置が見付かるかなぁ?
私はこのゲームは'先手必勝'になると思う!
○●●●●●●● 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は良いように書かれているので、この文章が書かれた当時でもハッカーからの注目されてたんでないか?と思ってます。
とかなんとか、ここまで来て気が付いたのだけど、
この対戦N-Queenのルールは「他のクィーンの効き筋に置いたらそのプレイヤーの負け」という事は、
手駒のキキ筋は考えなくても良いのね。
と、なるとこれまでの考察はいきなり無に帰してしまうなぁ。
明日は飲み会なので、あさってまた考えよう。。。
対戦と言うことなので、
こんなふうにして調べようと思った。
0: 駒もなく、キキ筋でも無いマス
1: 先手の人のキキ筋のマス
2: 後手の人のキキ筋マス
3: 駒が置かれた または 先手と後手のキキ筋のマス
1311 例えば、4*4の盤で、
1110 先手(1,0)
0101
0100
1331 次に後手(2,3)とすると、こんな風になる。
3130 これで、上手く表されているんでないかなと。
0323
2332
これまでに作ってた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
返し値がリストになるように作り直し、今のところ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)
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))]
Pythonを大学で学びたいのですが、高知大学がいいのですか?
大学で学ぶほどのものか?
独学して、ソースの改良を提供したりして、いずれはHackerデビューというのではダメ?
>>391 私は、どうしてPythonと大学を結ぶといつも高知大学がコメントされるのかから、
よくわからないけど、どーしてだろう?
(伯爵の人が高知大学の関係の人だったっけ??
>>391 Pythonは学ぶというより使いこなすもの,って感じなんだが...
部外者からは敷居が高く見えるんかなあ?
>>393 > 私は、どうしてPythonと大学を結ぶといつも高知大学がコメントされるのかから、
> よくわからないけど、どーしてだろう?
過去レス参照しれ
本スレでPythonの宿題を丸投げした奴がいるがそいつがコーチ大らしいので
そういう流れになったということ
397 :
デフォルトの名無しさん:04/08/19 01:22
398 :
デフォルトの名無しさん:04/08/19 01:40
ははぁ、高知大にはPythonをやる講義があるのね。
>>391 珍しいとは思うけど、それを求めて高知大学を選ぶってのは、受験生と言う段階では見切り過ぎなんでないかと私は思う。
「オタク学の講義を受けたいから、〜(忘れた)大学行く」と言うのと変わらないとは言わないが、
例えば「俺も高知大学を卒業する頃にはきっとPythonバリバリになってるぜ」と言うと、
なんだか「技能取得」とは「時間が解決してくれる問題」みたいに聞こえないだろうか。
大学卒業のために大学に行こうと考え、その付加価値として高知大学に行ってPythonの講義が受けたいと言う、そんな人も大学は受け入れていると思うが、
大学は本来、研究者を受け入れるための地盤なので、
「うぉお、学内の全学食の全メニュー制覇してやる。ジュルジュル」じゃなかった、
「うぉお、新しいプログラミング言語を作ってやるぜ。ぐへへ、ジュルジュル」みたいな熱い情熱を燃やす人には、とても良く機能してくれると思う。多分、そのハズ。
そんな時にPythonなんて数ある言語のひとつでしかないし、なにも今からPython一本に絞って考える事はないと思う。
それに高知大学のあの先生だって、Pythonが専門の先生ではないだろうよ。つーか、そんな大学教授いたら怖い。いない。
なんで Python 関係のスレではみんなネタにマジレスするの?
Pythonはコード量を最も少なくできるのでもっと注目されてもいいはずなのにね。
注目されてるじゃん
日本国外ではさ
>>401 > Pythonはコード量を最も少なくできる
そうなのか?
programming+language=python
これ、世界の常識アルヨ
>>401 いや、確かにCだのJavaだのよりは少なくなるけれど「最も」という形容は不適当だと思うぞ。
スクリプト言語の中でだと冗長な部類だろうし。
n-queenは、3人以上(CPU含む)での通信対戦だったみたいで、対戦プログラムのロジックを見ると、
置ける場所にランダムに駒を置くロジックだったので、少々がっくり、、、。
>>408 他の言語もだいたいそんなだったらしいね。
もっと準備期間があれば変わったのかも。
でも、LLでゲーム解探索プログラムってのはいいかも、と思った。
もう少し規模と準備期間を大きくして、ロボコンみたいなイベントに
できないかな(LL人口がもっと大きくならないとダメだけど)。
あれから、また練習に行列式を計算するプログラムを書いてみた。
コード量が少ないって話題も出てるので、遅いけどコード量が少ないパターンをここ貼る。
行列式とは →
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
>>409 なんと早いレスにビックリ。
次からは実装の方法での対決と合わせて、
ゲームのロジックでの対決がメインになるといいですね。
2*2行列の行列式:
[[1,2],[3,4]] → 1*4-2*3 = -2
さっきの参照のページには一般の次数の定義が書いてあります。
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)
とかしています。あまりの不恰好さに死にそうです。誰か私を助けて!
いろいろ試した結果、いちおう成功しましたけど。。。
>>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)]
>>412 それでいいと思う。
一行に収めるなら、lambda を使って、
c = map(lambda x, y: x+y, a, b)
>>> map(list.__add__, a, b)
[[1, 2, 5, 6], [3, 4, 7, 8]]
みんな書いてるんで漏れも
[a[i]+b[i] for i in range(len(a))]
>>412が不恰好とは思わないけど。
>>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さんありがとうございました。
>>417 書籍形態にこだわるならともかく、そうでないなら
http://www.python.jp/pub/doc_jp/ で充分だったり。
lambdaは匿名クラスというより匿名関数/匿名メソッド
list.__add__は別にスタティックメソッドというわけじゃないんだけど、
a = [0]かつb = [1]だとして、a.__add__(b)はlist.__add__(a, b)
という意味であるっていうPythonの特徴を利用してる(これがメソッド定義で
必ず第一引数(self)がなければならない理由)。
私のが、他の3倍ほど遅かったですね。
リストの内包表記の応用って事で。おねがいします
「かえでIME」は欠陥品。
「辞書登録出来ない」なんてIMEにあり得ない。
しかも、ほいほい落ちるし。バグだらけ。
とても、商品とは思えないね。
BeOSはユーザーが少ないからどうでもいいやと思うなよ。 >PC-CRAFT
わかったから誤爆はやめれ。
質問させてください。
UTF-8の"−"をShift_JISの"−"に変換したいのですが、
JapaneseCodecsをインストールして.codec("sjis")で変換しようとしたら
UnicodeError: Shift_JIS encoding error: invalid character \uff0d
とエラーになってしまいました。
回避策をご存知の方はいらっしゃいますでしょうか?
それってマイナスのつもり?それともダッシュのつもり?
マイナスならsjisやめてcp932にする
ダッシュなら−やめて―にする
でどうだろう。試してないが(ぉぃ
あ、「―」はU+2015な。
>>422 互換文字の「全角マイナス」を使っている事そのものが問題なので、
shift-JIS に encode する前に本当に使いたい文字に置換する必要が
あるかと。(あるいは 423 の言うように cp932 を使うか)
あらかじめ u"\u2212" (数学でのマイナス) に置換するのが正しい
処置でしょうね。
>>423-425 ありがとうございます。
今XMLを利用したAA保管庫を作ろうかと思っていて、
−とか〜とかも扱う必要があったのです。
.codec("cp932")
.codec("ms932")
どちらでもいけました。
この2つはshift_jisを完全に包含してるものなんでしょうか?
> この2つはshift_jisを完全に包含してるものなんでしょうか?
MS932 == CP932 は、文字セットはShift_JISの全文字+αなんだけど、
UnicodeとのマッピングルールがShift_JISと違う文字があるので注意。
なるほど。基本はShift_JISで、例外的にCP932を使ったほうがいいのかな…?
ぱっと見はCP932オンリーでも問題なさそうなんですけどね。
とりあえず様子を見たいと思います。ありがとうございました。
2chはたぶんcp932だから、AA庫ならそっち基本でいいんじゃないかと思う。
了解、シンプルにcp932オンリーで作ろうと思います〜
特定のコードしか使わないんなら base64 化して保存したらいいと思いマース
誤爆じゃねーの?
そんなことじゃなくてただバイト列として保存しろってことなんだけどな。
ただそのままPythonでXMLに突っ込むとEncodeErrorになるからBase64化したら?
っていう話。
Ruby >>>>>>>>>>><>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<< Python
>>436 やっぱりよく分からん。
base64 でエンコードされた XMLファイルなんて見たことないぞ。
age
こっちがPython本スレ?
スレタイが「1から〜」と0 originでないのが気になるが
>>442 厨の立てた駄スレだけれど、Python入門スレという扱いでいいんじゃないかな。
マイナー言語らしくつつましく。
>>442 > こっちがPython本スレ?
厨の立てた重複スレだよ。
>>445 だったら削除依頼しなよ。
するつもりがないんだったら、何らかの形で利用する道を模索しないと。
入門スレというのはひとつの手だと思う。
入門スレでもなんでもいいから Python の質問しろ厨房ども!
メタ議論はどうでもいい。
メタ議論はヤメタほうがいいということですか?
~~~ ~~~
Zopeのインスコのやり方と使い方を教えて下さい
python2.3.4です
あ、linuxで
それ python の話題じゃないじゃん。
Zopeでpython使ってて問題起きたってならともかく、
インストールの方法すら知らないんでしょ?
Zopeはwebprob板にスレがあったと思うのでそちらでどーぞ。
Python Jython
Zope BitTorrent
PyQt PyGTK
よく使うの(予定)
Jythonのインスコのやり方を教えてください
Pythonが遅いのは何が原因ですか?
遅い分だけ機能面で得をしている部分はどこですか?
普通に使っている分には困らないけど教えてください。
456 :
デフォルトの名無しさん:04/09/28 17:16:43
>455
宇宙の法則
すべてプラズマで説明できます。
458 :
デフォルトの名無しさん:04/09/29 14:36:07
>>455 Python/ceval.c でも読んでみれば?
>>458 あがとうです。真っ先に
/* XXX TO DO:
XXX speed up searching for keywords by using a dictionary
XXX document it!
*/
と書いてあるのが目に入りました。
有益な仕事をしている対価として遅いんじゃなくて
今までそれほど速くしようとは思ってこなかったということかな。と。
コメント数行読むだけで
> 有益な仕事をしている対価として遅いんじゃなくて
こんな大胆な結論を出すとはかなりの電波ですね。
えー、だったらなんで遅い遅い言われるの?「作るのは早い」じゃぁなくてさ。
べつにこれでいいと思ってるんだったら「速くしたい」ってコメント残しとく?
ちなみに別に煽りや荒らしのつもりは無くて
他の言語でやってないこんなことやあんなことが実行速度を落としてる
みたいなことを聞いてみたいだけのアホですので。
>>462 君がどの程度コンピュータの事を知っているか分からないので
答えようが無い、というのが正直な所。
Perl や Ruby も含めた中間言語インタープリタがコンパイラ系の
言語よりも遅い理由は理解している?
ここらへんからして分かっていないのならばまず「コンパイラと
インタープリタ」あたりの言葉でググって入門ページを探す事。
(コンピュータの入門書を読むのもいいね)
型付けが動的か静的かという観点も知っておいた方がよいね。
>>464 あ、そうですね。Javaとは並べること自体おかしい。
PythonはPerlより便利でLispより読みやすいのはわかるので
> 有益な仕事をしている対価として遅いんじゃなくて
は撤回します。すみません。
でもRuby速いよという人にPythonもPsyco使えばとかいうと
Rubyはそんなもの使わなくてもいいと返されそう。
> 今までそれほど速くしようとは思ってこなかったということかな。と。
というのは合ってるのかな。
Python はあくまで教育用言語です。これが大前提。
だから今のパフォーマンスなのね。
>>466 単に Perl や Ruby との比較だったら「思想の違い」くらいの理由しか考えられないですね。
例えば Unicode 対応に対して、Python だと unicode 文字列型に変換して扱うのが
本道だけれども、Ruby だと素の多バイト文字テキストのまま扱おうとする、とか。
Ruby は sed&awk → Perl と来たUnix流テキスト処理言語の末裔だけれども、
Python は BASIC → ABC という流れを汲む教育用言語の末裔。
なのでコスト意識も違ってくる。
まあ、
>> 今までそれほど速くしようとは思ってこなかったということかな。と。
>というのは合ってるのかな。
というので正解だと思います。
そもそも Python の場合、本領は「実行可能な擬似コード」であって、本番の懸案は
(Python で十分に検討した後) C で作る、という発想が強いから、(所詮モックアップ
である)Python のコードでの速度は気にしない、というか下手な最適化によって本質
と関係ないバグが入り込むのを嫌う、というのもあるかも。
>>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]
なのではないかと思いましたが、どうなんでしょうか?
何か使い方が間違ってたりしますか?
>>469 別に問題ないです。
Python は Perl のような壊滅的な書式を許さないにもかかわらず「ラフに」
書くことができるという意味においての「教育的」配慮が汎用性を生み出して
いるのですから。
472 :
デフォルトの名無しさん:04/09/29 22:54:05
つーか、Perl や Ruby が 「教育的」 じゃなさすぎるだけで、Python が普通なだけなんじゃないかと。
昔 Basic が教育用とされたのと同程度に教育的なだけじゃないかな・・・
Ruby は興味あるんだけど、Perl のダメな所を引き継ぎすぎって感じがするんだよなあ。
Ruby ってデフォでマルチバイト対応ってのがウリなだけだろ?
そんなの各言語のUTF8化でお役目御免じゃんw
過去の汚物だな >Ruby
>>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
===== ここまで =====
>>473 同じ言葉をSJIS版Pythonのインストーラーを作っている人にも言ってみよう。
デフォでUTF-8なのはおまえらの大嫌いなTcl。
>>476 大嫌いという訳でもないが(Javaの方が嫌いだ)。
Tkを入れるついでに入れてやってる付属品。
一度も使う機会はないけどな(これからもないだろう)。
478 :
デフォルトの名無しさん:04/09/30 09:06:30
>>474 codecs.open() の引数に errors がある以上、未定義バイトの処理を選択できる所までが 「仕様」 だと思うんですけど・・・
ソースみる限り、codec 単体としては replace 等は実装もしてるし、テストにも入ってるんですよね。
ただ codecs.open() の引数が codec に伝わってないだけっぽくて。
>>468 471 472
古いPascalがお手本兼実用だった時代みたいにPythonがお手本兼実用なのですね。
くだらない話にお付き合いいただき感謝します。納得しました。
>>478 >codecs.open() の引数に errors がある以上、未定義バイトの処理を選択できる所までが 「仕様」 だと思うんですけど・・・
unicode よりも大きなセットの文字集合(例えばTRONのTAD)から "r" する時には意味が生じるので、
"r" でも errors を指定出来るのは当然の仕様ですから、それをもって『未定義バイトの処理を選択
できる所までが 「仕様」』とは言い切れない気がする。
まあ例え仕様外であったとしても、この場合 "ascii" での挙動に合わせるのが常識だから、単なる
ミスでしょうね。
作者にメールすれば直すのじゃないかな。
481 :
デフォルトの名無しさん:04/09/30 20:12:53
switch文が無い・・・。萎えた・・・。なんで無いの?
>>482 入門者がみんな思う事です。
代わりにディクショナリかリストを使います。
foo = 'stop'
print {'go': 'green', 'slow':'yellow', 'stop':'red'}[foo]
->'red'
複雑にしたいならディクショナリに関数を仕込む
値によって処理を変えるような場合どうやんのよ。ディクショナリに
関数を仕込むというのは、caseに書く処理を全部関数にすんのか。
なんか納得できないな。わざわざ関数ポインタで呼び出してるイメージだ。
めんどくさい気がする。。。
あと、ディクショナリだとswitchのdefaultはどうやって実装すんのよ。
>>485 数個の場合は if 〜 elif 〜 else で済ませる。
数が多くてかつ速度が重要な場合、ディクショナリ。
ただ「値によって処理を変えるような場合」は class 定義して
多態を使うべき状況である事も多いから、shitc 文相当の
文法が無いから困る、という事は少ない。
> shitc 文相当の
わざと?
>>485 Cで if ... else if ... ではなく, switch - case を使う理由は
ジャンプテーブルで最適化されることを望んでいるからだよね?
Pythonはもともと遅いので,そんなことはあまり気にしないw.
まぁ条件の数が100とかになるなら,ディクショナリを使うのもあり.
そういえば、行番号が付いてるBASICを使っていた時は、
速度を稼ぐために ON x GOSUB とか多用していたっけ。
てゆうか分岐が 100個もあるものを switch で書こうとするのは、
そもそもの設計が間違っている。
>>491 CPUのエミュレータとかでは結構あるんでは?
まぁ,Pythonでエミュレータなんか書かない…というか
書きたくても書けないけど.
>>492 エミュレータなら命令ごとに関数化して、関数ポインタで呼び出したほうがスマートじゃないかな。
なんでabsが組み込みなのよ。mathの中に入れろよ。
なんでswitchが無いことに不満を感じないんですか?
非常に不思議です。
煽りは無視の方向で。
>>495 shitch どころか goto も無いよ。
ブロックを表す { 〜 } や begin 〜 end も無いし。
無い無い尽くしだね。
まあ煽りだから無視しろというのは、臭いものに蓋だよね。
Pythonの痛い欠点を突かれたから黙殺っていうか。
Pythonに無いのは、
- switch
- do while
- 後置系の条件文
くらいか?
増やそうと思えば簡単に増やせると思うんだが、
いままでそういう動きは今まで起こらなかったのかな?
開発陣の意向?
forはforeachに改名してほしい。
>>500 排他的な態度はRuby厨と変らねえなプゲラ
みんなコードの断片の混じっていないレスも飛ばさずに読んでるんだね。えらいなあ。
>>495 おまいは論理回路がNANDだけで構成できることを知らないのか?
なんかswitchに拘ってる人がいるみたいだけど、べつに無くても困らないじゃん。
後置系の条件文は、見た目以外の機能的なメリットは何も無い完全なシンタックス・シュガーだから、
Pythonに取り入れられることはないと思う。
Perl にもないよね > switch
なくてもいいし困らないけど、あっても違和感はない。
Cと違ってcaseの終わりで暗黙的にbreakされるならだけど。
そもそもswitchは便利なのかぁ?
言語によって変えるの面倒じゃん。
511 :
デフォルトの名無しさん:04/10/02 21:25:12
>>507 実装できないことをごまかすための詭弁にしか聞こえない。
>>508 最近のPerlにはswitchあるよ。
>>510 Pythonを外せば主要言語間で変える必要ないな。
いやあ python も妬まれるほど日本で有名になったんだね
実装できないなら出来ないって言ってもいいよ?
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 が無いのを不満に思って他の言語に乗り換えるのも自由だし、それを埋めるメリットを見出して
使い続けるのも自由。
俺はあったほうが楽と思うこともあるけど、かと言って他に良いスクリプト言語が無いから使ってる。
まぁ switch 文に関しては明らかにグイドタソに先見の明があったということでしょう。
あきらかに分かってない煽りが多すぎて面白くない。
もっと勉強してから出直してきてくれ。
521 :
デフォルトの名無しさん:04/10/03 07:28:44
Pythonやっててswitchが欲しいなんて思った事ない。gotoも。
MLのmatchみたいなのはちょっとほしいかも.
match(xs):
(car, *cdr):
...
():
...
あーPythonのリストは本当はリストじゃないから,ダメか.
>>517 いくら苦し紛れの反論するとしても、もう少し勉強してからしたら?
無知のくせにしったかぶりしてるのがみっともない。
524 :
デフォルトの名無しさん:04/10/03 10:36:30
>>516 Perl6のswitch見てきた.
…変態言語の名に相応しいと思った.
526 :
デフォルトの名無しさん:04/10/03 12:14:53
>>525 Pythonごときが、そんな偉そうなことをいえるのか?
Pythonは糞。
キモイ作者にキモイ言語仕様で救いようがない。
Ruby >>>>>>>>>>>>>>>>>>>>>>Python糞>>>>Perl超糞
よかったな。まだ下がいて(大爆笑)
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
529 :
デフォルトの名無しさん:04/10/03 13:59:28
↑安置Rubyごくろう
俺は普段はCommonLisperで、スクリプト言語を使うときはPythonもRubyも使うけど、
lambda嫌いとか三項演算子がないのとか、Pythonというのは
思考のスピード > 書くスピード
のときにも、後者に合わせて面倒でもちゃんと書きましょう、という
考えがあるように思う。
LispとかRubyとかは逆に思考のスピードがブレーキを踏まなくて
済むような方向でデザインされてる。
俺はどちらかというとRubyの方が好き。でも使うときはライブラリを調べて
簡単にできそうな方でやってる。Rubyな人はどうも適当なところだけかじって後
はほったらかしというのが多くて、それがヤなところ。
どこまでもオリジナリティのない荒らしだなあ。楽しいかい?
糞言語pyてょんはぺrlと一緒に消えろ。
ユーザの質から言ってRuby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Python >>>>>>>>>>>Perl
Pythonは遅くて構文がキモイ
作者はしがないダッチ野郎
欧州の韓国人とい言われる事でも分かるとおり全てRubyのパクリ
インデント?ぷぷっなにそれまともな言語なの?たのしい?糞虫ども
じきに「PythonからRubyへの移行ガイド 〜猿から人間へ〜」っていう本が出るって知ってた?
Python は「馬鹿のための言語」だけど、
Ruby ば「馬鹿が作る言語」だな。
……Perl は「馬鹿な言語」だけど。
Peerlと一緒に消えればいいのに。
538 :
デフォルトの名無しさん:04/10/03 14:24:03
スレ乱立のせいで、
基地外荒しが住みついてしまったぞ。
責任とれ。
Perl叩きでは連帯できるはず
Perlスレは全部WebProgに追い出せ
俺が合理的に次期Pythonに必要な追加仕様を指摘してやろうと
思ってたのにRubyキチガイに議論を乗っ取られた。
Ruby以外は消えろ
スレッドが例外なく荒れるのも言語に魅力が無いから。
Rubyスレを見てみろ。淡々と話してるから。
>>530 Python は「ちゃんと書きましょう」となっているには禿同。
Java, Python, Perl と使っているが、Python って意外ときっちりと書かない
といけないけど、Java みたいにキャストとかしなくてもいいから、その辺のバ
ランスがよいと思うんだけど。
# 虎は知らない
Ruby 厨ウザいんだが、Ruby の良さがまったく分からんな。
どうせ、プログラムを作ったことがないような香具師が荒らしてんだろ。
546 :
デフォルトの名無しさん:04/10/03 15:12:40
だからさあ、Ruby基地外っぽく振舞っている香具師は
安置Rubyだろ。
Pythonスレが荒らされるのは自業自得。
荒れても気にしない
Python...真の表現は唯一つ
Perl.....解決に至る方法は幾通りも存在する
Ruby.....Perlのパクリでもいいじゃん
rubyはpythonからも色々パクってるじゃん
> LispとかRubyとかは逆に思考のスピードがブレーキを踏まなくて
> 済むような方向でデザインされてる。
こういうこと言う人間に限って、大したもん作ってないんだよな。
反例求む。
551 :
デフォルトの名無しさん:04/10/03 16:03:27
#!/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_
>>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)
くもの巣
ようするに、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 は結構同感だなあ。
>>556 ものすごく説得力あるけど、
でもそんな事言うと、さらに荒れそうだよ。
只今、Python勉強中..
>>556 Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。
Pythonスレが荒れているのを根拠も無くRubyのせいにしていることこそ、
Rubyが気になって仕方がないように思える。
>>559 >Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。
この意味不明な中傷はどうにかならないのか。
もっと具体的に言ってよ。
>Pythonスレが荒れているのを根拠も無くRubyのせいにしていることこそ、
>Rubyが気になって仕方がないように思える。
ここ最近のレス見て、Ruby野郎がうっとうしいなと思って煽ってみただけだよ。
ただのオウム返しみたいな煽りばっかしてないで、もっと具体的なの頼むよ。
ちゃんと実装の事いってる奴もいるけど、おまえみたいなオウム野郎は糞だ。
↑糞虫w
>>556 きみきみ、マジレスしちゃいかんよ。
それと Ruby のせいにするな。煽ってるのはどっちも知らないアホだ。
ESR もいっているように、相手を叩くのではなく、自分を高めることこそが
もっとも相手にダメージを与える。精進せいよ。
563 :
デフォルトの名無しさん:04/10/04 09:22:40
switchねえ。
辞書に関数マッピングするか,
getattrとかでon_hogehogeみたいな関数を
動的に取得して呼ぶんじゃないの?
doがつかないのはバックワードコンパチのため。
doを予約語にすると困る人がいるから。
>>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)
#=>沓
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')
くもの巣
すまん俺が悪かった。
おまけに上げてしまったので死ぬ。
試してから書いたが
>>567 環境は Windows 2000, CJK Python 2.3.4 (CJK/SJIS)
571 :
デフォルトの名無しさん:04/10/04 21:40:08
>>566 下の方で表示できました。
>>567 こっちの方法でも動きました。
どうもありがとうございます。_O_
ここは Python VS. Ruby 専用
574 :
デフォルトの名無しさん:04/10/04 23:51:44
本スレ認定
575 :
デフォルトの名無しさん:04/10/05 00:38:24
ここのほかにPythonスレあるの?
>>575 あるけど、このスレ以外は重複スレだから気にしなくて良い。
>>560 > >Pythonスレが荒れているのは身から出た錆というか、自業自得だよね。
> この意味不明な中傷はどうにかならないのか。
> もっと具体的に言ってよ。
これマジで言ってるの?理解力の無い相当な低脳だね。
重複スレで揉めだして、おまえのような馬鹿がスルーできずに相手になって
拍車がかかってるのに。
おっ
次は「仲間のフリ」できたか!
(・∀・)埋め!
Ruby スレで放置されるようになったからこっちに来たんだろうね。。。
Rubyで"end"をいちいちいちいち付けるのがメンドイので今日からPythonにしました
そんな理由で変えるなよ
同じ理由でPascalからCにかえたのでした・・・。
586 :
ぬるぽ:04/10/08 22:23:17
ぬるぽ
糞スレ上げんなヴォケ
>>588 いいじゃないの、別に。
Pythonユーザって心が狭い奴ばかりなのね。
588がPythonユーザということにしたい
僕はcshユーザーでつ。
たしか PyQt の config の方式で揉めたんだよねぇ・・・
anyguiはどうなっちゃったの?
期待してたんだけど。
anyguiに限らず,ネイティブのツールキットを使うGUI wrapperって
失敗する傾向にあるんだよなぁ.
Tkの見た目がもう少し良くなってくれれば,俺は十分なんだけど.
fltkが unicode 対応してくれればなあ。。。
PyQt と pygtk は日本語使えるよ
それじゃ意味ない.X上でしかまともに動かないじゃん.
>>594 時期Tk9ではスタイルが使えて、Gtkっぽい見た目も
使えるようになるよ。今でも実験的にtileという拡張で
スタイルを変えられるウィジェットが使えるよ。
PythonでTkの拡張が使えるのかどうかは知らんけど。
>>598 おぉ.素晴らしい.
tk.eval()があるので,頑張れば拡張は使える…かな.
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'
>>600 test.xml の中身は?
namespace 未使用の XML で、
parser.setFeature(handler.feature_namespaces, True)
だから? (未確認)
>>601 2つの名前空間が混在<test.xml
当然validなXML。バリデータはXMLSPY 2004。
名前空間接頭辞の扱いにバグがあるくさい。
603 :
デフォルトの名無しさん:04/10/12 23:40:43
投稿日も「ぬるぽ」なのが本物の「ぬるぽ」です。
>>586
GetInsertionPoint() を使って,キャレットのある場所の pos 値を求めた後に
PositionToXY() を使って x, y (列,行)に変換したらいいんじゃないでしょうか.
最近、eclipseでPythonのソレをうまいことアレ出来るって本当ですか?
以前、個人的に試した時は、コンソールにEUCの日本語が出なくて参ったのだけど。
python-mode.el では不満?
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] のほうが好き。
さらに関係ないけど,リストの内包表記で, if〜 の位置が in〜 より後ろ
ってのに違和感がある.
>>606 Eclipseの出力コンソールにencodingを指定できないのが
原因。
Winなら、site.pyにShift_JISを指定すれば、Unicode文字列を
printするとコンソールで日本語が吐ける。
スケールしないと思います.そういう試みもあったらしいけど,
シングルプロセッサでさくさく動く方を優先したらしい.
マルチプロセッサの恩恵を受けたいなら, C でも他の言語でもいいから
恩恵を受けられるソフトウェアに仕事をさせて,そのインタフェースだけ
Python で書けば?ということなんじゃないかな.
分散コンピューティングインタフェースなら,pyMPI(.sf.net) というのが
あるらしいけど,詳しくは知らない.
>>613 やはりそうですか。細粒ロックを作っても処理速度が半分になってしまっては意味が薄い
ですよね。
615 :
デフォルトの名無しさん:04/10/21 10:42:20
Jython 使えよ。
>>616 速度もCPythonより速いらしいね.
Jythonに負け,IronPythonに負けるCPython….
>>617 >速度もCPythonより速いらしいね.
そうなの?
>>618 らしい.自分で試したことはないし,そもそもJython自体よく知らないんだけども.
JythonってJavaVMのバイトコードへコンパイルするんだよね?
速いのも納得できる気がする.
ところで,Pythonにファーストクラス継続が導入されないのは,
Jythonで実装できないからだ,とどこかで読んだ気がするんだけど本当なのかな?
rhino は first-class continuation を実装しているから、出来ない事は無さそうだけど。
要はメインのソースツリーに統合されるだけの需要があるかどうかなんじゃないかな。
IronPython は速いようだけど、Jython が CPython より速いって
ソースどこ?
ぐぐってみたけどみあたらないんだが。
じぶんで計測しれよ
>>620 そういえばRhinoWithContinuationsなんてのがあったな.
でもRhinoは単なるJava上のインタプリタなのに対して,
JythonはJavaVMのバイトコードに落してるからきついんじゃないかな.
スタック触れないし.
Kawa is not generally tail-recursive.
だからちょっと躊躇しちゃうなあ。
まぁ、どれも実装を知らないので議論は出来ないな。
継続ってどうも一般受けしない技術みたいだから、それだけでも採用されてない
理由にはなりそうだけど。
大域脱出にしか使えないって事?
Kawa の call/cc は catch/throw で実装してたはず。
……実装してるって言っていいのかなあ。
>>629 努力賞.
Schemeなら限定的なcall/ccでもあった方が嬉しいけど,
Pythonはループ脱出や例外処理が一通り揃ってるから,
その程度のcall/ccじゃ実装したって意味ないよなぁ.
ちょっとStackless Pythonで遊んでみるか.
Stackless Python のドキュメントどこにあるんだ?
633 :
デフォルトの名無しさん:04/10/23 22:37:19
Python と Ruby って、Ruby のほうがずっと遅いと思っていたんだけど、
実際はどうなのかな。性能比較した人いませんか?
>>633 たぶん同じくらい.
ってか,さらに荒れそうな話題をageで書かないでくれ.
631 :デフォルトの名無しさん :04/10/23 14:03:08
>>1 は や く 教 え ろ
>>436 妹の質による。
そこらのアイドルを軽く凌駕する可憐さと、家族の前でも汚い部分は見せない
気遣かいを兼ね備えた妹を持つ漏れの友人は、激しく実妹萌えしてた。
639 :
デフォルトの名無しさん:04/10/25 10:03:11
Pythonの妹は?
ある日突然、あなたに24個もの台風が発生したらどうしますか?
それも……とびっきり大きくて
とびっきり暴風で
とびっきり大雨連れて
とびっきりの土石流発生。
しかも、そのうえ……
台風達はみんなみんな、とびっきり!
日本のコトが大好きなんです……
奥ゆかしい25号目萌え。
643 :
デフォルトの名無しさん:04/10/25 18:42:50
次の命題は正しいか?
「Python はプロトタイプベースのオブジェクト指向言語である。」
次の用語を定義せよ。
「プロトタイプベース」
試作品を基にしたOOPL?
>>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
>>647 ありがとう。
やっぱり Python はプロトタイプベースと呼べる下地があるのですね。
狭義のプロトタイプベースは、文字通り
>>646的意味でしか使わないから、単発で使わずに
>>645のいうインスタンスベースとか、(オブジェクト指向と混同しない程度の文化度が
期待できるところでは)オブジェクトベースとか言い添えた方がいいよ。 老婆より。
ここは ambiguous なインターネットですね
オブジェクトベースるには,インスタンスメソッドが作りにくいのが難点かな.
普通にやろうとすると,
class object: pass
obj = object()
obj.method = lambda self: ...
obj.method(obj) # ←ここの引数が嫌.
なんか周りくどい方法で解決できた気はするけど.
Zope serv はインスタンスですよ
>>651 newモジュールを使うナリよ。
あと、 インスタンスメソッド→インスタンス特異的メソッド ね。
はいそこ、特異メソッド…とかつぶやかないように!w
その呼び名はあの界隈ローカルですから。
ちなみにあれは、ばりばりのクラスベースですから,斬り!
プロトタイプが、、、なんて無知なまましったかで話してると、sumimさんに斬られますよ。
残念! 拙者…Zopeは存じませぬから! 切腹!
Python さわってて Zope で遊ばないなんて信じらんな…
apache よりもおもろいよ、Zope
>>656 Zope ってドキュメントが少ないし、
まともなアプリ作れるようになるまでに相当勉強しないといけない。
PHP 使うほうがずっとまし。
[一年前に触った君 より]
おもしろくても、Cのようにネイティブで高速な
わけでもなく、Javaのように最適化されまくって
速いわけでもない。おもちゃだな。
pythonを勉強しようと思いpython日本語環境2.3.4というものをインストールしたのですが、
pythonIDEが見当たりません。
c言語を少しだけやった時には、コンパイラがあったのですが・・・。
python.exeを実行するとdos窓が開くのですが、皆さんはこれでpythonのプログラムを
作っているのでしょうか?
私の環境は
os;xp sp2
memory;512mb
cpu;pen4 2.4c Ghz
です。わかるかたいましたら、レスお願いします。
>>659 Python IDE 使ったことない。
python.exe実行してDOS窓開くんじゃなくてDOS窓でpython.exe実行する。
>>659 > python.exeを実行するとdos窓が開くのですが、皆さんはこれでpythonのプログラムを
> 作っているのでしょうか?
そういう人も多いと思われ。別の選択肢は IDLE という統合環境を使うこと。
スタートメニューの中に「IDLE (Python GUI)」というのがあると思う。
プログラムファイルには foo.py のように .py で終わるファイル名を付ける。
そうするとファイルのアイコンが蛇マークになる(もしならないなら関連付けが
無効になっているか、ちゃんと .py になっていない)。この状態でアイコンを
右クリックすると「Edit with IDLE」という項目が表示されると思う。これを選べば
IDLE で既存のプログラムファイルを編集したりプログラムを実行したりできる。
IDLE は一風変わった統合環境なので慣れが必要かも。よく分からなければ
メモ帳でプログラムファイルを作って、アイコンをダブルクリックして実行、
という方法でもいい。俺的にはこの方法が楽チン。
instancemethodの定義を追ってくと,
class object:
def method(self): pass
instancemethod = type(object().method)
と等価っぽいんだが,なんじゃこれは?
def instancemethod(self, f):
return lambda *args, **kws: return f(self, *args, **kws)
ではダメなのかな?
lambdaにreturn付けてしまった….鬱.
>>660 >>661 レスありがとうございます。
pythonGUIありました。スタートアップにあったとは・・・orz
まだ、それほどわかっていないのですが、C言語よりはなじみやすく感じ、
この言語だったら長く続けられそうな気がします。ありがとうございました
16進数文字列→intに変換する関数が見つからない.help!
>>665 >>> s = '0a'
>>> eval( '0x' + s )
10
>>>
>>> int("0xFF", 16)
255
>>> int("FF", 16)
255
new-style classってなに?
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、クラスメソッド、スタティックメソッドなど)を活用できる。
SD 読んだけど Python が扱われなくて良かったよ。
いずみちゃんで(;´Д`)ハァハァ できるようでないと、
Pythonを使いこなすのは難しい。
674 :
デフォルトの名無しさん:04/10/27 22:49:13
負け惜しみが多いスレですね
Rubyスレの方がよほど潔いな
676 :
デフォルトの名無しさん:04/10/31 00:50:24
671 じゃないが。記事のレベルがどうにもこうにも。
Pythonでブラウザのレンダリングイメージを取得したいのですが、
可能でしょうか。
OSはLinux、ブラウザはなんでもOKです。
getScreen(URL,outfile,jpg)みたいな感じにしたいんですが。
はい
680 :
デフォルトの名無しさん:04/10/31 17:12:19
お前らの開発環境と開発ツール教えて下さいお願いします。
便利なやつ使ってんだろ?
俺はcygwinでIPython使おうと思ったけど、あれhelp()ですぐ落ちて不安定。
>>680 Linuxの場合:
Red Hat Linux 7.3 標準の Python 2.2。エディタは Emacs (python-mode 使用)。
Windowsの場合:
Python.org 謹製 Python 2.3.4。エディタは本体に付属の IDLE。
何の変哲もないが特に不満はない。
>>680 Exuberant Ctags はPythonも対応しているな。
>>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作れ。
>>684 すんません、例えば
> os.system("netscape -remote 'openURL(%s)'" % URL)
~
↑
これ何ですか?
「これ」が指しているのが俺のブラウザだと「R」の文字なんだが。
聞きたいのは %s のことか? それともその後の % のことか?
すんません、
> それともその後の % のことか?
のことです
>>687 python起動して、
>>> "hoge%s" % "fuga"
とかやってみろ。
;・∀・)ハゥ!被ったっ!折れ以外にお節介野郎が二人もっ!
>>690 'hogefuga' と帰ってきました。
なるほど。C だと , のやつですね>>%
695 :
デフォルトの名無しさん:04/11/01 11:01:29
> C だと , のやつですね>>%
C だと、何だって?
これは何に使うスクリプトなの?
つーか,これでレンダリング結果を得るのは無理ありすぎ.
代案きぼんぬ
re.subとかstring.replaceとか使えば?
何の話?
"hoge%s" % "fuga"
の代案だと思われ。
% のエスケープが \% じゃなくて %% なのが納得いかん
JPythonのネタが全然出てこないねぇ。これも日本人は使ってないのかなと。
JPython はなくなりました
いまは Jython ですので
705 :
デフォルトの名無しさん:04/11/02 01:26:58
Python流のコーディング規約みたいなのってある?モジュール名は大文字、
メソッド名は動詞、XXにはプリフィクスをつける、とか、変数名に迷ったらspamとか。
Jython使ってましたが、Groovyに移行してしまいました。
Javaとの連携はGroovyのほうが美しかったので。
Python 使いが「Java でも使ってやろうかな」というときに使うのが Jython であって、
Java だけラップした Groovy(使ったことないからよくわかりませんが) は汎用性を犠牲にした分だけ
Java との親和性が Jython と比較して良いということなんじゃないのかな。
Java で生きる人には良い選択なのだろうけど、こっちとしては眼中にない。
>>709 使ったこともないのに他の言語を批判して貶めるのがPython厨の
いつものやり方だよね。
Jythonって開発がぜんぜん進んでないじゃん。
712 :
デフォルトの名無しさん:04/11/02 12:55:06
>>708 正解でしょう。
たぶんGroovyのほうがずっと将来性あるし。
Javaとの親密な連携が必要な場合はGroovyの方がいいかもね.
Groovyの特徴は,良くも悪くもJavaにべったりなところ.
Javaで書いたクラスをそのまま呼び出せるの?
716 :
デフォルトの名無しさん:04/11/02 16:32:52
def を使うとなんか
<function test at 0x006B1A70>
って出てくるんですけど、どうしたらいいんでしょう。
testは関数の名前のところにいれました。
あぼーん
>>716 まずPythonをアンインストールしろ.次に
>>716 それは test の名前空間のアドレス
えぇっと、、、理解しました。
スレ汚しごめんよ。(´・ω・`)
>>720 まじで?折れ、蛇使いを自負してるけど
>>719の意味が分からん。
def test: ... ってやっただけで print test したのと同じになる理由も思いつかない。
readlineモジュールでなんかやってる?
>>> 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コードと比較しているのでわかれよ、ってことなんだろうけど
そこは普通解説するだろ。
>>723 11月中に初めてのPython第2版がリリースされるよ
てゆーか「名前空間のアドレス」って何
726 :
デフォルトの名無しさん:04/11/03 00:16:09
お勉強に読むと楽しいソース教えて。
手頃なサイズのやつ。
>>715 Jythonでションボリなjava開発を楽しくする話はここでしてもいいでしょうか?
ドキドキ
あ、Jython->Groovyに行きましたが、
Pythonは使いつづけてますんで。
念のため。
#python-ja ってどうやったら繋げられるの?というかこのチャンネル生きてんの?
733 :
デフォルトの名無しさん:04/11/03 18:15:05
Pythonって同名の関数定義しても警告とか出ないんだね…。言語仕様?
この動作を抑制する方法ってありますか?
あとperlのmy, perl -w のようなことはできない?
>>733 See 'python -h' output.
>>724 Scheme でも警告でないことが多い。
最も最近で定義された関数が有効になるというのは
それはそれできれいだと思う。
レス番ずれてね?
ほんとだ。
>>733 の間違いだね
「ホットゾヌ2」のバグかな。。。
ぬるぽ
ガッ
740 :
デフォルトの名無しさん:04/11/03 23:41:23
>>740 Python.jp でなんでやらないんだろう?
見るものがあんまし多くないから水増しに良かろうに。
なぜ Jython は Java 1.5 で動きませんか?
文字列中のASCII範囲外の文字を文字参照(xxxx)に変換したいのですが、
そういったライブラリはありませんか?
リファレンスとにらめっこするか、練習問題だと思ってやってみれば?
ここで答えを待ってるより早い。
__--、、-へニ二、‐、
,,-´´, ‐´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 ||
>>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 姉ゲー?
組み込みにord()ってのをみつけた。↑のコードのはずかしさ倍増
# -*- 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])
>>743 "ほげ".encode("ascii","xmlcharrefreplace")
751 :
デフォルトの名無しさん:04/11/06 13:06:29
752 :
デフォルトの名無しさん:04/11/06 14:30:53
なぜに Python は 画像処理ソフトで人気がありますか?
画像処理ライブラリがすごいことになってたりすんのかな。
>>752 あるよ。とりあえず PIL かなぁ・・・
インスタントパイソンのページを読んでがんばってるんですが、
この、
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で言うインスタンス変数。
>>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]
>>>
typo の問題は、初期化 (代入) しないで参照するとエラーになるから、全くガー
ドがないわけではないはず...
まぁ、UT ちゃんとやりましょう... ということかな...
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
>>761 本当はマッチオブジェクトが欲しいのですが、(マッチオブジェクトを使って
文字列の位置を知りたい)findallだとそれができないので、
どうしてもmatch/searchが使いたいのですがどうにかなりませんか?
finditer()
>>> import re
>>> print [x.span() for x in re.finditer('(h.{1}ge)','hoge hage hige')]
[(0, 4), (5, 9), (10, 14)]
>>763 >>764 finditerを使ったらできました。ありがとうございました。
イテレーターが出たときは「難しそうだし、複雑なことは自分ではやらないので
覚えなくてもよかろう」と思って無視していたのですが、
こんなところで使うとは思ってませんでした。
質問です。
・PythonではすべてのクラスのRootクラスは存在しますか?する場合、マニュアルのどのセクションに記述されていますか?
・__add__のようなオーバーロード可能な演算子の一覧はマニュアルのどのセクションに記述されているのでしょうか?
・ブロックごとに変数スコープは作成されますか?
非常にレベルの低い質問だとは思いますが、釣りではありません。
”input”で文字列を格納するにはどうすればよいのでしょうか??
例えば
hello = input()
print hello
数字は可能ですが、文字列を入れるとエラーが出ます。
なぜでしょうか?
文字列の入力には raw_input を使う
hello = raw_input()
input だと入力を式だとみなして評価してしまう.
たとえば input() で 1+2 と入力すると 3 が返る.
- 旧形式クラスの場合には,Root クラスに相当するものはありません.
新形式クラスの場合には object 型が基底クラス.
簡単な説明はチュートリアルの用語集に書いてあります.
詳しい説明はリファレンスマニュアルの 3 章と 7 章に少し書いてあるけど
多分難解で参考にならないでしょう.オライリーの「Pythonデスクトップリファレンス」
に簡単でわかりやすい説明があったと思います.
- オーバロード可能な演算子は,リファレンスマニュアルの 3.3 節「特殊メソッド」
に詳しく書かれています.ライブラリリファレンスの 3.10.1 節には,よく使われる
一部の特殊メソッドについてまとめた対応表がありますよ.
- ブロック文ごとに変数スコープを張るわけではありません.
変数スコープについては,チュートリアルの 9.2 節,
リファレンスマニュアルの 4.1 節などに書かれています.
>>769 出来ました!
ありがとうございました。
>>767 目次から当たりをつけてざっと目を通したつもりだったんですが、
「全部嫁」はおっしゃるとおりで。申し訳ないです。
>>770 ありがとうございます。大変助かります!
ドキュメント見て思うのは
「グローバルモジュールインデクス 」はあるけど
他のOOP言語でよくあるクラス階層図がないなぁと。
「Python ライブラリリファレンス」がそれに近い?
ドキュメントに {}はmapping型のdictonary型、
それにdict型が存在するとあったので
試しに
d=mapping()
d=dictory()
と書いてみたらエラー。
d=dict()
は正解。うぬぅ。わからんぜよ・・・。
>>773 素直にまずチュートリアルから始めたら?
流れ的にはオライリー待ちといっとけば正着
>>773 推測するのが好きなら既存のコードを読んでみたら。
ライブラリなりアプリケーションなり好きなものを。
でもって、読んでて分からない部分をマニュアルで調べる、と。
ライブラリリファレンスの 2 章が,だいたい組み込みオブジェクト型の階層に
合わせて書かれていますよ.それぞれの型の素のインスタンスを作成する関数
は,(読みにくいけど) 2.1 節の組み込み関数の中で列挙されています.
>>773 > ドキュメントに {}はmapping型のdictonary型、
> それにdict型が存在するとあったので
どこに書いてある?
そんなこと今まで知らなかったorz
>>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() や
スライスが適用できることに相当する。
>>780 Python で「型」と出ていたら JAVA で言うクラスではなく
インターフェイスだと思った方が分かりやすいと思う。
783 :
m9っ・∀・):04/11/09 11:15:36
よーするに分類名=型名じゃないよってことです。
urlで指定したファイル(画像等)はどのようにダウンロードするんですか?
785 :
m9っ・∀・):04/11/09 13:37:25
jythonの話っでawtのコードが良く出てくるけど
webでの話ってあんまナイネ。
糊付け言語として使うならビューに使うのが正解かと
思ったがJSPコンパイラに相当するものなさげだし、
あってもインデントと相性悪いし。
ロジック・モデルをフルjythonで書くのが正解?
あとテストコード。
>>780 なるほど.インターフェイスと実装の違いね.
で,今のところマップ型の実装は辞書型しかないと.
最初にmapとdictがあると聞いたときは
ハッシュと二分木とか,複数の実装があるのかと思った.
ちなみに,Pythonのクラスはオブジェクト生成関数みたいなモノなので,
dictはクラス名であると同時に,辞書オブジェクト生成関数であるとも言える.
788 :
デフォルトの名無しさん:04/11/09 17:30:14
cvsをインストールして初めて名前を知りました。
pythonてどういう時に使うのでしょうか?
>>788 おまいがいつもググっているときにPythonの恩恵を間接的に受けている
どのような恩恵を受けているのですか?
>>790 君がgoogleに文字列をPOSTしてからPageRankに従ってサイトのリストを
君のブラウザ上に返すまでがほどんどPython若しくはPython謹製でやっているという事実。
謹製という言葉の謎な使い方がまたひとつ。
Python燻製というのもいいな。
794 :
デフォルトの名無しさん:04/11/09 20:18:00
Python で2万行の CVS データを読み込んだら
えらく時間かかった。たぶん Perl だと一瞬なんだろうけど。。
Python もう少し速くならないかな。
CVS -> CSV でした。
対Perl比でそこまで差がつくとは思えない.
単純なファイル読み込みなら,対C比でもそんなに悲惨な結果にはならないような.
Pythonが遅いという点には同意しなくもないが.
>>794 csvモジュールを使ったのか、それともCSVパーザを自作したのか知りたいな。
で、みなさんはPythonをてどういう時に使っているのでしょうか?
googleAPIでお話するとき?
shell 自体が Python ですよ
>>800 ファイル操作、外部ブロセス起動などの一般的なシェルタスクは
みなPythonでいちいち記述するんですか???
ネタじゃないなら詳しく。
>>801 いや、今は ipython 使ってるだけだけど・・
805 :
デフォルトの名無しさん:04/11/10 00:50:08
>>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秒は許容範囲だなぁ。
>>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税のようなものか。
-- 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)
-- 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);
}
}
-- 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)
}
}
IPythonでパイプるには,やっぱりos.popen?()を使うの?
ログインシェルにするのは厳しいような….
>>809 を鵜呑みにすると Ruby を未来永劫使わないことに決めました
Perl,Ruby 版は各スレのエキスパートに書かせたほうがよろしいかと
それなら Perl でも Ruby でも同じことだが
>>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モジュールみたいなのがなかった。どのみちなくても十分高速だね。いいなぁ。
結論
Ruby使えねぇええええええええええええええええええええええええええ
召喚するのはやめましょう
ruby だと、read() が速いような気がする。一気に読んで...
ループにすると遅い (最速スレの結果より)。
ruby 分からないので、コード書けません
>>819 そういう餌を蒔いておいてまた後になってしたり顔で
710 :デフォルトの名無しさん :04/11/02 10:00:10
>>709 使ったこともないのに他の言語を批判して貶めるのがPython厨の
いつものやり方だよね。
みたいな事言いにわざわざ来るわけ?
はっきりいってpython使ってるほとんどの奴にとって
rubyが速かろうが遅かろうがどうだって良いし、
自分で思ってる程相手にされてない事にいい加減気付けよ。
Python 2.2.1 rlcompleter.py モジュールの
complete(self, text, state):メソッドの
46 __all__ = ["Completer"]
47
48 class Completer:
49
って記述の意味がわかりません。
__all__ に自分の名前を入れて、んでこの__all__を参照している
ところが見当たりません。名前空間の予約語みたいなもん?
コンストラクタ
URLが実在しないのではなくて,urllibが送信するUser-AgentがGoogleに
受け入れられないんじゃないかな.
>>823 あなた、嫌な感じですね。穿ち過ぎでしょ。
みんなもうちょっと余裕を持とうよ。
>>818 むしろCygwinとネイティブとの違いが面白いな.
概ね読み込みでCygwinが勝っているのは,gccの最適化能力が高いってことなんだろうか.
cygwinのI/Oが遅いだけ
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を使っていたのも今は昔・・・。
[Python-ml-jp 2879] でそんな議論してたよ.
>>833 めちゃ親切なレスthx!
今回はHTMLParser.HTMLParserでゴリゴリ書くことに決めた.
htmllib.HTMLParserの萌え要素も捨てがたいけどw
googleをプログラムから使うならIDとってgoogle API使えよ。
そんなことも理解してないのか糞どもが。
出来ました!
googleのイメージ検索結果を全て取得して、
URLをhtmlファイルに書き込みます。
そしてそのhtmlファイルを開くと全ての画像が表示されます。
実用性には欠けますが、
暇があったら試して見てください。
そしてできればアドバイス等頂けるとありがたいです。
ttp://eunjoo.jp/google.txt
>>837 それも調べてみたんですが、イメージ検索には対応してませんでした。
pythonからforkしてxpyをreleaseしますた
HEADリクエストで情報を得たいときって,httplibで実装するしかない?
よく考えると,リダイレクトとか結構面倒なんだよなぁ.
なぜHEADリクエスト?
PyJUG に過去スレ一覧置いてくれないかな (w
>>842 urllib2で実現できないことなのかな?
Jython触ってみたけど結構使える印象。
いや結構どころかすごいパワフル。
しかし周りの人間がPythonわかんねーから
検証コードぐらいでしか仕事では使えなそうだ。
なんかもったいない。
>>846 いや、Python を普及させるチャンスでしょう。
Rubyスレが盛り上がっていると、見事にPythonスレは閑散としてるね。
みな工作員としてRubyスレに潜入してて忙しいのかな。
>>845 正直,リファレンスを読んでもurllib2の拡張の仕方がよく分からないので,
urllib2で可能かどうか分からない.
まあ,GETリクエストでヘッダだけ読んで,すぐclose()するのも一つの選択肢では
あるんだけど,どうせデータ本体は必要ないしなぁ.
>>848 pythonスレの活気なんてこのくらいがデフォだと思うけど。
彼らは自分のとこで話題がないからって
わざわざ暴れに来てたのかな。迷惑だよね。
流れ的にはオライリー待ちだから
まあ、日本人でも技術英語ぐらいは読めるようになれ、てところだろうな。
>>855 まあ英語じゃなければろくなドキュメントがないですからね。
(・ω・)
既刊のオライリー本には
PyJugに置いてあるありがたいマニュアル以上のこと
書いてありますか?なんか一冊読んでおいたほうがええかな。
>>847 同僚に勧めたら
「インデントがねぇ」
と言われた(w
まぁ僕も初めはそう思ったんだけど、
誰が書いても視覚的に同じ構造になるから
慣れたら気に入った。インデント。
インデントといえば本家は python-mode.el をデフォに奨励しているけど
python.vim はなんで無視なんでしょうか?そもそも同じ整形ではない?
vimユーザは虐げられている!
ところでcygwinのpythonでhelp()コマンド使おうとしたら$PYTHONDOCS
設定すれ、言われたんで
$export PYTHONDOCS=$(cygpath -u 'd:\python\Python-Docs-2.3.4-jp-html')
を設定しますた。結果、盛大に文字化け。
export PAGER='w3m'
ってやったら成功。ヤター!
でもscreenの中でやったらw3mがちゃんと動かなくてダメでした。鬱。
しかし、いくら良いと主張されても、こうも人がいないというのは不安に
なるな。日本で使っている人、いるのか?
しぶとく今宵も DiveIntoPython 中〜
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()つかってがんばってインデントした文字列を評価するしかない?
>>859 俺も最初は戸惑ったほうだけどね。
慣れたら逆にendとか使っているほうが助長に見えるくらい中毒に・・・。
一年位前、仕事でPL/Iを使っていたけど、アレにはもう戻れないだろうなあ(苦笑
867 :
865:04/11/15 01:25:00
>>866 プログラムを書く際のインデントは慣れの問題だと思うんだけど,
実行時にプログラムを動的に生成したいときにもインデント付の
文字列を生成してeval()する必要があるのはどうかと思う.
一時的にもはずせんもんかのぉ.
>>859 金曜にまったく同じことを同僚に話したんだけど,もしかしたら同じ会社か?
まぁ食わず嫌いもなんなので,今日からちょっとまじめにPythonを勉強しよう
と思ってるよ.
漏れ的にはPerlのObject指向でそこそこ満足してるので、perlにあと
Try/Catch/finallyだけが付けばいいのにと思う.
869 :
865:04/11/15 01:38:10
と思ったらPerlにも例外機構をサポートするモジュール
(Exception.pmとかError.pm)がありますた.すれ汚しスマソ.
でもせっかくなのでPython勉強するデス(`・ω・´)
>>865 一応 lambda で関数作れることになってるけど,
式が1個書けるだけというきつい制限があったりで
あんまり大々的に使わんとです.
代わりにやるとしたらこうか?
def makeAdd(n):
def add(x):
return x+n
return add
>>> f = makeAdd(365)
>>> print f(1)
366
pickleって異なるランタイムのバージョンでも読み書きできますか?
>>867 インデントは、いくら慣れだといわれても参入障壁が高すぎる。
慣れればよいといわれても信用できないし、慣れるとしてもそれまで
苦痛なのも嫌。。世の中に同じ意見の人はとてつもなく多いよ。
>>868 Perlで良いと思うよ。
ソース書く時にインデントしないプログラマってそんなに多かったのか。
メモ帳でコード書いてる人がこんなに多かったなんて。
YAMLもそうだが、空白や改行に構文上の意味がある、というのは
CやSGML等の他の言語の慣習と異なるので、意外にやりにくい。
コードを他所からカット&ペーストしたときに、一時的にせよ構文的に間違った状態に
なってしまう、というのは、他の言語では味わえない不安感だ。
まあ人間は慣れるけどね。
>>868 むぅ、こんなところに書いてあったとは…orz
助かりました、ありがとございます。
xyzzyのpy-modeで書いてます。便利ですよー
この前,どうも変なところで構文エラーが出て困ってたんだけど,
タブとスペースが混じったのが原因だった.
インデント否定派ではないけど,こういうことがあるとチョット怖い.
{ ... }をインデントに変換するトランスレータ書いたら需要あるのかな.
lambdaの制限を取り除けるのは結構いいかも.
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ではどう設定すればいいのでしょうカ。
>>877 Pythonは読みやすくていいんだけど,自分が書くとなるとそれが恐
くてPythonに手が出せません.読んで天国書いて地獄
おまいら,とりあえずこれで我慢汁.
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
言ってる側からインデントが….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) で楽勝、
というファクタも大きいかも知れず。
pythonってよく分からないんだけど
インデントがずれてると違う動作になるの?
*正しくインデントした場合*
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で単独の文をループさせるときに波括弧で囲わない癖のある人が時々ハマるミスに似てる.
ここにコピペするとインデント無くなるけど、Cなら{}があるし
単独文でも{}が省略されていることが明らかだから復元可能だよね。
pythonはインデント無くなると元のソースがどっちだったのか分からなくなるよね。
>>886 あたりまえだろボケ
だから使い物にならないって言ってるんだよ。
使いづらいが、使いものにならない、というほどでもない。
perlの$みたいなもの。
慣れると、endがないことが(よくある小さなブロックで)可読性を上げる。
890 :
m9っ・∀・):04/11/16 13:37:26
消えたインデントを見抜ける人でないと(Pythonを使いこなすのは)難しい。トカイッテミルテスト
891 :
デフォルトの名無しさん:04/11/16 14:58:55
>>890 perl の $ とは全然違うよ。
何にしろ、pythonのインデントは使いたいと思う気持ちを萎えさせるのが最悪。
perl の $ も使いたいと思う気持ちを萎えさせるわけだが。要は慣れだし。
そうむきにならんでも。
python使ってればそういうインデントに
気を遣ってないコード読まないで済むだけで俺は満足。
少なくとも、pascalのbegin〜endがベストということはない。
rubyのendも妙に浮いている。
個人的にはC風に{}が良いと思うが、
それも括弧の開きと閉じを関連づけるeditorの支援が得られるという前提だ。
世の中に、インデントで制御構造の範囲を指示する言語なんて
極めて少数ということから考えても、その方式がわかりにくい・よみにくい
ということは明らか。慣れれば良いと言うのは、言うだけはいくらでも言える
が、まったく実際的ではない。
つーか,元々,
> Cで単独の文をループさせるときに波括弧で囲わない癖のある人が時々ハマるミスに似てる.
このようなミスを防ぐためにインデントによるブロック構造を導入したわけだが.
>>895 エディタの問題でしょ? 粘着ネチズンだなあ
>>897 Perlのように波括弧必須にすればよいだけの話なのでその理由は却下
899 :
m9っ・∀・):04/11/16 18:46:30
世の中に、ひらがなとカタカナと漢字を混ぜて書く言語なんて
極めて少数ということから考えても、その方式がわかりにくい・よみにくい
ということは明らか。慣れれば良いと言うのは、言うだけはいくらでも言える
が、まったく実際的ではない。
ハングルのみのウリナラは実際的だぞ
901 :
m9っ・∀・):04/11/16 19:02:16
そんなことより次スレのタイトルを考えよう。
俺的には↓これで。
◆PYTHONって死滅しちゃうの?◆
>>901 とりあえず他のPythonスレを使い切る方向で.
たぷるスレも920まで行ってるから,そっちも一緒に「Pythonのお勉強 Part6」に
移動ということでどう?
次はピクルスレを。
>>900 事実、小学校で膨大な時間を漢字の書き取りに費やし、
PC使うにもIMEという面倒な機構が必要になっているわけで、
避けて通れるものなら避けたい言語だろう。
早いよ。使い切ろうよ。あっちもこっちも読むの疲れるんだよ。
ってかスレ名からすると妨害か。
削除依頼するなら一つ残してあと全部削除依頼しなきゃ。
そうじゃないなら使い分けの基準を明確化してね。
>>911 このスレとタプルスレは既に900overなので,
>>910の2つのスレを削除すれば
事実上「Pythonのお勉強 Part6」に一本化される.
このスレがそもそも重複スレなんだから、(ry
>>914 確か,そのスレも今回のような流れで立てられたんだよな….
まともなやりとりも多少あるのは知ってるけど,ここは思い切って削除した方が
いいような気がする.
とはいえ,スレ削除の基準をよく知らないので,あまり強いことは言えないが.
どーせまた立てられるだけだからほっとくのが吉。
そもそもどういう理由で削除依頼するんだ?
>>914 昔そのスレに誘導されたんだけど、今にして思えば騙された気がする(w
初心者からするとただでさえ情報すくないのに
スレ開いたらネタスレで
ぱいそんぱいそん〜〜 AA略
以外書き込みなかったりしたらショック。せっかくPythonに興味持った人が
どっかいっちゃうかも知れぬ。
> m9っ・∀・)
会社の仕事はPythonでやってるんですか?
ゾープジャパンさん、活動がみえてきません。
関西支部を作りなさい。これは命令です。
922 :
m9っ・∀・):04/11/17 17:35:32
>>919 何をどう暗号化したいかによるんじゃないの?
排他的論理和とかビットシフトによる単純な暗号化でも足りるとか、
別のアプリによって暗号化の方法が決まってるとかいろいろあるっしょ。
>>920 規模の大きな開発には使ってないなあ。電卓+α的な使い方が多い。
出力の検算とか、アルゴリズムのプロトタイプに使ったりもする。
日曜プログラミングはほとんど Python のみです。
Win2K + VS2003でPython(2.3)をC/C++で組み込もうとPython.hをインクルードしたら
デバッグ用のlibファイルが必要とかコンパイルエラーが出てきた。
リンカ曰く、「Python23_d.libがネーヨ。」
リリースコンパイルなら通るんだけど・・・。
もしかして、Pythonを自前でコンパイルする必要あり?
今のところは
#ifdef _DEBUG
#undef _DEBUG
#include <python.h>
#define _DEBUG
#else
#include <python.h>
#endif
で対処しています・・・。
>>922 ビットシフトで事足りる気がしてきました…サンクスですた
>>925 Blowfishぐらい同梱されてても、、、とは思うよね。
>>926 thanx。自前でコンパイルしました。
>>927 初めて知りますた。ぜひ取り込んで欲しいけどもう2.4には入んないかな
すでにどのOSにも手軽なpackage systemがあるから
「標準で入ってた方が俺が楽だから」は、標準に含める理由にならないんじゃないかなあ。
あと、暗号関係のコードは多倍長演算ライブラリ(libgmp)にも依存して、Pythonの世界だけじゃ
済まないかもしれない。
google先生はpythonでできています。
デスクトップサーチがリリースされるときにpythonを知っておくと良いことが
起きるでしょう。
もう暗号関係コードの輸出規制はなくなったんだっけ?
PythonCardおもしれー
っぱい
Python製のblogは、pyblosxomとCOREBlog以外に何がある?
pythonはblogツールに向いていないからダメだ
f=File("test.txt",'w')
f.write("test")
ここで任意の漢字コードをいくつか適用したいのです。
文字そのものはpykf等で変わりますが、ファイルはShift_JISで保存されて化けてしまうです。
FAQっぽいので、どこか良さげな資料などないでしょうか。
PyJUGのPython 2.3.4(Win32)です。
>>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 して試してみれば
ちゃんとソースが書かれたエンコードに合わせて書き出されるのが分かると思う。
書き出し用に漢字コードを指定したいのなら
import codecs
f = codecs.open("test.txt", "wb", "EUC-JP")
f.write(u"Unicodeの日本語文字列")
>>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の日本語文字列" のような文字列リテラルを書いている
と見た。
当たりですた。
始めて3日目でして。みなさまのおかげで坊主にならなくて済みそうです
948 :
デフォルトの名無しさん:04/11/22 10:15:00
test
950 :
デフォルトの名無しさん:04/11/26 15:49:47
\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< Boooooooooo!!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< BooBooBoo!!!
Boo〜〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」  ̄ / /
googleの結局どの部分にPython使ってるのさ。
Pythonは影の主役としての役割が多いよね。
〜が得意っていうのがなくて何でもソツなくこなす感じ。
逆に言えばつまんない言語なのかも。
日本じゃ知名度もまーだまだな感じだし。
>>952 URLserver ってwebサーバとは違うんかな。
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
どうすればよいのでしょうか。
str1 + str(int1)
>>957 str型に変換すればいいということですね。ありがとうございました。
とりあえず Python チュートリアルは全部読もうね♪
ぼくのようにプログラミングのPの字もしらなくてPythonはじめたいと思った場合は、
どのようなサイトから見たらよいですか?
.pyというファイルを作ってテキストでプログラムを打つことはだいたいわかるのですが、
ひらきかたがわかりません
ばかですごめんなさいでもおねがいします
ありがとうございます。
ぼく、がんばります。
>>965 いいトシこいたオトナのくせに自分を機械伯爵なんて呼ぶなよ。
警察に通報されるぜ。
誰?