X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2021/12/27(月) 01:38:10.93ID:GepmXCuJ
当スレに★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 ###
0166デフォルトの名無しさん
垢版 |
2022/02/07(月) 02:26:12.83ID:8Of01QOa
前は(必要に迫られない限り絶対に使いたくない)Anacondaだったけど一年半くらい前に公式のPythonに出戻った
それまではpylauncher+Anacondaだったね
0168デフォルトの名無しさん
垢版 |
2022/02/07(月) 08:07:41.99ID:X3clQbRB
forループを指定の時刻になったら抜け出したいんだが何か方法ありますか?

例えば21時になったらループを抜けたいです
0169デフォルトの名無しさん
垢版 |
2022/02/07(月) 08:25:36.92ID:nOkVXb94
now=datetime.datetime.now().hourで現在時刻を取得してif now>21:みたいな感じでいけるのかな?
0171デフォルトの名無しさん
垢版 |
2022/02/07(月) 12:11:38.49ID:Afq51Jp9
signal.alarmで割り込んでグローバルに参照できる情報を更新
forではそこを確認するだけ
あるいはEventMachineみたいなスケジューラに乗っかる
0172デフォルトの名無しさん
垢版 |
2022/02/07(月) 20:36:04.90ID:uf+aDjpD
文字列のリスト渡す引数があるんですが、1つだけならリストじゃなくて文字列1つだけでも渡したいんです
文字列だけで渡すとforで1文字ずつのループになってしまいます。
リストで渡したみたいに同じようにforで1回回したいんですが何か方法ありますか
0173デフォルトの名無しさん
垢版 |
2022/02/07(月) 20:37:56.01ID:WNsmATfv
文字列が来たらリストに入れてあげればいいのでは
0174デフォルトの名無しさん
垢版 |
2022/02/07(月) 20:45:24.77ID:WJa2Jvem
if isinstance(x,str): x=[x]
0176148
垢版 |
2022/02/07(月) 22:02:57.91ID:QDp/4Uhu
メモリの確保と解放を自分ですることって可能ですか?
tkinterのラベルに画像を表示したいのですが、
tkinter.PhotoImage()の戻り値が勝手に開放されてしまい表示されません
0177148
垢版 |
2022/02/07(月) 22:05:00.21ID:QDp/4Uhu
>>163
そうなのですね、やっぱり純正?Pythonがいいんでしょうか…

>>164
Win11だからか出てきませんでした
0178デフォルトの名無しさん
垢版 |
2022/02/07(月) 22:22:44.80ID:dQ2UCnOY
>>177
win11なら幸運だ
windows terminalがプリインストールされているのでは?
なければストアから落とすとpowershellを直接開ける。
設定次第でwslもいけるぞ
0179148
垢版 |
2022/02/07(月) 23:12:32.22ID:QDp/4Uhu
>>178
windows terminal、入ってました
ただ使い方がよく分からなかったので、時間のあるときに調べてみます
ありがとうございます
0180デフォルトの名無しさん
垢版 |
2022/02/08(火) 05:30:13.15ID:nYjjFW0t
tkinter photoimage 表示されない で検索しよう
秒で解決するから

photo = tk.photoimage(画像)
widget = tk.widget(master, image=photo)
0181デフォルトの名無しさん
垢版 |
2022/02/08(火) 06:33:41.40ID:x7KPLs8u
>>180
ありがとうございます
インスタンス変数周りについて理解しました

https://pastebin.com/XUdUcPEz

説明が複雑になってしまうと思い後出しになってしまったのですが、
ソースを短く手直ししてアップロードしました

今回はItemクラスにiconインスタンス変数を持たせて、ここにPhotoImageの戻り値を入れています
そしてItem.iconから、ラベルを作成しています

本当はラベル作る関数にItemクラスのリストを渡して作らせているのですが、
この書き方でも再現されました

よろしくおねがいします
0182デフォルトの名無しさん
垢版 |
2022/02/08(火) 07:11:21.68ID:x7KPLs8u
>>181
itemをLauncherのself.item_listに入れたら表示されるようになりました
Item.iconはインスタンス変数だったけど、itemが一時的な変数で開放されちゃってたのかな…

ただ関数を再帰呼び出ししている元のソースではこの手法でもだめでした
難しい
0183デフォルトの名無しさん
垢版 |
2022/02/08(火) 07:53:09.80ID:gLJTNggL
いやだからワンクッション置けっつの
まず生成しろ
p = photoimage(i)
それを使え
w(image=p)

もっと単純なテストケースで試せ
上手くいく場合と、いかない場合の境界線を探せ
0185デフォルトの名無しさん
垢版 |
2022/02/08(火) 21:50:34.21ID:9OOJa9HQ
クロージャとデコレータの違いが良くわかりません
どなたか猿でも分かるように説明お願いします
0187デフォルトの名無しさん
垢版 |
2022/02/08(火) 23:31:00.76ID:nzlDnO0s
デコレータはクロージャで処理を追加する際の糖衣の認識

def logger(func):
__def inner(*args,**kwargs):
____print(‘start’)
____func(*args,**kwargs)
____print(‘end’)
__return inner

@logger
def add(x,y):
__print(x+y)

デコレータは↓を簡単に表記する

add=logger(add)
0188デフォルトの名無しさん
垢版 |
2022/02/08(火) 23:58:54.11ID:x7KPLs8u
>>184
ありがとうございます
とりあえず動くようになったのですが、多分色々な要因があって原因が特定できませんでした…
また明日以降原因を探ってみようと思います
0189デフォルトの名無しさん
垢版 |
2022/02/09(水) 00:58:23.86ID:9lBFb0U2
Windowsでパスのセパレータが混在する原因を調べていたら、tkinterが原因だった
filedialogとTkinterDnD2で発生するようだ

こんな感じで対応してみた
files = filedialog.askopenfilenames(filetypes=fTyp, initialdir = iDir)
files = [str(pathlib.Path(p)) for p in files]

なにかまずい点や、もっとスマートな書き方ありますか?
0190デフォルトの名無しさん
垢版 |
2022/02/09(水) 08:57:49.87ID:yefmpe+I
スマートな書き方以前に、再代入するな。
0191デフォルトの名無しさん
垢版 |
2022/02/09(水) 11:31:16.02ID:4FhfLNQw
pipでcshogiというパッケージを入れようとしたら

cshogi/_cshogi.cpp:635:10: fatal error: 'init.hpp' file not found

というエラーになったのですが、何したらよいでしょう。
依存関係で怒られたCythonやnumpyは入れました。
Python3.9.6でmacOS12.2です。
ググってみると、boost/python/init.hppというのが見つかりましたが、C++のboostライブラリをいれなさいということでしょうかね、、、
0192デフォルトの名無しさん
垢版 |
2022/02/09(水) 11:35:44.94ID:gJYxYm5I
それソースからインストールじゃないか?
pip install cshogi
だけでいいと思う。試しにやったらほぼ素の環境で何のエラーもなく入ったぞ
0193デフォルトの名無しさん
垢版 |
2022/02/09(水) 11:44:04.48ID:4FhfLNQw
>>192
配布元のインストール方法を読んでもそんな気がしたし、多分そうだと思います。
が、私もpip install cshogiとしただけなんですよね。
venv環境下だからって、それも関係ないですよねえ。
あるいはM1マシンだから?と思ったけどintelマシンでも同じ、、、今晩から連休中にかけて、これを使って色々試そうとしてるので気になって仕事にならないです。
0194デフォルトの名無しさん
垢版 |
2022/02/09(水) 13:09:33.88ID:4FhfLNQw
>>193
Windowsとlinuxはバイナリ配布してるようなので、なんとかビルドするしかないみたいです
わざわざ試してみて頂いてありがとうございました。
0196デフォルトの名無しさん
垢版 |
2022/02/09(水) 14:47:52.14ID:iY5PkkMN
>>189
Windows のRuby で、フォルダをDrag & Drop した

Ruby では、File.expand_path で、
Windows のパス区切り \ を、/ に変換できる

\ を表示するために、\\ となっている

p ARGV[ 0 ]
#=> "C:\\Users\\Owner\\Documents\\あ"

puts ARGV[ 0 ]
#=> C:\Users\Owner\Documents\あ

p File.expand_path( ARGV[ 0 ] )
#=> "C:/Users/Owner/Documents/あ"
0197デフォルトの名無しさん
垢版 |
2022/02/09(水) 16:26:09.83ID:4FhfLNQw
>>194
もう出てこなくていいと言われそうだけど進展。
Boostライブラリをインストールして以下のようにしたら進展しました。こんなテクがあるとは。

env LDFLAGS="-L /usr/local/Cellar/boost/1.76.0/lib/" CFLAGS="-I /usr/local/Cellar/boost/1.76.0/include/boost/python/" pip install cshogi

今度はこのパッケージのposition.hppがないって言われたけど、またちまちま調べます。pipの仕組みを勉強しないといかんですね。
0202デフォルトの名無しさん
垢版 |
2022/02/10(木) 20:11:51.82ID:DDROH4gR
ゲーム画面などが非アクティブでも、動作させることをPythonでやりたいです。
動作としては、ssupi+teseのようなものですが、
その仕組みも知りたいのですが、教えてください!
0205デフォルトの名無しさん
垢版 |
2022/02/11(金) 02:51:16.69ID:79Vi/Nfi
>>202
挙動からしてリモートプロセスにDLLをロードしてWin32APIかWinProcをフックしてると思う
PythonではDLLを出力できないので多分無理
0207デフォルトの名無しさん
垢版 |
2022/02/11(金) 18:55:58.63ID:Lg8I1vzk
PyQtってtkinterのようにラベルに画像とテキストを一緒に表示することって可能ですか?
探してもそれらしきもの見つからなくて
0209デフォルトの名無しさん
垢版 |
2022/02/11(金) 21:48:34.11ID:Lg8I1vzk
>>208
ありがとうございます
[画像]タイトル
[画像]タイトル
のようなリストを作りたくて、ページ拝見させていただきましたが少しイメージと違うかもしれません


かなり強引ですが、moveの絶対位置レイアウトで、ラベル2つをペアにする方法で実装してみました
https://pastebin.com/xSdLz5x7

pyqt、無理やりなら色々なことできそうですね
0210デフォルトの名無しさん
垢版 |
2022/02/12(土) 04:41:58.05ID:OxHugf3n
ttp://codepad.org/ZCf9omJq

クラス変数の初期化で「name 'NUM' is not defined」ってエラーが出るんだけど、何が原因なんだろうか?
Python 3.10.2 64bit なんだけど、構文間違ってないよね?
0213デフォルトの名無しさん
垢版 |
2022/02/12(土) 09:07:50.55ID:DNWolfIy
>>209
PyQT知らんけど、一般的なGUIアプリ開発なら、
まずは、"[画像]タイトル"のクラスを作って部品化することを考えるもんじゃないの?
0214デフォルトの名無しさん
垢版 |
2022/02/12(土) 09:46:01.09ID:5WRcTUV/
>>213
ありがとうございます、その方向で作ってみます
PyQtはクラス継承で色々いじれるようなので楽しみです
0216デフォルトの名無しさん
垢版 |
2022/02/12(土) 12:09:54.30ID:OxHugf3n
>>215
なるほどありがとう
この書き方がダメなのはわかったけど
クラス名.クラス変数 って書いても通らないし
__init__ でセットするとインスタンス生成のたびに実行されちゃうし困ったな

クラスごとに1回しか実行されないコンストラクタってないんだろうか
0218デフォルトの名無しさん
垢版 |
2022/02/12(土) 13:02:31.30ID:OxHugf3n
>>217
それクラス内変数じゃなくなっちゃってる…

一応できたけどこういう方法しかないのかな
インスタンスを生成するまで初期化されないのが気持ち悪いけど仕方ないか
https://ideone.com/kCp5Yq
0219デフォルトの名無しさん
垢版 |
2022/02/12(土) 13:32:52.88ID:qcs4WmEG
何でインスタンス変数じゃダメなの
0220デフォルトの名無しさん
垢版 |
2022/02/12(土) 13:53:20.84ID:DQy4vyYE
a = test()
a.output()

b = test()
b.output()

こうしたときにインスタンス変数だとpowをaつくるときとbつくるときの二回実行しちゃう
powぐらいだったらいいけど、重い処理だったら・・・
ってことじゃないかな
class内にstatic変数おけたらいいんだけどないのかな
0221デフォルトの名無しさん
垢版 |
2022/02/12(土) 14:11:19.51ID:qCFMK4fY
クラス定義しているモジュールの変数にすれば間に合う気もするけど
classmethod/staticmethodにするかメタプログラミングするかしか
0222デフォルトの名無しさん
垢版 |
2022/02/12(土) 14:30:51.17ID:KYIWQrD2
>>218
内包表記やジェネレータ式がクラス直下ではクラス変数を参照できないというだけなので
list(map(pow, itertools.repeat(NUM)…とかfor文+appendとか…で良いんじゃない?

2なら関係無く動くけど、nonlocal文とか出来た割にこんな罠があるとは
0223デフォルトの名無しさん
垢版 |
2022/02/12(土) 14:56:50.33ID:5pn6K0Tu
test.POW=[pow(test.NUM,a) for a in range(0,5)]
ってのをクラス定義の下にインデントなしで書けばいいんじゃないの
なんか問題ある?
0226デフォルトの名無しさん
垢版 |
2022/02/12(土) 19:13:13.57ID:dzEAJuso
vscodeでflake8を使っていますが、メソッドの後ろに()を書かなくても警告してくれません
これを警告してもらう方法ってありませんか?
0228デフォルトの名無しさん
垢版 |
2022/02/12(土) 19:38:11.77ID:dzEAJuso
メソッドだけでなく関数でも、例えば
print
と書いただけで()をつけないまま改行しても警告してくれません
0229デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:04:13.67ID:Sz70mZLP
関数オブジェクトが置いてあるのはおかしなことではない
コールバック関数に関数食わせるたびにケイコクサレタラ溜まったもんじゃない
0230デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:06:20.66ID:XbUiA07Q
myprint = print
myprint('woooo!!!!!!')
0231デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:06:57.27ID:Sz70mZLP
関数オブジェクト食うのは高階関数か。
とにかくコールしなくても使い道はある。
0232デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:19:30.83ID:995Y4clk
flake8、すごいね
お前のコード汚すぎる!ってたくさん言われた
自分の環境ではprint(とかなってたら警告されます
0233デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:28:51.81ID:XcSi1DQ3
aa = print
のように代入するのはあり得るけど
print
だけってありえるの?
pythonだと実行時のエラーすら出ない

ほかの言語だとこういうのあり得ないからIDEに警告表示出るよな
0234デフォルトの名無しさん
垢版 |
2022/02/12(土) 20:43:06.60ID:Sz70mZLP
文字列を直置きしてdocstringにしちゃうような言語だしなぁ
pydroidだとstatement seems to have no effectの警告が出る
0235デフォルトの名無しさん
垢版 |
2022/02/12(土) 21:19:26.94ID:Tm8PqFX/
202です。
>>205さん
そうですか…。出来ないのは残念ですが、教えていただきありがとうございます。
0237デフォルトの名無しさん
垢版 |
2022/02/12(土) 21:56:57.57ID:dzEAJuso
>>236
はい、保存してます
警告もでないし実行してもエラーも出ずスルーされるだけです
pythonはこういうもんなんでしょうか?
0238デフォルトの名無しさん
垢版 |
2022/02/12(土) 22:07:27.93ID:kBzBXJs5
RustとHaskellは、コンパイルを通った時点でバグが無いことを保証されると主張してますね。
Pythonに限らず、その他の言語は、まあそういうもんでしょう。
0239デフォルトの名無しさん
垢版 |
2022/02/12(土) 22:32:52.77ID:40whDPBS
>>237
代わりにpylintを使えばエラーを出せるよ
ただ、ちょっと細かすぎて例外設定で除外しないと煩わしいことになるけど
0240デフォルトの名無しさん
垢版 |
2022/02/12(土) 23:41:28.59ID:za8M83yS
>>233
関数オブジェクト理解してる?
0242デフォルトの名無しさん
垢版 |
2022/02/13(日) 04:55:00.94ID:sMX7fMbN
上でも言われてっけどtkinterのeventとか
x.bind('<1>', print)
みたいな例はいくらでもある
0243デフォルトの名無しさん
垢版 |
2022/02/13(日) 07:06:20.17ID:18RMiGPm
233はなんの副作用もないステートメントの話をしてるだろ
それ副作用あるじゃん
0244デフォルトの名無しさん
垢版 |
2022/02/13(日) 09:46:47.61ID:X4ZyWjWq
こんな文字列を直置きしてdocstringにしちゃうような言語をやってると、引数に渡されてスタックに積まれる関数オブジェクトと特に作用のない関数オブジェクトの違いが理解できなくなるぞw
0246デフォルトの名無しさん
垢版 |
2022/02/13(日) 13:27:15.78ID:yoBtg/nD
>>233
> ほかの言語だとこういうのあり得ないからIDEに警告表示出るよな
C言語でも同じだよ、文法的には問題ない
ただ意味がないから大抵の処理系で>>234が書いてるような警告は出るけどエラーではない
0247デフォルトの名無しさん
垢版 |
2022/02/13(日) 17:21:12.09ID:yB05jN77
関数へのながーい引数を変数に入れて渡すことってできませんか?


args = text="テキスト", img="img.png", color="#FFFFFF"
makeItem(args)

みたいな感じです
0250デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:20:42.99ID:MWit14K9
PythonでリストH=[a[2][3], a[5][7]]
を与えた後
H[0]を呼び出すとa[2][3]が返ってきますが、このx座標、y座標である2と3を返す関数はどう作られますか?
0251デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:30:07.26ID:jfCaeP/j
b = a[2][3]
c = a[5][7]
H = [b, c]
という評価を一行で書いてるだけなので
Hの時点だともうその情報はない
0252デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:49:18.90ID:MWit14K9
>>251

ありがとうございます。
ではx座標とy座標を呼び出すにはどうしたら良いでしょうか?
0253デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:55:51.07ID:qU7qP4LH
よくわからないんだけどH[0]を呼び出すとa[2][3]が返ってくるなら
tmp = H[0]
x = tmp[0]
y = tmp[1]
になるんじゃないの?
0254デフォルトの名無しさん
垢版 |
2022/02/13(日) 19:05:34.35ID:4NLUjdRo
Pythonのサンプルコードでは
from hoge import piyo
import hoge
のような記述をよく見ます
これは行儀が悪いように見えますが、Pythonでは問題のないことなのでしょうか
0255デフォルトの名無しさん
垢版 |
2022/02/13(日) 19:14:02.30ID:ZyRs1D7f
>>250
座標もセットにしてリスト化する
H=[(a[2][3],(2,3)),(a[5][7],(5,7))]
0259デフォルトの名無しさん
垢版 |
2022/02/13(日) 21:09:57.57ID:yB05jN77
メンバー変数「__name」を持つ「Human」クラスがあったとして、
これを継承した「HyperHuman」クラスは、
継承元の「__name」を参照できないんですか?

クラスの外から参照しないメンバ変数を__付きにしまくったら継承先で参照できなくなってしまった
0260デフォルトの名無しさん
垢版 |
2022/02/13(日) 21:18:20.00ID:MWit14K9
>>253
すみません、
うまく行きませんでした


>>255
ありがとうございました、思考によって問題を回避出来ますね。私に欠けていたのは問題に食らいつく精神力でした。
0263デフォルトの名無しさん
垢版 |
2022/02/13(日) 22:11:57.52ID:jfCaeP/j
>>262
xxx.zzz以外のxxx.*参照できない状態を保持するのめんどそう

import xxx
zzz = xxx.zzz
と書けるしfrom import自体いらんなら分かる
0264デフォルトの名無しさん
垢版 |
2022/02/13(日) 22:23:48.09ID:nVrhNNmO
>>259
そのままの名前ではできない
継承先から別の名前で山椒できる
self._Human__name

https://ideone.com/9xMJkE
0265デフォルトの名無しさん
垢版 |
2022/02/13(日) 22:25:44.83ID:nVrhNNmO
s/山椒/参照

参照の育て方調べてたからミスった
■ このスレッドは過去ログ倉庫に格納されています