くだすれPython(超初 ..
[2ch|▼Menu]
369:デフォルトの名無しさん
08/05/22 06:10:00
>>365
どういたしまして。

>>367
リストの sort メソッドには自前の比較関数が渡せるので、
数字カードと文字カードを比較できる比較関数を作ればいいと思われ。
安直な例:

letter = {"A": 1, "T": 10, "J": 11, "Q": 12, "K": 13}

def compare_cards(x, y):
    if letter.has_key(x):
        x = letter[x]
    else:
        x = int(x)
    if letter.has_key(y):
        y = letter[y]
    else:
        y = int(y)
    return cmp(x, y)

t = list("6T934A57JK28Q")
t.sort(compare_cards)
print t

370:デフォルトの名無しさん
08/05/22 06:42:15
>>367
俺はPythonの勉強始めて3日目なんでPythonの流儀は知らんが、
C++とかなら普通は内部表現にA23456789TJQKなんて使わないよ。
普通は1〜13の数値で持っておいて、出力するときに変換する。

371:デフォルトの名無しさん
08/05/22 07:43:23
スートも含めて考えるとタプルかその他のオブジェクトになるだろうか

>>367
A K Q J 10 なんかもストレートになるから注意

372:デフォルトの名無しさん
08/05/22 08:03:37
>>369
比較関数方式よりdecorate-sort-undecorate方式の方がいいよ

373:デフォルトの名無しさん
08/05/22 22:22:45
こんばんは。 
PythonのCGIでファイルをダウンロードさせたく思い、以下のように書いたのですがバイナリファイルの場合、途中で切れてしまうようなのです。
助言等戴ければ幸いです。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os
import cgi
import cgitb; cgitb.enable()

filepath = r'ぱす'
filename = os.path.split(filepath)
filename = filename[1]
filesize = os.path.getsize(filepath)

print '''Content-Disposition: attachment; filename="%(filename)s"
Content-Length: %(filesize)s
Content-Type: application/octet-stream
''' %(locals())
f = open(filepath, "r")
print f.read(),


374:デフォルトの名無しさん
08/05/22 22:39:27
ofp = open(u'%s/%s' % (savedir, file), 'wb', 0)
ifp = urllib.urlopen(url)
siz = int(ifp.info().getheader('Content-Length'))
print siz
cnt = 0
while True:
   buf = ifp.read(4096000)
   if len(buf) > 0:
     ofp.write(buf)
     ofp.flush()
   cnt += len(buf)
   if cnt >= siz:
     break
ifp.close()
ofp.close()


375:デフォルトの名無しさん
08/05/22 22:41:51
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
sys.stdout.write(hoge)
sys.stdout.flush()


376:デフォルトの名無しさん
08/05/22 23:44:22
自己解決しました。

377:デフォルトの名無しさん
08/05/23 10:34:45
分からないなら答えなくていいのに

378:デフォルトの名無しさん
08/05/23 12:42:47
いつもの阿呆です。

379:デフォルトの名無しさん
08/05/23 12:44:49
お願いします。回答ください。

380:デフォルトの名無しさん
08/05/23 15:04:39
自己回答してください。

381:デフォルトの名無しさん
08/05/23 15:16:59
>>373-374
使用環境をまったく書いてないのは質問として NG だと思う。
サーバがWindows環境だとバイナリファイルの扱いに注意が必要だから。
CGI 作成の注意としては、ヘッダの行末は \n ではなく \r\n でないといけないはず。
> print f.read(), 
ここも1バイト余計にデータを送っていることになるのでよくない。
手元の Windows マシンでは Python 付属の CGIHTTPServer を使って以下のコードで動いた。

import sys, os 
import cgi 
import cgitb; cgitb.enable() 

if sys.platform == "win32":
    import msvcrt 
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) 

filepath = "test.jpg"
filename = os.path.split(filepath) 
filename = filename[1] 
filesize = os.path.getsize(filepath)
sys.stdout.write('Content-Type: application/octet-stream\r\n')
sys.stdout.write('Content-Disposition: attachment; filename="%s"\r\n' % filename)
sys.stdout.write('Content-Length: %d\r\n' % filesize)
sys.stdout.write('\r\n')
f = open(filepath, "rb") 
sys.stdout.write(f.read())
sys.stdout.flush()
f.close()


382:381
08/05/23 15:22:29
CGI プログラムの実行時にエラーが起こっていないか常にチェックするようにして。
エラーメッセージの出力先やエラー時のサーバの挙動はサーバソフトごとに異なる。
CGIHTTPServer だと正常終了なら
localhost - - [23/May/2008 15:10:05] CGI script exited OK
のようなログが標準出力にプリントされる。エラーの場合は
localhost - - [23/May/2008 15:07:40] CGI script exit status 0x1
のようになる。後者の場合、クライアントがダウンロードした内容は CGIHTTPServer が吐いた
エラーメッセージを含む HTML ファイルだから、必要なら拡張子を変えてブラウザで開いてみて。

383:デフォルトの名無しさん
08/05/23 19:13:47
>>381-382
どうもありがとうございました。
お蔭様で解決致しました。

度々の質問で申し訳ありませんが遅延評価勉強法は性にあわないようなので
本でしっかりと勉強しようと思うので>>381のような基本的なことが
載っている本を教え戴きたいです。

384:381
08/05/23 20:33:27
>>383
恐らく「これを読めば Web アプリの基礎から実装上の詳細まで全部分かる」という都合のいい本はないと思う。
すくなくとも俺が勉強したときにはそういうものはなかった。
たぶん今も HTTP の仕様書(RFC 2616)のたぐいを読むしかないと思う。
RFC 2616 はオンラインで読める。今は和訳もあると思う。
でもちょっと読んでみたら分かると思うけど、とても通読できるような代物じゃないよ。
何か問題が起こったときに関連がありそうなところを拾い読みするぐらいがちょうどいいと思う。
実際にコーディングしながらでないと理解できないことが多いように思う(俺はそうだった)。

ちなみに、RFC や W3C が出している文書には URL とか MIME とか HTML とか XML とか XSL とか
いろんな要素技術の仕様書がたくさんある。そういうものをどんどん読むといい。きっと力がつくよ。
これらの文献のいいところは、それが原典という点だ。世界がそれに基づいて動いているという迫力がある。
英語で読まないといけないことが多いかもだけど、そうする価値はあるよ。

385:デフォルトの名無しさん
08/05/23 22:18:26
助けて
java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkExit(Unknown Source)
at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyInstance.invoke(Unknown Source)
at applet$_PyInner.init$1(applet.java:61)
at applet$_PyInner.call_function(applet.java:47)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyObject._jcallexc(Unknown Source)
at org.python.core.PyObject._jcall(Unknown Source)
at applet$MyApplet.init(applet.java:139)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


386:デフォルトの名無しさん
08/05/23 22:45:11
         刑務所             さらりいまん
----------------------------------------------------
労働時間  8時間厳守           大体10時間以上
----------------------------------------------------
始業時間  7時50分            8時30分〜9時
----------------------------------------------------
終業時間  16時30分           21時〜24時
----------------------------------------------------
通勤手段  徒歩数分            満員電車1時間
----------------------------------------------------
昼食     食う                食えない日がある
----------------------------------------------------
夕食     食う                食えない日がある
----------------------------------------------------
夕食後    テレビや読書など自由     仕事
----------------------------------------------------
残業     全くない             ない日がない
----------------------------------------------------
残業代    残業がないから無い      残業あっても無い場合がある
----------------------------------------------------
休憩     午前午後それぞれ15分    上司次第
----------------------------------------------------
土日祝    確実に休み           出勤する日もある
----------------------------------------------------
年数     刑罰に応じる          自動的に40年


387:デフォルトの名無しさん
08/05/23 22:46:07
        刑務所          さらりいまん
----------------------------------------------------
労働時間  7時50分〜16時30分      フレックスタイム
----------------------------------------------------
通勤手段  徒歩数分           都心回帰で30分強
----------------------------------------------------
食事    食べたいものが食べられない  食べたいものが食べられる
----------------------------------------------------
トイレ    監視付き           自由
----------------------------------------------------
夕食後    テレビや読書など自由     自分の裁量で自由
----------------------------------------------------
残業     全くない          自分の裁量で自由
----------------------------------------------------
給与      涙金            年収700万円弱
----------------------------------------------------
休憩     午前午後それぞれ15分    自分の裁量で自由
----------------------------------------------------
休暇     なし            家族旅行、趣味
----------------------------------------------------
性生活    オナニーか同性愛      妻または愛人
----------------------------------------------------
老後     孤独で悲惨         家族に囲まれて退職金・年金生活
----------------------------------------------------


388:デフォルトの名無しさん
08/05/24 00:36:52
>>384
やっぱり、そうやって勉強するしかないんですね

英語ってコードを読む延長で読んでいるのか、英語の延長にコードがあるのか、わからないけど
プログラム言語を読み解くみたいに読んでいるなあ

英語が苦手な私でも読もうと思えば、読めるものだね
6年間、一応英語の授業を受けてきた甲斐があったのかなと思う

意味だけ拾っているから、よくわからないけど
仕様書関係で関係代名詞って出ないよね?

中学英語ができれば、辞書片手にだいたいの意味は、わかるのかな

389:デフォルトの名無しさん
08/05/24 00:39:09
URLリンク(www.amazon.co.jp)

390:デフォルトの名無しさん
08/05/24 01:49:36
URLリンク(www.amazon.co.jp)

391:デフォルトの名無しさん
08/05/24 01:55:27
普通、こっちじゃないの?
URLリンク(www.amazon.co.jp)

うちの先生の口癖だけど、「良書・凡書・悪書の区別がつかなかったら、値段の高いほうを買え」
という言葉があるお

2,000円の本は、その程度の価値しかないわけなんだよ

392:デフォルトの名無しさん
08/05/24 02:52:52
httpのプロトコルやcgiの基本的なことならPythonの本に限定する必要はない

393:デフォルトの名無しさん
08/05/24 03:30:53
うちの先生は
読むべきページ1ページにつき100円で考えて
10ページあったら1000円
30ページだったら3000円
それでコストに合わなかったら買えと言っていました

394:デフォルトの名無しさん
08/05/24 06:31:53
HTTPやCGIでこれがオススメって本ある?
自分はStudyingHTTPやプログラミングCGI第二版で覚えたクチ

395:デフォルトの名無しさん
08/05/24 10:18:41
URLリンク(www.amazon.co.jp)

396:デフォルトの名無しさん
08/05/24 11:45:57
>>394
URLリンク(d.hatena.ne.jp)


397:394
08/05/24 16:58:46
>>395-396
ありがとう。参考にさせてもらうよ

398:デフォルトの名無しさん
08/05/24 19:49:36
pythonでCGIを書いても
使えるところがない

399:デフォルトの名無しさん
08/05/24 19:54:52
land.toでは使えるようだ(2.4.4だけど)
URLリンク(land.to)

400:デフォルトの名無しさん
08/05/24 20:02:38
2.4系でも御の字じゃないかー

401:デフォルトの名無しさん
08/05/24 23:51:53
suitex

402:デフォルトの名無しさん
08/05/25 12:56:24
例のアフォがお勉強スレに張り付くようになったようだな

403:デフォルトの名無しさん
08/05/25 15:04:21
お勉強スレに元々いたような

404:デフォルトの名無しさん
08/05/25 15:06:07
そしてアンチスレは全然伸びない

405:デフォルトの名無しさん
08/05/25 19:07:25
ありがとう
乗り換え先検討中なんで参考にさせてもらいます

406:デフォルトの名無しさん
08/05/25 21:19:44
やっぱやめます

407:デフォルトの名無しさん
08/05/25 22:09:29
うはは、わかりません。

408:デフォルトの名無しさん
08/05/25 22:24:32
なぜだか桃太郎電鉄の貧乏神を思い出したよ。

409:デフォルトの名無しさん
08/05/26 09:02:34
ありがとう例のアフォが
張り付く先検討中なんで参考にわかりません。

410:デフォルトの名無しさん
08/05/26 23:46:15
ももたろ社長!ここはPython温せ

アッー

411:デフォルトの名無しさん
08/05/27 01:15:14
うはは、わかりません。

412:デフォルトの名無しさん
08/05/27 02:31:56
>>410
Pythonでくだスレにしちゃネタがうますぎ。

413:デフォルトの名無しさん
08/05/28 22:26:55
おまいら温泉行く?
アッーー!

414:デフォルトの名無しさん
08/05/29 15:01:50
PythonCEで、日本語文字列を出力するにはどうすればいいんでしょうか。
どのエンコードを試してもできません。
宜しければご教示願います。


415:デフォルトの名無しさん
08/05/29 21:23:55
コンソールは何使ってる?

416:デフォルトの名無しさん
08/05/30 02:58:05
質問です。
複数の値を返す関数を作成してそれを受け取るというのもなのですが…。
cでかくとこんな感じです。

#include <stdio.h>

void Power(double x, double *sq, double *cu);
void main(void);

void Power(double x, double *sq, double *cu)
{
*sq = x * x;
*cu = x * x * x;
}

void main(void)
{
double x, xx, xxx;

printf("浮動小数点数を入力して下さい\t");
scanf("%lf", &x);

Power(x, &xx, &xxx);

printf("入力した値 = %lf その2乗 = %lf その3乗 = %lf\n",
x, xx, xxx);
}


417:デフォルトの名無しさん
08/05/30 04:07:51
Pythonではreturnで複数の値を返せるので
def power(x): return x**2, x**3
xx, xxx = power(x)
のように書くが、とりあえずチュートリアルは読もうよ
URLリンク(www.python.jp)

418:デフォルトの名無しさん
08/05/30 06:40:11
その関数はタプルを*ひとつ*返してるだけ
チュートリアルのどこにreturnで複数の値を返せるなんて書いてあるんだ?

419:デフォルトの名無しさん
08/05/30 08:23:40
チュートリアルのp.p.218読んだか?

420:デフォルトの名無しさん
08/05/30 09:37:52
タプルを*ひとつ*返すときは
def power(x): return (x**2, x**3)
だろ
def power(x): return x**2, x**3
ではreturnで複数の値を返せる

421:デフォルトの名無しさん
08/05/30 10:03:49
プログラムを起動中に、変数に任意の内容を記入できる関数はないでしょうか?
名前を忘れてしまったんですが、たしかc言語ではこの機能を使える関数があったと思います。

今は、任意の内容を処理する場合は、引数の文字を入れているのですが、複数の処理をするには
引数に任意で入れたい内容をリストにして、引数に入れてほしい内容はリスト番号を指定する。
という方法を用いてみたのですが、賢くない上に面倒です。

対話形式で処理をするためにユーザーに記入を求める関数を再現したいのですが、パイソンでは何か良い方法はないでしょうか?

422:デフォルトの名無しさん
08/05/30 10:04:54
>>> def power(x): return x**2, x**3
...
>>> type(power(1))
<type 'tuple'>

423:デフォルトの名無しさん
08/05/30 10:05:42
>>421
sys.stdin

424:デフォルトの名無しさん
08/05/30 10:14:01
input()

425:デフォルトの名無しさん
08/05/30 11:15:10
重複していました。
申し訳ありません

426:デフォルトの名無しさん
08/05/30 20:34:11
すんまそん.使わないパッケージのアンインストールってどうやるんでしょうか?

427:デフォルトの名無しさん
08/05/30 21:19:31
>>426
OS、アンインストールしたいパッケージ、それをどうやってインストールしたか、によって方法が違う。

428:デフォルトの名無しさん
08/05/30 21:24:45
OSはwindowsでコンパイル済みのexeファイルからインストールしています.
プログラム追加と削除に表示されるのもあるんですが,どうもないのもあって.

429:デフォルトの名無しさん
08/05/30 21:50:18
>>428
プログラムの追加と削除にないものは手動で消す必要があると思う。
C:\Python○○\Lib\site-packages\ 以下に追加パッケージがまとめて置いてある。
そこから選んで削除する。

パッケージによっては他の場所にもファイルを配置していることがある。
きれいサッパリ消せるかどうかはパッケージ構成に関するあなたの知識次第。

430:デフォルトの名無しさん
08/05/30 22:17:00
ありがとうございました.直接消すしかないんですね.

431:デフォルトの名無しさん
08/05/31 04:08:35
cd パッケージインストールしたときのディレクトリ
python setup remove

432:デフォルトの名無しさん
08/06/02 16:05:19
pythonを用いたバックアップを考えています。

バックアップ先とそれの保存先を引数として入力し、そのパスからコピーして貼り付けをすれば出きると思っていたのですが、現段階では、まだ出来ていません。


ファイルのバックアップを取りかたの概念が間違っているのでしょうか?

433:デフォルトの名無しさん
08/06/02 16:40:04
>>432
現段階は、ファイルのコピー方法について調べています。

434:デフォルトの名無しさん
08/06/02 16:53:58
xcopy使った方が早くね?

435:デフォルトの名無しさん
08/06/02 17:05:47
つ shutil

436:デフォルトの名無しさん
08/06/02 19:03:23
>そのパスからコピーして貼り付けをすれば

これは可笑しい


437:デフォルトの名無しさん
08/06/02 19:04:31
自己解決しました

438:デフォルトの名無しさん
08/06/02 19:05:22
そんなスキルで作られたバックアップソフト・・・・超怖い

439:デフォルトの名無しさん
08/06/02 19:12:08
表現に問題があり申し訳ありませんでした。
バックアップをしたいファイルがある場所からコピーして、保存先に貼り付けを行う作業が出きる関数を調べたいと思っていました。
意見ありがとうございます。バックアップに必要な関数が見つかりましたのでやってみます。

440:デフォルトの名無しさん
08/06/02 19:25:25
winは害悪だな

441:デフォルトの名無しさん
08/06/02 19:33:52
explorerが害悪っていう意味なら
gnomeもKDEも害悪だよな

442:デフォルトの名無しさん
08/06/02 21:05:55
世界のガイアク
1,2,3

443:デフォルトの名無しさん
08/06/02 21:36:02
ごめん。意味がわかんない。

444:デフォルトの名無しさん
08/06/02 21:53:47
>439 は発想の根っこにクリップボードがあるのがおもしろいな。普通はそうなのか?
「バックアップに必要な関数が見つかりましたの」で実装した結果がおもしろいとさらに高得点だ。

445:デフォルトの名無しさん
08/06/02 23:25:52
今時はあれですか
やりたり処理を実現する関数を「探す」事がプログラムなんでしょうね

446:デフォルトの名無しさん
08/06/02 23:31:26
探して調整することがプログラミング

447:デフォルトの名無しさん
08/06/02 23:33:18
泥のように働くのがプログラミング。
いちいち言わせるなよ。

448:デフォルトの名無しさん
08/06/02 23:33:32
むかしからそうだろ

449:デフォルトの名無しさん
08/06/02 23:37:37
自己解決しました。

450:デフォルトの名無しさん
08/06/02 23:41:19
>>443
世界のFizzBuzzだろ

451:デフォルトの名無しさん
08/06/03 19:48:19
すいません質問です。


キュー構造を実現するqueクラスとその確認コードを含むque.pyを作成せよ
queクラスは以下のメソッドを含む事。
def enque( data )
#値を受け取り、enque動作(待ち追加)を行う。
def deque()
#deque動作(待ち解消)を行い、値を返す。
def __str__()
#str()やprintで用いられる特殊メソッド。
#自分を表す文字列表現(ここでは内部値のカンマ区切りとする)を返す。

上記が課題なのですがだれか教えていただけないでしょうか。

452:デフォルトの名無しさん
08/06/03 20:23:34
富豪向け

class Queue:
 def __init__(q):
  q.queue = []
  q.next = 0
 def enque(q,v):
  q.queue.append(v) 
 def deque(q):
  v = q.queue[q.next]
  q.next += 1
  return v
 def __str__(q):
  return str(q.queue[q.next:])

453:デフォルトの名無しさん
08/06/03 20:40:28
ありがとうございます。
富豪向けとはどういう意味でしょうか?

454:デフォルトの名無しさん
08/06/03 21:13:26
>>432
> バックアップ先とそれの保存先

って同じじゃないか?
仕事でも「仕入れ先」と使うけど、何か納得できない。


455:デフォルトの名無しさん
08/06/03 21:32:00
>>453
URLリンク(pitecan.com)
URLリンク(0xcc.net)

456:デフォルトの名無しさん
08/06/03 21:36:17
>>455
なるほど、ありがとうございます。

457:デフォルトの名無しさん
08/06/03 22:54:04
class Queue(object):
    class Item(object):
        def __init__(self, value):
            self.value = value
            self.next = None
    def __init__(self, *args):
        self.first = self.end = None
        for i in args:
            self.enqueue(i)
    def enqueue(self, value):
        if self.first is None:
            self.first = self.end = Queue.Item(value)
        else:
            self.end.next = Queue.Item(value)
            self.end = self.end.next
    def dequeue(self):
        if self.first is None:
            raise IndexError('queue is empty')
        else:
            value = self.first.value
            self.first = self.first.next
            return value
    def __repr__(self):
        values = []
        item = self.first
        while item:
            values.append(repr(item.value))
            item = item.next
        return 'Queue(%s)' % ', '.join(values)

458:デフォルトの名無しさん
08/06/03 23:02:09
import collections
class Queue(object):
    def __init__(self, itr = ()):
        self.q = collections.deque(itr)
    def enqueue(self, v):
        self.q.append(v)
    def dequeue(self):
        return self.q.popleft()
    def __repr__(self):
        return self.q.__repr__().replace('deque','Queue')

459:デフォルトの名無しさん
08/06/03 23:06:08
URLリンク(codepad.org)
ここソース貼るのに便利だよ

460:デフォルトの名無しさん
08/06/03 23:08:36
codepadはログインしないと24時間で消えるから嫌い

こっちだと消えないように設定できるみたいURLリンク(ja.pastebin.ca)

461:デフォルトの名無しさん
08/06/03 23:10:06
from Queue import Queue
Queue.enque = Queue.put
Queue.deque = Queue.get
Queue.__str__ = lambda self: ','.join(str(x) for x in self.queue)

462:デフォルトの名無しさん
08/06/03 23:30:13
>>460
そうか、期限があるんだったな…。
やっぱりここに貼った方がログが残って便利かもね。

463:デフォルトの名無しさん
08/06/04 15:16:54
>>414
俺も知りたい。仕方ないからファイルに出力してるよ。

464:デフォルトの名無しさん
08/06/04 16:33:13
URLリンク(pastebin.windy.cx)
にたようなもんだけど

465:デフォルトの名無しさん
08/06/04 16:47:04
Python に比べて Ruby が「純粋な」オブジェクト指向言語
であるといわれる理由を教えてください。同僚にRuby厨が
いてうざいです。仕事は Java/C# なんで全然関係ないんですが。

466:デフォルトの名無しさん
08/06/04 16:56:10
Python初めて1日の僕が言うのもなんだけど
例えば長さを取得する場合
hoge.len()
ではなく
len(hoge)
であるとか。
よくわかんないけど

467:デフォルトの名無しさん
08/06/04 17:29:50
Pythonもすべてオブジェクトだから純粋なOOPLじゃない?

468:デフォルトの名無しさん
08/06/04 17:43:44
そのRuby厨に聞いてみれば?
どうせどっかからの受け売りだろうから
ググればそれっぽい記事がでてくんじゃね

469:デフォルトの名無しさん
08/06/04 18:55:15
Rubyは使ったことないや。
どっちがよりオブジェクト指向なのかはどうでもいいんじゃね?

470:デフォルトの名無しさん
08/06/04 18:56:33
いいや。すごく重要だ。

471:デフォルトの名無しさん
08/06/04 19:04:12
どう重要?

472:デフォルトの名無しさん
08/06/04 19:16:05
どっちがよりオブジェクト指向かを決める前に
オブジェクト指向の定義を明確かつ厳密に行う必要があるな

473:デフォルトの名無しさん
08/06/04 19:17:42
小学生のときにどれくらい飛ばせたかというくらいの重要さ。

474:デフォルトの名無しさん
08/06/04 19:23:57
チ○コがどれくらい大きいかくらいの重要さ。

475:デフォルトの名無しさん
08/06/04 19:55:55
>>474
チェコ共和国(The Czech Republic/CZE)
首都:プラハ
人口:1,022万人
言語:チェコ語
通貨:コルナ
面積/7万9千平方km(北海道とほぼ同じ)。


476:デフォルトの名無しさん
08/06/04 20:11:00
なんという親御さんも安心スレ

ちなみにこんなのもあるよ
>>> hoge = [1, 2, 3]
>>> len(hoge)
3
>>> hoge.__len__()
3

477:デフォルトの名無しさん
08/06/04 23:01:45
hoge = {}
for j in xrange(10):
  for i in xrange(10**j):
    hoge['hoge%d' % i] = 'fuga%d'
  print j, len(hoge)


478:デフォルトの名無しさん
08/06/05 00:00:45
>>465
書籍からの受け売りですが。。

ーーーーーーーここからーーーーーーーーー
速効 python プログラミングより
p188

# coding: Shift_JIS

class a:
    var1 = 1

   def show_class_var(self):
      print 'class variable var1 = %d' % self.__class__.var1

v = a()
v.show_class_var()
a.var1 = 2
v.show_class_var()
print a.var1
a.another_var = 100
print a.another_var

クラス変数はa.var1 = 2 のように勝手に変更できてしまうだけではなく、
クラス定義ではまったく現れていないような another_var という変数を
後で外から無理やり追加することすら出来てしまいます。
ーーーーーーーーーーーーここまでーーーーーーーーーーーーーーー

「カプセル化」っていうOOPの原則の重要性が
python では、なおざり・・・という意味での指摘ぢゃないかな、と。。


479:デフォルトの名無しさん
08/06/05 00:05:16
>>478
そりゃ単にその本の著者が無知なだけだろ。
分かりやすさのために、わざと書いてないだけかもしれんが。

480:478
08/06/05 00:11:51
>>479
これじゃないとしたら>>465の同僚の指摘は
ちっと分かんない☆

う〜む、ruby厨というより
アンチpythonな人なのかな?

481:デフォルトの名無しさん
08/06/05 00:14:24
またクソ本フラグが立ったな

482:デフォルトの名無しさん
08/06/05 00:17:54
Pythonはドキュメントがカプセル

漏れいいこと言ったな

483:デフォルトの名無しさん
08/06/05 00:22:29
いまいちわからん。説明してくり

484:デフォルトの名無しさん
08/06/05 00:36:00
ドキュメントにクラスのインタフェースが漏れなく記載されていれば
クラスのユーザはクラス定義を読まずにクラスを利用できる
結果としてユーザに公開されるべきでない情報は隠蔽される

でもドキュメントが貧弱だと、クラスの使い方を調べるために
ユーザがクラス定義を読む、なんて事態が生じうる
結果としてユーザに過度の情報を公開することになってしまう

つまり言語仕様だけからしかカプセル化の程度を判断するのは片手落ち

485:デフォルトの名無しさん
08/06/05 00:48:40
482はドキュメント的にカプセルでない説。

486:デフォルトの名無しさん
08/06/05 01:19:30
質問です
「Hello World!」の表示を2つ並べたウインドウを表示せよ。
複数並べるには、親となるフレームを用意し、そこに配置すれば良い。

という課題なのですがだれか教えてください

487:デフォルトの名無しさん
08/06/05 01:38:50
>>> from Tkinter import *
>>> root = Tk()
>>> frame = Frame(root)
>>> frame.pack()
>>> Label(frame, text="Hello, world!").pack(side=LEFT)
>>> Label(frame, text="Hello, world!").pack(side=RIGHT)
>>> root.mainloop()

上下に並べる場合は
>>> Label(frame, text="Hello, world!").pack()
>>> Label(frame, text="Hello, world!").pack()

これで点くれるのかしら

488:デフォルトの名無しさん
08/06/05 02:18:16
>>484
じゃあPythonでオブジェクト指向なプログラミングをするなら、ドキュメント作成は必須ってこと?

489:デフォルトの名無しさん
08/06/05 02:22:14
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((100, 100))
pygame.display.set_caption('Hello pygame')
fp = open(u'みかちゃん-P.ttf', 'rb')
font = pygame.font.Font(fp, 24)
text = font.render(u'Hello World!', True, (255, 0, 0))
text2 = font.render(u'Hello World!', True, (0, 255, 0))
fp.close()
while True:
screen.blit(text, (0, 0))
screen.blit(text2, (0, 60))
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
break


490:デフォルトの名無しさん
08/06/05 02:51:23
別にオブジェクト指向する必要が無ければしなくてもいいんだよ
ドキュメントはもちろん書いたほうが良い

491:デフォルトの名無しさん
08/06/05 03:20:03
>>489
ゲ板の誤爆だろ

492:デフォルトの名無しさん
08/06/05 03:28:31
>>479 の指摘がよく分からんのだが・・・・
てか,もうちょっと詳しく説明してくれ.

493:デフォルトの名無しさん
08/06/05 07:42:31
>>492
横レスだが、カプセル化は
× 外部から操作不能にすること
○ 個々のオブジェクトが、役割を果たすために必要なデータと操作をまとめること

ただし、デフォルトで外部からアクセス禁止にできる実装の言語は、初歩的ミスを
減らせる場合があるというメリットはある。

494:デフォルトの名無しさん
08/06/05 09:13:01
>>490
後で他人がリファクタリングする事を前提とした場合の
望ましいドキュメントの具体例をキボンヌ。

つか、「ドキュメント」って docstring 記述と
doctest での確認のセットの事だと
漏れは理解してるけど合ってる?

全然違うなら、追加解説も気盆奴

495:デフォルトの名無しさん
08/06/05 17:30:34
>>493
URLリンク(www.horijp.com)
URLリンク(www.okisoft.co.jp)

スレ違いかもしれないけど、いいかんじだとおもたDuke

URLリンク(blogs.sun.com)

496:デフォルトの名無しさん
08/06/05 18:05:55
いいかんじかもしれない
だがことわる!

497:デフォルトの名無しさん
08/06/05 18:15:00
>>479
この本持ってるけど、pythonはオブジェクト指向言語として不完全みたいなことは書いてないぞ。

498:デフォルトの名無しさん
08/06/05 19:07:00
じゃあ、分かっててわざと書いてないだけなんじゃね?

499:デフォルトの名無しさん
08/06/05 22:40:34
お疲れ様です

pythonでコマンドプロンプトを操作する方法を検討しています。

これを実行するためにgetoptを用いたいと思い、この関数を用いて、
コマンドプロンプトから対象のpythonファイルを開いたときに、
コマンドプロンプトのヘルプを表示するようにhelpを命令するプログラムを
作成してみました。

import getopt, sys

def helps():
getopt.getopt(sys.argv[1:], "help")

実際にコマンドプロンプトで動かしても無反応で、実際に実行しても
「GetoptError: option -n not recognized」というエラーが出てしまいます。

リファレンスで確認してみたのですが、私には何が悪いのかわかりませんでした。

本当にPythonでコマンドプロンプトの操作ができるのでしょうか?
また、操作ができるとして、このプログラムがどのように表記されてればよかったか
についてもお聞きしたいです。

何卒よろしくお願いします

500:デフォルトの名無しさん
08/06/05 22:52:21
オブジェクト指向においてカプセル化ってそんなに大事な要素だとは思えない。
スコープさえ区別してくれれば、充分だ。

501:デフォルトの名無しさん
08/06/05 23:18:40
>>499
>>> import getopt
>>> args = '-h -e -l -p'.split(' ')
>>> getopt.getopt(args, 'help')
([('-h', ''), ('-e', ''), ('-l', ''), ('-p', '')], [])

でもやりたいのはこっちだろう
>>> args = '-n --help kwsk --lang=ja'.split(' ')
>>> getopt.getopt(args, 'n', ['help=', 'lang='])
([('-n', ''), ('--help', 'kwsk'), ('--lang', 'ja')], [])

リファレンスもっかいよく読んでわからなかったらまたおいで

502:デフォルトの名無しさん
08/06/06 09:37:04
>>500
俺もそう思う
オブジェクト指向はポリモフィズムが肝だと思う
ああ、PythonがRubyに比べて云々って逝ってる香具師は
もしかしたらselfが鬱陶しいっていうだけの話鴨試練


503:デフォルトの名無しさん
08/06/06 11:29:42
pygame翻訳サイトさえあれば、、、俺だって、、俺だって、、、

504:デフォルトの名無しさん
08/06/06 12:40:04
URLリンク(www.nishihiroshima.com)
>なにせ、いくら頭をひねっても、「型の無い言語であるPythonが、
>多重継承をサポートしなければならない理由」など、
>全くといっていいほど無いからです。

なんでこのひとは「型が無い」と思ったんだろう.

505:デフォルトの名無しさん
08/06/06 13:00:37
俺、昔、「Haskellには型が無い」って主張する奴と議論したことあるよw

Python の C3 MRO はそれだけ独立してでも知っておいて悪くないと思うおいら

506:デフォルトの名無しさん
08/06/06 13:31:11
>>504
静的型でnominal subtypingな言語だけを念頭に置いて「型」と
言ってるんだろうけど
言葉の使い方がいい加減で不正確なんだな

ま、nominal subtypingならポリモーフィズム実現するには継承するしかないが
Pythonのようなduck typingやstructural subtypingならそうではないから、
継承の意味薄いってのはその通り

507:デフォルトの名無しさん
08/06/06 13:40:26
self は確かにうっとうしい
あれがつきまとうだけで
オブジェクト指向っぽくない

508:デフォルトの名無しさん
08/06/06 21:17:31
>>507

509:デフォルトの名無しさん
08/06/06 22:25:39
むしろselfはオブジェクト指向っぽいと思う

510:デフォルトの名無しさん
08/06/07 00:12:52
PHPの$thisとかもうざいとか言い始めそうだな

511:デフォルトの名無しさん
08/06/07 00:23:29
>>509
いやselfはオブジェクト指向そのものなんだが
それをいちいち書くからおかしいっつー話だよ

>>510
いくら糞PHPでも引数に毎回書く必要はないだろ?
Rubyでもselfが必要なときは書くんだし

だけどPythonはくどいほど書くからw

512:デフォルトの名無しさん
08/06/07 00:39:24
オブジェクト指向っぽい考え方自体が
オブジェクト指向っぽくないんだよ、俺にしてみれば。

513:デフォルトの名無しさん
08/06/07 00:48:47
オブジェクト指向かそうでないかの議論に熱くなる奴らは
総じてオブジェクト指向だな

514:デフォルトの名無しさん
08/06/07 01:07:28
さあwみなさまご一緒に
レッツオブジェクト指向!

515:デフォルトの名無しさん
08/06/07 02:29:40
おまえらオブジェクト指向を嗜好し過ぎでオブジェクト思考になってると

516:デフォルトの名無しさん
08/06/07 09:20:45
誰が(ry

517:デフォルトの名無しさん
08/06/07 10:47:16
殺した(ry

518:デフォルトの名無しさん
08/06/07 11:07:46
クックロビ(ry

519:デフォルトの名無しさん
08/06/07 14:33:46
あ、そーれ

520:デフォルトの名無しさん
08/06/07 14:48:58
〜三波春夫さん江〜

521:デフォルトの名無しさん
08/06/07 16:15:14
も り あ が っ て る よ う だ な w

522:デフォルトの名無しさん
08/06/07 16:58:49
盛り上がってるところ悪いが
対話モードでの浮動小数で質問。

Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 4.8
>>> print a
4.8
>>> a
4.7999999999999998

aが「4.7999999999999998」になってしまう理由って何?


523:デフォルトの名無しさん
08/06/07 17:04:35
B. 浮動小数点演算、その問題と制限
URLリンク(www.python.jp)

524:デフォルトの名無しさん
08/06/07 17:26:30
>>523
printはコンピュータ内部の値じゃなくて
見た目を整えたものを表示してくれるのね。
サンクス。

盛り上がってるところすまなかった、続けてくれ。
URLリンク(jp.youtube.com)


525:デフォルトの名無しさん
08/06/07 19:29:57
>>524
printというより、repr()とstr()の違いってとこだな
URLリンク(www.python.jp)

526:デフォルトの名無しさん
08/06/07 20:07:06
>>> (4.8).__str__(), (4.8).__repr__()
('4.8', '4.7999999999999998')

527:デフォルトの名無しさん
08/06/08 16:34:28
クッキーについて質問です
webページの自動ログインスクリプトを作ろうと思い、urllib.urlopen()を使って
あるページのフォームの情報をPOSTしてみたのですが、そのページのhtmlが

<script>
function Func(){ document.cookie = aaa }
</script>

<form method="post" action="URLリンク(bbb)" onSubmit="javascript:Func();">

のようにクッキーを設定しており、思ったような結果が返ってきません。
この動作をpythonで代替するにはどうすればよいのでしょうか?

528:デフォルトの名無しさん
08/06/08 21:44:45
>>527
cookielib, urllib2

529:デフォルトの名無しさん
08/06/08 22:18:10
urllibでなんとかしたいんじゃないの?

530:デフォルトの名無しさん
08/06/08 22:36:10
いえ、出来るなら何でもいいです

cookielibとurllib2、色々ググってみて

cj = cookielib.CookieJar()
cjhdr = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cjhdr)

r = opener.open(url, params)

のようにするのは何とかわかりましたが、クッキーをどう設定したらいいのかよくわかりません
具体的にどうすればいいのか、ご教授願えないでしょうか

531:デフォルトの名無しさん
08/06/08 22:43:26
JavaScriptの部分を自分で解析しないと駄目じゃない?

532:デフォルトの名無しさん
08/06/08 22:44:11
ググって見つかった例でうまくいかないなら
具体的なサイトを示した方が早い気が
javascriptがはさんであるとうまくいかないのかな?

533:デフォルトの名無しさん
08/06/08 22:48:09
cookielibはレスポンスヘッダの解析のみでしょ

534:デフォルトの名無しさん
08/06/08 23:22:02
そもそもcookieについてよく知らないもので、この質問が適切かどうかもよくわからない状況です…
身元がばれるため具体的なサイトは示せませんが、問題と思われる部分を抜粋すると、

function idgisSetRedirectionCookie( theForm ) {

{
// modify the following values for your environment
var idgisRedirectorUrl = "URLリンク(aaaa)<)" onSubmit="javascript:{ return idgisSetRedirectionCookie( this ); }">
<input type='hidden' name='HiddenURI' value="URLリンク(dddd)">

こんな感じです(aaaa、bbbb、cccc、ddddは全部違うURL)

535:デフォルトの名無しさん
08/06/08 23:50:22
原理的にはそのJavaScriptを解析して動作をエミュレートすれば良いはずだけど
実際にはかなり難しいんじゃないかと思う

現実的かと思うのはwin32comを使ってWebブラウザをコントロールする方法
ExcelをPythonからいじくる例はたまに見かけるからそれらを参考にしてみては

536:デフォルトの名無しさん
08/06/09 00:05:54
>>534
そのスクリプトで
document.cookie = hogehoge とか設定してる値が常に固定なら、

HTTPのヘッダに
Cookie: hogehoge
という形で加えてPOSTすりゃいいだけ
urllib2のRequestクラスならheaderを好きなように設定できるはずだ

スクリプトの内容が可変なら、>>535が言ってるように
スクリプトを自分でパースするしかない

537:デフォルトの名無しさん
08/06/09 00:15:58
固定だったらそいつはわざわざ何がしたいんだって話になるがなw

538:デフォルトの名無しさん
08/06/09 00:18:04
可変にしても、スクリプトの内容自体はほぼ同じで、埋め込まれてる
文字列リテラルの内容が違うだけだろうから、
正規表現や何かで簡単にぶっこぬけると思うけどね


539:デフォルトの名無しさん
08/06/09 00:48:31
なんとなく、SPAM用のスクリプト作成の手助けをした気がしなくもないw

540:デフォルトの名無しさん
08/06/09 00:48:52
環境によって若干変わってくるのでなんとか正規表現とかで頑張りたいと思います
今現在の環境だけでは変わらないので、とりあえず今だけでも動かそうと思うのですが、
Requestクラスの使い方は

data = {'username':'qwerty', 'password':'asdfgh'} #等など
req = urllib2.Request('URLリンク(cccc)', urllib.urlencode(data), {'Cookie':hogehoge})
r = urllib2.urlopen(req)

こんな感じで合ってます?

541:デフォルトの名無しさん
08/06/09 04:46:25
一応通報した


542:デフォルトの名無しさん
08/06/09 06:30:18
except Exception, inst:

って書き方がなんかきもちわり.
投げられた Exception クラスのインスタンス inst を受け取るわけだけど,

except (Exception1, Exception2, Exception3):

みたいに複数のクラスを受け取る時にはどうやってインスタンス受け取るんだよ.


543:デフォルトの名無しさん
08/06/09 06:35:13
except (Exception1, Exception2, Exception3), inst:

544:デフォルトの名無しさん
08/06/09 06:35:33
>>542
except (Exception1, Exception2, Exception3), inst:

Python3.0では書式変わるから、それまで我慢しる

545:デフォルトの名無しさん
08/06/09 11:35:42
Python 3000 とかいうやつ?

546:デフォルトの名無しさん
08/06/09 20:54:37
>>500 ありがとうございます。
お礼が遅れてしまい申し訳ありません。
恐縮ですがもう少しお付き合いお願いします。
先日教えていただいた、
>>> args = '-n --help kwsk --lang=ja'.split(' ')
>>> getopt.getopt(args, 'n', ['help=', 'lang='])
をpythonで実行してみたところ、エラーが出ず、

([('-n', ''), ('--help', 'kwsk'), ('--lang', 'ja')], [])
と正常に表示されました。

正常に動いていると判断し、このプログラムを以下のように記述したpyファイルを
用意し、実際にコマンドプロンプトで起動したときにコマンドプロンプトのヘルプを
表示できるか確認したのですが、無反応でプログラムが終了してしまいます。

ファイル名:ex.py
# coding: utf-8
import getopt, sys
args = '-n --help kwsk --lang=ja'.split(' ')
getopt.getopt(args,'n',['help=','lang='])

考えられる引数を入力してみたのですが反応がなく、このプログラムを進めていただく前に、教えてもらった方法でもやってみたのですが
ヘルプの表示ができませんでした。
リファレンスのテストコードでgetoptの動きを確認してみたかったのですが、
こちらも起動しなかったため確認できませんでした。

コマンドプロンプトでこのファイルを起動し、コマンドプロンプトのファイルを起動するには、
プログラムのソースに何か加える必要があったのでしょうか?
それとも、コマンドプロンプトを使用するときに、何か特別な記述が必要だったのでしょうか?
アドバイスをよろしくお願いします。

547:デフォルトの名無しさん
08/06/09 21:30:31
「コマンドプロンプトのヘルプ」って、
C:\>cmd /?
のことだよな?普通

それに>>500とどう関係があるんだよ。

548:デフォルトの名無しさん
08/06/09 22:01:46
getopt.getoptの戻り値を使った処理を書かないと何も起こらないのは当然のような
URLリンク(www.python.jp)

549:デフォルトの名無しさん
08/06/09 23:00:33
対話型プロンプトだと戻り値と出力の区別が付かないからね
勘違いする初学者が出てきてもおかしくない
どこかのカンファレンスか何かで問題提起されてたらしいが

>>546
レス遅そうなのであなたが本当にやりたいことを確かめずに書くけど

myhelp.py:

import os, sys
os.system('help %s' % (' '.join(sys.argv[1:])))

実行例:

C:\> myhelp.py cd
現在のディレクトリを変更したり、ディレクトリ名を変更したりします。
[以下略]

550:デフォルトの名無しさん
08/06/10 01:45:45
解決しました
ほんとうにありがとうございました


551:デフォルトの名無しさん
08/06/10 01:53:33
どうみても(ry

552:デフォルトの名無しさん
08/06/10 02:19:09
mailto:cookiejar

553:デフォルトの名無しさん
08/06/10 04:14:00
あぁ俺か
時間帯でばれるもんなんだな
これから気をつける

554:デフォルトの名無しさん
08/06/11 19:05:34
はじめまして、Pythonを勉強してみようと考えているものです。
おすすめサイト、書籍などお教えください。

・やりたいこと
 TDDでWebアプリ開発

・プログラミング暦
 Delphi 3年(趣味のフリーソフト作成)
 Java 1年(資格取得のみ、実務経験なし)
 PHP 4年(Webアプリ構築)

よろしくお願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5285日前に更新/337 KB
担当:undef