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

■ このスレッドは過去ログ倉庫に格納されています
2022/05/22(日) 22:25:08.74ID:/hGmbW/Z
当スレに★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(超初心者用) その56
http://mevius.5ch.net/test/read.cgi/tech/1640536690/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2022/06/19(日) 22:17:07.56ID:m8jSBDD8
>>120
原理主義者w

読みやすさがダンチすぎるわな
あとは高速にさえなれば最強
125デフォルトの名無しさん
垢版 |
2022/06/19(日) 22:44:59.15ID:sa8W0ZGX
>>123
keyは同じものなんだからどっちからもってきてもいいだろ。
仕様でもvalueをdict2から持ってくることだけしか決められてないんだからそんなところに依存するコードを書いたらお前が悪いとしか言えん。
あと同じhash値ってだけで同定されると思ってるみたいだな
126デフォルトの名無しさん
垢版 |
2022/06/20(月) 00:01:19.54ID:FO/JkqKw
>>123
誰もdictの論理和と呼ぶ奴いないが
127デフォルトの名無しさん
垢版 |
2022/06/20(月) 00:04:58.71ID:FO/JkqKw
こんな場末の掲示板で美学()を垂れてる大先生達はPEPに提案でもすればいいのにな
https://github.com/python/peps/blob/main/CONTRIBUTING.rst
2022/06/20(月) 00:51:48.01ID:3bt1t/j5
>>126
>>122
2022/06/20(月) 09:01:28.64ID:clQvML/w
picture(数字).pngで連番のファイルを生成したんだけどpathlibでディレクトリの中身覗くと
picture0.png
picture1.png
picture3.png
picture2.png
picture4.png
みたいな順番になってる事があってなんだか気持ちが悪い
これって何が原因なんです?pathlibの仕様?
2022/06/20(月) 10:51:33.24ID:bmv2finQ
iterdir()とiterdir()が使ってるos.listdir()の仕様
131デフォルトの名無しさん
垢版 |
2022/06/20(月) 10:52:01.17ID:NopO3X5I
lenovoのL420っていうノートパソコン使っています
celeron,4GBです
教科書レベルのプログラムを写経してます
画像ファイル256枚、一枚あたり30kb位のファイルを
重ねる画像処理をpythonで行っているのですが
MemoryErrorがでて処理が止まります
画像処理の分野ではよくあることなのでしょうか

メモリ空きスロットが無いです

今までメモリ不足なんて無かったのですが
PC買い替えでしょうか?
2022/06/20(月) 11:06:40.33ID:VCuoWLch
>>131
エラーメッセージを読んでエラーの原因をまず確かめろ
ハード的なメモリ不足よりプログラムの書き方が悪い可能性のほうがはるかに高い
133デフォルトの名無しさん
垢版 |
2022/06/21(火) 19:48:14.54ID:BPheRP/d
#次のような集合のリストのリストrを作りました:
r = [[set(range(1,4))]*3]*3
> print(r)
[[{1,2,3}, {1,2,3}, {1,2,3}],
[{1,2,3}, {1,2,3}, {1,2,3}],
[{1,2,3}, {1,2,3}, {1,2,3}]]

#上から2番目、左から3番目の集合を更新して要素を1のみとしました:
r[1,2] = {1}

#するとr[0,2]とr[2,2]も{1}になっちゃいました:
> print(r)
[[{1,2,3}, {1,2,3}, {1}],
[{1,2,3}, {1,2,3}, {1}],
[{1,2,3}, {1,2,3}, {1}]]

r[1,2]以外が変わった原因と、r[1,2]以外が変わらないような方法教えて下さい
134デフォルトの名無しさん
垢版 |
2022/06/21(火) 20:00:56.97ID:BPheRP/d
>>133 訂正
r[1,2]じゃなくてr[1][2]でした (他同様)
135デフォルトの名無しさん
垢版 |
2022/06/21(火) 20:03:33.86ID:nUT03NU2
deepcopyで検索ゥ
136デフォルトの名無しさん
垢版 |
2022/06/21(火) 20:08:37.10ID:SE7t042v
[[set(range(1, 4)) in x for range(3)] in y for range(3)]
137デフォルトの名無しさん
垢版 |
2022/06/21(火) 20:18:32.01ID:SH7wWIQd
>>133
多次元のリストを作るにはどうしますか?
https://docs.python.org/ja/3/faq/programming.html#faq-multidimensional-list
138デフォルトの名無しさん
垢版 |
2022/06/21(火) 20:18:51.87ID:BPheRP/d
>>136
ありがとうございます〜forとin換えたら行けました

>>135
検索してdeepcopyの話かな?という所には辿り着きましたが適応の仕方がよく分かりませんでした 勉強しときます
2022/06/22(水) 11:44:54.88ID:EcTc17L7
ほとんどの言語は、shallow copy

実体をコピーしない。
ポインター・参照しかコピーしない

実体をいじると、それを参照している全ての参照に影響が出る。
実体を参照を通して見ているから

なかなか簡単には、deep copy できない。
参照のリンクを切り離せない

Elixir みたいな関数型言語は、
オブジェクトを更新できない(状態を持てない)から、
こういう問題はなく、安全にプログラミングできる
2022/06/22(水) 12:13:41.31ID:TN4B0obT
なんかさ、もううんこだよね
2022/06/22(水) 21:49:37.76ID:kEl16R0O
特定のフォルダ以下のサブフォルダから拡張子を取得して
指定したフォルダ下に拡張子のフォルダを作りたくて
下記のプログラムを書いたところで動作しましたが
os.makedirs文のみで完結する簡素な記述方法はありますか?

cd_path ← フォルダを作りたい場所
file_extension ← FOR文で取得した拡張子

path = os.path.join(cd_path, file_extension)
os.makedirs(path, exist_ok=True)
2022/06/22(水) 22:14:47.11ID:1aHzqpDi
>>141
回答になってないけど、初心者なら最初からpathlib覚えたほうがいいぞ
os.pathやglob.globはいろんな罠がある
あと、拡張子にはドットが含まれるから注意
2022/06/22(水) 23:39:08.69ID:uPuQk0KY
みんな一時は罹ってしまうコードゴルフ
中二病にちかい
2022/06/23(木) 00:13:39.08ID:RPGBecSe
配列(array)の要素それぞれにリストを入れることは出来ない?
リストの要素それぞれに配列を入れることはできる?

でいいのかな?
2022/06/23(木) 00:24:13.97ID:RKdZXyYS
あまりやらないけれど
配列の要素はそれぞれ任意のものを入れられるから
最初に配列、次に文字列でもすきなクラスでも大丈夫
もちろんぜんぶ配列でもOK
2022/06/23(木) 10:12:12.29ID:bFbjfjx7
dictのキーにString型のリストとバリューにリストに入った多重結界みたいなデータ作ってjsonとして書き出すみたいな遊びだよね
147デフォルトの名無しさん
垢版 |
2022/06/23(木) 14:55:17.55ID:EV0+4t37
https://github.com/yaneurao/Ayane
のunit_test1.pyの、一番基本的なtest_ayane1を通そうとするとプロンプトにtest_ayane1 : とだけ
でてwrite_workerの734行目のself.proc.stdin.flush()でスレッドが死んでるような?感じなのですが
試して原因を教えてくれる神はいませんか。

ちなみに呼び出すエンジン自体は別のソフトや、cshogiというこれと似たライブラリからの呼び出しでちゃんと
動作していることを確認しています。
148デフォルトの名無しさん
垢版 |
2022/06/23(木) 15:04:04.22ID:Ukh7Grgr
判った
149デフォルトの名無しさん
垢版 |
2022/06/23(木) 15:58:15.03ID:EV0+4t37
>>147
Python 3.7.13で、macOS12.4 Montley上です。
2022/06/24(金) 11:43:47.67ID:3JV7YPJq
socketのサーバー側で
i=0
while True:
data=soc.recv(受信サイズ)
if not data:
break
data_sum+=data
with open(f"保存するファイル名_{i}.zip",mode="ab") as f:
f.write(data_sum)
i+=1
みたいにするとクライアント側が送信したデータの他に数個のzipファイルが出来るんだけどこのデータの中身は何なんだろう?
zipfileで開こうとするとエラー出力しちゃう
変数iを使わずに受信するとクライアントが送信したデータだけが残るみたいだけど…
151デフォルトの名無しさん
垢版 |
2022/06/24(金) 12:05:35.52ID:K2we1Lar
>>150
死ね
https://egg.5ch.net/test/read.cgi/bizplus/1655956236/
2022/06/24(金) 13:18:15.52ID:d6WBxki6
FOR文の中にtqdm()を入れてみたんんですが
下記みたいなのしか表示されなくプログレスバーが表示されません
70786it [3:35:59, 1.94it/s]
なにが問題なんでしょうか?
153デフォルトの名無しさん
垢版 |
2022/06/24(金) 14:31:40.66ID:yJmddVFh
実際のコードを書かないこと
154ぴよ
垢版 |
2022/06/24(金) 14:59:09.01ID:XR8KeGTq
ほげほげ
155デフォルトの名無しさん
垢版 |
2022/06/24(金) 19:30:36.14ID:n0/ceoPd
>>152
lenが不明なiteratorだとそうなる
tqdm(iterator, total=100)のようにする
2022/06/24(金) 23:45:09.14ID:/S8ogjuv
>>150
VSCode で、バイナリエディタの拡張機能・Hex Editor でも使って、バイナリとして見てみれば?
文字コードなどが不明なので、テキストとして見るには困る

適当に内容を作って、ファイルの拡張子を .zip にしても、
正しいZIPファイルの形式になるはずがないので、ZIPファイルとしては動作しない

各拡張子のファイルには、決められた構成があるため、
それに従っていない場合は、正常に動作しない
2022/06/25(土) 00:01:18.86ID:eoWHGkrH
Phil Katz に聞くべき
2022/06/25(土) 00:11:42.65ID:z9QRxAiq
降霊術を習得しないと
159デフォルトの名無しさん
垢版 |
2022/06/25(土) 19:47:06.55ID:fwnfW89W
Pythonでsetの要素がイミュータブルでないといけないのはなぜですか?

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
S = {a, b, c}
a.append(0)

この状況で、

a in Sの値が偽になっても別に構わないと思います。
Sに登録した時点でのaは{1, 2, 3}だったわけですから、
d = {1, 2, 3}
d in Sが真になりさえすれば何もおかしなことはないと思います。
2022/06/25(土) 19:57:20.22ID:I0eUacPf
S = {a,b,c}
TypeError: unhashable type: 'list'
161デフォルトの名無しさん
垢版 |
2022/06/25(土) 20:23:18.44ID:bZig/WUT
こういう馬鹿が辞書のキーにまでリスト入れたいとか言い出すんだろうな
2022/06/25(土) 20:26:09.88ID:gQjoPRQF
>>159
Pythonのオブジェクトは基本参照だし、setに突っ込んでもコピーされる訳じゃない
重複を許さないsetの要素が変更されたら保証できないし、比較のコストも考えたら…かな
2022/06/25(土) 20:36:01.58ID:9jpr7vFN
>>159
自作クラスとか、mutableでもsetに突っ込めるよ。
何か読み違えたのでは?
2022/06/25(土) 21:18:41.55ID:gQjoPRQF
>>163
本質的にはそうじゃない、ユーザークラスは既定でハッシュ化できるが
これは一般的な実装ではid()、即ちインスタンスアドレスに基づくもの
実質的に求められているのはハッシュの不変性であり、それならば通る

しかし同一性を内容で評価するなら意味は成さないのでlistだと未定義
データモデル曰く「クラスがミュータブルなオブジェクトを定義しており、
__eq__() メソッドを実装しているなら、 __hash__() を定義してはなりません。」
2022/06/26(日) 01:34:01.17ID:A2gDvo6x
やってやれないことはないけど
デメリットを打ち消すだけのメリットを見いだせなかったんでしょGuidoが

単に他の言語のdict/setに合わせただけかも知れんが
ともかく、真実が知りたかったら開発者に聞いてこいよ
2022/06/26(日) 07:16:45.51ID:eSuyoUi6
>>95
print('QHG pj.og.ldn.iakkok:etis'[::-1],
'/elpmis/pj.og.ldn.iakkok//:sptth'[::-1], sep='\n')
167デフォルトの名無しさん
垢版 |
2022/06/26(日) 13:31:03.88ID:DTfGvOZF
ねんまつ
2022/06/27(月) 08:09:04.08ID:Zqv939YP
PCでのアプリ操作を自動化したいのですが、pyocrで文字認識して、内容によって判断し、pyautoguiでxy座標指定して、ボタン押すしかないでしょうか?
2022/06/27(月) 08:14:55.95ID:RN7qnQjk
物によるとしか言いようが無いな
2022/06/27(月) 08:17:13.06ID:RN7qnQjk
PyAutoGui でカバー出来るか出来ないかを判断してみたら?
2022/06/27(月) 18:27:20.11ID:3qzf3wBJ
以前MACにいれたpython3を削除できないです。

% rm -rf /usr/bin/python3
rm: /usr/bin/python3: Read-only file system


% sudo rm -rf /usr/bin/python3
Password:
rm: illegal option -- ?
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file

原因わかる方いますか?
2022/06/27(月) 18:53:43.40ID:0yF6vhsn
>>171
sudoのほうは全角スペースが入ってるのが原因
2022/06/27(月) 19:05:21.65ID:a8sMrZjJ
172の優しさに感動
2022/06/27(月) 19:25:49.92ID:cL/RIHXE
そのpython入れたのはAppleだから通常起動したOSからは削除できない仕組み
消えたらOS内のスクリプトが動かなくなるよ
よかったねOSが壊れなくて
2022/06/27(月) 20:20:17.78ID:3qzf3wBJ
>>172
迅速なレスありがとうございます。
もう一度コメント打ちましたが同じ結果でした。全角は入ってないようです。
>>174
MACから元々インストールされているのはphyon2なので
Phyon3とは関係ない、削除しても問題ないと思うのですが..

https://i.imgur.com/PpXh6yu.png
2022/06/27(月) 20:45:49.02ID:xsOnLI+U
>>175
何経由でインストールしたんだこれ
Homebrew使ってインストールしたなら
brewコマンド経由でアンインストール出来ない?
2022/06/27(月) 21:25:48.96ID:cL/RIHXE
>>175
python3入ってないmacOSってわりと古いよ?
ここ最近はpython2が逆に入ってない(公式サポート終わってるからね)
もし自前で /usr/bin にインストールしたってんならクラッカー気質あるわw
2022/06/27(月) 21:44:39.26ID:XFwxgXBL
>>175
同じ結果とちゃうやん
全角入ってた時とエラーメッセージ変わってるやん

どうしても削除したいならSIP無効にしてから削除で
2022/06/27(月) 22:13:08.24ID:3qzf3wBJ
>>175
追記 すみません自分の勘違いでこのpython3はデフォルトから入ってるファイルのようです。

>>177 さんの仰る通りでした。申し訳ありません。

そして再度インストールしようとhomebrewを入れpyenvを入れ

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
を追加し
source ~/.zshrcを実行してpython3.10.4をインストールするとうまくいきません。。おまかんなのでしょうか??

https://i.imgur.com/ErhCpgK.jpg
2022/06/27(月) 22:13:29.06ID:3qzf3wBJ
>>178
申し訳ありません。
2022/06/28(火) 01:52:22.87ID:GjoTbrJZ
>>179
自決ですが、xcodeが古かったので新しいバージョンにいれた所無事インストールできました。
182デフォルトの名無しさん
垢版 |
2022/06/28(火) 08:26:42.80ID:UgaAibo1
またしても犠牲者が。
pythonの乱用は精神に作用するのかもしれない
183デフォルトの名無しさん
垢版 |
2022/06/28(火) 12:11:58.39ID:W8L8uteA
macのOS環境ごとふっとんで死ねば良いのに
2022/06/28(火) 12:22:02.22ID:SMUgtqGT
日本人が作った、多言語バージョンマネージャーのanyenv を使えばよい。
同様のツールには、asdf もある

nodenv, pyenv, rbenv,
exenv, goenv, tfenv など

node, python, ruby, elixir, go, terraform など

他には、Docker も多い
185デフォルトの名無しさん
垢版 |
2022/06/28(火) 13:58:17.02ID:5S91HeIj
re.subで[]で囲まれた文字列の中を置換するとき、どんな記述をすればよいですか?
re.sub(r'\[.*c.*\], 'x', '[abcabc]abc')
期待する値
[abxabx]abc
186デフォルトの名無しさん
垢版 |
2022/06/28(火) 14:07:39.85ID:N3XtpiKU
>>185
re.sub(r'\[[^\]]*\]', lambda m: m[0].replace('c', 'x'), '[abcabc]abc')
187185
垢版 |
2022/06/28(火) 14:31:31.24ID:5S91HeIj
>>186
多謝!! そしてごめんなさい。良ければ解説を。
188185
垢版 |
2022/06/28(火) 14:49:53.04ID:5S91HeIj
[]の中だけを対象にreplaceしているのは、なんとか分かるんですが、re.sub の第2引数、
lambda m: m[0].replace('c', 'x')
が何をしているのかわかりません(泣)
2022/06/28(火) 14:52:51.94ID:dX7Zsa+9
マニュアルを読もう
https://docs.python.org/ja/3/library/re.html#re.sub
2022/06/28(火) 14:59:09.76ID:d3+RKzUY
repl が関数であれば~の下りね、m[g]はm.group(g)と同等
後読みアサーションに固定幅制約がないライブラリなら
面倒なことしなくても(?<=\[.*)c(?=.*\])で済みそうだが
191デフォルトの名無しさん
垢版 |
2022/06/28(火) 15:42:31.79ID:5S91HeIj
re.sub(r'\[.*\]', lambda m: m.group(0).replace('c, 'x')
でlambda関数がヒットするたび呼ばれるわけか!!
仕組みは理解できました。

>>190
look-behind requires fixed-width pattern
に阻まれました。
192デフォルトの名無しさん
垢版 |
2022/06/28(火) 19:31:26.15ID:mooH0Iqw
m.group はめんどくさい
findall の方が便利
193デフォルトの名無しさん
垢版 |
2022/06/29(水) 07:52:27.56ID:9vdu/PbE
>192
re.findall だと re.sub のような仕掛けが利用できなくないですか?
>185 できますか??
2022/06/29(水) 10:56:55.09ID:CtIvUBkO
re.findallで[]付きとそれ以外に分けて処理
ちょっと長くなるけど色々応用がききます

# []の中だけreplace
>>>re.findall(r'\[[\w]+\]|[\w]+', 'a[abcabc]abc[abc]')
['a', '[abcabc]', 'abc', '[abc]']
>>>[m.replace('c', 'x') if m[0]=='[' else m for m in _]
['a', '[abxabx]', 'abc', '[abx]']
>>>''.join(_)
'a[abxabx]abc[abx]'

# []の中以外をreplace
>>>re.findall(r'\[[\w]+\]|[\w]+', 'a[abcabc]abc[abc]')
['a', '[abcabc]', 'abc', '[abc]']
>>>[m.replace('c', 'x') if m[0]!='[' else m for m in _]
['a', '[abcabc]', 'abx', '[abc]']
>>>''.join(_)
'a[abcabc]abx[abc]'
2022/06/29(水) 19:29:51.42ID:CtIvUBkO
完成形できました!記号が含まれていても[]がちゃんと閉じてなくても
ちゃんと閉じているのだけreplaceします
>>186が秀逸だけど、[]で囲まれていない方をreplaceするとなると
途端に難しくなるから、やっぱ私の方法が良いんじゃないでしょうかw

>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*|[^\[\]]*', 'a[abcabc]abc[abc]')
['', 'a', '[abcabc]', '', 'abc', '[abc]', '']
>>>[m.replace('c', 'x') if m and m[0]=='[' else m for m in _]
['', 'a', '[abxabx]', '', 'abc', '[abx]', '']
>>>''.join(_)
'a[abxabx]abc[abx]'
# 文字列に記号が含まれていて[]がちゃんと閉じていなくても大丈夫
>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*|[^\[\]]*', 'a[abcabc]abc[abc$$[abc]')
['', 'a', '[abcabc]', '', 'abc', '[', '', 'abc$$', '[abc]', '']
2022/06/29(水) 22:12:59.69ID:sd1PgpdM
見通し悪すぎて要件満たしててもレビューで蹴られるコード
2022/06/29(水) 22:25:07.73ID:TQFqK5Fi
ちゃんと閉じているの定義があやしい
[[abc]とか
2022/06/29(水) 23:13:54.03ID:CtIvUBkO
>>196 見通し良いでしょ、角カッコで囲まれた角カッコ以外 or 角カッコ or 角カッコ以外でfindallじゃん
角カッコしか出てこないじゃん、簡潔、シンプル、分かりやすい

>>197 良い指摘、アナタのおかげで改善されました^^
>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*?|[^\[\]]*', 'a[abcabc]abc[[abc]')
['', 'a', '[abcabc]', '', 'abc', '', '[', '[abc]', '']
199デフォルトの名無しさん
垢版 |
2022/06/30(木) 02:06:34.63ID:HSayXmFT
kazuyuki
200デフォルトの名無しさん
垢版 |
2022/06/30(木) 20:55:30.42ID:QXLJbWFQ
ナンプレのゲーム作りたい

縦横はチェックする方法わかるが
3x3マスの部分だけ配列で考える方法がわからない
↓までは考えたんだが方向性が違う気もする

https://techiedelight.com/compiler/?xIkw


9進法から3進法への変換がベース(ただし3進法は0から始まる)
for x in range(81)
x // 3
x % 3

3桁目に入る場合、1桁目に(3桁目)*3が足される
10 (1,0,0)→(0,3)
4桁目に入る場合、2桁目に(4桁目)*3が足される
28 (1,0,0,0)→(3,0)
2022/06/30(木) 21:46:07.32ID:0uxZVqVl
簡単なのは3x3を座標系とは別の9マスの配列の配列として保持
置いたときに縦横とは別にその配列へ反映させる
縦横も同じ手法をとると統一感ある
コード上は9マスの配列はクラスにするかも
202デフォルトの名無しさん
垢版 |
2022/06/30(木) 22:01:04.82ID:zKJ67H3+
5桁8色のhit&blowを造りたい
人間が設問してpythonに解かせたい
203デフォルトの名無しさん
垢版 |
2022/07/02(土) 07:54:20.82ID:oFwScFTn
>>201
既存の座標系にこだわらないほうがいいか
ありがとう

ナンプレのゲーム作りたいから手始めにナンプレを解くプログラムの検証をしてたんだけど

https://techiedelight.com/compiler/?b-I8

37行目の部分ってどうなってるの?
再帰関数なのはわかるんだけど、if文の中で再帰してるじゃん

def 関数():
if 再帰関数():
retrun Ture
retrun Flase
2022/07/02(土) 09:00:34.91ID:Zph8lW04
>>203
再帰だけどやってることは探索のための分岐
rangeの列挙からcontinueされなかった分を順番に分岐してて
呼んだ先で18-20にひっかかると中断して最初の呼び出しまで戻ってる
deepcopyしてるところが富豪的だけどシンプル
2022/07/02(土) 09:39:17.61ID:EefHjxyZ
>>204
この37行目
if set_num(ndata, idx + 1): return True

これを
set_num(ndata, idx + 1)
に変えてみたんだけど結果変わらなかった
if の中に入れる意味あるの?
2022/07/02(土) 09:44:12.51ID:EefHjxyZ
答えが出た後も探索しちゃうからそれを止めるための処理ってことか
207デフォルトの名無しさん
垢版 |
2022/07/02(土) 09:57:44.64ID:COZLaCzb
ninbe
208デフォルトの名無しさん
垢版 |
2022/07/11(月) 12:19:00.64ID:aiHSnYNz
google colabでcuda使いたい。
良い方法ある?
209デフォルトの名無しさん
垢版 |
2022/07/11(月) 12:19:00.73ID:aiHSnYNz
google colabでcuda使いたい。
良い方法ある?
2022/07/11(月) 12:39:20.78ID:L4tB3bvp
金払ってないのか?
211デフォルトの名無しさん
垢版 |
2022/07/11(月) 14:48:46.26ID:aiHSnYNz
>>210
colabはdjangoやfraskができないっぽいからやってない。
もしdjangoが使えるならお勧めあったら教えてほしいっす!
vsかチャームか、atomか・・・。
2022/07/11(月) 15:51:00.64ID:EGP2A4JX
好きなテキストエディタないの?それで基本いいんだけど
拘りないなら拡張とユーザ数からvscodeでいいんじゃない
PyCharmはリファクタまわりが優れているけど必須じゃないし
Atomはオワコン
2022/07/11(月) 17:35:44.11ID:rDGcpouH
vsもマイクロソフト以外のプラグインが信用出来ないからあまり良いとは言えないかなー
2022/07/12(火) 00:04:57.18ID:eIaiUALg
文字列〜〜〜ID123456.text

みたいなファイルからID123456だけを抜き出したいんだけど、どんな方法がある?
IDの後には必ず数字がきて、桁数はかならず6
2022/07/12(火) 00:06:23.62ID:eIaiUALg
補足
IDが書かれてる場所はファイルによって異なる

文字列〜〜〜ID123456文字列〜.text
ID123456文字列〜〜〜.text
みたいなときもある
2022/07/12(火) 02:57:47.18ID:yBYukR5V
>>214
普通は正規表現でも使うのかな
俺は正規表現使えないからこう書く

from pathlib import Path
p="C:\abc\あいうID1234567XYZ.text"
print("ID" + Path(p).stem.split("ID")[1][:6])
2022/07/12(火) 08:19:17.52ID:hTnf4I/y
>>215 正規表現を制する者は文字列を制する、他の言語でも仕様はほぼ同じ、覚えて損は無し

>>>import re
>>>s='''文字列〜〜〜ID123456文字列〜.text
・・・ID789012文字列〜〜〜.text
・・・みたいなときもある'''

>>>re.findall(r'ID\d{6}', s)
['ID123456', 'ID789012']
2022/07/12(火) 10:53:36.86ID:eIaiUALg
>>216>>217
ありがとうございます、勉強になります
219デフォルトの名無しさん
垢版 |
2022/07/12(火) 20:48:55.38ID:gRW1mfOh
例外処理ってどう使えばいいんだろ

スクレイピングしてあるサイトのデータ拾いに行って
”データ”がある場合に代入となるんだけど
拾いに行くページによって、その行自体がなくてエラーになってしまうんだよな

if Data[0][0] == ”データ”:
s = Data[0][0]

Data[0][0]がそもそも存在しない時にエラーにならないよう例外処理を使うといい、ぐらいまでは調べたんだけど
書き方がよくわからない
2022/07/12(火) 21:11:11.59ID:hTnf4I/y
>>218
より具体的な例としてC:/hogehogeディレクトリ内の全ファイルのファイル名からIDを抜き出します

>>>import pathlib, re
>>>src = pathlib.Path('C:/hogehoge')
>>>list(src.glob('*')) #ファイル確認、この例ではディレクトリ内にファイルが2つあります
[WindowsPath('C:/hogehoge/ID789012文字列〜〜〜.text'), WindowsPath('C:/hogehoge/文字列〜〜〜ID123456文字列〜.text')]

# 以下、ID抜き出し処理
>>>l = [re.findall(r'ID\d{6}', f.name) for f in src.glob('*')]
>>>l
[['ID789012'], ['ID123456']]
>>>sum(l, []) #フラット化
['ID789012', 'ID123456']
2022/07/12(火) 21:56:43.39ID:UQgGu1pu
>>219
データがなかった場合にどう処理したいのかによって
例外処理にするのかif-elseみたいな分岐処理にするのかを選択する

スクレイピングの場合は対象データがなかったら
何も処理しないとか空文字とかのデフォルト値を入れる場合が多いんだけどそのやり方もいろいろ

if-elseで簡易的な関数にした例
def extract(html, selector, fn, default=""):
return fn(element) if (element := html.select_one(selector)) else default

def extract_text(html, selector, default=""):
return extract(html, selector, lambda x: x.text.strip(), default)

def extract_link(html, selector, default=""):
return extract(html, selector, lambda x: x.get('href'), default)
2022/07/12(火) 22:40:42.84ID:xLkMA/UK
>>219
スクレイピングでたとえると
途中の要素が取得できないと結局な結果が得られないのでその場でプログラム終了する
とすると、取得失敗の都度ifでsys.exit()と書けはする
ここで終了前になにかメッセージ出力したり上位の関数にエラーで戻ったりアレコレしたいとすると
共通化したくなり例外以外では見通しが悪く書きにくい
そういうのもうまく関数設計すれば書けはするけど
Pythonは標準の操作(Data[0][0] とか)で例外あげる場面が多いので例外に寄せる方が楽
2022/07/13(水) 20:23:40.86ID:EtP8dxEe
Pythonのトップ・キノコードがキノクエストと言う、Pythonの学習サービスを作った!
224デフォルトの名無しさん
垢版 |
2022/07/13(水) 22:27:14.03ID:XjBOe/Qa
s = ’aaa bbb ccc ddd’
という文字列を
s = ’[aaa],[bbb],[ccc],[ddd]’
という文字列にする方法って

s.split()
で一度リストにして
for文内で新しいリストにappendとか使って [ や ] や , をリストの要素として追加して
そのリストをまた文字列に戻すって方法しか思いつかないんだけど、他にあるかな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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