Pythonのお勉強 Part68 at TECH
[2ch|▼Menu]
[前50を表示]
600:デフォルトの名無しさん
22/11/02 22:06:28.39 CsBXjP5R0.net
>>599
まず、イミュータブルというのをどう定義するかによると思うけど
(タプルはイミュータブルだが、タプルの中にリストを入れた場合、リストほミュータブルで、リストに変更を加えてもタプルのインスタンスが新しくできるわけではない)
そういうややこしい例を除いても、
イミュータブルならば、値を変えたらidが変わる
値を変えてもidが変わらないならミュータブル
しか言えないんじゃない?

601:デフォルトの名無しさん
22/11/02 22:13:30.31 F9kh54e50.net
定義や実装で何がミュータブルかがころころ変わってはいけなくて、
pythonではどんな環境でも同じものがミュータブルであるべき
で、idが変わる/変わらないが環境依存ならば、idとミュータブルは関係ないことになる

602:デフォルトの名無しさん
22/11/02 22:18:06.81 jyU6y3CY0.net
わけわからん

603:デフォルトの名無しさん
22/11/02 22:20:05.72 yCeW62XuM.net
pythonの辞書ってc++のmapと違って内部でソートされてないからアクセス遅いっぽいんだよね
keysで取り出しても登録した順だし
文字列でも数値でもキーにできるからそういうものなのか

604:デフォルトの名無しさん
22/11/02 22:50:50.14 rAnbDRgM0.net
>>595
最後尾への追加削除がO(1)だったからリンクリストだと思ったけど
リアロケートの実装でどうにかそれっぽくなるんだねぇ
全く気にしてなかったけど、勉強になったわ

605:デフォルトの名無しさん
22/11/02 22:58:46.37 P6hHm0TD0.net
ループで一つずつappendしていくようなコードは、
溜めておいて一気にどーんで高速化できそう

606:デフォルトの名無しさん
22/11/02 23:13:03.99 Vdzb0Lkj0.net
Elixir なんて片方向リストだから、先頭の要素の追加・削除のみ速い。
末尾では全要素をたどる
Ruby は両方向リストだったかな?

607:デフォルトの名無しさん
22/11/02 23:41:13.42 d827SSNz0.net
>>603
pythonの辞書は順番を保持することが仕様で規定されてる

608:デフォルトの名無しさん
22/11/03 00:20:58.38 gcHdWorI0.net
3年くらい前からだっけ?
キーバリューやから順番気にしたことなかったわ

609:デフォルトの名無しさん
22/11/03 00:37:59.14 vWeFXHff0.net
順番が同じだとセキュリティの問題があるから意図的にランダムにしてなかったっけ

610:デフォルトの名無しさん
22/11/03 00:45:24.21 9oLRzF140.net
>>604
C++のvectorとか、JavaのArrayListの典型的な実装だと、リアロケートが発生するときに倍ぐらいの領域を予め確保しておく、ってのが普通って読んだな
コードレベルで読んだ訳じゃないから確たるエビデンスがあるわけじゃないけど。

611:デフォルトの名無しさん
22/11/03 00:49:20.51 9oLRzF140.net
辞書は3.5だかそのぐらいで入れた順になるように仕様が決まったよね
それまではバラバラだったはず
あとソート済みが欲しいならsortedcollectionsがあるんじゃないの
Pythonでパフォーマンス気にするようなコード書いたことないから速くなるかは知らないが
パフォーマンス気になるならもう普通にpybind11よ

612:デフォルトの名無しさん
22/11/03 01:13:09.17 t2qUW0n10.net
動的配列は償却計算量の典型例だぞ

613:デフォルトの名無しさん
22/11/03 09:06:43.51 b87ZSO0X0.net
半島人w

614:デフォルトの名無しさん
22/11/03 13:19:41.92 M31+WIXk0.net
ネトウヨはコードすら書けない

615:デフォルトの名無しさん
22/11/03 17:39:13.22 JzcJhjtx0.net
isPrime(n: int):
__for i in range(2, n//2 + 1):
____if (not n%i):
______return 0
__return 1
numPrimes = 0
for i in range(2, 250001):
__numPrimes += isPrime(i)
print(numPrimes)
cとかだと5秒以下で終わると思うんですが
pythonではどうやって高速化できますか?

616:デフォルトの名無しさん
22/11/03 17:50:53.27 6cc1wOit0.net
全角スペースでインデントするといい

617:デフォルトの名無しさん
22/11/03 17:57:37.28 t2qUW0n10.net
エラトステネスの篩みたいなまともなアルゴリズムを使え

618:デフォルトの名無しさん
22/11/03 18:05:57.27 pngFKRCN0.net
>>615
range(2, n//2 + 1) を range(2, int(n**0.5)+1)
にするだけで速くなると言うのは違うか。
n**0.5 は math を import するのが面倒だっただけ。。。

619:デフォルトの名無しさん
22/11/03 18:12:13.51 Tny9BBIXa.net
しょーもないネタ振り

620:デフォルトの名無しさん
22/11/03 18:58:51.96 Ppt07bQPH.net
>>617
言語間の速度差を埋めたいという文脈で
片方により効率的なアルゴリズム使えというのは筋が違うと思う
それやったら相手のCも早くなるやん

621:デフォルトの名無しさん
22/11/03 19:15:26.76 t2qUW0n10.net
それはそうだけどPythonをできるだけ速くしようというのは徒労に終わるんだよな

622:デフォルトの名無しさん
22/11/03 19:17:29.83 5fumPTTR6.net
>>615
allかanyか使う

623:デフォルトの名無しさん
22/11/03 19:45:13.49 NbsIPyEs0.net
>>620
> 言語間の速度差を埋めたいという文脈で
そうか、単にPythonで高速化したいだけに見えるけど?
> pythonではどうやって高速化できますか?

624:デフォルトの名無しさん
22/11/03 20:09:45.07 6A5YXZlC0.net
>>615
sympy.isprime()

625:デフォルトの名無しさん
22/11/03 20:13:41.27 6A5YXZlC0.net
>>615
そもそもこのプログラムは一行で済む
print(sympy.primepi(250001))

626:デフォルトの名無しさん
22/11/03 20:16:42.18 gDosIilW0.net
SymPy無いさー

627:デフォルトの名無しさん
22/11/03 22:42:51.75 qK/YTuYk0.net
Numpyさぁ

628:デフォルトの名無しさん
22/11/04 11:06:17.40 RgN4dMLC0.net
公式のドキュメント読むと
「pip は推奨されるインストーラ・プログラムです。 Python 3.4 からは、 Python バイナリ・インストーラに最初から付属するようになりました。」
とか見るけど、触る環境どれも最初からインストールされてた試しがなくて手動インストールばっかなんだが

629:デフォルトの名無しさん
22/11/04 11:16:46.46 +Vzk9d850.net
>>628
どこのバイナリインストーラ使ってるの?

630:デフォルトの名無しさん
22/11/04 11:23:08.55 eh042CP4a.net
>>628
たぶん入ってるけど実行ファイルのパスが通ってないんだよ

631:デフォルトの名無しさん
22/11/04 11:26:42.20 iSP9CUI40.net
debianとかはOSのスクリプトを実行するための環境なので
最小限になるようパッケージが分かれている
不便にみえるけどユーザが使う場合はパッケージ外で導入した方が
特定のバージョンも好きにえらべてシンプル

632:デフォルトの名無しさん
22/11/04 13:14:21.89 xdVLdIYL0.net
npm/yarn, Ruby のbundler などは、デフォルトでコマンド実行できるけど
多分これらは、デフォルトで環境変数PATH にあるフォルダにインストールされるのだろう

633:デフォルトの名無しさん (ブーイモ MMdd-uk66)
22/11/04 19:16:21.95 7+yqrzWjM.net
>>628
python -m pipするのが安全やで(pipコマンドだと、複数バージョン入ってると意図したpythonに紐づいてないpipが実行される場合がある)

634:デフォルトの名無しさん
22/11/05 21:26:42.31 MH3sXGrP0.net
pythonつかって紙に書いた文字判別するとかって簡単にできますか?

635:デフォルトの名無しさん
22/11/05 21:34:23.73 7lAZ3AaJ0.net
簡単だけど有料

636:デフォルトの名無しさん
22/11/05 21:51:22.37 MH3sXGrP0.net
>>635
無料のライブラリなんかありませんかね?無いんなら諦めます

637:デフォルトの名無しさん
22/11/05 21:58:26.55 yxkEcNx60.net
>>634
判別とはどういうことをしたいのかよくわからんけどとりあえず python ocr とかでぐぐればいいんじゃね?
URLリンク(gammasoft.jp)

638:デフォルトの名無しさん
22/11/05 21:58:41.35 j6cTC8iG0.net
自分で無料ライブラリーを作る、しか

639:デフォルトの名無しさん
22/11/05 22:07:24.17 MH3sXGrP0.net
>>637
ありがとうございます!

640:デフォルトの名無しさん (ワッチョイ d204-ocuO)
22/11/06 18:38:56.63 hWJeexFN0.net
pythonでなんかかっこいいことがしたいです
でもやることが見つかりません。どうしたらいいですかね
今までポイントサイトをseleniumで自動化したりdiscordのbot作ったり動画編集自動化したりしてきたんですが先というか続きが見えません

641:デフォルトの名無しさん
22/11/06 19:03:47.89 tSvQZNnX0.net
PyPIザッピングして良さそうなモジュールみつけてかっこいい応用を書く

642:デフォルトの名無しさん
22/11/06 19:05:44.66 A20KyXoS0.net
ラズパイでIoT
リアルの物を動かせると、やれる事の幅が広がるよ

643:デフォルトの名無しさん
22/11/06 19:13:43.26 hyDfi3PG0.net
>>640
壁に落書きしてくるのがかっこいいと思ってるんなら大間違いだわw

644:デフォルトの名無しさん
22/11/06 21:07:15.95 hWJeexFN0.net
PyPIで良さそうなモジュール見つけるってどうやるの?
PyPI サイト見てtrend moduleみたいなの適当に選んで説明見ても詳しい使い方がわからない

645:デフォルトの名無しさん
22/11/06 21:15:54.96 2BZA6H+N0.net
電子工作もそうだけど、環境は整いすぎに整ってて、やりたいことがあれば何でもすぐにできる
でもやりたいことが見つからない
さてはみんな環境を整えることを目的にしているな

646:デフォルトの名無しさん
22/11/07 06:48:18.34 E9VDXcWoM.net
アホな質問だな~
まずやりたいことがあって、それからツールを探すものだろ

647:デフォルトの名無しさん
22/11/07 08:02:58.71 jFHCFA25a.net
その通りだけどやりたいことが見つからないんだわ
もしかすると勉強からの逃避のためにプログラミングという逃げ場を作りたいのかもしれない。やりたいことが自然と出てきたらやることにするよ

648:デフォルトの名無しさん
22/11/07 08:09:59.84 nVmoLWqcM.net
遠回りの人生それも人生

649:デフォルトの名無しさん
22/11/07 10:49:11.04 vghVm0yU0.net
巨大数の実数計算は最先端だぞ。

650:デフォルトの名無しさん
22/11/07 14:36:29.74 ns7213lX0.net
>>634
EasyOCR は?
pytorch必須だが

651:デフォルトの名無しさん
22/11/07 14:48:18.41 a5k3bCTy0.net
使い物になるOCRはみんなAIで有料なんだよな
客はDXしたい企業だから高い

652:デフォルトの名無しさん
22/11/07 15:15:22.15 dmSTAQ160.net
料金みたことある?業務で考えたらめちゃ安いとおもうが

653:デフォルトの名無しさん
22/11/07 15:26:05.72 kmERiYaX0.net
有料OCR知ってる俺スゲー君なんて相手にすんなよ...

654:デフォルトの名無しさん
22/11/07 15:26:54.13 a5k3bCTy0.net
OCRしたい書類なんて有限だから、あらかた終わったら需要が無くなる
そしたらgoogle様が無料開放してくれる筈

655:デフォルトの名無しさん
22/11/07 15:41:01.53 rtBnyCPM0.net
Pythonが「メインの利用言語」で2位にとどまる、1位に立ったのは定番のあの言語
URLリンク(xtech.nikkei.com)

656:デフォルトの名無しさん
22/11/07 15:51:46.76 a5k3bCTy0.net
AIだから教育が必須で、それなりにコストがかかる
こんなもんは公共事業で、どこかが代表してやって、コスト回収できたら無料化する
各国で自分のとこの言語についてやるのが筋だけど、
どうせ日本はやらないのでgoogleがやる

657:デフォルトの名無しさん
22/11/07 16:22:49.11 a5k3bCTy0.net
似たようなので、音声からテキストへの変換も金かかる
あれが無料で出来たら過去の膨大な音声や動画の資料が検索したり分析可能になって、
文化が大きく前進するだろうに金がブレーキかけてる
国の事業としてやれば一人頭の負担なんて微々たるものなのに

658:デフォルトの名無しさん
22/11/07 16:28:42.14 ns7213lX0.net
この夏whisperが公開されたやろ?

659:デフォルトの名無しさん
22/11/07 16:32:21.66 a5k3bCTy0.net
そんなのあったのか
マスク様々やな

660:デフォルトの名無しさん
22/11/07 16:46:46.72 6QND4EcV0.net
>>655
Rubyオワコン

661:デフォルトの名無しさん
22/11/07 21:52:40.91 J6xutGri0.net
>>657
つまり文字起こし言いたいんだろ?
なんかクソ認識悪いAPIだったら何かあった気がする

662:デフォルトの名無しさん
22/11/08 10:16:17.14 gvBOR9qA0.net
半島系帰化人は強姦魔ばかり
死ねよクズ帰化人!

663:デフォルトの名無しさん
22/11/08 11:03:03.92 NJ3yWFAyM.net
何でこのスレで暴れてるんだよ

664:デフォルトの名無しさん
22/11/08 11:17:25.58 Z/fTsurM0.net
壊れちゃったんだろ

665:デフォルトの名無しさん
22/11/08 14:10:32.60 SId0EMb3a.net
ランダムに書き込んでるbotだよ

666:デフォルトの名無しさん
22/11/08 19:27:53.62 h+Zmgne00.net
有料と言ってもgoogleAPIってかなり安いと思うんだけど
手持ちの本数十冊OCRして1,000円いかなかった気がする

667:デフォルトの名無しさん
22/11/09 17:03:12.36 a7tugATP0.net
某有名ゲーム会社で働いてる友人が、「Pythonではあまりクラスを使うべきではない。
それほど高度なプログラムでなければ関数を使えばいい」と言っていたんですが、
そうなんでしょうか?
皆さんの意見を聞かせて頂きたいです

668:デフォルトの名無しさん
22/11/09 17:08:46.66 F89FAkjE0.net
関数でできればいいけど、引数たくさん渡したり、グローバル変数で渡してたり、
みたいな汚いことするくらいならクラスがいい

669:デフォルトの名無しさん
22/11/09 17:30:19.69 PaG6ZUsK0.net
Javaのようになんでもかんでもクラスを作る感じじゃないというのは事実。
でも、dataclassとかnamedtupleとかは使うかな。
とはいえやることによると思う。

670:デフォルトの名無しさん
22/11/09 17:30:52.94 ugvw1ns9a.net
状態を持つオブジェクトを扱うならクラスは必然なのでは

671:デフォルトの名無しさん
22/11/09 18:12:18.95 uDSXzENKM.net
pythonはメンバ変数にself必須なのがダルい
メインプログラムまでクラス化する必要はないと思う
規模が小さければモジュール変数をグローバル変数のように使うのが便利
vscodeならインテリセンス利くし

672:デフォルトの名無しさん
22/11/09 18:40:16.27 cOB3Ubn30.net
>>667
プログラム水準(?)の高低でなく、実行速度の遅速でそう言われるのを聞いたことはある。大昔ね。
事実かは知らぬ。

673:デフォルトの名無しさん
22/11/09 18:59:13.95 2JAkKfpeM.net
>>667
使うべきでない理由をなぜ聞かなかったのか?
それを書けば話は終わる
君の友人ほどスキルのある人はここにはいないからな

674:デフォルトの名無しさん
22/11/09 20:24:05.09 FPtq7UfL0.net
>>667
必要になるまで不要なもので汚すな
シンプルに書けってことかと

675:デフォルトの名無しさん
22/11/09 20:51:46.35 yZGUhxlRM.net
>>671
だなselfを二文字くらいの別名に出来ないのかな?

676:デフォルトの名無しさん
22/11/09 20:56:49.26 F89FAkjE0.net
perlから来たからselfは当たり前だと思ってる

677:デフォルトの名無しさん
22/11/09 21:06:27.04 EoOj57gu0.net
開発者間で同意取れるなら
ただの関数の引数だから好きに変えられはする

678:デフォルトの名無しさん
22/11/09 21:10:50.26 5c+x4O200.net
>>667
理由を示さないお作法は無視していい

679:デフォルトの名無しさん
22/11/09 21:21:40.38 uDSXzENKM.net
グローバル変数用のファイルを作ってas gでインポートってのをqiitaで見たけどかなり便利
g.nameみたいにアクセスする

680:デフォルトの名無しさん
22/11/09 21:30:42.42 F89FAkjE0.net
それは他に影響しないというだけで、グローバル変数の欠点は何も解決しない
作って使ってすぐ捨てるならいいけど、保守が必要なら時間かけてシンプルにしとかないと

681:デフォルトの名無しさん
22/11/09 21:48:48.07 dM0Gb0+w6.net
>>675
すればいいじゃん

682:デフォルトの名無しさん
22/11/09 21:57:03.34 uDSXzENKM.net
グローバル変数はプログラム全体を通した設定値とかに使うもんじゃない?
それこそメインプログラムにとってのselfよ
変に引数取りまくるより可読性高いと思う
規模にもよるんだろうけど

683:デフォルトの名無しさん
22/11/09 22:03:03.05 F89FAkjE0.net
configを読んでグローバルに格納してmain()を呼ぶ
みたいな作りになってるのが多い
うちのスクリプト

684:デフォルトの名無しさん
22/11/09 22:10:05.03 EoOj57gu0.net
設定値の保持ならぜんぜんOK
状態を丸見えで管理できないとこに置くなってことでしょ

685:デフォルトの名無しさん
22/11/09 22:13:24.86 F89FAkjE0.net
関数の中に下請け関数があって、
なんかごちゃごちゃしてきたからリファクタリングだと外に出したらスコープから外れたので、
じゃあみんなグローバル化したれ、みたいにglobal付けて誤魔化す

686:デフォルトの名無しさん
22/11/09 22:23:48.43 dM0Gb0+w6.net
せめてconst できればいいのに

687:デフォルトの名無しさん
22/11/09 23:03:08.26 a3eCQ+jX0.net
>>667
どうせ、いたずらにclassを多用したゴミトランプゲームを
見せたんだろ?いつまでも練習だからって言って、設計もしないで
ゴミコードを見せ続けるから嫌われかけてるんだよ。

688:デフォルトの名無しさん
22/11/10 00:21:13.04 8bOle1Do0.net
クラス化するのは、言語のタイプやプロジェクトの規模ではなくて
データ同士の相関を元に、見通しをよくすることが目的だと思う
あるいは自分用ライブラリとしてカプセル化しておきたいとか
そういう話を置いて、やらない方がいいレベルの問題があるのかw

689:デフォルトの名無しさん
22/11/10 00:21:46.71 a0I25TkAM.net
>>667
理由を示せないお作法は取るべきでない

690:デフォルトの名無しさん
22/11/10 00:24:11.32 KkTOa1Su0.net
>>667
おまいは友人に言われた事を何でも信じるのか?
この洗剤飲めるの。by アム・○○ぃ

691:デフォルトの名無しさん
22/11/10 00:27:36.22 OBeQnBIU0.net
匿名掲示板で聞いて得た答えを信じるというのもどうかと思う

692:687
22/11/10 00:32:26.74 ofaAiG0L0.net
レスしてくれた皆さんありがとうございます
参考にさせて頂きたいと思います
>>669
CUIの簡単なカードゲームではどうでしょうか?
>>673
失礼しました
曰く「クラスを下手に使わない方がコードが無駄に複雑にならなくてよい」
からだそうです
>>674
まさにそんな感じです
>>678
ちょっと彼に悪いかなって…
>>687
ゴミときたもんだ
彼の人柄はそんな感じじゃないよ

693:デフォルトの名無しさん
22/11/10 10:45:10.57 S46ME7RY0.net
ねえ、openpyxlとかでオンライン上のExcelファイルを修正できないの?

694:デフォルトの名無しさん
22/11/10 10:49:29.30 +lvrwnnZ0.net
どこかのクラウド(どこ?)に置いたファイルの意味なのか
Office365で作成したファイルなのか

695:デフォルトの名無しさん
22/11/10 11:02:13.25 ci7p4+PJa.net
どっちにしても手元に持ってこないと厳しいんじゃないかねえ

696:デフォルトの名無しさん
22/11/10 11:46:55.13 rDE3wZvsM.net
関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。

697:デフォルトの名無しさん
22/11/10 11:47:43.94 rDE3wZvsM.net
>>675
好きな名前をつけていいのよ。meとか

698:デフォルトの名無しさん
22/11/10 13:09:31.60 ci7p4+PJa.net
abcを使わないとできんことはあまりやりたくないねえ

699:デフォルトの名無しさん
22/11/10 13:26:04.03 tUNuHkwK0.net
abcは知ってても

700:デフォルトの名無しさん
22/11/10 13:50:13.84 99QPf7Vaa.net
>>696
> 関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。
なら初めからそう言えや
まあそう言われたら適切な方の決め方について小一時間は問い詰めたいけどなw

701:デフォルトの名無しさん
22/11/10 15:41:21.49 avJI0YX/0.net
>>693
teamsで出来るぞ

702:デフォルトの名無しさん (アウアウウー Sacd-obsI)
22/11/10 16:33:33.24 99QPf7Vaa.net
>>701
マジで?
やり方教えて

703:デフォルトの名無しさん (ワッチョイ 09f0-Z1Pq)
22/11/10 16:41:09.55 avJI0YX/0.net
>>702
teamsに申し込んでoffice365に申し込めばクラウド上でエクセルが使えます

704:デフォルトの名無しさん
22/11/10 17:38:31.76 aw2UCTg8M.net
>>692
カードゲームならカードクラスは作ったほうがよさそう。
あとはカードゲームのルールによる。

705:デフォルトの名無しさん
22/11/10 18:14:06.31 y5PDmjdo0.net
>>704
687が戒めたいのがまさに724みたいな馬鹿野郎なんだろうな。
目的と手段が入れ替わってclass考えて作るのに必死になる馬鹿。

706:デフォルトの名無しさん
22/11/10 18:34:12.90 RApG3JqD0.net
カードクラス作ってもいいけど、同じカードが存在しない、記号4つと数字1〜13の組み合わせの
ものにクラスがいちいちいるかな。
カードクラスはカード1枚を表して、なにができればいいんだ?
記号クラスがあって、各記号クラスがあって、ナンバークラスがあって、
is_MarkMatchとかis_NumberMatchとかもってんの?
idとprintがあればいいのかな。まあいいけど、そんだけのために
classいちいち用意するのめんどくない?
複数枚のカードを扱うcardsクラスなのかな?機能はいろいろ持てそうだけど
ゲーム固有すぎてどうなのかな?

707:デフォルトの名無しさん
22/11/10 19:12:07.27 /sng0JalM.net
可読性考えるとクラスのほうが良いわな
自分だけが使うなら好きに作ればいい

708:デフォルトの名無しさん
22/11/10 19:17:47.15 tUNuHkwK0.net
自分だけが使う場合でも後々困る
読みにくくていいのは再利用しないと判ってる場合

709:デフォルトの名無しさん
22/11/10 19:47:31.93 eS5awfmL0.net
>>705
689だが、トランプはクラスを作った方が(少なくともnamedtuple,dataclass)便利だと思うぞ
>>706
記号クラス、番号クラスなんて作らない
記号はenum、番号はそのまま1~13でいい
が、どの記号が黒だ赤だ、どの番号が絵柄か(JQKA)
みたいなのはたとえインスタンスが一個でもメソッドになってた方が便利だと思うけどなあ。
カードは内部表現とUI上の表現が異なるのが自然だし、そういう意味でもクラスにしておくのは悪くないと思うが
クラスにしすぎてもしょうがないというのは、ゲームのルールをクラスにして共通のインタフェース持たせて、バリエーションを切り替えられるようにしても大抵は仕方ないみたいなことだよ
もちろん、どんなゲームシステムを作るかによるし、ルールを共通インタフェースで入れ替えられるようにするメリットがある場合もあるけど

710:デフォルトの名無しさん
22/11/10 20:15:59.37 1wmpgP/ea.net
>>706
ちょっと発想が変だよ

711:デフォルトの名無しさん
22/11/10 20:18:11.54 TQxJo3Q4M.net
全てユースケース次第じゃね
13×4のブール配列で持っていたほうが都合がよい場合もあるだろうし

712:デフォルトの名無しさん
22/11/10 21:05:35.45 tUNuHkwK0.net
とりあえず作って、必要に応じてリファクタリングしていけばいい

713:デフォルトの名無しさん
22/11/10 22:35:47.17 SvDTIviz0.net
カード型のインスタンスを生成するデッキクラスを作りたいやん
deck.suffle()
hands = deck.draw(5)
みたいなさあ
あとは各ゲームで処理つくろ

714:デフォルトの名無しさん
22/11/10 22:41:30.18 tUNuHkwK0.net
カードのリストでよくね

715:687
22/11/10 23:28:06.08 ofaAiG0L0.net
多くのレスを頂き、ありがたく思います
ちょっと自己顕示欲が強い気もしますが、俺のGitHubを公開させて頂くので、
よろしければご覧下さい
URLリンク(github.com)
のblackjack_3.pyがそれです
これでもクラス使わないで書けるのかな…

716:デフォルトの名無しさん
22/11/11 00:15:20.89 ajyQllPs0.net
力作だね
友人のアドバイスは痛いほどよく分かる
クラス云々よりも「ここからメインの処理」以降の各処理を関数にまとめるほうがずっと大事だよ

717:デフォルトの名無しさん
22/11/11 00:21:32.63 gNt5qX/T0.net
1関数がでけえ
ということを言いたかったんだろう

718:デフォルトの名無しさん
22/11/11 00:23:24.86 Zi2NVkwv0.net
マサくん

719:デフォルトの名無しさん
22/11/11 00:52:49.95 5ErmYwLs0.net
何のためにでっかい関数の中にクラス作るのか分からん
この設計センスなら友人のアドバイスは正しいな

720:デフォルトの名無しさん
22/11/11 00:55:17.73 n0j9oGtca.net
blackjackで囲むのって意味あんのかね

721:687
22/11/11 01:14:49.41 9Wk/PRlY0.net
レスありがとうございます
>>688
クラス使った方が見通し良くなりますよね?
スッキリJavaにもそう書いてありました(Pythonの本ではないですが)
>>689
複雑にならない方がいいからだそうです
>>690
ええ、ですので皆さんの意見をお聞きしたんです
>>691
うーん、明らかにプロと思われる方の書き込みもありますし、
信じられるレスはあると思います
>>696
ただ彼の主張では、なるべくクラスは使うな、ということでした
Javaを独習した経験がある俺からすると、少し疑問符が付くのです

722:デフォルトの名無しさん
22/11/11 01:21:10.00 n0j9oGtca.net
クソクラスをクソと認識できるためにもそれなりの能力が要るからね

723:687
22/11/11 01:28:18.01 9Wk/PRlY0.net
>>704
そうですよね
カードのクラス作りました
>>706
複数枚のカードを持つCardクラスです
ブラックジャックなので、A・J・Q・Kの値は別に決める必要があります
>>707
可読性は重視したいです
>>716
そう言って頂けると大変ありがたいです
やっぱりそこは1つの関数にまとめた方がいいんですね
>>717-720
それも友人に、グローバル変数は少なければ少ないほどいい、と言われたのを
受けてのことです

724:デフォルトの名無しさん
22/11/11 01:39:45.03 tK9Svk7P0.net
>>715
ざっと見た感じ、そりゃ色々言われるわ
クラス云々言ってるのに、blackjackっていうデカい関数の中にクラス切ってる時点で吹いたわ
あとクラスの役割分担というか、所属してる関数もおかしく感じるわ
プレイヤークラスっていう名前なのに、にルール関係のスコア計算、バースト判定とかが入ってるし
それこそblackjackのルールを管理をするクラスを作る方が自然だべ
あともうし自分で書くとしたら、ルールクラスにis_winっていう関数作って、そこで勝利判定してtrue/falseで返すわ
最後に全パターンで人間/CPUに対して勝利判定かけてるけど、参加プレイヤー/CPUが増えた時の勝利判定の実装とか
これベースだと面倒だろうなって思った

725:デフォルトの名無しさん
22/11/11 01:43:33.89 tK9Svk7P0.net
>>723
>グローバル変数は少なければ少ないほどいい
これはまず変数のスコープは狭い方が良い、っていう話だぞ
(グローバル変数だとそれこそスコープが広くてどこで書き変わるのかが不明瞭になるから、なるべく使うなって言われてる)
バカデカい関数を作るって何の解決にもなってねえwwwwwww

726:デフォルトの名無しさん
22/11/11 05:10:58.43 dIH3TsNBM.net
使い回さないのに関数化やクラス化する意味ってあるんだろうか

727:デフォルトの名無しさん
22/11/11 06:45:32.82 fLgBQpEC0.net
is_<動詞> ってたまに見るけどどこかで流行ってるの?

728:デフォルトの名無しさん
22/11/11 07:35:28.77 BuWtLPbxM.net
>>726
この業界には、「一処理は100行に収めるべし」という格言があってな
つまり100行以上の処理があったら、100行以内にぶった切って関数にして順次呼ぶべしってことなんだよ
理由は知らん

729:デフォルトの名無しさん
22/11/11 08:51:38.78 QYmFVFm/a.net
まあ分割っていうか処理に名前つけろやって感じだな
抽象的に書こう

730:デフォルトの名無しさん (ワッチョイ 7247-GkOZ)
22/11/11 09:56:03.89 gNt5qX/T0.net
でかい関数はあれもやってこれもやってになってるから、
それを機能毎に分割すればいいだけ
1箇所からしか呼ばれない関数がいくつもできるけど、それは問題ない

うまく作ってあれば、関数の戻り値を次の関数に渡すだけ、みたいなシンプルな構造に自然となる
それぞれの機能が変数をいろいろ共有していて切り分けられなかったら、元々の書き方が悪い

731:デフォルトの名無しさん (ワッチョイ 927e-THRA)
22/11/11 10:26:37.58 XH1qJoq+0.net
pythonではクラスをあまり作らないほうがいい、じゃなくて
お前にクラスは百年早い、って言いたかったんだろその友人は。
碌に関数も作れないのだからクラスなんて無用の長物。

732:デフォルトの名無しさん (ワッチョイ 9263-zlm6)
22/11/11 10:31:34.23 PAETAgDl0.net
昔、関数ごとに仕様書作成が必要な現場があって、それを嫌って
ほとんどの関数が200行を超えるサイズで書かれる様になった

733:デフォルトの名無しさん (ワッチョイ 7247-GkOZ)
22/11/11 11:00:27.63 gNt5qX/T0.net
テストができんやろ

734:デフォルトの名無しさん (ワントンキン MM62-76so)
22/11/11 11:32:04.24 dIH3TsNBM.net
文書をアウトライン化するような感じで使うのね
メンテのときに不要な部分を読み飛ばせるのがメリットか

735:デフォルトの名無しさん (ワッチョイ 36a6-BGGY)
22/11/11 11:49:07.64 VSBKZoKf0.net
何か楽をするためのプログラムを作るのはいけるけど、
サイトの仕様変更で動かなくなったときの修正が苦痛だな、、
そのまま放置になりがち、、

736:デフォルトの名無しさん
22/11/11 11:59:14.38 gNt5qX/T0.net
スクレイピングはそのうち廃れる気がする
元データがあって人間用に加工して表示したものをまた元データに戻さなくても、
最初から元データで公開した方がお互い楽なことに気づき始めた

737:デフォルトの名無しさん
22/11/11 12:00:41.38 L/uUC/Rw0.net
C++でキー処理が数百行で、しかもファンクションキー毎に少しづつ違う
という構成のものを改修させれて辟易したことある
もしや、行数で成果が評価される現場だったのか

738:デフォルトの名無しさん
22/11/11 13:05:05.34 XH1qJoq+0.net
>>736
人間向けのHTMLを解析すれば無料なのにAPI経由は有料ってのも多いしな。

739:デフォルトの名無しさん
22/11/11 13:20:52.45 wT5HNNmtr.net
Python勉強してるけどどうやって初心者の粋を超えたらいいのかが分からない
何か作りたいけどその何かが思い浮かばないし
自動で巡回してエロビDLするとか電子書籍自動でスクショとかできるんだっけ?

740:デフォルトの名無しさん
22/11/11 13:23:31.34 RyfBFStrM.net
やってから聞けばいいのに

741:デフォルトの名無しさん
22/11/11 14:22:12.06 Pyb1B8zp0.net
>>739
早速思い浮かんでるじゃん
誰かができないと言うからやらないというなら何の勉強にもならない
明確な目的が無く勉強自体が目的なら機能しないゴミしか作れなくても意味があるし思い浮かんだもの全部作ればいい

742:デフォルトの名無しさん
22/11/11 14:23:36.91 JQ5LhQOs0.net
>>736
もしかして、APIが存在しない世界から来た方ですか?

743:デフォルトの名無しさん
22/11/11 14:29:46.62 JQ5LhQOs0.net
別に既にあるものでも構わないから、何か作りたいというモチベーションがある内に色んなものを作った方がいい
独学は特に大事

744:デフォルトの名無しさん
22/11/11 14:34:12.48 JQ5LhQOs0.net
途中で奥ちゃった
そしたら、次に何か新しいもの作りたくなった時に何が足りないか自分で調べられるぐらいにはなってると思う

745:デフォルトの名無しさん
22/11/11 15:20:48.12 KvbVlUc20.net
奥り人なんだな

746:デフォルトの名無しさん
22/11/11 19:48:45.92 acI+Bjnd0.net
クラスを設計するのはものすごく難しい
作り始めないとわからないことも多いし
途中で仕様が変わったりしたら
簡単に破綻する
大きなプロジェクトでは
途中でクラス構成を変えることは
困難なので
しばしば大変なことになる

747:デフォルトの名無しさん
22/11/11 21:01:39.50 BuWtLPbxM.net
>>739
この前も同じこと言ってる人がいたよ
作りたいものがないのでなんかアイディアないですかって
まず、何のためにPythonを勉強しているのか聞きたい
普通は作りたいものがあったり、仕事だから、課題だからという
動機があるはずなんだ
動機もなく身に着けられるものじゃないよ。プログラミングは一応専門技能だから

748:デフォルトの名無しさん
22/11/11 21:43:58.80 zIrG+C10M.net
自分探しして働かない奴と同じだよな

749:デフォルトの名無しさん
22/11/11 21:51:56.55 7hjsWVqY0.net
>>746
最初から完璧な要件・設計で開発なんて不可能だから
途中で構成変わる前提で組み立てるんだよ
クラスに限った話じゃないけど

750:デフォルトの名無しさん
22/11/11 22:08:17.04 dIH3TsNBM.net
インスピレーションを得るなら多くの作品に触れることでしょ

751:デフォルトの名無しさん
22/11/11 22:16:07.93 PAETAgDl0.net
プログラムやりたいと思った動機ってそれぞれあるだろう

752:デフォルトの名無しさん
22/11/11 22:26:55.54 6yLWq/6IM.net
ズボラほど上達が早いように思う
やりたくないことは全部コンピュータにやらせたい

753:デフォルトの名無しさん
22/11/11 23:18:07.02 ywa4HP4la.net
現実は必死に努力してQiitaにちょっとやってみたーみたいなこと書いてるやつばっかりだけどな

754:デフォルトの名無しさん
22/11/11 23:19:39.80 ywa4HP4la.net
部品の置き換えが利くってのは完璧なプログラムとほとんど同義だね
具体的にねっちょりと書くしか無いこともあるけど

755:デフォルトの名無しさん
22/11/12 11:00:15.35 jZf8/3In0.net
質問です。
これをヘッドレスモードで動かしたいのですがどうするといいでしょうか?
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
browesr = webdriver.Chrome(ChromeDriverManager().install())

756:デフォルトの名無しさん (ワッチョイ 2389-UXd1)
22/11/12 11:41:37.67 jZf8/3In0.net
すいません。
解決しました。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
browesr = webdriver.Chrome(ChromeDriverManager().install(), options=options)
browesr.quit()

757:デフォルトの名無しさん
22/11/12 13:03:04.39 FJxDQgNh0.net
ちゃんと終わってる筈なのにタスクマネージャに残るんだよな

758:デフォルトの名無しさん
22/11/12 14:06:44.73 QoJFyqg+0.net
async関数の終了を2箇所で待つ方法は無いですか?
普通にawaitを2回使うと既にawaitedした処理だぜってエラーが出ます。

759:デフォルトの名無しさん
22/11/12 14:23:25.37 ToW7pe8/0.net
答えは持ち合わせてないけど同じことを考えたことあるな

760:デフォルトの名無しさん
22/11/12 14:24:45.91 T1+EK47n0.net
エラーなんか無視する

761:デフォルトの名無しさん
22/11/12 15:22:28.94 QoJFyqg+0.net
>>760
エラー握り潰しても、肝心な処理待ちが出来ないので駄目です。

762:デフォルトの名無しさん
22/11/12 15:46:37.70 AXYSbt7W0.net
メモ化する関数でラップ
頻発するならデコレータ書く

763:デフォルトの名無しさん
22/11/12 15:58:01.40 pkT2sKDg0.net
>>736
廃れないよ。Webって広告で成り立っている基本人間向けの情報発信ツールなんだから、人間向けのデータ(文章とかね)のスクレイピングは依然として残る。
APIは有料というのは広告収入につながらないから割と当たり前の話で。
利益を目的としないデータ公開はオープンデータ化していくだろうけれど、そういうのって政府や自治体のデータ公開、大学などぐらいしか基本的にはないだろう。

764:デフォルトの名無しさん
22/11/12 15:59:27.93 QoJFyqg+0.net
>>762
メモ化だと結果は再利用できますが、同時に待つことができないように思います。

765:デフォルトの名無しさん
22/11/12 16:11:11.71 2L2Z04CZ0.net
>>758
task = asyncio.create_task(async_fn())
result = await task
result = await task

766:デフォルトの名無しさん
22/11/12 17:58:24.29 QoJFyqg+0.net
>>765
うまく行きました! ありがとうございます!
TaskというのがJavaScriptのPromiseみたいな事してくれるんですね!

767:デフォルトの名無しさん
22/11/13 15:06:45.34 mAjRS9pi0.net
なんでOpenCVはちょっとしたことでぶっ壊れるんですか?

768:デフォルトの名無しさん
22/11/13 19:56:00.79 S7gZHHW/.net
_max=7
_min=3
a=2
if a>_max:
 a=_max
elif a<_min:
 a=_min
print(a)
これってもっとスマートに書けませんでしたっけ

769:デフォルトの名無しさん
22/11/13 20:10:07.19 S7gZHHW/.net
ちなみに0を含む自然数で
range(_min,_max,1)
です
これの範囲外は判定できるのですが
_minより小さく外したのか、_maxより大きく外したのか
って一行で短く書けなかったかな、と。
記憶違いかもしれません、無かったような気がしてきました

770:デフォルトの名無しさん
22/11/13 20:12:10.16 cgKyROyF0.net
a=max(min(a,_max),_min)

771:デフォルトの名無しさん
22/11/13 20:16:44.58 S7gZHHW/.net
>>770
できました!!
そうですこれです!
_max=7
_min=3
for i in range(10):
 print(i,max(min(i,_max),_min))
ありがとうございます!!

772:デフォルトの名無しさん
22/11/13 20:31:52.48 J0JT7kUN0.net
>>767
それ依存関係が壊れてるからじゃね?

773:デフォルトの名無しさん
22/11/13 20:32:48.89 xH4HHaxN0.net
最近excelで、答えがマイナスなら0にする、という処理がめんどくさいと思ったけど、
max(0,x)でシンプルに書けた

774:デフォルトの名無しさん
22/11/13 20:47:55.89 ZI0YVyVbM.net
>>770は一見何をやっているのか、やりたいのかわからんし
メンテナンス性が悪そうだ
>>768の方はわかるし改造しやすい
コードは短ければ良いというものではないな

775:デフォルトの名無しさん
22/11/13 21:04:49.96 xH4HHaxN0.net
やりたいことをまず自然言語で書く
minとmaxの範囲内ならそのまま出力
範囲外ならばminとmaxでガードする
これだけの情報量があるので、コードがそれなりの長さになって当然

776:デフォルトの名無しさん
22/11/13 21:55:42.10 tnJyg4LP0.net
コードゴルフは面白いけどコミットはしないで欲しい

777:デフォルトの名無しさん
22/11/13 22:26:40.02 0j2qr49h0.net
>>768
np.clip(array, _min, _max)

778:デフォルトの名無しさん
22/11/13 22:58:00.99 6O/r8caVM.net
何がコードゴルフかはジャンルにもよるよなあ。シェーダーなんかだとminmaxみたいなのは常套句みたいなものだし、
pythonの内包表記もちょっと凝り出すとコードゴルフ的になる。コーディングガイドラインがあればいいけどね。

779:デフォルトの名無しさん
22/11/13 23:21:42.99 m9TsWVuY6.net
>>774
さすがにこのくらいはグラフ考えて分かってよ

780:デフォルトの名無しさん
22/11/13 23:47:29.33 6O/r8caVM.net
まあ、minmaxの良くないところは、慌てて順番反転させたりする事故が起きると何もクリップしてくれなくなるところなんだけど(良く使うなら関数化しておくべき)
とはいえ、minmax的なのNGって、関数型言語全否定に近いものがあると思うんで、その立場でいいのかは考えるべきだと思うけど。
もちろん手続き型メインのPython使ってるんだからPythonではそんなのお門違いだという意見も否定はしないけど

781:デフォルトの名無しさん
22/11/14 00:16:33.72 RdGM128m0.net
maxとminでもいいと思うけど
頻繁に使うならclamp(val,lo,hi)みたいな関数作ればいい

782:デフォルトの名無しさん
22/11/14 02:35:12.38 Msnzn9MH0.net
初コメです。質問させてください。
ウィジェットに、押すとnotepad.exeを起動するボタンを作ったのですが、起動したテキストに文字を書き込む(テンプレート)ボタンを作りたいのですが、どのようにすれば良いでしょうか…

783:デフォルトの名無しさん
22/11/14 06:45:05.17 gWXr0Wl00.net
>>782
PyAutoGUI
内容次第ではPythonやめてAutoItだけの方が楽

784:デフォルトの名無しさん
22/11/14 08:17:37.42 z4y/4erZ0.net
AutoItとかAutoHotKeyとかキーボードやマウスをプログラムから操作して
自動化するツールはいろいろあるけど、
どれが最強なのか今ひとつ判らない
簡単にする為に出来ることを減らしていたり、
いろいろできるけど言語仕様が原始的すぎたり
pythonと同じ書き方ができて出来ないことがないのが理想

785:デフォルトの名無しさん
22/11/14 11:56:34.09 EWF0SvAna.net
対象のプログラムやウィンドウが背面に行ったり最小化されててもちゃんと動くかどうかで選べばいい

786:デフォルトの名無しさん (アウアウウー Saa9-OAfI)
22/11/14 12:07:38.76 K3emCbowa.net
対象プログラムが背面にあっても動くってウインドウハンドルにSendMessageを直接送る感じ?


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

478日前に更新/241 KB
担当:undef