Pythonのお勉強 Part56

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん2018/02/24(土) 09:07:21.39ID:5jzCjhzv
Pythonオフィシャルサイト
http://www.python.org/

■前スレ
Pythonのお勉強 Part55
https://mevius.5ch.net/test/read.cgi/tech/1513919747/

878デフォルトの名無しさん2018/06/16(土) 11:20:55.92ID:eJREzlFG
すいませんめっちゃ初心者なんですけど
>>> "5" + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> "5" - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
こんな感じで
"5" + 1と"5" - 1という非常に類似した二つの「異なる型どうしの操作で起こるエラー」が
全く違うエラー内容になるのはなぜですかね。
Python3です。

879デフォルトの名無しさん2018/06/16(土) 11:28:35.03ID:tSBHlQGm
知らんけど文字列同士の+は定義されてるけど-はされてないからじゃないけ

880デフォルトの名無しさん2018/06/16(土) 11:31:58.26ID:naGQb1Ef
>>877
野良

881デフォルトの名無しさん2018/06/16(土) 11:35:39.24ID:Tvz9jTpd
ゴミをつつくな

882デフォルトの名無しさん2018/06/16(土) 16:05:58.30ID:TJIUHWP+
研究室のMatlabが2017bから更新されないからPythonに移行したくてMatlabと似た使用感のSpyder使い始めたけど
古いMatlabでもグラフ作成はPythonより圧倒的にやりやすいから移行できない
下記のQiitaの記事読んだけどいまいち自由自在に操作できない
https://qiita.com/skotaro/items/08dc0b8c5704c94eafb9

883デフォルトの名無しさん2018/06/16(土) 16:10:09.64ID:mGUvusUx
>>882
だからどうしてほしいの?

884デフォルトの名無しさん2018/06/16(土) 16:29:50.18ID:naGQb1Ef
pythonをdisりに来ただけか

885デフォルトの名無しさん2018/06/16(土) 16:31:48.39ID:4s08VDiG
何度も言われてるけど馬鹿には無理だから

886デフォルトの名無しさん2018/06/16(土) 17:10:21.37ID:CxuEM3bO
一方のMatlabは馬鹿でも可能です!

887デフォルトの名無しさん2018/06/16(土) 19:07:52.79ID:rHcXKEyD
>>877
どうもありがとうございます
prittytableではヘッダのみ中央揃え、内容は左揃えってやるのはムリでしょうか?

888デフォルトの名無しさん2018/06/16(土) 19:39:36.19ID:V0Z3yofC
>>878-879
文字列の+ は、文字列の連結じゃないの?

889デフォルトの名無しさん2018/06/16(土) 19:53:08.00ID:eJREzlFG
>>888
とすると
"5" + 1
の場合は1が整数型だという点で、
"5" - 1
の場合は"5"が文字列型だという点でエラーが起きたという認識でよいですか。

890デフォルトの名無しさん2018/06/16(土) 19:56:59.16ID:eJREzlFG
ああなるほど
試しに
5 + "1"
とやると
"5" - 1
とやったときとほぼ一緒の内容の警告(strとintが逆、-と+演算子が違うだけ)が出力されました。
なにぶんこの時分になってPython初心者なので変な質問をしてすいませんでした。
とりあえず自分のなかでは納得できました。
「Pythonは他の一般的な言語と同様に左から解析をしていき、
演算子は左項の型推論で得られた結果によってその意味を変えることがある」
ということですね。

891デフォルトの名無しさん2018/06/16(土) 21:22:52.11ID:V0Z3yofC
Ruby と同じ。
2項演算子は、左側の型のメソッドになるのかな?

文字列型の、+ メソッドは、文字列の連結

892デフォルトの名無しさん2018/06/16(土) 21:31:05.21ID:xo8+58G0
同じと言われましても、そのlubii?とか言う泡沫言語なんて知りませんし興味もありません。
本屋の棚に、そんな言語有りませんでしたよ?
pythonは一棚占有してましたが。

893デフォルトの名無しさん2018/06/16(土) 21:33:07.37ID:eJREzlFG
>>891
あーなるほど
ちょっとというかかなり蛇足ですが
JavaScriptだと(有名なのでご存知かもしれません)
console.log("5" + 1)
51
console.log("5" - 1)
4
という処理をするんですよね。Pythonだとどうなのかなと気になったので。

894デフォルトの名無しさん2018/06/16(土) 21:50:06.93ID:jsEUCTRB
>>887
たぶんムリっぽいですね〜、分からないですけど、、見た感じムリっぽいですぅー

895デフォルトの名無しさん2018/06/17(日) 00:58:14.74ID:Hwfrbz2H
オライリー のPythonによるWebスクレイピングって本買ったんだがこれは機械翻訳か?
パラっと見てるがtreeが木でPrintは印刷となってて酷いぞ
意味のわからない日本語が時々出てくるんだがそれももしかして直訳なのかと思うとゾッとする

896デフォルトの名無しさん2018/06/17(日) 01:01:10.30ID:QL/zJT52
ゾッとするバカやなコイツw

897デフォルトの名無しさん2018/06/17(日) 02:35:57.34ID:JgwWYBD4
today = datetime.today()
today_date = datetime.strftime(today, '%Y-%m-%d')

print(today_date)

朝の5時から翌日の5時前今日の扱いにしたい時はどうしたらいいでしょうか?

898デフォルトの名無しさん2018/06/17(日) 04:05:47.12ID:1HnG+cYb
today -= timedelta(hours=5)

899デフォルトの名無しさん2018/06/17(日) 04:38:25.48ID:Hwfrbz2H
>>898
どうもありがとうございます!

900デフォルトの名無しさん2018/06/17(日) 14:05:34.76ID:sqEb+s4v
numpyの
アダマール積の値が大きいほど
2つの行列は近似的な物だと判断できるんですか?

901デフォルトの名無しさん2018/06/17(日) 15:22:07.52ID:Wo64nPZg
🌔の記事読んだな

902デフォルトの名無しさん2018/06/17(日) 22:22:32.37ID:TCydU/Wg
>>900
アダマール積?

903デフォルトの名無しさん2018/06/17(日) 23:17:37.34ID:1HnG+cYb
誰かが意味不明なことを主張してたっていう話?

904デフォルトの名無しさん2018/06/18(月) 22:25:21.10ID:Gh94yMzJ
>>901
うん それだ
写経してみた おもろいな

905デフォルトの名無しさん2018/06/18(月) 22:34:27.41ID:c52GmVnb
スクリプトを動かしていて任意のタイミングで終了させるにはどんな方法がありますか?
例えば、キーボードのQを押すとスクリプトが終了するようにさせたいです。

906デフォルトの名無しさん2018/06/18(月) 22:43:21.39ID:YbHtF4sg
ctrl+cじゃダメなのかな。

907デフォルトの名無しさん2018/06/18(月) 22:59:48.49ID:c52GmVnb
コントロールCを使うのが一般的ですか?
popenのwaitを使ってみてるんですけれど、ctrl+Cで止めると
Traceback何々が数行表示されるので、この表示が出ない逃したいいなと思いました。
停止させたら、任意の文字も表示できればもっといいです。

908デフォルトの名無しさん2018/06/18(月) 23:12:03.97ID:YbHtF4sg
>>907
何が一般的か知らない。
任意のキーで停止できるようにしたいならcursesとか使うんだろうなと思うけど、おれは使ったことないからわからん。
お手軽にやりたいならctrl+cで止まるようにして、KeyboardInteruptを例外処理しとけば楽かと。

909デフォルトの名無しさん2018/06/18(月) 23:12:37.41ID:c52GmVnb
どうもありがとうございます
調べてみます

910デフォルトの名無しさん2018/06/19(火) 02:45:16.28ID:2WBCmyr3
>>905
>>907
シグナルハンドラで調べるとよろし

911デフォルトの名無しさん2018/06/19(火) 02:53:49.41ID:DGMT9Nzy
https://docs.python.jp/3/library/venv.html
Python3のvenv仮想環境を使おうと思うのですが
インストール先の推奨パスとかありますかね。
ブログを見たりすると~/venv36とかみたいなんですが、できればホームディレクトリには置きたくないです。
もう少し体系化された場所に置きたいです。

912デフォルトの名無しさん2018/06/19(火) 03:29:26.55ID:DGMT9Nzy
すいませんpython3-venvパッケージが提供されていたのでそれを使用することにしました。
ちなみに/usr/lib/python3.5/venvでした。

913デフォルトの名無しさん2018/06/19(火) 04:15:21.86ID:hCbA6sKc
>>910
どうもありがとうございます。そちらも試してみます。

関数の勉強をしています。

画像のように書いて、print_info(program_id)を実行すると、111行目でエラーになってしまいます。

ためしに106行目をコメントアウトして107行目のコメントを外すと正常に動きました。

program_id()を実行すると、ちゃんと2018061867184という文字が取得出来るので、その文字を106行目と109行目のpprogram_idに入れたいです。

どこが間違えていますか?

https://i.imgur.com/4QzrsIM.jpg

914デフォルトの名無しさん2018/06/19(火) 05:04:41.55ID:2WBCmyr3
>>913
エラーには説明書いてないの?
requests.get()で失敗してるんだろうけど、area_id, service_id, apikey, info_url は使う前にそれぞれ値が入ってる(空じゃない)?それをそれぞれ print() してみよう
info_url を組み立てた後で、それをブラウザにコピーしてjsonが返ってくる?

915デフォルトの名無しさん2018/06/19(火) 05:28:56.39ID:6x0qbtHZ
>>913
エラー内容を書かない時点で質問としてダメでしょう。
コードも回答する人が追試できるように、pastebinとか、ろだに貼らないと。

そもそも、program_id()の実行結果が取得できてるんでしょうかね。
人間に見えるからといって、pythonクンにわかるように伝えているとは限りません。

実行の結果として、一体どの項目を取得したいのでしょうか。
その結果として取得したいのはどのような類のものですか?

これらをきちんとpythonクンに伝えないと働いてくれませんよ。

916デフォルトの名無しさん2018/06/19(火) 05:43:58.35ID:6x0qbtHZ
もう少し噛み砕くと、
実行結果を持ち出すおまじないと、
IDの種類を決めるかもしれないおまじない、
見たところ、この辺りがまず足りないようです。

917デフォルトの名無しさん2018/06/19(火) 05:55:04.25ID:hCbA6sKc
>>914, 915
どうもありがとうございます。

20行目のようにinfo_urlをプリントしてみた所、以下が出力されました。(ほげほげの部分は実際には自分のapikeyです)

2018061967188
http://api.nhk.or.jp/v2/pg/info/130/n1/<function program_id at 0x10ab248c8>.json?key=ほげほげ

15行目のprint_infoの引数と16行目の書き方が間違えているんじゃないかなと思っています。

13行目のprogram_id()を実行すると、今の時間だと
2018061967188
が出力されます。

その文字15行目のprint_infoに渡したい時は、15行目のようにprint_info関数の括弧の中にprogram_id関数をいれて、
19行目のinfo_urlのpprogram_idに1行目の結果を入れたい時は、16行目のように変数に入れるんだと思ったんですが。。。

https://pastebin.com/CH9vt19f

918デフォルトの名無しさん2018/06/19(火) 05:57:07.57ID:hCbA6sKc
画像のほうが見てもらえるかなと思ったんですが、pastbin使う事にします。ごめんなさい。

919デフォルトの名無しさん2018/06/19(火) 06:00:33.27ID:hCbA6sKc
>>916
IDの種類とはintとかfloatとかといったデータ型の事でしょうか?その辺りもう一度本を読んでみます。

920デフォルトの名無しさん2018/06/19(火) 06:08:04.91ID:hCbA6sKc
<function program_id at 0x10ab248c8>
となっているので、これだと関数なので、実行結果が持ち出せていないって事ですね。
持ち出すおまじないちゃんと調べてみます。

921デフォルトの名無しさん2018/06/19(火) 06:08:19.24ID:zVuDH3/r
>>917
<function program_id at 0x10ab248c8> ここ文字列のはずが関数になってるんじゃないの

922デフォルトの名無しさん2018/06/19(火) 06:15:45.77ID:hCbA6sKc
>>921
そうです。
pprogram_id = program_id
こう書けば、program_id関数の実行結果をpprogram_idに入れてくれるんだと思ったんですが、
pprogram_id = program_id
これはただprogram_id関数にpprogram_idって名前を付けただけなんだということを今、理解出来ました。

923デフォルトの名無しさん2018/06/19(火) 06:42:52.83ID:hCbA6sKc
何度もすみません
>>917
24行目のprint_info(program_id)の書き方も違う事が分かりました。

924デフォルトの名無しさん2018/06/19(火) 06:48:28.15ID:6x0qbtHZ
>>917
そもそも、関数program_id()の結果を、実行後の23行目の後(関数の外)で、取得できていないはず。
print()はあくまで"関数の中だけ"で"見えているだけ"ということをお忘れなく。 ←ここ重要

で、関数program_id()で何を取得したいのでしょうか?
見たところ、now_dataでいいんだよね?
ここで関数program_id()の外にこれを持ち出すおまじないが必要ですよ。

色々見えてきたようですが、
肝心なのはここです。
実は、自分も同じような勘違いをしていたので…

925デフォルトの名無しさん2018/06/19(火) 07:25:41.33ID:hCbA6sKc
>>924
23行目に書いてあるprogram_id()は必要なく、ちゃんとこの関数が動くか確認のために先ほどとりあず書いてみました。

関数program_id()で取得したい物は、関数program_idのJSONデータ( now_dataの中['nowonair_list'][service_id]['present']['id'] )のidに入っている文字列です。

その文字列をprint_infoに渡したいので、print_infoを実行する時に括弧の中にオブジェクトとしてprogram_id関数を入れました。

本の中で関数のページの中の「関数呼び出し」や「オブジェクト」について書かれてあるんですが、自分にはそこの理解が足りてないんだと思います。

本の中に以下のコードが書いてありました。run_something_with_argsの中でadd_argsを動かしているのは理解出来るんですが、14という文字列をrun_something_with_argsに送る方法が分かりませんでした。

def add_args(arg1, arg2):
print(arg1 + arg2)

def run_something_with_args(func, arg1, arg2):
func(arg1, arg2)

run_something_with_args(add_args, 5, 9)

926デフォルトの名無しさん2018/06/19(火) 07:58:43.57ID:2WBCmyr3
>>925
1. program_id() 関数の最後を修正して program_id を返すようにする。具体的には12行目を有効にして14行目に return program_id とでも付け加えればよい
2. 23行目を id = program_id() として porgram_id() 関数が返した値を一旦 id に格納する。心配ならその後に print(id) で中身が入っているか確認
3. 24行目を print_info(id)とする

927デフォルトの名無しさん2018/06/19(火) 08:17:21.90ID:bQod7mqP
月3000でPyQ始めようかな。。

928デフォルトの名無しさん2018/06/19(火) 08:37:12.54ID:hCbA6sKc
>>926
どうもありがとうございます。

https://pastebin.com/JutGNtYk

上記を実行すると、ちゃんと以下のurlが出力されました。

http://api.nhk.or.jp/v2/pg/info/130/n3/2018061967375.json?key=ほげほげ

何が起こったのかまったく理解出来ずにいます。
16行目のprintと17行目のreturnの違いと、31行目の変数の意味について調べ理解出来るようにします。

※おまじないを調べているうちに関数内でグローバル変数を使うにはglobalキーワードを付ける必要があるとあったので試してみました。

新着レスの表示
レス数が900を超えています。1000を超えると表示できなくなるよ。
レスを投稿する