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


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

【まず1嫁】くだすれPython(超初心者用) その57



1 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 22:25:08.74 ID:/hGmbW/Z.net]
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その56
mevius.5ch.net/test/read.cgi/tech/1640536690/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###

376 名前:デフォルトの名無しさん [2022/07/19(火) 11:33:51 ID:RISkfx3J.net]
forと内包表記で速さに違いが出るのはなぜですか?

同じコードをなぜ生成しないんですか?

377 名前:デフォルトの名無しさん [2022/07/19(火) 11:37:38.74 ID:856tCJOd.net]
内包表記でプログレス挟んで遅いのは嫌とかバカの極み
可読性考えて普通のforで回せ。 つか速度測ってみろ。大差ねえわたぶん

[(f(x[i]), print(i)) for i in range(10)]

378 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 12:00:14.16 ID:GEUE7oT9.net]
超初心者を馬鹿にしないと精神の安定が保てない

379 名前:ゥわいそうな人 []
[ここ壊れてます]

380 名前:デフォルトの名無しさん [2022/07/19(火) 12:19:44 ID:192s6b8D.net]
馬鹿にされるような日本語使いする自称超初心者が悪い

381 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 12:24:07 ID:AricPVYV.net]
>>349
比較したコードを出してみて

382 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 12:31:03.42 ID:ZGMRA42U.net]
>>351
print等の副作用を伴う処理を繰り返す場合は
内包表記ではなくforを使うのがpythonにおける暗黙の了解
値の加工生成と入出力を分けて書くのはpythonに限らずプログラミングの基本

383 名前:デフォルトの名無しさん [2022/07/19(火) 12:45:56.52 ID:2mzjLS5j.net]
>>363
a = [[print(i), f(x[i])][1] for i in range(10)]

384 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 12:59:28.59 ID:COa8jHBw.net]
カウント1毎にプログレス表示すると内包表記使う意味ないかもしれんが、
リストへの追加100毎
カウント10000000毎にプログレス
で時間計測してみた

内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒

forループ
a=[]
for i in range(100000000):
____if not (i%10000000):
________print(i)
____if i%100 == 0:
________a.append(str(i))
20秒

行儀悪い書き方だが、条件しだいで効果はある



385 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 13:09:56.89 ID:ieHxnJ8/.net]
>>365
ループ内でpythonのインタプリタで実行される処理とコンパイル済みのCのコードで実行される処理の行き来が減れば速くなる

内包表記は式しか書けないのとlist.appendのようにインタプリタがメソッドを探す処理が不要にになることが多いので単純な式評価だと内包表記がやや速い結果になりやすい
(例えばループの外でappend = outlist.appendとしてループ内ではメソッドじゃなく関数呼び出しにすれば多少速くなる)

ただforより内包表記が速いから内包表記を使うというのは使い方が間違ってるか使う言語を間違ってる

386 名前:デフォルトの名無しさん [2022/07/19(火) 13:35:02 ID:RISkfx3J.net]
>>373

ありがとうございました。
処理系が書き方の違いを吸収して同じ(速い)コードを生成することは難しいのでしょうか?

387 名前:デフォルトの名無しさん [2022/07/19(火) 13:41:20 ID:2mzjLS5j.net]
8秒の方はstr()呼ばれる回数も少ないんじゃね
やり直し

388 名前:デフォルトの名無しさん [2022/07/19(火) 13:45:55 ID:e6PA2QPH.net]
内包表記を配列操作以外に使うな(関数叩くな)って書いてるのeffective pythonだっけ

>>374
速いコードって、たとえば進捗吐かないとか、無駄な評価式やループしないとか、そうやって作ってくんよ
鈍重な書き方しても速いのがいいっていうなら、もう根本的にpythonは遅い言語だよ

389 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 13:57:38.21 ID:COa8jHBw.net]
>>375
str()呼ばれる回数は同じじゃね
でも、i%10000000の回数違ってた

内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒

forループ
a=[]
for i in range(100000000):
____if i%100 == 0:
________if not (i%10000000):
____________print(i)
________a.append(str(i))
12秒

390 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14:02:29.41 ID:6WNMcjy9.net]
>>377
printしない場合は?

391 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14:08:53.16 ID:COa8jHBw.net]
>>378
str(i)呼ぶ回数は、両方 100000000 / 100 = 1000000回

392 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14:12:29.27 ID:6WNMcjy9.net]
>>379
うんだから何秒なの?

393 名前:デフォルトの名無しさん [2022/07/19(火) 14:12:50.87 ID:Xr1AbmZQ.net]
結局書きづらい、読みづらくてミスしちゃうんだから
普通のforループの方が総カロリー低いと思います

394 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14:17:28.28 ID:COa8jHBw.net]
>>380
printしない内包表記
a = [str(i) for i in range(100000000) if i%100 == 0]
8秒



395 名前:デフォルトの名無しさん [2022/07/19(火) 14:19:06.99 ID:RISkfx3J.net]
行列プログラマーという本では、集合の表記に近い内包表記のほうが分かりやすいと書いてあります。
実際、もっぱら内包表記を使っています。

396 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14:40:11.78 ID:HHxHBIIc.net]
>>382
つまりprintは時間がかかってないわけだよね
で、普通のforより内包表記のほうが速い分だけ速くなってると
それは何の実験なんだい?

397 名前:デフォルトの名無しさん [2022/07/19(火) 14:49:08.31 ID:Dd2ngZhk.net]
内包表記でもインデントしていいんですよ
可読性高めていけ

398 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 14: ]
[ここ壊れてます]

399 名前:52:21.67 ID:COa8jHBw.net mailto: >>384
進捗を大雑把に表示したい場合、内包表記でprintするのも有りという実験
俺は開発中以外では使わんけど
完成したコードにこんなの書いてたらやだ
[]
[ここ壊れてます]

400 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 15:07:57 ID:COa8jHBw.net]
printは時間がかかってないのではなく回数を少なくしてる
他の人が指摘してるように、進捗を細かく表示したい場合、内包表記もforループも時間差はほぼ無くなる
printはやはり時間がかかる

401 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 15:17:30 ID:kjnFmzM9.net]
時間差は4秒で変わらないんじゃないの
printに時間がかかるから4秒の割合が小さくなってほとんど意味ないじゃんってことでしょ

402 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 15:40:36.31 ID:COa8jHBw.net]
>>388
そういうことです
進捗を細かく表示したい場合、ほとんど意味ないってこと
完成状態で内包表記にprintはおすすめできない
テスト中に内包表記にprintを入れるのはお好みで

403 名前:デフォルトの名無しさん [2022/07/19(火) 15:40:46.26 ID:bdrM7/md.net]
a=[]

a.append(str(i))
でなくて、
a=[0]*100000000/100

a[i]=str(i)
だとますます変わらなそう

404 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 16:01:31.52 ID:Ao+3qyOr.net]
>>377
そんな差でる?
むしろforループのほうが3~5%程度速いんだが



405 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 16:03:31.06 ID:/jGGKkxp.net]
>>389
であれば、可読性より速度を重視する場合、内包表記にprintを入れたほうがいいということですよ
意味は4秒ぶんあるわけです

406 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 16:18:19 ID:COa8jHBw.net]
>>391
こちらは化石PCで測定したので。
誤差じゃない充分な時間差が開く程度にrangeの値を大きくしてみて

407 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 16:28:38.52 ID:L7UUhMht.net]
そもそも内包表記は可読性良いよ、ギュッと1行にまとまりつつも分かりやすい
for文見る方がダルイわ、内包表記にできないものを仕方なくfor文にしているよ
慣れだよ慣れ、最近だと二重ループの内包表記も全然苦じゃない、美しいとさえ感じる

408 名前:デフォルトの名無しさん [2022/07/19(火) 16:31:26.97 ID:RISkfx3J.net]
>>394

ですよね。集合論的な表記に似ています。

409 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 16:40:41.64 ID:wHnodxSw.net]
forループのほうが内包表記より速いなんてことあるの?

410 名前:デフォルトの名無しさん [2022/07/19(火) 18:36:04.44 ID:paq2dZhq.net]
それこそ、内包表記で呼ぶ関数の回数をカウントして確認たいならデコレーターとかでtqdm使うようにした方が良くないかな?
内包表記の中をごちゃごちゃにするのは基本的には避けた方がいいと思うんだよな。
シンプルに書くために内包表記を使ってるのであって、Zコンビネーターとか使ってへんなことするなら普通のforとかにした方がいいよね
遊びとしては否定しないけどね

411 名前:デフォルトの名無しさん [2022/07/19(火) 19:06:26 ID:xA31LZ9f.net]
code golf で言うと
打数多い方が自慢してるような
糞な流れ
もうやめませんか

412 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 19:27:22 ID:w0DVg8Bk.net]
自治厨久しぶりに見た

413 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 19:55:09.64 ID:z/It7jZN.net]
>>397 に一票
こういうのこそデコレーターの出番だと思う

414 名前:デフォルトの名無しさん mailto:sage [2022/07/19(火) 20:20:06.84 ID:n8OVMrsb.net]
つまり具体的にはどういうこと?



415 名前:デフォルトの名無しさん [2022/07/19(火) 22:29:55.85 ID:Dd2ngZhk.net]
一行にまとめた内包表記より、インデントした内包表記の方が可読性が下がる

416 名前:デフォルトの名無しさん [2022/07/19(火) 22:32:42.31 ID:Dd2ngZhk.net]
の?

417 名前:デフォルトの名無しさん [2022/07/19(火) 23:31:48.45 ID:paq2dZhq.net]
>>401
こんな感じ
imgur.com/a/UsKhUuD

tqdm使いたくなかったらpbarの初期化やpbar.updateの代わりにカウント変数とprintでも使っておいて

418 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 00:25:50.52 ID:sLuJt4wx.net]
>>404
rangeの100で100回ループさせるから
tqdm_wrapperに100を渡してるんだよね?

419 名前:デフォルトの名無しさん [2022/07/20(水) 01:30:58.07 ID:aFoX4Dx/.net]
>>405
そうそう、その辺はもっといい方法があるかもしれないが、ちょっと思いつかなかったのでそんな感じ。
回数が決まってないときは棒グラフは出せないけど1秒に何イテレーションできてるとかはわかると思う。

420 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 03:27:59.73 ID:vTCCBmkT.net]
@tqdm_wrapper(total_count)ってできればいいんだけど、そういうのは無理なのかな?

421 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 06:19:50.33 ID:uVwid/eb.net]
printなしでやってもforループのほうがほんの少し内包表記より速いんだけどなぜだろう

422 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 07:14:30.03 ID:vC0V/6Za.net]
PEP
pythonは描き方がひとつ(キリっ

423 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 07:58:53 ID:rNnuNQ69.net]
>>408
計測結果は何秒だったの
メモリが少なくてスワップ発生してるとか?

424 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 09:48:14.82 ID:53g3nF67.net]
Pythonのネット記事読んでるとAnacondaを入れてどうこう、というチュートリアルばっかりあるんだけど
肝心のAnacondaはどういう状況下で使うものなのか、説明省かれててよくわからないんだよな

ライブラリとpythonのバージョンが合わないと使えないことがあるからそれを避けるため、って認識でいいの?
不具合無かったらAnacondaつかわなくていいのかな?



425 名前:デフォルトの名無しさん [2022/07/20(水) 11:17:28.13 ID:wWIP1AbD.net]
anacondaはAnaconda社の計算科学のための商品で学生の方など教育や学術目的、または趣味の用途であれば無償でご利用いただけます

入門書とかで使われてるのは、色々と最初から入ってるから開発やデプロイ先の環境構築を解説しなくて済むからだよ
anacondaに依存しないやり方覚えた方が楽っていうか、むしろその方が必須になる

426 名前:デフォルトの名無しさん [2022/07/20(水) 11:22:56.97 ID:wWIP1AbD.net]
退屈なことは Python にやらせようを書いた人も同じような事言ってた

427 名前:デフォルトの名無しさん [2022/07/20(水) 11:27:11.69 ID:wWIP1AbD.net]
アナコンダを否定してるわけじゃないよ。素晴らしい商品ですし、選択肢の一つとして選べるのは良いことだと思います

428 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 11:55:51.53 ID:L6JCmqAC.net]
あえて、IronPythonに手を出して茨の道をw

429 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 13:27:25 ID:SSFD7/IV.net]
今Twitterなどで話題になってる仮想通貨のbotを作りたいです

年間で1億円ぐらい稼ぐには何の勉強すればいいですか?

430 名前:デフォルトの名無しさん [2022/07/20(水) 13:38:38 ID:pMrjs46b.net]
経済と仮想通貨

431 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 13:38:57 ID:ShYgaPwJ.net]
デッサン力

432 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 14:14:10.83 ID:hOJNeZde.net]
これからのキーワードは仮想環境
anacondaもIronPythonもPyTorchも欲しい環境をコンテナ一発でドーン!
ってやりたいからDocker勉強しようかと思っている

433 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 15:00:19.03 ID:qJwz0nM8.net]
ぶっちゃけ
docker の anaconda 版とか
docker の 標準 python 版とか
そういうので良いんだわ
解説書あっても各々インスコ時にバージョンガーとかおま環とか
だるいサポートにみんな疲れたんだろ

434 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 15:29:51 ID:djIfGOxS.net]
windows10 + python3.9 では生ソケットを扱う事ができないのでしょうか

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
ソケット作成のとこでエラーがでます
[WinError 10013]
アクセス許可で禁じられた方法でソケットにアクセスしようとしました
とエラーメッセージがでます

ログインしているユーザはadministratorの権限も持っています



435 名前:
英語のサイトで調べるとprohibitというワードもありました
識者の方ご指導願います
[]
[ここ壊れてます]

436 名前:421 [2022/07/20(水) 15:40:01 ID:djIfGOxS.net]
421です
コマンドプロンプトを管理者権限で実行する事が必要であると学びました

437 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 16:51:36.92 ID:rnlV1uw8.net]
anacondaはまああれだけどspyderはなんか好きだ

438 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 17:04:37.61 ID:rNnuNQ69.net]
a=[]
append = a.append
for i in range(30000000):
____append(i)
のように、メソッドをあらかじめ変数に入れると高速化できるという情報をよく見かけるけど本当なの?
何回計測しても誤差程度の差しかなく、速くなってるのか確認できないんだけど

439 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 17:27:44.50 ID:Lx4+ezqp.net]
https://wandbox.org/permlink/xE2gHLprP4RKuqf0

440 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 17:49:55.19 ID:ZOYHOoJs.net]
このくらい最適化してよと思っちゃうんだが無理なんかな?

441 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 17:50:04.72 ID:rNnuNQ69.net]
>>425
ありがとうございます
計測方法のミスに気づきました
関数を作らず計測していたので、append = a.append のところがグローバル変数になって遅くなり、
その結果、高速化していなかったようです

442 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 18:01:43.03 ID:D9vTvaEa.net]
これの出所は概ね公式Wikiだけど、2が全盛期に書かれた物なので
https://wiki.python.org/moin/PythonSpeed#Take_advantage_of_interpreter_optimizations

属性を検索したり、インスタンスを紐付けてバウンドメソッドを返す様な
https://docs.python.org/ja/3.7/howto/descriptor.html#invoking-descriptors
こういった機構を回避するので多少速くなるけど、現行のPythonでは比較的小さい
ローカル変数がグローバル変数より読み書きが速いのも実際そう

>>426
型がないダックタイピングな以上は都度解決するしかないであろうなぁ…

443 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 18:58:09.37 ID:QlVkmKZp.net]
anaconda入れたけど、avastがなぜかウイルス扱いしていて、anaconda立ち上げるとすぐ落ちて使えなくて、あきらめてvscにした

444 名前:デフォルトの名無しさん [2022/07/20(水) 20:09:39 ID:eRSlBPBh.net]
pythonで質問なんですがコンソールに表示される数値の横に量を表したバーを表示させたいのですが

300 ■■■
20 ■
150 ■■

ぐぐっても進捗率をあらわすプログレスバーのtqdmが出てきてしまいどうやって数字に連動した量を表示させるのかわかりません
何かヒントがあればお願いします



445 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 20:21:54 ID:hglVd79x.net]
pbar.update(1) ←これの数字をいじる

446 名前:デフォルトの名無しさん [2022/07/20(水) 21:24:08.50 ID:npea7ePl.net]
>>431
ありがとうございます、おかげさまでなんとかできそうです
素敵なお方だ

447 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 22:26:00.73 ID:rNnuNQ69.net]
>>432
「tqdmが出てきてしまい」て書いてるので、静的に表示するだけだからtqdmは使いたくないのかと思った

静的に表示したい人用おもちゃ
def print_bar(n, max, expansion):
____box = "▏▎▍▌▋▊▉█"
____rate = (n * expansion * 100) // max
____bar = "" + box[7] * (rate//8) + box[rate%8]
____print(bar)

print_bar(50, 100, 1)
print_bar(55, 100, 1)
print_bar(100, 100, 1)
print_bar(100, 200, 1)
print_bar(100, 200, 3)

今書いた書いたらちゃんとテストしてない

448 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 22:32:08.75 ID:rNnuNQ69.net]
>>433
バグってた
すぐ直します

449 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 22:42:20.27 ID:rNnuNQ69.net]
def print_bar(n, max, expansion):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = "" + box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(bar)
print_bar(0, 100, 1)
print_bar(1, 100, 1)
print_bar(2, 100, 1)
print_bar(3, 100, 1)
print_bar(4, 100, 1)
print_bar(5, 100, 1)
print_bar(6, 100, 1)
print_bar(7, 100, 1)
print_bar(8, 100, 1)
print_bar(50, 100, 1)
print_bar(55, 100, 1)
print_bar(100, 100, 1)
print_bar(100, 200, 1)
print_bar(100, 200, 3)

450 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 22:53:43.67 ID:JXXlHdvc.net]
Ruby on Rails なら、VSCode, WSL2, Vagrant, Virtual Box でも出来るけど、
Python は依存モジュールが多いから、Docker が普通

自宅ではじめるDocker入門[改訂版]、浅居 尚、2021/4

この本が最も簡単

451 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 23:38:31.06 ID:hOJNeZde.net]
>>435
barだけだとやっぱり分かりにくいですね数字も必要だと思いました
もしくはbarの到達位置の表示が必要

452 名前:デフォルトの名無しさん mailto:sage [2022/07/20(水) 23:59:09.30 ID:hOJNeZde.net]
>>436
Dockerの書籍でているのね、レビュー評価もメチャいいじゃん
でもネット上に公式?の日本語ドキュメントがあるからこれでいけるんじゃないかな??どうかな?w
ttps://matsuand.github.io/docs.docker.jp.onthefly/
ttps://docs.docker.jp/index.html

453 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 01:17:04.66 ID:dz51dLzk.net]
>>437
値、開始位置、最大到達位置を表示しました

def print_bar(n, max, expansion):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 200) // max
____bar = "" + box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(f"{n:{len(str(max))}d} | {bar:{expansion*25}s} |\n")
print_bar(8, 100, 4)
print_bar(50, 100, 4)
print_bar(90, 100, 4)
print_bar(100, 100, 4)

454 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 03:59:00 ID:c34Fgnuj.net]
PythonでAI作り始めてから電気代が2000円以上高くなった



455 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 08:50:46 ID:nja0E+A7.net]
>>439
すばらしい全部入っている! けども200とか25とかなんだろう?ああ小数点がイヤだから2倍しているのか
となったので、計算式が分かるようにした方が可読性とメンテナンス性があがると思いました
以下計算式を明示した改良版

import math
def print_bar(n, max, expansion):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = "" + box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(f"{n:{len(str(max))}d} |{bar:{math.ceil(expansion*100/8)}s}|\n")

456 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 11:05:44.45 ID:nja0E+A7.net]
さらに良くなった
import math
def print_bar(n, max=100, expansion=1):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(f"{n:{len(str(max))}d} |{bar:{math.ceil(expansion*100/8)}s}|\n")

457 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 19:29:07 ID:dz51dLzk.net]
やっぱりmath.ceil使ったほうがいいよな
importを減らしたがる癖が抜けず2倍してしまった

458 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 20:09:26.68 ID:dz51dLzk.net]
最終型
import math
def print_bar(n, max=100, expansion=1, *, cr=2, sep="|", prefix="", suffix="", unit=""):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = box[0] * (rate//8) + box[rate%8] * bool(rate%8)
____print(f"{prefix}{n:{len(str(max))}d}{unit} {sep}{bar:{math.ceil(expansion*100/8)}s}{sep}{suffix}" + "\n"*cr, end="")

459 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 21:25:09.45 ID:nja0E+A7.net]
>>444
すんごーい! crの初期値は1が良いかな、それ以外は全部気に入りました

460 名前:デフォルトの名無しさん [2022/07/22(金) 00:46:45.54 ID:LN4IvGf8.net]
>>444
ありがとうございます

461 名前:デフォルトの名無しさん [2022/07/22(金) 11:32:26.12 ID:emgmw9dd.net]
>>421-422
runas

462 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 14:53:38.79 ID:hAgOKfi8.net]
>>444
数値を非表示にするオプションつけ忘れた

463 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 17:03:59.46 ID:t+dBeaSp.net]
>>448
そのオプション名を何にするかでセンスが問われる
num, display_num, meter, bar_value, ..etc
さあ、キミのセンスを見せてくれ!

464 名前:デフォルトの名無しさん [2022/07/22(金) 17:47:22.62 ID:iaUAG8EO.net]
ここはきみの日記帳じゃない



465 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 19:07:18.92 ID:t+dBeaSp.net]
>>450
関数や変数の命名はとても重要だよ? 端的で分かりやすくする必要がある
それが可読性やメンテナンス性をあげるわけなのだよ
プログラミングは名前付けであると言われる所以はそういうことなのだよ

今回の数値の非表示オプション名は非常に難しい、私的にはdisplay_valueがベストかな?
と考えつつも彼の意見も参考にしたいわけだ、もちろんtqdmではどうしているのかな?
と調べたりもした、tqdmではbar_formatで書式を指定できるみたいだね
その中で数値部分はpercentageという変数名のようだ
print_barはunit指定ができるわけで%表示固定ではないから、percentageは適切ではない
と考えると・・ね?難しいでしょ? 皆の意見も聞きたいじゃん!

466 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 19:43:18.38 ID:bpOnuI9e.net]
名前は重要。
開発が終わった後でも、コードを見る事があるから

プログラミングの3割の時間は、分かりやすい名前を考えること

簡潔に説明されている名前なら、
処理を詳しく見なくても理解が進むので、バグも減って高品質になる

リファクタリング・メソッド化などは、Rubyist の基本

467 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 19:52:25.71 ID:PdYjn4LX.net]
メソッドが長すぎると名付けが難しいから結局は短く作るのがいいのか?
でもそれだと分割しすぎとか言われそうだし

「汎用的、抽象的」な名前がいいのか「汎用的な名前を避けて具体的」にすべきなのか

468 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 19:52:35.56 ID:t+dBeaSp.net]
>>448
でけた! tqdmのbar_formatを採用
これで数値の表示/非表示はもちろん色々柔軟に対応できる

def print_bar(n, max=100, expansion=1, *, bar_format="{prefix}{num}{sep}{bar}{sep}{suffix}",
____________ unit="%", sep="|", prefix="", suffix="", cr=1):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = box[0] * (rate//8) + box[rate%8] * bool(rate%8)
____bar = f"{bar:{math.ceil(expansion*100/8)}s}"
____num = f"{n:{len(str(max))}d}{unit}"
____print(bar_format.format(**locals()) + "\n"*cr, end="")

469 名前:452 mailto:sage [2022/07/22(金) 21:05:54.53 ID:bpOnuI9e.net]
例えば、Ruby のモジュール関数の名前なら、
cancel_button_label_text
apply_or_cancel_button

インスタンスメソッド名なら、
obj.suspended?

末尾の? で、戻り値がbool 型だと表現できる

470 名前:デフォルトの名無しさん [2022/07/22(金) 21:06:08.18 ID:aVBkeTN2.net]
>454
print_bar.update ってできない?

471 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 21:29:43.19 ID:t+dBeaSp.net]
>>456
tqdmのupdateみたいなことができるかってこと? クラス化すればできるよ
ああ、bar_formatとか呼び出すごとに変数指定するのはアホだよね
クラス化してインスタンス生成時にbar_format指定した方がいいよね

472 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 22:27:04.77 ID:t+dBeaSp.net]
クラス化できたけど、関数バージョン(>>444)の方が好きかも

class print_bar:
____def __init__(self, max=100, num_format="{num:{max_digit}d}{unit}",
____________ bar_format="{prefix}{num_format}{sep}{bar}{sep}{suffix}",
____________ unit="%", sep="|", prefix="", suffix="", cr=1):
________self.box = "█ ▏▎▍▌▋▊▉"
________self.max = max
________self.max_digit = len(str(max))
________self.num_format = num_format
________self.bar_format = bar_format
________self.unit = unit
________self.sep = sep
________self.prefix = prefix
________self.suffix = suffix

____def update(self, num, expansion=1, cr=1):
________rate = (num * expansion * 100) // self.max
________num_format = self.num_format.format(num=num, **self.__dict__)
________bar = f"{self.box[0] * (rate//8) + self.box[rate%8] * bool(rate%8):{math.ceil(expansion*100/8)}s}"
________print(self.bar_format.format(bar=bar, **dict(self.__dict__, num_format=num_format)) + "\n"*cr, end="")

p = print_bar()
p.update(70)

473 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 22:57:55 ID:oFTCo3Qt.net]
日記帳で試行錯誤して、結論が出てから書き込んでください

474 名前:デフォルトの名無しさん [2022/07/22(金) 23:49:56.07 ID:XYg2RZCf.net]
boxサーバーに上がっているExcelやcsvのデータってpythonで読み取ることできるのでしょうか?
https://app.box.com/file/xxxxxxxxxxxxxのようなURLを指定して
ファイル内のデータを読み込みたいのですがうまくいきませんでした。



475 名前:デフォルトの名無しさん mailto:sage [2022/07/23(土) 06:43:50.22 ID:NAv7kQq5.net]
beautifulsoupでいったんダウンロードすれば?

476 名前:デフォルトの名無しさん mailto:sage [2022/07/23(土) 06:53:36.23 ID:DC0Z ]
[ここ壊れてます]






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

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

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