[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/21 08:58 / Filesize : 249 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 11:20:45 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

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

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

関連スレ
Pythonのお勉強 Part35
pc12.2ch.net/test/read.cgi/tech/1253535109/

830 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 02:27:31 ]
直感性を切ってまで短くするのはPython的じゃないね。
遊びでやるのは別かもしれんが

831 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 11:53:08 ]
>>830
> 直感性を切ってまで短くするのはPython的じゃないね。
それは同意。
短いor早いのが好きならC/C++を使えと。


832 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 13:33:21 ]
perlerがこっちを見ている
仲間にしますか?[Y/N]

833 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:47:37 ]
こっち見んな

834 名前:デフォルトの名無しさん [2010/01/19(火) 01:22:05 ]
#!/usr/bin/env python
# coding: utf-8

import threading
import time

class hoge(threading.Thread):
def run(self):
for i in range(0, 10) :
print i
time.sleep(0.1)


for i in range(0, 10):
fuga = hoge()
fuga.start()


以前こんな感じにインスタンス生成しているのを見たことがあるんですが
同じ変数fugaを何度も使用してインスタンス生成しています
結果は予想を反して正常に動作をするんですが
こういう使い方をして問題とかは無いのでしょうか?


835 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 01:26:45 ]
( ´ ▽ ` )問題ないよ。本当だよ。

836 名前:デフォルトの名無しさん [2010/01/19(火) 01:31:31 ]
delete fuga はしないほうがいい?

837 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 01:33:02 ]
>>835
そうなんですか?
できればなぜ問題ないのか、
解説か説明しているサイトへ誘導してもらえないでしょうか?

調べ方が悪いのかググっても
見つからないのでおねがいします

838 名前:デフォルトの名無しさん [2010/01/19(火) 01:54:36 ]
>>837
ヒント: gbkr



839 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 02:16:24 ]
>>834です
あれからデストラクタを使って、インスタンスが廃棄されるタイミングを調べたらシックリすることができました。
同じ変数にインスタンス生成しても、重複したインスタンスはループを抜けると自動的に消滅して最後に生成した
インスタンスだけが残ることがわかりました。
(ただしループ内で実効した処理がループを抜けた後も残っている場合は、処理が終了するまで廃棄しない)

#!/usr/bin/env python
# coding: utf-8

import threading
import time

class hoge(threading.Thread):
def __del__(self):
print 'destructor'

def run(self):
for i in range(0, 10) :
print i
time.sleep(0.1)

for i in range(0, 10):
fuga = hoge()
fuga.start()

time.sleep(4)
print 'piyo'

>>838
すみません。ヒントの意味が分かりません

レスに答えてくれてどうもありがとうございました

840 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 02:26:56 ]
>>834です
>(ただしループ内で実効した処理がループを抜けた後も残っている場合は、処理が終了するまで廃棄しない)

これはスレッドを使用したときだけのようですね
失礼しました

841 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 03:50:23 ]
ふとした疑問なのですが
map型に対しkeys()とvalues()を実行した際、その並び順は同じと考えて大丈夫でしょうか
(もちろん両者を実行する間に変更はありません)

items()でとってzipするべきでしょうか?

842 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 04:21:14 ]
def func(**keys):
def func2(**keys):

って二つあって
funcが受け取った引数をそのままfunc2へと流したいんだがどう書いたらいい?

def func(**keys):
 func(keys)
みたいなこと




843 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 08:23:27 ]
関数を別の変数に流し込んで
x = ....
func(x)
func2(x)
じゃダメなのか?

844 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 09:27:31 ]
>>842
それで何か問題が?
名前無し引数にも対応するなら、
def func(*args, **kwargs):
  func2(*args, **kwargs)

845 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:44:50 ]
>>843,844
自分で試してだめだったので質問したつもりだったのですが、ご指摘の通りやり直したらきちんと動きました
前回自分で試したときなにか別の理由で動かなかったものを勘違いしていたようです
どうもすいませんでした



846 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:56:02 ]
class X():
 def func(self, **keys):
  print keys
 def func2(self, **keys):
  self.func(keys)

X().func2(x=10, y=20)

連投すいません
上の例だと上手くいかないのですが, どうやって渡したらいいのでしょうか?

847 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:58:02 ]
self.func(**keys)

848 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:59:09 ]
>>847
ありがとうございます



849 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:06:43 ]
最近みんなのPythonを購入して遊んでいるのですが、PyScripterで実行したプログラムのPython Trutle Graphics
のウィンドウをマウスで動かそうとするとフリーズしてしまいます。かるくググってみてもWindows環境では昔からある症状と
あり解決手段を見つけられませんでした。そこで質問なのですがフリーズ回避の方法はありますか?

850 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:12:34 ]
コマンド・プロンプトから実行する

851 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:45:29 ]
>>849
とりあえず外部実行でやってみろ
Alt + F9 な


852 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:34:44 ]
>>850
できれば軽量IDEのPyScripterを使いたかったものですから。

>>851
ありがとうございます。実行してみたところプログラムが終わるとウィンドウも閉じてしまうようで、期待した動作ではありませんでした。
設定項目も見つけられなかったので、素直にシェルを使おうと思います。

853 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:53:22 ]
PyScripter は RPyC を利用したリモートデバッグができる。
セットアップが少々面倒だけど、一度セットアップしたら普通の
デバッグと同じ感じに使えるはず。
ttp://plaza.rakuten.co.jp/kugutsushi/diary/200710290000/

854 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 13:16:46 ]
>>851
ウィンドウが閉じてしまうのが嫌なら、最後に
raw_input("")
でも付けたら?

855 名前:849です mailto:sage [2010/01/20(水) 15:47:57 ]
>>853
私宛てですか?正直よく分からなかったです。

>>854
標準の実行をするとTurtle Graphicsのウィンドウは消えないのですが、IDEと被って見にくいので横にずらしたい。
→マウスで動かそうとするとフリーズ。
外部実行だと図形を書きおわったらTurtle Graphicsのウィンドウが消える。
→orz
raw_input("")は外部実行では効果がなかったです。

たんに from tutle import * で簡単なサンプル動かしてるだけなので、そこまで深刻な問題ではないのですが、
みなさんありがとうございます。


856 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 17:41:34 ]
>>855
それフリーズしてるんじゃなくて
WM_PAINTが呼ばれていない
(あるいはメッセージループが回っていない)
だけだと思う
IDEのバグだろ

857 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 21:47:58 ]
>>856
詳しくはわかりませんが、Win環境のPythonとPyScripterの相性のようです。

Python標準シェルとIPythonの挙動が違う意味がわからないので質問します。

Python IPython

>>>str = u"あ" >>>str = u"あ"

>>>type(str) >>>type(str)
<type 'unicode'> <type 'unicode'>

>>>str >>>str
u'\u3042 u'\x82\xa0'

>>>print str >>>print str
あ UnicodeEncodeError:'cp932'〜〜

1.u"あ"を代入した時点で、strはUnicode文字列型になっている
2.IPythonはstr参照時にUnicode文字列型を文字列型にエンコードしなおしている

と言う理解であってますか?そしてこれはバグですか?
ttp://dsas.blog.klab.org/archives/51390187.htmlの方法で解決するみたいなんですが
正当なやりかたなのか気になります。

858 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 21:55:37 ]
すみません、体裁が…。

Python
>>>str = u"あ"
>>>type(str)
<type 'unicode'>
>>>str
u'\u3042
>>>print str


IPython
>>>str = u"あ"
>>>type(str)
<type 'unicode'>
>>>str
u'\x82\xa0'
>>>print str
UnicodeEncodeError:'cp932'〜〜





859 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:09:12 ]
とりあえずstrという名前の変数に代入するセンスを疑う

860 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:12:30 ]
>>857
IPythonのバグだと思う
リンク先の解決方法は
間違っては居ないが場当たり的だと思う

861 名前:methane mailto:sage [2010/01/20(水) 23:37:58 ]
>>857 のBlogの著者です。
Python本体のインタプリタはCで書かれていて、Python製のPythonインタプリタは
compile() 関数を通しているのが根本的な違いです。
compile() 関数にエンコーディングを渡す良い方法が無いので、ハックで対策するしかありません。
Pythonに付属のIDLEも同じ問題を抱えています。

Blogに書いているよりも良い挙動になるハックが、
https://bugs.launchpad.net/ipython/+bug/339642/comments/8
にあります。

また、この問題は Python3 になるとcompile()の仕様を変えなくても自動消滅します。
実際、Python3 の IDLE も大丈夫です。早くPython3の時代になると良いですね。

862 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 00:16:23 ]
>>861
すばらしい!!
次版のiPythonリリースには取り込まれていて欲しいですね


863 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 02:27:33 ]
>>859
確かに予約語やそれに近しい略語は使うべきではありませんでした、すみません。

>>860,>>861
ありがとうございます。このコードはIPython/iplib.pyのcompile_command()以下

source=source.encode(self.stdin_encoding)
if source[:1] in [' ', '\t']:
  source = 'if 1:\n%s' % source
if source[:1] in [u' ', u'\t']:
  source = u'if 1:\n%s' % source
source = '# coding: %s\n%s' % (self.stdin_encoding, source)

であってますか?リンク先の
+ source = '# coding: %s\n%s' % (self.stdin_encoding, source)
の+は追加の意味で、コードではないですよね?

864 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 02:40:33 ]
diff の出力だから patch に喰わせるのが吉

865 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 02:42:34 ]
compileに渡すユニコード文字列に
文字コード指定を追加してるんで
それであってる

866 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 02:46:15 ]
っつーか 「-」 の部分を追加するな www

867 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 07:31:15 ]
そこはわかっていると信じたい

868 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 12:34:09 ]
dS/dt=-βSI
dI/dt=βSI-γI
dR/dt=γI

という連立微分方程式があってβとγ求めたいんですがPythonで書くとどうなりますか?




869 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 12:59:59 ]
えっ βとγを変えて数値シミュレーションするとかじゃなくてか。

870 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 13:18:53 ]
記号微分?

871 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 14:58:55 ]
ラプラス変換してから逆行列か

872 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 17:17:05 ]
空を飛べ〜

873 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 17:25:59 ]
それはロプロス

874 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 17:44:59 ]
863です。
IPythonでもきちんとUnicodeが扱えるようになりました。
みなさま、ありがとうございました。

875 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 19:12:03 ]
失礼します。若干スレ違いかもしれませんが、質問よろしいでしょうか?

Windows で Python2.6.4&Pygame1.9.1 を使用してプログラムを組もうとしています。
その際の参考サイトとして、
ttp://www.halb-katze.jp/pygt/
ttp://pygame.skr.jp/
などを利用させていただいているのですが、どちらのサイトのスクリプトをそのまま利用しても、うまくウィンドウを開くことができません。
正確にはウィンドウは開くのですが、前者のスクリプトだと一瞬、後者でも半秒も経たないうちにプログラムが終了してしまいます。
解説を読む限りだと、能動的に終了処理をしない限りはウィンドウは開いたままのような気がするのですが、
原因おわかりであればご教授いただけませんでしょうか。

876 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 22:20:30 ]
質問が不親切だな

きっとダブルクリックでもしてるんだろ
コマンドで実行してみろ

877 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 22:39:17 ]
加齢臭がする

878 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 22:43:46 ]
晩飯はカレーだった



879 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 02:14:03 ]
今、カレーヌードル食ってる

880 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 03:22:26 ]
ここは華麗にスルーだろ

881 名前:875 mailto:sage [2010/01/22(金) 05:04:26 ]
>>876
言葉足らずでした、失礼。ウィンドウとはコマンドプロンプトの意ではなく、
pygame.display.set_mode で作成される、画像などを描画可能なウィンドウのことです。

具体的には以下のようなプログラムを走らせるのですが、
ttp://www.halb-katze.jp/pygt/pygt0100.html
while文で無限ループを作り、たとえば終了ボタンが押されるまでウィンドウは閉じないようになっているはずなのですが、
実際には、上述の通り一瞬だけ開いて終了してしまいます。

882 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 07:06:28 ]
うちは大丈夫

883 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 09:01:22 ]
python.exe二パスが通ってないとか
.pyに関連付けされてないとかではないの?
コマンドプロンプトから実行してみたら?

884 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:13:48 ]
>>883
長くてURLが貼れないので、お手数ですがこちらのWikiを見て貰えますか?
ttp://pygame.skr.jp/

たとえばこれの「基礎>図形を描画する」をそのまま実行した場合、
pygame.display.set_caption(u"蝗ウ蠖「縺ョ謠冗判")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
とのエラーは出てきますが、当該部分を"DRAW"などに置き換えれば正常に実行されます。
(UTF-8で保存はしているんですが、これは何がいけないのかな?)

対して「基礎>ウィンドウを表示する」を(日本語部分だけ訂正し)実行した場合、
特にエラー表示もないまま、起動するなり終了してしまいます。ダブルクリックの場合も一緒です。
試しに終了条件をなくしてみるなどしましたが、ループにすら入っていないのか、何の変化もありません。

いろいろと弄くっているのですが、終了してしまう場合の規則性が見えない状況です。
図形を描画するサンプルを削っていっても、どうも突然にループに入らなくなる模様です。
Pygameをインストールしなおしたところ、ループに入らなくなる条件が変わったようですが、詳細はさっぱり……。
他サイトのサンプルスクリプトなども同様です。なんなんでしょうか。

885 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:19:58 ]
コマンドプロンプトから実行してみたら?

886 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:39:58 ]
言葉足らず、重ね重ね申し訳ありません。
「ダブルクリックの場合も一緒です。」とあるように、コマンドプロンプトから実行しています。

887 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:41:16 ]
酸っぱいような、苦いような臭い

888 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:47:11 ]
>>884
>たとえばこれの「基礎>図形を描画する」をそのまま実行した場合、
>pygame.display.set_caption(u"蝗ウ蠖「縺ョ謠冗判")
>UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
>とのエラーは出てきますが、当該部分を"DRAW"などに置き換えれば正常に実行されます。
>(UTF-8で保存はしているんですが、これは何がいけないのかな?)

なんだ pygame が unicode 通さないのか?
ソースを utf-8 で保存していて
# -*- coding: utf-8 -*-
も書いてるんなら
日本語文字列の前の u を取ってしまうか
u'日本語文字列'.encode('utf-8')
にすれば通る



889 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:58:27 ]
>>888
uを取った場合は正常に動作、
明示的にUTF-8に変換した場合は同じエラーとなりました。

890 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 12:42:53 ]
追伸:確かにUTF-8で保存しています

891 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 12:43:24 ]
>>888
OpenGLの方はcp932しか通さないなwwwwwwww

892 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 12:45:50 ]
>>889-890
sitecustomize.py で sys.setdefaultencoding() を変なのにしてるとか

893 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 12:47:52 ]
>>889-890
うちは大丈夫(日本語文字コードの問題はあるけどそこを直すだけで動く)

894 名前:デフォルトの名無しさん [2010/01/22(金) 12:50:19 ]
解決しました
ありがとうございました

895 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 13:34:26 ]
プログラマなら自力で勉強して解決しろよ。それが出来ない奴はいらん。

896 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 13:38:26 ]
プロのプログラマが超初心者用スレに質問に来るんですか?w

897 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 13:44:35 ]
よくあることです

898 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 13:58:24 ]
長いこと申し訳ありません……

>>892
デフォルトのまま何も弄くっていません。
特に弄くる必要はないとのことでしたが、何か設定した方がいいのでしょうか?



899 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 17:50:37 ]
>>875
WindowsVista + Python 2.5.2 + pygame 1.9.1
utf-8 で保存
u が付いてるとエラー(コンソール上で文字化け)
u'日本語'.encode('utf-8') ならサンプルすべて正常動作


900 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 18:39:19 ]
ttp://boxheadroom.com/2009/05/21/py_anime_gif2

901 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:38:47 ]
>>898
884の "draw_figure.py" だったら
"import sys"の後に以下の2行を追加して実行してみたらどうなる?

reload(sys)
sys.setdefaultencoding('shift_jis')

これでうまくいくなら sitecustomize.py でググれ

902 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:40:27 ]
あ、ごめん

reload(sys)
sys.setdefaultencoding('utf-8')

の間違い

903 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:48:32 ]
しかし、"UnicodeEncodeError" なんて
Python2.xの定番中の定番FAQで、自分で貼ってるwikiサイトを
サイト内検索しても解決方法が載ってるのに
ここまでダラダラ引っ張るとは・・・

もしかしてpygameの宣伝?!
・・・アンインストールしよっと

904 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:52:50 ]
(^ω^;)

905 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:30:50 ]
(-_-;)

906 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:49:54 ]
上に出てた人と似たような質問なんですが、python2.6.4で

# -*- coding: utf-8 -*-
a = raw_input(u"何か書く : ")
print a
input()

というファイルを実行すると、動くんだけども"何か書く"の部分が文字化けしてしまいます
sys.getdefaultencoding()だと'utf-8'になってるし、対話モードで入力すると正常に表示されます
自分にはこれ以上分からないのですが、原因となることは何か考えられますか

907 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:51:33 ]
はい

908 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 08:33:30 ]
>>906
まず、Pythonを動かしている環境を明示して下さい。
Windowsですか?Linuxですか?Linuxであれば "$ locale" というコマンドの実行結果は
どうなっていますか?

あと、 defaultencoding は ascii が標準です。 utf-8 にすることで unicode の扱いの
ミスによる UnicodeError を回避できますが、回避した部分はすべて utf-8 が
正しいという前提になってしまっているのでその前提が崩れると文字化けします。
文字化けの原因になるようなコードを書かないために、開発や勉強をする環境では
defaultencoding は ascii のままにしておくことをおすすめします。



909 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 08:41:39 ]
>>906
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
これでやってみそ。

910 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:11:34 ]
超初歩的な質問ですいません。
なんだか初めてのプログラミングで苦戦してます。
奥が深すぎて・・・ 関数やメソッドはたくさんありますが全てを熟知していないと
使えないってわけではないですよね?
参考書を読んでますが、どこから手をつけていいのか・・・
参考書:(新しい)みんなのPythonです。
アドバイスをお願い致します。

911 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:54:53 ]
初めてで奥まで行くのはむりだと開き直れ

やりたいこととか自分にとって必要なこととかあるだろ

そこからやりゃいんだよ

912 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 17:16:21 ]
>>910
プログラミングを始めた動機
その本を何章まで読み終わったか

それが分かればアドバイスできるお

913 名前:910 mailto:sage [2010/01/23(土) 17:21:07 ]
動機はpythonを覚えたかったから?
8章ですかね

914 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 17:25:47 ]
Pythonを覚えたいためにPythonプログラミングを始める
手段が目的となる… それもまた人の進歩の要因なのだ

915 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 17:49:20 ]
>動機はpythonを覚えたかったから?

予想通りでワロス

916 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 18:33:08 ]
ぶっちゃけプログラミング覚えるだけでも結構楽しいからそれでええんちゃう……?
試行錯誤するのが楽しい人はさ。

>>910
むしろ全部を知らなくて済むようにリファレンスとhelp関数がある。
使いたいものがあれば調べりゃいい。

917 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:43:15 ]
>>908-909
環境はwindowsです(defaultencodingはasciiに戻しました)
>>909さんの方法を試しても相変わらず文字化けします

そもそもprint u"何か書く"だと正常に表示されるのにinput(u"何か書く")だと化けます
もうお手上げです(´〜`;)

918 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:05:07 ]
>>917
うん、プログラミング初心者は日本語(というか非ASCII)を使うなって金言があるんだ
他のことを勉強するのに時間割いたほうがいいぞ

というか化けたのならその化けた文字列を貼ってくれ



919 名前:909 mailto:sage [2010/01/23(土) 21:22:03 ]
>>917
これは大変失礼した。
import sys
import codecs
sys.stdout = codecs.getwriter(ここに端末の文字コード(Windowsならshift-jis(cp932とした方がよいかも)))(sys.stdout)
raw_input(u"くわー")
print u"ぽいうぃ"

としなければならないんだった。
こちらではこれで動いたのでこれで動かなかったら知らん。

920 名前:908 mailto:sage [2010/01/23(土) 21:43:45 ]
print が特殊なんだよな−。sys.stdout.encoding を考慮してくれる。

sys.stdout を含め、ファイル(標準入出力を含む)に対する write() は、通常エンコードが
必要になる。raw_input も write を使っているから、出力するべきエンコーディングで
エンコードされたバイト列を渡さないといけない。

ファイルにリダイレクトされたときのこととかいろいろ考えまくった場合の
お手本コードはこんな感じ。

import locale

# sys.stdout.encoding があればそれを、無ければその環境で一般的と思われる
# エンコーディングを推測したものを使う
enc = getattr(sys.stdout, 'encoding', locale.getpreferedencoding())

# unicode 文字列に enc で encode できない文字が入っていたら '?' みたいな
# 置換文字に置換する。
a = raw_input(u"くわー".encode(enc, error='replace'))

>>919 みたいに、 sys.stdout を unicode が出力できるようにしてしまうのも
1つの手。ただし、こんどはバイト文字列を出力できなくなる(ascii文字だけなら
なんとかなるけど)から、プログラム全体に渡ってそのポリシーを貫く必要がある。

921 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 23:59:39 ]
どうせPython3でデフォルトがユニコード文字列になるんだから
初心者は何も考えずにsitecustomize.py作って
『非asciiはu''』って覚えた方が手っ取り早いと思う

『日本語を表示したいだけなのに
ロケールやらコーデックやらめんどくせ〜』
ってなっちゃわないか?


922 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:03:23 ]
>>918-920
回答ありがとうございます

# -*- coding: utf-8 -*-
import sys
import locale
enc = getattr(sys.stdout, 'encoding', locale.getpreferredencoding())
a = raw_input(u"くわー".encode(enc, 'replace'))
print a

で文字化けなく表示出来ました!encの中身はcp932になってました
1日悩んだ問題がやっと解決・・・ありがとうございました

923 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:34:35 ]
はじぱいはエンコードについてほとんど書いてないから糞だよね。

924 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:46:41 ]
事細かに書くと『うゎ、Pythonめんどくせっ』ってなっちゃうからな

必要最低限のことは書いてあって
外部とやり取りする際には、必ず、decode、encodeを使って
明示的に文字コードを指定あげて、内部ではユニコード文字列で扱う
といった趣旨のことは書いてある

・・・うん、充分めんどいね

925 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:15:33 ]
ASCII文字でしか書かれていないファイルhoge.txtがありまして、
改行コードはCR+LFです。

これを元にして
改行コードがCRでそれ以外の内容は同じファイルpiyo.txtと、
改行コードがLFでそれ以外の内容は同じファイルfuga.txt
を作りたいのですが、Pythonではどうすれば良いでしょうか?

文字コード変換は調べて見つかるのですが、
肝心の改行コード変換が見つかりませんでした。

どうかよろしくお願い申し上げます。

926 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:30:46 ]
バイナリモードで扱うのが移植性が高くて簡単かな
contents = open("hoge.txt", "rb").read()
open("piyo.txt", "wb").write(contents.replace("\r\n", "\r"))
open("fuga.txt", "wb").write(contents.replace("\r\n", "\n"))

927 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 02:00:51 ]
>>924
でも暗黙的な扱いになると、いざバグった場合に対処しづらかったり

928 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 02:42:22 ]
>>924
>外部とやり取りする際には、必ず、decode、encodeを使って
>明示的に文字コードを指定あげて、内部ではユニコード文字列で扱う
>といった趣旨のことは書いてある
>
>・・・うん、充分めんどいね

言いたいことは判るがその発言はどうかと思う

>>927

perl とか php って糞だよね




929 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 07:10:42 ]
>>927
確かに
でも、お手軽にやっつけたいからスクリプトを使うのに
コンソールに日本語表示するのがダルすぎる

shift-jisに含まれないユニコード文字を扱おうとすると
更に訳わからん

>>927
う〜ん、煽るつもりはなかったんだけど。。。

930 名前:908 mailto:sage [2010/01/24(日) 09:27:21 ]
>>929
>でも、お手軽にやっつけたいからスクリプトを使うのに
Python はスクリプトとしても使えるというだけで、スクリプト用言語ではなく
本格的なアプリケーションやシステムにも適したプログラミング言語だから

>コンソールに日本語表示するのがダルすぎる
いや、ファイル入出力はたしかに下手に隠蔽するべきではないけど、
画面出力では print を使って簡単に unicode を表示できるようになってる。
(で、ファイルにリダイレクトするときちんと UnicodeEncodeError になる)

だから、コンソール上で手軽に使う raw_input も、printと同じで
sys.stdout.encoding を見て自動でエンコーディングするべきだと思うよ。
実際、Python3 でも raw_input はバイト列じゃなくて文字列を受け取るしね。
バグ報告してみるよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef