【まず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 ###
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']
278277
垢版 |
2021/10/23(土) 07:45:14.89ID:uHOK1QLC
一般的には、辞書・集合には順序がない。
まれに、辞書・集合へ追加した順番を、記憶している言語もある

だから、順序よく並べたいなら、ソートする
2021/10/23(土) 11:44:43.09ID:Y/CMfyXG
https://lite.blogos.com/article/565782/
2021/10/23(土) 11:51:35.15ID:qhVW7VS5
>>275
お、おう、すまんかった
表示する時にきれいに並べたいだけならpretty printで

from pprint import pprint
pprint(dic)

3.7以降の辞書は挿入順で並んでることが保証されてるんだけど
表示目的のためだけに新しい辞書を作成して挿入しなおして並び替えることは普通やらない

同じ並び替えを何度も繰り返し実行しないといけない場合なら無駄ではないんだけど
その場合は他のデータ構造を使ったほうがいい可能性が高いので
わざわさ並べ直した辞書が欲しい用途ってなんだろうと思って聞いてみた
281デフォルトの名無しさん
垢版 |
2021/10/23(土) 12:26:09.46ID:VN/PPZMZ
教えてください

「keyerrorがでるけどどこがだめなのかわからない」 https://teratail.com/questions/365802?sip=n0070000_019&;uid=199109 #teratail #python
2021/10/23(土) 12:32:34.22ID:n7GT2TeK
>>280
なるほど

いちいち関数の中で並び替えしてたら時間かかるとか実際に使う場面では必要ないとかそういう事なのかな
pprint()で出力すれば良いってのは参考になった
ありがとう
2021/10/23(土) 12:41:34.85ID:qhVW7VS5
>>281
KeyError: 'びわこ'
2021/10/23(土) 12:51:17.61ID:+0P0mc8U
>>281
dict_stadiumに'琵琶湖'はあっても'びわこ'はない
2021/10/23(土) 13:19:57.09ID:DsNdyrVS
テラタよりこっちのが回答早いのか
2021/10/23(土) 17:01:23.55ID:TEk5cWky
re.complie(パターン)
complie済みのパターンが複数ある場合
パターン同士を結合するのってどうやるのでしょうか?
2021/10/23(土) 18:18:18.96ID:skaucHgA
Djangoを始めました
view.pyの中にある変数の中身を確認したいですが方法が分かりません
デバッグ方法はちゃんと分かってませんが一応環境は作りました
見たいのはDjangoチュートリアルにもあるlatest_question_list = Question.objects.order_by('-pub_date')[:5]
の中身です

エディターはvscodeです
2021/10/23(土) 18:45:21.20ID:skaucHgA
>>287
すみませんこれ出来ました
ブレークポイントを次の行に作って見たい変数にカーソルホバーさせたら見れました
2021/10/23(土) 21:09:29.62ID:qhVW7VS5
>>286
.patternでパターン文字列に一度戻ってから
パターン同士を結合して再度コンパイル
直接結合するAPIは用意されてないと思う
2021/10/23(土) 21:54:12.92ID:uHOK1QLC
Ruby なら、Regexp.union でパターンを、OR で合成できる

p Regexp.union(/a/, "*") # => /(?-mix:a)|\*/

p Regexp.union(/a/, /b/, /c/) # => /(?-mix:a)|(?-mix:b)|(?-mix:c)/

arr = [/a/, /b/, /c/]
p Regexp.union(arr) # => /(?-mix:a)|(?-mix:b)|(?-mix:c)/
291デフォルトの名無しさん
垢版 |
2021/10/23(土) 23:19:51.40ID:oBaQvszz
ルビキチってどこにでも涌くのな
2021/10/24(日) 09:17:16.16ID:ju8sH4Lg
この板の外にも湧いてるんだぞ
2021/10/24(日) 12:57:50.65ID:nICPJrT1
>>289
ありがとうございますパターンが取れました

ptn1 = re.compile("\.gif$").pattern
ptn2 = re.compile("\.jpg$|\.png$",re.IGNORECASE).pattern

ptn2が
"\.jpg$|\.JPG$|\.png$|\.PNG$"
な感じだったらよかったんですけどね
re.compile(ptn1+"|"+ptn2,re.IGNORECASE)
だと
"\.gif$|\.GIF$|\.jpg$|\.JPG$|\.png$|\.PNG$"
と同等?になってしまうので
2021/10/24(日) 13:06:47.73ID:nICPJrT1
改めてぐぐってみると
そもそもフラグの記述はいろいろあるみたいですね >>293
(?フラグ:パターン)
これなら基本は文字列でもcompile済でもどちらでもいい気がしました

ptns = ["\.gif$","(?i:\.jpg$|\.png$)"]
ptn = re.compile("|".join(ptns))
2021/10/24(日) 14:04:30.70ID:9GD27ADQ
>>293
> ptn2が
> "\.jpg$|\.JPG$|\.png$|\.PNG$"
> な感じだったらよかったんですけどね
それだと .Jpg とかがヒットしなくなる
2021/10/24(日) 15:34:01.95ID:dQwbGYLm
Ruby で、漏れは自分で関数を作っている
拡張子を小文字に変換してから、それが配列内にあるかどうか

ただし、jxr はブラウザで表示できない

ary = %w(png jpg jpeg gif webp) # 画像の拡張子

extname = "JPeg"
extname.downcase! # 小文字へ変換する

p ary.include? extname # 含まれている?
#=> true
2021/10/24(日) 16:09:48.63ID:nICPJrT1
>>295
たしかに
>>293は、大文字小文字区別つかないすべてのパターンの意味でした
2021/10/24(日) 18:40:19.51ID:ugUepsfY
vscodeでdjangoやってます
views.pyでrenderの第2引数に指定したhtmlやreverseの第1引数のアプリ名:urlネームに書いてあるその場所にGo toしたいのですが方法ありますか?

djangoに限らずpath書いてないとgo to definitionできない感じですか?
2021/10/25(月) 17:14:48.98ID:MOhV5cOT
class hoge:
_items = []
_def each(self,callback=None):
__res=[]
___argcount=callback.__code__.co_argcount
__if _argcount==1:
___for item in self.items:
____res.append(callback(item))
__elif _argcount==2:
___for i,item in enumerate(self.items):
____res.append(callback(i,item))
__return res

h=hoge()
h.items = ["a","b","c"]
print( h.each(lambda item: "_"+str(item)) )
print( h.each(lambda i,item: str(i)+"_"+str(item)) )
#['_a', '_b', '_c']
#['0_a', '1_b', '2_c']

callbackでindexも取りたいので↑のように書いたのですが
こうするしかないのでしょうか?
今は引数は、(item)と(i,item)しかとりませんが
仮にcallback内でitemやindexとは別の何か引数を引き継ぎたくなったという場合
どう拡張していけばいいのかな、と思いました
2021/10/25(月) 18:13:43.66ID:YeRcjGgP
*argsとか**kwargsで可変長の引数を取るようにすればいい、とかそういう話か?
2021/10/25(月) 19:23:30.01ID:MOhV5cOT
>>300
すこし違います
*指定だとインスタンス側でcallbackを書くときに
常にcallback(*arg)とか、callback(**kwards)とかを書かなければならない気がします
>>299の例の場合
each対象はself.itemsなのでcallbackの中身を書くときの引数は
callback(ここでの引数名はitemsに入る値に関係する名前)
にしたいのです

299の例だと拡張されたのはインデックスのみなので、
インデックスが欲しいかほしくないかに関わらずインデックスを取ることにすると
class hoge:
_items = []
_def each(self,callback=None):
__res=[]
__for i,item in enumerate(self.items):
___res.append(callback(item,i))#itemの方が使用頻度高いので引数を逆に渡す
__return res
h=hoge()
h.items = ["a","b","c"]
print( h.each(lambda item: "_"+str(item)) )#エラー
print( h.each(lambda item,i: str(i)+"_"+str(item)) )
と書けると思いましたが
無い引数を渡すとエラーが出てしまいました

この辺の慣習とかあるのか、そもそもそんなことしなくてもいい(継承できるようなテクニックがある)のか
というのがわからないので
iを使わない場合も、callback(i,item)と書けばいいのでは?とか
index情報を持ったitemオブジェクトを返却して、item.itemでitem取得
みたいな方法は保留してます

今考えているのは
callback.__code__.co_varnames[:callback.__code__.co_argcount]
使ってみたりの条件分岐です
2021/10/25(月) 20:51:56.35ID:LSRIz4jp
リスト内包表記で得られたリスト
[’金額¥150’,’金額¥222’,’’,’’,’金額¥0’,’金額¥465’]のうち、’’を’金額¥0’に置換するにはどのようにしたらいいですか?

[money.replace("","¥0") for money in moneys]ではだめでした。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況