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

■ このスレッドは過去ログ倉庫に格納されています
2021/10/01(金) 15:46:47.17ID:9qOHXj6D
当スレに★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(超初心者用) その54
https://mevius.5ch.net/test/read.cgi/tech/1623240344/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
178デフォルトの名無しさん
垢版 |
2021/10/13(水) 04:42:48.68ID:+txmauo5
>>175

view
ウィジェットとtkvar(表示(view)に関わる)

model
変数(データ実体)

controller
view.widget.tkvar.set(mode.var)

おれの認識
2021/10/13(水) 08:21:06.00ID:5N5C/lUt
>>177
内包表記みるとファビョっちゃう病気なの?
内包表記が速くなるだけじゃないことを勉強した方がいい
ネットに落ちてるサンプルコードのように単純な処理のだから内包表記を使わない手はない
2021/10/13(水) 08:46:20.82ID:XAFUKX/t
内包表記ってなんですか?
181デフォルトの名無しさん
垢版 |
2021/10/13(水) 10:54:11.99ID:V99uCirA
[_ for _ in (1,2,3)]
2021/10/13(水) 12:56:21.92ID:xAxceSCu
どんなに複雑なコードでも内包表記で書こうとするような奴はPython向いてないとは思う
2021/10/13(水) 13:38:38.75ID:znbxIIJY
馬鹿の一つ覚え
184デフォルトの名無しさん
垢版 |
2021/10/13(水) 14:17:57.86ID:k/aGOBxZ
next filterは見た目いいけどそのままだと例外飛ぶからdefault指定すべき
あとid検索をしょっちゅうやるつもりなら171の言う通りidをキーに持つハッシュテーブルにしたほうがいい
185デフォルトの名無しさん
垢版 |
2021/10/13(水) 15:04:27.22ID:i0OqJqsg
ネストする時は内包表記でもインデントしてね
2021/10/13(水) 15:48:08.21ID:5N5C/lUt
>>184
お、褒められたw default指定か、なるほど、、じゃあこう
item = next(filter(lambda d: d[id] == _id, db), None)

ハッシュテーブルって辞書のことですよね?
187デフォルトの名無しさん
垢版 |
2021/10/14(木) 08:52:02.98ID:tO9afOB/
>>178
Viewは簡単に生き死にするから、変数(データ実体) をtkvarにしてModelに持たせる方がいいと思うよ。
形式変換などが必要なときは、Modelにそれ用のアクセサを付ければいい。
ControllerがModelとViewのインスタンスを持ち、ViewはControllerだけを参照する。
Modelは基本的にController、Viewの参照をどっちも持たない。
188デフォルトの名無しさん
垢版 |
2021/10/14(木) 09:10:49.38ID:Exint/Io
作り方にもよるけど
tkinterをqtに変えようとか、移植に伴ってツールキットを交換することを考えると
modelをtkverのデータ置きにすると全面的な書き直しがいると思うつーか、そうなった

ので俺は最近modelには一般の変数とロジックだけ置く
viewには可能な限りtkinter固有の全部を置く。vcmdとかも
で全操作をcontrollerに書く。コイツが全部の発信源
よくviewがmodel見る三角形図あるけど、個人的にはviewの影響を限定的にしたい

https://i.imgur.com/a7HUCYH.png
189デフォルトの名無しさん
垢版 |
2021/10/14(木) 09:42:03.64ID:tO9afOB/
確かに、tkinterのVarはデータバインディング(しかも双方向可能)の考え方そのものなので、
MVCに少しそぐわない(ViewModelっていうんだっけ?)。
どっちにしろ、データベースやネットワークサービスがデータソースになる場合は、Varは単なるバスみたいな使い方になるし。
190デフォルトの名無しさん
垢版 |
2021/10/14(木) 11:40:53.17ID:wCUDNz+i
まあ移植性を捨てればtkvarはdbに置いて
bindingと最小限のイベントハンドラをcontrollerに置いて
あとはm-v間でやってくれぇ〜というのが一番書きやすいだろう

真面目にやるとcontroller薄くなりすぎるはずなのでc-vとmに分けるっていうのも良いと思う。わしはこれが好き
GUI(tk.Tk):
_super().__init__()
云々
GUI.mainloop()するやつ
191デフォルトの名無しさん
垢版 |
2021/10/15(金) 16:12:08.85ID:Tty/f66M
PythonでLZ4を使うと、lz4.frame,lz4.block,lz4.streamっていうのがあるみたいなのですが
それぞれ何がどう違うのでしょうか
検索すると英語の情報が多いのですが、アホなので分かりません
2021/10/15(金) 16:25:20.62ID:yvxpjjvp
質問ですが、defaultdictに対して.getを使った場合、値が存在しない場合でもメモリを使ってしまうのですか?
193デフォルトの名無しさん
垢版 |
2021/10/15(金) 18:54:50.40ID:TUcBd+bC
>>192
https://docs.python.org/ja/3/library/collections.html#collections.defaultdict.__missing__
> もし default_factory 属性が None でない場合、このメソッドは引数なしで呼び出され、与えらえた key に対応するデフォルト値を提供します。この値は、辞書内に key に対応して登録され、最後に返されます。

なんでデフォルト値の分消費する。(各種オーバーヘッドは未考慮)

>>> help(collections.defaultdict)
困ったらhelp
同じことが書かれてる
2021/10/15(金) 19:07:39.63ID:4mSLIm8m
>>193
ありがとうございます。
2021/10/16(土) 23:48:05.88ID:7DXC85u5
>>321
youtube-dl --skip-download --dateafter now-3days --get-title --get-id --get-description --get-duration -i "チャンネルURL"
196デフォルトの名無しさん
垢版 |
2021/10/17(日) 14:11:08.72ID:7C23oe5i
Mike Python
197デフォルトの名無しさん
垢版 |
2021/10/17(日) 17:37:19.17ID:kbVq19bl
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^

あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!

クソチョンw
2021/10/17(日) 19:55:12.60ID:t5hHOLNv
Python3.9で、souted()とラムダ式を勉強しているところです
sorted()のkeyに指定するラムダで、戻り値にマイナスを付けるコードがあり、
これは何だろうと思って以下のリストを作成してsorted()にかけて出力してみました
(コメント行として書いている箇所が出力結果です)

li = [('a', 1), ('b', 200), ('c', 50), ('e', -3), ('h', -55000), ('d', 10)]

print(sorted(li, key=lambda x: x[0]))
# [('a', 1), ('b', 200), ('c', 50), ('d', 10), ('e', -3), ('h', -55000)]

print(sorted(li, key=lambda x: -x[0]))
# TypeError bad operand type for unary -: 'str'

print(sorted(li, key=lambda x: x[1]))
# [('h', -55000), ('e', -3), ('a', 1), ('d', 10), ('c', 50), ('b', 200)]

print(sorted(li, key=lambda x: -x[1]))
# [('b', 200), ('c', 50), ('d', 10), ('a', 1), ('e', -3), ('h', -55000)]

出力結果を見るに、マイナスを付けるとreverse=Trueを指定したときと
同じ結果が得られるということなのかなと思ったのですが
1つだけTypeErrorになってしまいました
これは何故なのでしょうか
199デフォルトの名無しさん
垢版 |
2021/10/17(日) 20:06:53.96ID:hODn77KL
sorted関係ないしエラーメッセージがまんま理由

>>> -'a'

TypeError: bad operand type for unary -: 'str'
2021/10/17(日) 20:42:04.88ID:t5hHOLNv
>>199
ありがとうございます

戻り値が'a'というstr型なのに負の値にしようとして怒られてるってことでしょうか
key=lambda x: -x[N] という書き方は、reverseオプションの代替ではなく
戻り値に-1を掛けている…という認識であってますか?
(そのため結果として逆順にソートされたように見える)
2021/10/17(日) 20:47:32.06ID:NeddvKFI
-x[0] の演算順序は、どっち?
-x が先なのか、-(x[0]) のカッコ内が先なのか?

前者なら、xが文字列型で、
後者なら、x[0]が文字列型で、エラー
2021/10/17(日) 23:08:28.45ID:ChJOOsVw
>>198
・lambda x: 〜のxには('a', 1)とかが入る
・lambda x: 〜の返り値(〜の計算結果)でソートされる
・文字列型にマイナスを掛ける操作(符号反転)は定義されてないのでエラー
・符号反転がreverse=Trueと等価か?についてはそう考えていいけど数値でないと符号反転操作ができないので万能ではない
・符号反転が役立つのは文字列(例では第1要素)は辞書順でソートして数値(例では第2要素)は降順でソートするとか昇順降順降り混ぜたソートをしたいとき

Effective Pythonからの受け売りなので立ち読みとかできるなら読んでみるといい
2021/10/17(日) 23:47:35.33ID:W3iDPsRK
モドリッチ
204デフォルトの名無しさん
垢版 |
2021/10/18(月) 13:59:02.18ID:bl1s8YLW
values = [2, 1, 0, 1, 2]
orders = []

values[i]が右より大きいならorders.append[i]
その条件を満たすまでi+nで見ていく.最大値len(values)

上記の例だと[0, 1, 4, 3, 2]
が得たいんだけど、どう書いたらいいですか?
なんか超低速か無限ループにはまってしまって…
205デフォルトの名無しさん
垢版 |
2021/10/18(月) 14:01:45.68ID:bl1s8YLW
あ valuesはランダムな整数のランダムな長さの配列(1〜10くらい)です
2021/10/18(月) 14:16:32.64ID:zNA2BH7N
なんで01432になるんだろ
01444じゃないの
2021/10/18(月) 14:17:00.26ID:N0fetjcl
>>204
仕様を自然言語で
もれなく、間違いなく、人に伝わるように書くことに力を注いでくれ
2021/10/18(月) 14:18:36.21ID:zNA2BH7N
つか問題文は自分の言葉で伝え直さないでコピペするべき
209デフォルトの名無しさん
垢版 |
2021/10/18(月) 15:32:14.49ID:r9t2S6+p
コピペばれると退学だから
それと判らないように質問してるんだろう
210デフォルトの名無しさん
垢版 |
2021/10/18(月) 20:16:41.07ID:2nbXAeQ6
言わんとしていることはわかる
ランク付けだろ
rank =[i for i in range(len(values))]
でdrop駆使していけるはずだ
2021/10/18(月) 21:39:27.07ID:jVCGujj+
>>3
機械学習で最適なクロール間隔を学習しろ
2021/10/19(火) 10:06:30.06ID:10EXZk67
def hoge(*,a,b):
_print(a,b)
m="a"
n="b"
eval( f"hoge({m}=10,{n}=20)" )

こういう引数必須で、動的に引数名を指定したい場合
evalを使うのが定石でしょうか?
2021/10/19(火) 10:27:13.40ID:K7fU3Cbr
そんな回りくどい処理が必要な状況が、
俺には全く想定できない。
2021/10/19(火) 10:41:06.36ID:LLvKMRJR
>>212
動的に引数名を指定しないのが定石
evalはユーザー入力でpythonの式を受け取りたい場合に使う

引数名だけを動的に指定したい理由は?
それ次第だけどeval以外の方法があると思うよ
215デフォルトの名無しさん
垢版 |
2021/10/19(火) 11:38:40.18ID:DE2IVg3K
タプルのリストをlist.sort()するとき
同じ値なら元のインデックスが若い順に並びますか?

l = [('あ', 0), ('い', 1), ('う', 0)]
l.sort(key = lambda x:x[1])

必ず
[('あ', 0), ('う', 0), ('い', 1)]
ですか?

場合によって
[('う', 0), ('あ', 0), ('い', 1)]
になりうる?
216デフォルトの名無しさん
垢版 |
2021/10/19(火) 11:43:32.81ID:z0N9htUT
>>215
https://docs.python.org/ja/3/howto/sorting.html#sort-stability-and-complex-sorts

python list.sort stable
とかでググる
2021/10/19(火) 11:47:54.98ID:10EXZk67
>>213,214
ありがとうございます
datetimeのtimedeltaを使いたいのですが
timedelta(seconds=3000)
な感じで、secondsの部分がminutesやdaysにしたいときがあるので
条件分岐していたのですが、他の方法があるのかなと思いまして
2021/10/19(火) 11:51:51.94ID:kFYLNe28
そもそもですがタプルってなんですか?
2021/10/19(火) 11:59:21.79ID:10EXZk67
自己解決?したかもです
daysやらminutesやらデフォルト値を0に設定して
timedelta(days=days・・・,seconds=seconds)
みたいに全部ぶっこめばいい気がしてきました
220デフォルトの名無しさん
垢版 |
2021/10/19(火) 12:01:28.19ID:DE2IVg3K
>>216
おー勉強になりました
ありがとう
2021/10/19(火) 12:11:27.56ID:LLvKMRJR
>>219
timedelta()の引数は全部任意でデフォルト値0が設定されてるから自分で指定する必要はないよ
2021/10/19(火) 12:18:41.33ID:10EXZk67
>>221
def hoge(u,v):
_timedelta(ここ=v)

hoge("seconds",3000)みたいなとき
ここ、の部分をどうやって指定するのでしょうか?

if u=="days":
_timedelta(days=v)

みたいにしていたのですが
timedelta(days=days,,,,seconds=seconds)
でもいいのかなぁと
2021/10/19(火) 12:25:04.75ID:K7fU3Cbr
a=minutes=3
timedelta(a)でいいんでない?
2021/10/19(火) 12:25:09.04ID:10EXZk67
さらに自己解決?したかもです
timedelta(**{"seconds":3000} )
でイケました
2021/10/19(火) 12:25:47.01ID:10EXZk67
>>223

なんと、それでできたんですね
ありがとうございました!
2021/10/19(火) 12:26:11.41ID:K7fU3Cbr
いや、できんかった。スマンw
2021/10/19(火) 12:26:52.98ID:10EXZk67
と、思いましたが>223だとdaysに入ってしまうようです?
連投すいません
2021/10/19(火) 12:27:10.83ID:K7fU3Cbr
dayとして扱われるわ
2021/10/19(火) 14:30:29.56ID:LLvKMRJR
>>222
それはdictionaryで渡して、アスタリスクx2でunpackingする

def hoge(kargs):
__return timedelta(**kargs)

delta = hoge({“seconds”: 3000})
230デフォルトの名無しさん
垢版 |
2021/10/19(火) 19:13:22.75ID:p2X/wkWb
hoge(u="seconds",v=3000)という呼び出し方しかできないようにする。
def hoge(*, u, v):
...
>>229みたいなのは使う側に優しくないので、引数がわかり切っているときは使わない。
231デフォルトの名無しさん
垢版 |
2021/10/20(水) 09:19:40.59ID:OEiI06HQ
>>212
setattr
232デフォルトの名無しさん
垢版 |
2021/10/20(水) 19:49:22.13ID:EZ3+LSel
ネタがなくても月3万円を稼ぐブログなら誰でも作れる。後はやるかやらないかだけ

ブログで稼ごうと思ったら簡単だよ。
身の回りにあるものをとにかく写真に撮りまくれ!
そのカメラに撮った商品を使い込め!それも徹底的にな!
あとは、お前の感じた感想をそのままブログに書き込むんだ!
その紹介した商品にAmazonのアフィリエイトを忘れるなよ。
これをひたすら続ければ、月に数万円は余裕。

先程の書き込みにも書いてあったとおりなんですが、手順は簡単、次の3ステップです。
1身の回りにあるモノの写真をデジカメで撮りまくる
2写真に撮ったモノを徹底的に使い込む
3モノの使用感を自分の感じたままブログに書き殴る
2021/10/21(木) 05:44:05.86ID:2FnoPHWW
3万円なんてお小遣いにもならねえな
2021/10/21(木) 06:53:33.05ID:udHqGeXx
スライスの使い方誤解してたわ

list = [10,20,30,40,50,60]

|10|20|30|40|50|60|
要するにサンドイッチのパンに要素が挟まってて
左のパンからスライス[0]位置、スライス[1]位置ということなのか

del list[2:4]
なら、|30|40|が除かれて|10|20|50|60|になるのか

なんかあんまり直感的じゃないな
del list[2:3]だと結局|30|しか取り除かない事になるからdel list[2]とかわらないよね?
2021/10/21(木) 08:45:58.03ID:POpI6QwK
>>202
大変遅くなりましてすみません
>>198です
丁寧に説明してくださりありがとうございます
とてもわかり易い

Effective Python についてググるだけでも掻い摘んだ説明が出てきて面白いです
2021/10/21(木) 08:47:32.47ID:rE4toNa0
どっちのやり方が良いかは場合によるんではっきり言えないけど、swiftやrubyを除けばメジャーな言語の多くがindexは0始まり、範囲は開始位置、終了位置+1で指定するんで、多くのプログラマにとってはpythonのやり方のほうが慣れ親しんでいるとは言えるかも

ちなみにswift、rubyは終了位置、終了位置+1のどちらの記法も使える
2021/10/21(木) 12:27:44.59ID:moBizkab
round(val, n)
みたいな簡単な書き方で、小数点○桁以下切り捨て、っていうのは無いのですかね?
浮動小数点の誤差については気にしないです
123.4567を小数点2桁で切り捨てなら、
123.45 (またはそれに限りなく近い数値)になってほしいです

math floorは桁指定できないですよね
探してもdecimalだとか10^nしてintしてから割るとかやることに対してちょっと大げさなものしか見つかりませんでした
238デフォルトの名無しさん
垢版 |
2021/10/21(木) 12:46:20.72ID:/d/0VOpU
floor(x*10**n)/10**n
239デフォルトの名無しさん
垢版 |
2021/10/21(木) 13:17:26.48ID:T2C3Q12E
さすがにそれは
240デフォルトの名無しさん
垢版 |
2021/10/21(木) 16:14:53.89ID:8ILWSSPd
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
掲載案件数15万件突破!さらにリモートワークの掲載案件数4,000件突破!

ITフリーランスの独立支援サービス『テックビズ』&定額制全国住み放題『ADDress』提携開始

ITフリーランスの独立支援サービス『テックビズ』とフリーランス向け報酬即日払いサービス『先払い』提携開始

新型コロナの影響で、常駐型フリーランスエンジニアのリモート対応が増加

フリーランスエンジニア必見!リモートワークや週3案件があるサービス5



高報酬案件を求めるフリーランスエンジニアのための案件マッチングプラットフォーム
「Pro Connect Enginner(プロコネクトエンジニア)」正式版、2021年2月28日リリース!
2021/10/21(木) 16:18:34.28ID:yuVpO81C
"1×2.txt"のように"×"が文字列に入ったファイル名を処理しようとしています。
files = sys.argv[1]
で受け取って
print(files)
すると、×がなくなって
12.txt
に化けています。避ける方法はありませんか?
2021/10/21(木) 16:22:23.38ID:gR5+oZUI
>>241
試してないけど
sys.argvをやめてファイルから読み込むか、JSON使うか。
243デフォルトの名無しさん
垢版 |
2021/10/21(木) 16:26:13.82ID:s+STdMnX
https://docs.python.org/ja/3.10/library/decimal.html
https://pypi.org/project/gmpy/
https://code.google.com/archive/p/python-gmp/
244デフォルトの名無しさん
垢版 |
2021/10/21(木) 16:27:35.45ID:s+STdMnX
filesのbyte列を出力してみろ
2021/10/21(木) 18:35:03.76ID:yuVpO81C
>244
やってみました。
print(files.encode())
b'12.txt'
どこで消えてるんだろう…全角の×なので、普通に通ると思っていたのですが…
2021/10/21(木) 18:41:59.80ID:iSzsEmw9
>>241
再現しないね
環境(OS/シェル/Python)と呼び出す側のコードも書いて
2021/10/21(木) 18:54:37.47ID:yuVpO81C
OS: Win11Pro
シェル: PowerShell 7.1.5
Python: Python 3.10.0 (tags/v3.10.0:b494f59, Oct 4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32

VS Codeのworkspace.jsonに
"args" : ["1×2.txt"]

呼び出しは
files = sys.argv[1]
files = files.encode()
print(files)

です。>246さん、なにかわかりますでしょうか? お願いします。
2021/10/21(木) 19:04:23.86ID:YezGVy7K
>>240
サンキュー!こんなとこで宣伝するなんてろくでもないとこだろうからローカルプロキシにNGブチこんどくわ!
2021/10/21(木) 19:10:04.13ID:wgFCmdkg
エラー吐かずにスルーする目的でtryを使うのは
行儀としてどうですか?
やめたほうがいいのでしょうか

for:
_try:
__エラーが出ても次の処理を実行
_except Exception as e:
__print(e)
__pass
__continue

みたいな感じです
2021/10/21(木) 19:54:31.39ID:yqrc4/Lg
>>247
ターミナルの引数の時点で×が消えてるからvscode側の問題かな
251デフォルトの名無しさん
垢版 |
2021/10/21(木) 20:02:45.41ID:T2C3Q12E
>>249
ぜんぜんいいけど
Exceptionじゃなくて想定している例外にしないと
想定外の問題が発生してもすり抜けるのでダメ

実際に例外だしてそれを指定してあげる
たとえば配列の範囲外ならIndexErrorなど
2021/10/21(木) 20:07:36.86ID:yuVpO81C
>250
切り分けありがとうございます。
vscodeのスレで聞いてみます。
2021/10/21(木) 21:35:10.28ID:iSzsEmw9
>>247
シェルのエンコーディングとフォント、ファイル名のエンコーディングを確認するといいんでないかな

UTF-8のファイルで文字列を受け取って、UTF-8のファイルに出力してみて
出力の中身をエディタで確認して問題ないか確認して切り分けしてみれば?
2021/10/21(木) 22:23:10.34ID:yuVpO81C
>253
1×2 とUTF-8で書いたtxtを openしてreadしたところ、×が表示されました。
シェルはUTF-8、jsonもUTF-8です。やはりvscodeがなにか悪さしてるのでしょうか?
255デフォルトの名無しさん
垢版 |
2021/10/21(木) 22:28:15.67ID:EiXMJcNZ
>>249
スルーしていいエラーならいいよ
256デフォルトの名無しさん
垢版 |
2021/10/22(金) 12:09:19.87ID:KhubwY06
>>241
そのファイルがある場所でlsしてみて
そして、その結果をそのままここに貼って
2021/10/22(金) 13:08:40.17ID:pSuh16SX
>256
-a--- 2021/10/21 22:08 8 1×2.txt
表示されます!
なんかvscodeのバグなのか仕様なのかのせいなんですかね…
2021/10/22(金) 13:09:12.13ID:pSuh16SX
vscodeでのデバッグのときだけみたいなんで、半分諦めです。
2021/10/22(金) 14:11:33.51ID:X7QNDBcm
PySimpleGUIをつかってスクレイピング用のスクリプトをGUIにしてpyinstallerでexe化(コンソール無し設定)しました。exeで起動するとなにかしらのアクションですぐにコードが強制終了します。調べたところ、スクレイピングに使っているクロームドライバーの自動更新ライブラリがサブプロセスを開始しようとするときにコンソールを封じられているために落ちるってことらしいのですが回避方法がわからないです。知っている方がいたら教えてください。
2021/10/22(金) 15:26:37.44ID:NCC4eAK/
>>241 >>258
すまんこれvscodeじゃなくてpowershellのモジュールの方だった
https://social.technet.microsoft.com/Forums/ja-JP/862dda39-0c53-447c-b4bd-05e147a4f9e4/powershell
vscodeからの実行はコピペ+enterで実現してるようでPSReadLineのバグに引っかかる
ターミナル上でRemove-Module PSReadlineを実行した後は正常
当然シェルをbashやコマンドプロンプトに変更でも回避可能
2021/10/22(金) 16:28:01.92ID:pSuh16SX
>>260
すごい!!ありがとうございます!
無事、全角×が表示されました!!
これでdebug作業が進みます!
ありがとうございました!!
262デフォルトの名無しさん
垢版 |
2021/10/22(金) 16:46:07.04ID:DsjZYzXm
>>259
AllocConsole
2021/10/22(金) 17:23:28.01ID:X7QNDBcm
>>262
ごめん。調べたけどそれだけじゃわからんかった。OSにGUI用のコンソールを用意してもらうってことなんかな。だとしても実装方法が皆目見当つかん。
2021/10/22(金) 20:02:41.52ID:5ieIGpLh
辞書のソート方法を探してたんだけど

https://techacademy.jp/magazine/19309

このページ見たら

dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
dic2 = sorted(dic.items())

で出来るって書いてあったがこれ、type(dic2)やったらlistになっとるやんけ
辞書のままソートする方法を普通書かないか?
2021/10/22(金) 20:08:47.66ID:5ieIGpLh
これ、元の辞書を並べ替える場合って

dic1.clear

dic2(実はリスト)を
dic1.update(dic2)
ってやるしかないの?
2021/10/22(金) 20:13:56.45ID:5ieIGpLh
ちょっと間違えてたから書き直した

dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
dic2 = sorted(dic.items())
dic.clear()
dic.update(dic2)

これで辞書のkeyでの並び替えが出来るっぽいんだけど、これ以外に方法ある?
2021/10/22(金) 20:57:16.61ID:szev1NjN
どうしてdictionaryをsortしたいの?
268デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:15:58.94ID:QiF9wMqh
dictがOrderedDict相当になったとき
順序に依存するコードが増えたら嫌だなとおもったけど
処理コスト変わらんのに便利さを選ばないのも偏狭なんだろうな

>>266
dict(sorted(dic.items()))
2021/10/22(金) 21:47:08.80ID:5ieIGpLh
>>267
文字列の長さの数値をキーにして、同じ長さの文字列を値にする辞書を作ったから

dic1 = {5: 'apple',3: 'pen'}
みたいなやつ
>>268
ありがとう
2021/10/22(金) 22:05:03.21ID:szev1NjN
お、おう。
2021/10/22(金) 22:32:57.50ID:0c+YzSoZ
アンチパターンってやつやな
2021/10/22(金) 22:59:32.08ID:8L7RGAQS
例えば以下のように、デスクトップにショートカットを作って、
コマンドプロンプトから、Ruby スクリプトを起動すると、
C:\Program Files/ みたいに、半角空白が入っているパスで、バグる

C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/a.rb"

(注意。書き込めないので間に、@を入れました)

これをショートカットからコマンドプロンプトを通さず、
直接、Ruby スクリプトを起動すると、正常に動く

C:\Ruby25-x64\bin\ruby.exe C:/Users/Owner/Documents/a.rb

とにかく、コマンドプロンプト・Power Shell と、
Linux 系の動的言語との通信には、
半角空白・日本語のファイルパスなど、文字列のバグが多い

VSCode は、WSL2 などLinux, Docker にも対応しているので、動的言語でもバグらない。
バグるのは、コマンドプロンプト・Power Shellの部分
273デフォルトの名無しさん
垢版 |
2021/10/23(土) 01:41:10.93ID:L2XVMbSO
pilで複数の画像を1枚の背景に貼り付けたい
入力される画像の位置がランダムbbox(x1,y1,x2,y2)なんだけど
すべての座標を含む最小範囲の背景(0,0,x2,y2)ってどうやって計算したらいいのですか?
274デフォルトの名無しさん
垢版 |
2021/10/23(土) 03:20:28.76ID:L2XVMbSO
あー
bgbbox = min(x1s),min(y1s),max(x2s),max(y2s)

ペースト時x系に-abs(min(x1s)), y系に-abs(min(y1s))
※pip 基点0,0なので

2021/10/23(土) 05:04:17.46ID:n7GT2TeK
>>270
超初心者相手にそういう意味の分からん反応止めてくれや

東大が公開してるPythonプログラミング入門の例題に
https://utokyo-ipp.github.io/3/3-1.html

辞書 dic1 と文字列 str1 が引数として与えられたとき、 以下のように dic1 を変更する関数 handle_collision を作成してください。 ただし、dic1 のキーは整数、キーに対応する値は文字列を要素とするリストとします。
dic1 に str1 の長さ n がキーとして登録されていない場合、str1 のみを要素とするリスト ls を作成し、 dic1 にキー n、n に対応する値 ls を登録します。
dic1 に str1 の長さ n がキーとして登録されている場合、そのキーに対応する値(リスト)に str1 を追加します。
以下のセルの ... のところを書き換えて handle_collision(dic1, str1) を作成してください。

def handle_collision(dic1, str1):
...

ってのがあって、その回答が
def handle_collision(dic1, str1):
if dic1.get(len(str1)) is None:
ls = [str1]
else:
ls = dic1[len(str1)]
ls.append(str1)
dic1[len(str1)] = ls
#handle_collision({3: ['ham', 'egg'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}, 'tea')

だったんだよ
2021/10/23(土) 05:08:31.39ID:n7GT2TeK
で、このコード実行すると

dic1_orig = {3: ['ham', 'egg'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}
handle_collision(dic1_orig, 'tea')

{3: ['ham', 'egg', 'tea'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}

これになるんだけど、'tea'以外のやついれたらどうなるのかな、って試してみたら

handle_collision(dic1_orig, 'pp')
{3: ['ham', 'egg'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken'], 2: ['pp']}
って 2のキーが最後尾に追加されてなんかモヤったからキーを順序どおりの並びにするにはどうすんのかな、って思ったわけ
2021/10/23(土) 07:39:54.83ID:uHOK1QLC
1. str1 の長さ n がキーとして登録されていない場合は、追加
2. str1 の長さ n がキーとして登録されている場合は、更新

存在しなければ追加・存在すれば更新は、データベースでも、よくある処理

そりゃ、2文字は登録されていないから、追加される。
2: ['pp']
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。