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

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

くだすれPython(超初心者用) その26 [転載禁止]©2ch.net

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

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

前スレ
くだすれPython(超初心者用) その25
http://peace.2ch.net/test/read.cgi/tech/1415173201/l50
関連スレ
Pythonのお勉強 Part50
http://peace.2ch.net/test/read.cgi/tech/1413474092/

◆関連リンク Python の Home Page
ttp://www.python.org/

◆長いコードはこういうところにはってください
ttp://ideone.com/
ttp://codepad.org/
ttp://pastebin.com/
ttp://dpaste.com/

◆まとめwiki
ttp://python.rdy.jp/

952 :デフォルトの名無しさん:2015/08/30(日) 16:09:00.82 ID:tJkk5ci/
つーか明らかにWindows10が臭いだろ

953 :デフォルトの名無しさん:2015/08/30(日) 18:24:43.63 ID:xA3qmXia
監視系の処理をしたくて下のように書いたんですが、
空のブロックは許されないらしいのでexceptブロックに適当な一文を入れて解決しました
でも何か不格好な感じもするので真っ当なやり方がありましたら教えて下さい

def monitor():
 a = get()
 try:
  if a != b:
   sth()
 except NameError:
  dummy = 0
 b = a

954 :デフォルトの名無しさん:2015/08/30(日) 18:58:14.67 ID:xA3qmXia
b = 0
def monitor():
 global b
こう書かないとbが消えちゃいますね

955 :デフォルトの名無しさん:2015/08/30(日) 18:59:16.66 ID:gWgp6/6g
>>952
Win10 Pro x64、Python2.7.9 x86、py2exe 0.6.9で>>947のスクリプト試したけどちゃんと動いたよ

956 :デフォルトの名無しさん:2015/08/30(日) 19:02:00.23 ID:T6IhtZv4
>>953
シンタックス上何か文を置かないわけにはいかないけど
何もする必要がないときは普通pass文を使うよ
http://docs.python.jp/3/reference/simple_stmts.html#the-pass-statement

でもプログラムの設計としてあなたコードが妥当かどうかは
具体的にどういう処理をしているのかがわからないのでなんとも

957 :デフォルトの名無しさん:2015/08/30(日) 19:10:33.80 ID:xA3qmXia
>>956
ありがとうございます!本当に何もしないためだけの文があったとは
目的はクリップボードの監視で一つ前のデータを保存したかっただけです

958 :デフォルトの名無しさん:2015/08/30(日) 19:23:28.04 ID:T6IhtZv4
>>957
クリップボードが変更されたときだけ保存するってことだね
NameErrorはどこで発生する例外で何で無視してもいいの?

959 :デフォルトの名無しさん:2015/08/30(日) 19:29:31.90 ID:xA3qmXia
>>958
初回の呼び出しでは保存用変数が空なために
if文で評価するときに未定義のエラーが出るのでその対策としてのつもりです
検索したら出てきた方法なので

960 :デフォルトの名無しさん:2015/08/30(日) 20:03:55.34 ID:T6IhtZv4
>>959
そういう用途なら例外をpassでスルーする形で妥当かな
空文字かNoneで初期化しとくのじゃダメなんかなともちょっと思ったけど
クリップボード周りの実装はしたことないので頓珍漢なこと言ってるかも

961 :デフォルトの名無しさん:2015/08/30(日) 20:17:13.79 ID:xA3qmXia
>>960
あ、うっかりしてました
>>954みたいにグローバル変数を使うなら例外処理もいらなくなりますね
ともかく目的が果たせて満足です。親身にご指導いただきありがとうございました!

962 :デフォルトの名無しさん:2015/08/30(日) 23:31:40.78 ID:lCIF9vL7
>>955
GNU系は、Win7 Pro x64 を使うのが定番だが、

ほほう、Win10 Pro x64 でも動きますたか?

963 :デフォルトの名無しさん:2015/08/31(月) 20:35:49.34 ID:bggRqSur
foo(arg1, arg2, arg3)
という関数を呼び出すときにarg2だけ省略することってできますか?

964 :デフォルトの名無しさん:2015/08/31(月) 20:43:07.51 ID:1sJZNQ4o
できません。

前優先なので、
引数の順序を入れ替えて下さい

foo(arg1, arg3, arg2=None)

とかにして下さい

965 :デフォルトの名無しさん:2015/08/31(月) 20:52:04.61 ID:bggRqSur
>>964
分かりました。ありがとうございました

966 :デフォルトの名無しさん:2015/08/31(月) 22:53:28.94 ID:5tXTMn4R
foo(arg1, arg3=arg3)
#どうでもいいけど関数宣言の方はparameterじゃ

967 :デフォルトの名無しさん:2015/09/01(火) 02:21:11.52 ID:sXfua+XA
def foo(arg1, **kwargs):
arg2 = kwargs.get('arg2', defaultvalue)
arg3 = kwargs['arg3']

968 :デフォルトの名無しさん:2015/09/03(木) 11:21:42.13 ID:BG3f8u9o
最近の大学生ってひでえもんだな
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10149744480
http://www.python.jp/pipermail/python-ml-jp/2015-September/005973.html
http://www.python.jp/pipermail/python-ml-jp/2015-September/005971.html

969 :デフォルトの名無しさん:2015/09/03(木) 13:28:52.07 ID:c+e/eL7q
数値で1.00って表示する方法を教えてください

970 :デフォルトの名無しさん:2015/09/03(木) 14:35:21.80 ID:twsT9voz
検索する

971 :デフォルトの名無しさん:2015/09/03(木) 15:36:46.15 ID:KQppFRcC
>>969
"{0:.2f}".format(1)

972 :デフォルトの名無しさん:2015/09/03(木) 19:22:37.06 ID:MJyzegUy
print('1.00')

973 :デフォルトの名無しさん:2015/09/03(木) 20:40:51.42 ID:26WurM6V
python3.4の文字の扱いについてご教示願います

title = browser.title
t = title.encode('utf-8')
d = t1.decode('utf-8')
print(d)

変数titleにはWebサイトから取得した文字コードS-JISのページタイトル(GMO証券)が入っています。
titleの内容を文字コードUTF-8に設定したターミナル上に出力する際に文字化けしないように
S-JISからUTF-8に文字コード変換したいのですが、上記内容のコードでは上手くいきません。


原因がわかる方いましたら、お手数ですがご教示願います。


【補足】
・ターミナルの文字コード設定をS-JISに変更すれば、文字化けしないで表示することが出来ます。
・ターミナルはminttyを使用しています

以上

974 :デフォルトの名無しさん:2015/09/03(木) 20:48:12.64 ID:26WurM6V
申し訳ございません、変数名に誤りがありました。
正しくは以下の通りです。


d = t1.decode('utf-8')


d = t.decode('utf-8')

以上

975 :デフォルトの名無しさん:2015/09/03(木) 21:11:18.15 ID:Hq1TyWtW
titleがshift_jisでエンコードされたbytesと仮定して答えます
>>> title = 'GMO証券'.encode('shift_jis')
>>> title
b'\x82f\x82l\x82n\x8f\xd8\x8c\x94'
>>> title.decode('shift_jis')
'GMO証券'

976 :デフォルトの名無しさん:2015/09/03(木) 21:19:20.28 ID:twsT9voz
>>973
> S-JISからUTF-8に文字コード変換したい
>>973では、Webサイトからページタイトルを取得した時、
Webサイトが送ってくるページタイトルはsjisでしょ?
なので、Webサイトから取得する文字列はsjisなんだから、
titleをbytesとして受け取らないといけない。

そして、>>975のように、
title.decode('sjis')
とすれば文字化けせずに、utf-8を表示してくれる。

977 :デフォルトの名無しさん:2015/09/03(木) 21:22:02.94 ID:26WurM6V
>>975
ご回答有り難うございます。

>titleがshift_jisでエンコードされたbytesと仮定して答えます

申し訳御座いません。データ型の情報が不足しておりました。
type(title)の出力結果は、<class 'str'>です。

978 :デフォルトの名無しさん:2015/09/03(木) 21:31:53.74 ID:ACT9XNdq
馬鹿には無理

979 :デフォルトの名無しさん:2015/09/03(木) 21:33:09.40 ID:twsT9voz
>>977
うん、だから、
> type(title)の出力結果は、<class 'str'>
の時点で誤りだよね。

>>976をもう一度読んで。特に、
> Webサイトが送ってくるページタイトルはsjisでしょ?
を百回音読して。

980 :デフォルトの名無しさん:2015/09/03(木) 21:44:17.93 ID:26WurM6V
>>979
回答有り難うございます。

> Webサイトが送ってくるページタイトルはsjisでしょ?
SJISの内容のページタイトルが送られてくるので素直にSJISでエンコード→デコードしてあげれば
文字化けしていない正しい内容が得られるからUTF-8に変換する必要なんて無いって事ですかね?

以下の様にコードを修正して再実行してたところやはり文字化けしてしまいます。
んー、バカなので難しいですな。。

title = browser.title.encode('shift_jis')
t = title.decode('shift_jis')
print(t)

981 :デフォルトの名無しさん:2015/09/03(木) 22:02:58.82 ID:twsT9voz
>>980
>> んー、バカなので難しいですな。。

に、むかついたから、もう教えてやんない
馬鹿な>>977には無理だから諦めろ

982 :デフォルトの名無しさん:2015/09/03(木) 22:19:08.88 ID:Hq1TyWtW
>>980
もしかしてWindows版インストーラーで導入したPythonを使ってますか?
win版だとminttyの環境はcp932(shift_jis)でないと文字化けします

983 :デフォルトの名無しさん:2015/09/03(木) 22:59:18.59 ID:pYSbQaf9
この一連の流れでわかるあなたの有能度
・有能 ID:Hq1TyWtW(>>982)
質問者固有の環境にまで考えが及ぶエクセレントな人 解決策を提示

・普通 オレ
browser.titleの時点でbeatifulsoup・seleniumみたいなのでHTMLをパースしてるんだろうと察し、
browser.titleがstr型だということが自明なので文字コードの問題じゃないとすぐわかる
だからそれpython以外の問題じゃないの?とまではわかった
ただしwindowsが手元に無いし解決策までは提示できないので有能まではいかず

・無能 ID:ACT9XNdq(>>978)
説明不要

・ゴミ ID:twsT9voz(>>981)
browser.titleがstrを返すということがわからなかっただけでpython周辺ライブラリの知識が皆無
なのに的外れな回答をし続けた挙げ句、ぶち切れて捨て台詞
死んだ方がいいレベル 死ね 早く

>>978みたいなこと言われたらそら初心者は「んー、バカなので難しいですな。。」とか書いちゃうのはしょうがないでしょ
pythonろくに知らないし初心者馬鹿にするし、ここの一部の回答者ってホント救えないわ

984 :デフォルトの名無しさん:2015/09/03(木) 23:17:37.02 ID:esByfF4n
>>980
まず根本的に、特定文字コードの文書はbytesであり、デコードするとstr(unicode≠UTF)になります
browser.titleがstrの時点でそれはデコード済みです、誤った文字コード処理ならエラーになっている事でしょう
デコード済みであるstrをエンコードしてbytesにし、同一コードでデコードを行っても何の意味もありません

文字化けの原因はスクリプトではなく、ご自身で書かれている通りターミナルコードとの不一致だと思います
Python3の標準出力は文字エンコーディングを持っていてstrをエンコードしてから出力します、これは
ttp://docs.python.jp/3.4/library/sys.html#sys.stdout
にて解説されていますので、補足や>>982の通りターミナルコードを合わせるか、PYTHONIOENCODINGでUTF-8にするとか
他、実行中に sys.stdout = io.TextIOWrapper(sys.stdout.detach(),'utf-8') などとして変更する方法もあります

985 :デフォルトの名無しさん:2015/09/04(金) 01:14:57.15 ID:/zhxqmNp
>>982
仰るとおりWindows版インストーラーで導入したPythonを使っています。
cp932で無いと文字化けするのはminttyの仕様だったのですね。納得しました。

>>983
Selenium+BeautifulSoupでスクレイピングを試しているところでした。

>>984
>特定文字コードの文書はbytesであり、デコードするとstr(unicode≠UTF)になります
デコード済みの内容をエンコードしてから再びデコードするという意味無い事してたのか・・・。
分かりやすい解説、その他サンプルの提示ありがとうございます!後ほど試してみたいと思います。

文字コードの理解が浅くターミナルが原因だという事まで考えに及びませんでした。

ご回答下さった皆様ありがとうございましたm(__)m

986 :デフォルトの名無しさん:2015/09/04(金) 04:06:01.59 ID:x7fRT8f0
>browser.titleがstrの時点でそれはデコード済みです、誤った文字コード処理ならエラーになっている事でしょう

これだな
他の香具師は的外れ

>>985
違うよ
考え直せ

987 :デフォルトの名無しさん:2015/09/04(金) 07:08:04.13 ID:6Gds/3zT
くだすれPython(超初心者用) その27
http://peace.2ch.net/test/read.cgi/tech/1441317912/

988 :デフォルトの名無しさん:2015/09/04(金) 10:24:20.27 ID:efXmgHpK
乙.py

989 :デフォルトの名無しさん:2015/09/04(金) 11:30:39.46 ID:efXmgHpK
>>977
>type(title)の出力結果は、<class 'str'>です。

↓を読んだ上で↑の返事はさすがに無いわ
>>976
>なので、Webサイトから取得する文字列はsjisなんだから、
>titleをbytesとして受け取らないといけない。

990 :デフォルトの名無しさん:2015/09/04(金) 17:37:20.44 ID:HNXLj6zd
君ら初心者いじめるの好きだねw

991 :デフォルトの名無しさん:2015/09/04(金) 19:25:26.13 ID:Z77fhgK9
いや、人が回答を書いているのに人の書き込みをろくに読まずに
> んー、バカなので難しいですな。。
と書いて、自分の頭が悪いのを盾にして、
人の書き込みを読まないから、さすがに怒ったの

初心者いじめたかったら、そもそも何も教えてない

992 :デフォルトの名無しさん:2015/09/04(金) 20:27:20.03 ID:F3w9cE+J
初心者以前に人の話を聞かない奴はダメだよね

993 :デフォルトの名無しさん:2015/09/04(金) 20:44:09.48 ID:EI4y/sV7
>>973で違和感があったがwin版の可能性に気づけなかった
>>980のレスのおかげでWindows版を使ってることを推測できた

つまり一連のやりとりは十分な情報を引き出せた

994 :デフォルトの名無しさん:2015/09/04(金) 21:28:58.95 ID:B3/17KX+
何で質問者が人の書き込みを読んでないとか人の話を聞いてないってことになってんだよ可哀想に

995 :デフォルトの名無しさん:2015/09/04(金) 21:35:03.89 ID:Z77fhgK9
>>994
ちょっと改変するけど、
>>989

>>976
>なので、Webサイトから取得する文字列はsjisなんだから、
>titleをbytesとして受け取らないといけない。

↑を読んだ上で↓の返事はさすがに無いわ

>>977
>type(title)の出力結果は、<class 'str'>です。

996 :デフォルトの名無しさん:2015/09/04(金) 23:58:33.05 ID:x7fRT8f0
>Selenium+BeautifulSoupでスクレイピングを試しているところでした。

そいつが browser.title を str に変換するときに間違ったエンコードでデコードして文字化けしたんだろう
既に壊れたデータをエンコードしても手遅れ
決してターミナルのせいではない

997 :デフォルトの名無しさん:2015/09/05(土) 01:43:35.09 ID:jZ9K/01b
たいてい文字化けの原因は、端末を使うからだよ

TeraPad など、日本人の作ったエディタでは、
簡単に文字コードが変更できるので、
文字化けは起こらない

端末などは外人が作っているため、
日本語などはほったらかし

998 :デフォルトの名無しさん:2015/09/05(土) 02:12:09.52 ID:ZKXW4+L0
超初心者スレでこの対応は辛辣だよなあ
話を聞いていないのではなく、理解できていないだけだろう
sjisだからbytesとして受け取らないといけないって説明も
初心者向けじゃないと思うし

999 :デフォルトの名無しさん:2015/09/05(土) 02:27:54.77 ID:xb8mS1yp
次スレに書けよ

1000 :デフォルトの名無しさん:2015/09/05(土) 02:29:02.99 ID:jZwyv5P2
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

266 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)