【まず1嫁】くだすれPython(超初心者用) その56
■ このスレッドは過去ログ倉庫に格納されています
当スレに★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公式◇ http://www.python.org/ ◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi 〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その55 https://mevius.5ch.net/test/read.cgi/tech/1633070807/ 次スレたては >>985 あたりが挑戦する。 ### END OF TEMPLATE ### 「python gui 方法」みたいにぐぐれば色々ヒットするよ pythonにこだわりないならc#とかほかの言語の方がウインドウ作ってとかはやりやすいと思う >>357 俺も初心者だけどイベントハンドラーとか? guiって言うのか やれそうな気してきた、ありがとう そんなに難しい事をするつもりはない(出来る気もしない)から言語に拘りはないけど、どうせ触るなら時代に乗ってそう?で分かりやすそうなのが良いかなぁと GUIって意外と難しいぞ 非同期処理なんとなくわかる程度まで行かないと厳しい ボタン置くだけならJavascriptが一番楽 ブラウザとテキストエディタがあればいい。 >>357 わしも初心者ですが... ボタンとかプルダウンメニューとかマウスを使う前提の環境 = gui ボタンとかの部品 = ウィジェット それらを使うためのサブルーチン群 = guiツールキット ボタンが押されたとかの出来事 = イベント ボタンとか配置するソフト = guiデザイナ pytyonはguiツールキットが多すぎるぐらい恵まれてます。 わしはpyqt5使っております。ほかはtkinter、WxPython、pygtk、Kivy が有名。 でも意外と楽ちんなデザイナが少ない気がします。 pyqtのqtデザイナ、tkinterのPAGEが使いやすいかと思います。 guiキット恵まれてんのにexe配布が絶望的… 頼むからpyinstallerちゃんダイエットしてくれや 最初からexe配布が視野に入ってるなら 処理的にどうしてもpython必須ってんじゃない限り 別の言語使った方がいい >>368 今のところそんな予定は全くないんだけど、 例えば何の言語だと便利なのがあるの? 皆さまありがとうございます、皆様のおかげで問題は解決しました https://atcoder.jp/contests/abc241/tasks/abc241_a この問題で、 i=0 A=[] B=[] for i in range(10): #### list assignment out of range が次の行で出る B[i]=input('A[i]を代入してください') A[i].append(int(B[i])) if A[i]<= 9: i +=1 else : B[i]=input('もう一度A[i]を代入してください') print(A[A[A[0]]]) 何がout of range なのでしょうか? B=[] ←要素数ゼロで初期化 B[i]= ←i番目の要素に代入。だから要素数の範囲(レンジ)からアウトしてる >>373 ありがとうございます、 つまり最初に有限この要素のリスト B=[0,0,0,0,0,0,0,0,0,0]を作っておいて後からそれらの値に代入すれば問題は解決されるのでしょうか?それが一番いいやり方でしょうか? >>374 数字が1個ずつ渡されると勘違いしてる前提だとしても Bをリストする意味ないしi = 0 や i += 1するのも意味がないよ 入力は1行で10個の数字が渡されるから 直接splitして各要素を数値にしてlistとして変数に代入すればいい このタイプの入力はいつも内包表記でやってるな a = [int(i) for i in input().split()] パイソン学べばアプリ作れると思ってはじめてみたけど パイソンは言語のひとつであってそれだけではアプリを作れないんだね Pythonのライブラリも学べば、限界はあるが色んなアプリが作れるど デスクトップアプリはあまり作り易くないな tkinter使えばいいけど >>380 そうだよ Pythonに限らず言語学んだだけではアプリは作れないよ むしろサーバー設置してそこでブラウザ経由で動くアプリ作るのが一番いい >>384 > Pythonに限らず言語学んだだけではアプリは作れないよ これは正しいけど > パイソンは言語のひとつであってそれだけではアプリを作れないんだね とは違う話だろ 奥が深い話だな というか考えるレベルによって変わる バカなこと言えば、phthonマスターしてても端末やOS電源なんかが必要だから、pythonだけじゃアプリを作れない 多少まともなこと言えば、C++マスターしててもWin32APIなど知らないとWindowsGUIアプリ作れないみたいに、アプリ作るには言語以外の知識も必要になる アプリっていうのはGUIアプリのことかな? CUIだって立派なアプリよ アプリってのはアプリケーションソフトのことやで 日本語に訳すとは自分で調べてみてね 今の時代はアプリはスマホアプリのことを指して、PCアプリをアプリと呼ばない人もいるからな pythonでスマホアプリを作るのに言語だけじゃというのかもしれない アプリってのは俺たちの言うところのプログラムってやつだな Python + kivy でアプリ作ったが、 BuildozerでうまくAPKが作れません。 Ubuntuで作成していますが、解説サイトが少なすぎて、 どのように直せばいいのか分かりません。 アプリからCSVファイルを読み込むのに、Windowsなら csv.readerでできますが、 Android上では、上手くできない。 こういう違いを解説しているサイトありませんか?? 100%勘でいうけどcsvの読み取り処理じゃなくて権限の問題じゃない? >>396 あ…、なるほど。それも確かにありますね…。 権限付与とか、Ubuntuでは関係ないので、 apk作成してから実際に確かめるしかないんですかね…。 やってみるしかないじゃなくて普通にAndroidの権限付与調べればいいじゃん numpyみたいに左辺値にも数値を取れるようなスカラー倍の実装ってどうやればいいんでしょうか? ↓みたいなものを実現したいです vec = Vec3d(1, 2, 3) vec = 3 * vec vec * 3は普通にVec3d.__mul__()を書けばいとわかりますが… >>401 後学のために知っておきたいんだが、rmulが素直な性質を持っていない場合(たとえば、s * vecでsが3の倍数のときだけベクトルの要素にすべてsinが適用される)、 3 * 4 * vecの評価順ってどうなるの? 12 * vecになるか、3 *(4 * vec)になるかで結果が変わってくるよね? 優先順位が同じだから左から処理されて12*vecになる。 >>404 サンキュー! 八元数なんかだと結合法則成り立たないから実装には要注意だね んなもん使わないけどw '2022-03-01'という文字列と今日の日付を比較したいのですが、うまくいきません。 文字列は datetime.datetaime.strptime(ooo,'%Y%m%d') で変換できました。 比較対象は、 datetime.date.today() かdatetime.datetime.now() にしてもだめでした。 よろしくおねがいします。 >>406 from datetime import date date.fromisoformat("2022-03-03") == date.today() datetimeだかdateだか、ちょっとした書きミスがバグにつながるから こういうのはyear、month、dayを抜き出して、3回比較するのが確実 テストコードも同じ過ち起こして、テスト通るのにバグるってなるんだよ・・・ >>407 >>408 ありがとうございました。無事に解決しました。 テストを神聖視しすぎ。本体とテストの実装者が同じだったら同じ過ちを犯すものだよ 最近見かけた日付関連だとファイル内の文字列"yyyy/mm/dd"と現在日を文字列比較してて しかも現在日から文字列作るのをロケール任せにしてたから、海外だと"mm/dd/yyyy"になってバグるというのがあった こんなのロケール知らずに普通にテスト組んでたら検出されない >>414 > テストの実装者 まじでテストコード知らんのやな ロジック書いてそうw >>414 違うロケールでテスト流せばすぐ検出されるよね? そのケースは個別のテストケース内で確認すべき項目というより別ロケールでのテストを計画しなかった人やチームに落ち度がある 日時を扱う場合にロケールやタイムゾーンは要求仕様の一部だから事前にテスト計画に入れるのが普通 >>414 テストの考え方間違ってるだろ 「テストしたから不具合はない」ではなく 「少なくともテストした項目については、挙動の確認/担保が出来ている」だぞ (ユニットテストはバグを検知するのでなく、動作担保のために作る) その例で言えば明らかにテストケース漏れだし むしろそういう懸念があるならレビューの時に真っ先にチェックするだろ テストコードを整備せずに、実装側を無意味に歪める方がおかしいだろ def test() print(1234) #=enddef test こんなエンドコメント入れてるんだが、ないかな? 長くなるとわかりにくいんだもん >>421 ちゃんとしたエディタなりIDEなり使ってたら 関数単位で折りたためる機能あるから わざわた付けなくても…… そりゃIDEで折りたためたり、コンボボックスにその関数名出てたりするけど そういう機能があるのと見やすさはまた違うからな 言語は違うけど、windowsのソースコードでもその手の終了示すためのコメントは使われてる >>421 ねーわ、と思ったが 2000行程度のファイルで試してみたら確かに視認性が上がった カラーリング次第なところはあるがテストコードに限らず有りだわ 俺もあったら削除するぞ派かな。 折り畳みの邪魔にしかならんし。 endがあるRubyでも似たようなコメント書いてたな このendはifだっけ?whileだっけ?で見に行くのが面倒になって付け始め 条件なんだっけ?で条件もendコメントに書き始めたら 見栄えが汚くなったなww while True: try: kakaku = btc_ask time.sleep(30) すんません教えて下さい、 30秒おきにループして、 BTCの価格を取得するプログラムなのですが、 この取得した価格を、 30秒前の前回取得した価格と比べるには、 どうしたらいいでしょうか。 30秒前のkakaku < 現在のkakaku このようなことがしたいです、 ループの中でkakakuを保持して、 次回のループの時の価格と比べたりできますか? 5x7(横x縦)の2次元リストのなかにデータが格納されています。 @その中に重複しているデータは何個あるか Aその重複しているデータを抽出する が、したいです。 誰かお分かりになる方、教えて下さい。 重複しているデータが1種のみ3箇所にあったときの回答がしりたい >>430 ループの外にprev_kakakuとcurrent_kakakuを用意しておいて ループ内でif kakaku := ary = [ [ 1, "a", 2 ], [ 2, "a", "b", 2, 3 ] ] この場合、出力はこれで良いの? "a" => 2 2 => 3 "a"が2個、2が3個 collectionsのcounterで終わりでは? >>433 なんとかできました、 ありがとうございます! anacondaとVSCODEで開発しています 昨日あたりから急にconda install したcv2とかpyautoguiとかをimportするとモジュールが見当たらないとエラーがでるように なってしまいました。 ですけど、conda info -eで見るとちゃんと環境は切り替わっているのですが、 pprint.pprint(sys.path)でimport先を確認するとなぜかcondaのbaseを見ています import先を切り替えるにはどうすればいいのでしょうか。 なんかUSBHDDを接続してドライブを増やしたときにpython実行した辺りから使えなくなった気がします エラーメッセージで検索すれば? anaconda の使い方や、import パスの仕組みなどを調べるとか スクレイピングがCloudflareでブロックされてアクセスできなくなってもうた Selenium(headlessオフ)でアクセスしてもダメ! でもChromeからのアクセスは大丈夫だから SeleniumとChromeってやっぱ違うんだね、今のところお手上げ>< フリー版?のcloudscraperでもダメっす、何か対策ありますか? どのサイトをクロールしようとしてるのか分からないと 徹底的にブラウザの気持ちになってリクエストを再現しろくらいの一般論的なことしか言えんよ >>421 有りか無しかで言ったら有りだけど、それ、pythonのデザインポリシーを冒涜してるだろ(笑) Selenium を使う場合、手動でブラウザを使うのと、全く同じようにシミュレーションすべき どこかが異なると、それを判別してブロックされる そんな複雑なチェックしてることなんてまずないだろ どうせUAがデフォルトのままとかその手がじゃないか ルビキチ rb mylist=mystr.split(",") mysize=mylist.size() mystr=mylist.join(",") py mylist=mystr.split(",") mysize=len(mylist) mystr=",".join(mylist) ある数列の連続性をカウントしてまとめたいのですが forで回してこうやりました https://ideone.com/lcnVcl ↑の例では #数列データ df = pd.DataFrame([1,2,1,1,1,2,3,1,2,1,2,3,1,2,1,2,1,2,3,4,5,1,1,2]) #連続性 #[(1,2),(1),(1),(1,2,3),(1,2),(1,2,3),(1,2),(1,2),(1,2,3,4,5),(1),(1,2)] #つまり # (1),(1),(1), (1,2),(1,2),(1,2),(1,2),(1,2), (1,2,3),(1,2,3), (1,2,3,4,5) 数列のデータはpandasのデータフレームで受け取るので どうせならpandasをもっとうまく使えたらなぁと思ったのですが何かいい案はないでしょうか。 やりたいことはカウントというよりも、 今現在の連続記録nに対して、これ以上は連続しにくいぞ、とか、まだまだ連続する、程度を知れたらいいなと思っています (数列は正の整数で連続し、連続が切れると1から始まります) 上でやったforのやつでも結果の関数を解くだけなので出来なくはないですが 何か野暮ったいかなと思いました >>448 元のseriesと、shiftメソッド使って一個行方向にずらしたseriesを引き算して、 1なら連続、とかやる方法はあるけど、あんまりエレガントにならないし、 遅いしメモリも食うしいいことなさそうな感じだなあ。 元配列[1,2,1,1,1,2,3,1,2,1,2,3,1,2,1,2,1,2,3,4,5,1,1,2])に含まれる1の数、2の数、3の数・・・をカウントするだけでいい 今の値が3だとしたら、次に4が来るか途切れそうかは、カウントした4の数から考えることができる↑だと4は一個だからほぼほぼ途切れるだろうということになる >>449 なるほど >>450 今の値が1連続目だとすると 常に、1連続以上になる確率が高くなりそうな気がしますが違うでしょうか https://ideone.com/rlGHHX 途切れた時点でのi-mが連続回数 何がやりたいのかいまいちわかんないけど >>452 ありがとうございます この数列は、カウンターが出力される機器のログを記録したようなものです ボタンを押すごとに1,2,3・・と数字がカウントされますが途中でリセットされます リセットのタイミングは機器によって異なります 極論、 { 1:1, 2: 10000, 7: 2 } のログデータを示した機器は(1,2)が10000回出ているので もし現在2回連続中なら、次ボタンを押しても1にリセットされる期待大だろうと思います 問題は、1,2,1,1,1,2みたいなseriesのデータでしか受け取れないというところで どうせなら受け取ったdataframeの操作だけでできないのだろうかとあれこれやってみましたが行き詰まり質問しました 上の極論例で言えば 圧倒的に1,2,1,2,1,2…のパターンが多いと思うので、良い感じにグループ化して 期待が大きい順にソートできないのかな、みたいな ゴリ押しコードではできそうになりました ありがとうございました。 1が出てきたところで分割するだけならmore_itertoolsのsplit_beforeが簡単 Counter(len(x) for x in split_before(array, lambda x: x == 1)) ある要素の次に連続した数字が出てくる確率を求めたいなら yield前に計算が必要なのでsplit_beforeはそのまま使えない https://ideone.com/TMXIXG (Counterの要素数が多くなるようならメモ化とかで最適化) >>454 ありがとうございます この賭けをするかどうか、がパッと見ですごくわかりやすいですね >メモ化 やってみたいと思います! ありがとうございました 画像認識用に Pillow package 追加した後に pyinstaller でexe化したら、吐き出されるファイルのサイズが全て大きくなりました。 --exclude pillow で除外するしかないのでしょうか? よろしくお願いします ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる