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

■ このスレッドは過去ログ倉庫に格納されています
2021/06/09(水) 21:05:44.61ID:zRBfpo4e
当スレに★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(超初心者用) その53
https://mevius.5ch.net/test/read.cgi/tech/1615846784/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
612デフォルトの名無しさん
垢版 |
2021/08/18(水) 01:09:22.36ID:alFzoDYf
タスクバーの設定でグループ化しないを選ぶのが楽
613デフォルトの名無しさん
垢版 |
2021/08/18(水) 01:33:08.02ID:m4X9BWoP
タスクバーの設定だと他のアプリまで分離してしまうのでアプリ側で分離させたかったんですけど
やっぱり方法はなさそうですね
諦めます
2021/08/19(木) 13:42:29.43ID:FqK5lxwf
0.0.0.0:8000

こういう形式のipに変数名をあてたいんですけど
8000の部分はhostでいいとして
0.0.0.0の部分はaddressでいいのでしょうか?
ipかhostにしようか迷ったのですが
ググったところ0.0.0.0の部分はネットワーク部とホスト部みたいに分かれるみたいですし
ipだと0.0.0.0:8000全体を指しそうだし
しかしそれだとaddressもそうでは・・?みたいな
2021/08/19(木) 13:58:24.37ID:LXAdZTw3
命名の話っすか
命名スレでやればいいと思うけど普通はhost:port
だよ
2021/08/19(木) 14:00:41.87ID:LXAdZTw3
あー、勘違いした
hostとportがくっついてる場合を何と呼ぶかか
2021/08/19(木) 14:08:24.00ID:5v0iaVCE
なんか盛大な勘違いもありそうだけど。。。
source or destination で良いと思う
618デフォルトの名無しさん
垢版 |
2021/08/19(木) 19:26:01.79ID:527sxbC6
ねえみんな
IPv6って使ってる?
2021/08/19(木) 20:09:49.11ID:/iV4BAlB
IPv6なんか通信インフラ屋でない限り全く必要ないからガン無視してok
2021/08/19(木) 20:39:42.72ID:d5oNKX28
>>614
素直にAddressPortでいいだろ
Oracleさんも使ってるし
https://download.oracle.com/otn_hosted_doc/coherence/330/com/tangosol/net/LoadBalancer.AddressPort.html
2021/08/19(木) 21:45:53.60ID:9ur+XjZE
さすが命名に定評のあるオラクルさんw
2021/08/20(金) 13:05:28.03ID:aaLnq14B
五教科の平均値を前半期、後半期で出すプログラムを
for文と関数で短めに作るにはどうしたら良いの?
五教科の点数は適当で良いのでアドバイスお願いします
2021/08/20(金) 13:23:47.57ID:nwMAPpno
アドバイスとして求めるなら、
とりあえず自分で書いてみてアップしたら?
624デフォルトの名無しさん
垢版 |
2021/08/20(金) 13:53:32.51ID:bmI6iAbu
pythonやるのって中学校からだっけ?
2021/08/20(金) 13:58:09.36ID:aaLnq14B
Python一年生を読んでて画像表示プログラムを打ってると毎回エラーが出て疲れる
「え?正確に入力した筈なのに何処が違ってる?」
って思うけど、インデント間違いとか大文字と小文字の間違いが一個でもあると動かなくてきついわ
2021/08/20(金) 14:49:12.55ID:O2iQQ7aA
>>625
こことか見てvscode入れれば?
https://www.python.jp/python_vscode/windows/index.html
2021/08/20(金) 15:49:09.09ID:mOJeDUWN
>>625
インデント間違いとか大文字と小文字の間違いで苦労してるようなら、
他の言語で閉じ忘れとか、セミコロン入れ忘れたとかなんてもっとめんどくさいと思う
2021/08/20(金) 15:53:51.70ID:bheJjdjJ
注意欠陥障害みたいなの抱えてる奴には向かない
2021/08/20(金) 17:12:34.95ID:3LXkFTj+
jupyter notebookで複数行のテキストをinputする方法はありますか?
input()でshift+return押しても一行分の入力欄しか出てこないです
2021/08/20(金) 17:25:01.37ID:+XYykUue
lista=[50,80,100,90]
total=0
for i in lista:
total=total+i
c=int(total/5)

lastb=[70,40,60,30]
total=0
for a in listb:
total=total+a
d=int(total/5)
print(c,d)

理解力足りないからこれしか思い付かないが、何も答えられなくて煽るしか出来ないって俺よりバカって事?
2021/08/20(金) 17:28:43.86ID:+XYykUue
>>630>>622で質問した自分
2021/08/20(金) 17:30:09.67ID:FhpMMCBI
def hoge1(a):
_if a=="sato" or a=="tanaka" or a=="suzuki":#@
__return False#A
_else:
__#何らかのコード
__return True

def hoge2(a):
_if a=="sato" or a=="tanaka" or a=="suzuki": return False
_#何らかのコード
_return True

print(hoge1("tanaka"))
print(hoge2("tanaka"))

こういう
「条件を満たしたらreturn Falseする」ときに@で改行してまでAのインデントは無駄かなと思って
hoge2みたいに書いているのですが
a==,a==,,,のところってなんどもa==出てきますが、冗長なコードではありませんよね?
何か別の書き方があるのかなと思いまして。
(例えばjsで言うところのswitchみたいな)
2021/08/20(金) 17:36:35.19ID:nwMAPpno
>>630
それ動かんだろ。せめて実行してみてからうpしろよ。
print(int(sum(lastb)/len(lastb)))
2021/08/20(金) 17:58:59.82
>>630
後々グラフとか作りたいってなるとpandasめちゃくちゃ便利だから使ってみるのもいいかも
https://i.imgur.com/FEWONvX.jpg

import pandas as pd
#前期
df = pd.DataFrame({"国語":[50,55,60],"算数":[80,40,77],"理科":[100,83,76],"社会":[90,82,66],"英語":[88,90,71]},index=["サトウ","スズキ","タナカ"])
#後期
#略

#サトウの5教科の平均点
print( df.loc["サトウ"].mean() )
#国語の平均点
print( df["国語"].mean() )
#算数の標準偏差
print( df["算数"].std() )
#英語の中央値
print( df["英語"].median() )
2021/08/20(金) 17:59:55.07ID:0J8On0UY
>>632
- return Falseの前で改行したほうがいい
- 何度もa==が出てくる部分はin演算子を使う
- elseを書くかどうかは状況による

pylintとかのlinterを使おう
in演算子を使ったほうがいいみたいなのを含めて注意してくれる
2021/08/20(金) 18:04:09.17ID:elEM/mJ5
>>632
サンプルコードみたいな奴だったin使って判定した方がすっきりするぞ
(条件が複雑ならSwich文は無いから、素直にifとelif組み合わせるしかないけど)

def hoge3(name,students):
____if name in students:
________print(name)
____else:
________print("No Student")

student_list = ["sato","tanaka","suzuki"]
hoge3("sato",student_list) #-> sato
hoge3("nakamura",student_list) #-> No Student
2021/08/20(金) 18:06:03.11ID:FhpMMCBI
>>635,636
なるほど
ifでinを使えるのですね
def hoge3(a):
_if a in ["sato","tanaka","suzuki"]:
__return False
_else:
__return True

>pylintとか
調べてみます ありがとうございました。
2021/08/20(金) 18:07:31.47ID:FhpMMCBI
>>636
["sato","tanaka","suzuki"]の部分も外に出して汎用的にスッキリなりそうですね
ありがとうございました
2021/08/21(土) 08:17:19.59ID:T96f+mMj
>>630
これ4教科を5で割ってしまったのとインデントまでしっかり書き込んだのが表示されてないな
と言う事で
誰か、このプログラムをもっと行数少なめで簡素に書いてくれると助かります
2021/08/21(土) 08:27:06.24ID:VDBhwRxo
>>639
うっとおしいやつだな
一番最初に適切なアドバイスくれたやつ(>>623)に礼言って消えろよ
2021/08/21(土) 08:37:26.85ID:T96f+mMj
五教科それぞれの合計数を出すと関数の引数にするまでもなく平均点出せるんだよね…
642デフォルトの名無しさん
垢版 |
2021/08/21(土) 10:32:39.98ID:+K/WXdke
>>639
print(sum(lista)//4, sum(listb)//4)
2021/08/21(土) 10:50:34.22ID:l5Ji0Cfk
>>642
うおー!凄い凄い!これですよ求めてたのは
あなた頭良いですね、ありがとうございました
2021/08/21(土) 10:53:46.80ID:0b1Dm8dh
>>642
「4教科を5で割ってしまった」のと同じバグが発生するぞ
2021/08/21(土) 11:11:32.74
lista=[50,80,100,90]
lastb=[70,40,60,30]
print((lambda n:sum(n)/len(n))(lista),(lambda n:sum(n)/len(n))(lastb))
2021/08/21(土) 16:06:33.06ID:Bsv/eHVD
np.mean(np.array(lista))とか?
2021/08/21(土) 16:23:11.06ID:2TaMM1xI
np.mean(lista) でも np.array(lista).mean() でもいける
2021/08/21(土) 21:43:33.30ID:/rey9CMo
以下のような辞書があって
dict_a = {"a":1.0, "b": 0.5, "c": 0.25, "d": 0.68}

以下のようなlist_aがあって
list_a = ["a", "a", "a", "b", "c", "c", "d"]

dict_aとlist_aから、以下のようなlist_bを作るにはどうするのが良いですか?
list_b = [1.0, 1.0, 1.0, 0.5, 0.25, 0.25, 0.68]

以下のようにfor文を回して地道にやるしかないですか?
list_b = []
for a in list_a:
  if a in dict_a:
    list_b.append(dict_a[a])

ちなみにnumpyは使えない環境です。
2021/08/21(土) 21:44:48.81ID:/rey9CMo
>>648 なるべく処理速度を高めたいです。
650デフォルトの名無しさん
垢版 |
2021/08/21(土) 23:19:07.08ID:7GAoG1Iq
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
2021/08/21(土) 23:23:12.53ID:0b1Dm8dh
mapする時はPythonでは普通list comprehensionを使う
list_b = [ dict_a[x] for x in list_a if x in dict_a ]
652デフォルトの名無しさん
垢版 |
2021/08/22(日) 05:09:08.36ID:DeeCp+C0
linuxでpython動かしたことないのですが
linuxで開発中のpythonコード上でwindowsAPIを実行できますか?
書くだけ書いてwindowsに持ってって実行する感じですか?
653デフォルトの名無しさん
垢版 |
2021/08/22(日) 13:57:54.68ID:cx6/dnxW
WSLのことならOK
2021/08/22(日) 19:37:21.71ID:RWC7FQin
flaskで
def main():
_from flask import Flask
_app = Flask(__name__)
_aaa=10
_bbb=20
_@app.route("/")
_def test():
__print(locals())
_return app
的な感じで書くと、なぜかlocals()でaaaが取得されるんですがバグでしょうか?
655デフォルトの名無しさん
垢版 |
2021/08/23(月) 16:02:00.39ID:Gra2NqP5
型ヒントで
strのlistかNoneが返ることを書きたい

def test(obj: Any) ->Optional[list[str]]
かなと思ったらエラーが…
656デフォルトの名無しさん
垢版 |
2021/08/23(月) 16:05:38.99ID:Gra2NqP5
あ失礼
typing Listがあんのね
2021/08/23(月) 19:42:57.46ID:lyXFy7/6
DataFrameをto_csvでcsv出力すると、CSVの一番左上に入るはずのカラム名(columns.name)が0になってしまいます。
出力するための引数などあるのでしょうか?
658デフォルトの名無しさん
垢版 |
2021/08/23(月) 22:29:26.85ID:NbJ+wt2i
>>655
3.9からはそれでOK
2021/08/24(火) 01:53:49.06ID:OPjw/0cg
>>657ですが、説明が正しくありませんでした
csvをDataFrameに読み込む際、header=Noneにするとヘッダには0からの連番が振られると思います。
このデータフレームのヘッダに対してdf.columns=listで別の名前を割り当て、to_csvで出力しました。
ですが、0のヘッダ名が変わってくれません。
1以上の連番が振られていたところは新しい名前に変わっていました。
何か対策などあれば教えていただきたいです。
2021/08/24(火) 03:40:53.95ID:mZOju8SR
>>659
実際のデータ見てないから想像で申し訳ないけど
0のヘッダ名になってる所ってインデックスになってない?
インデックスはカラムとは別にタイトルを付ける必要がある
df = pd.DataFrame(data)
df.index.name = 'Date
みたいな感じで'
661デフォルトの名無しさん
垢版 |
2021/08/24(火) 20:22:12.69ID:el4vEdwg
windows10の話なんですが
属性確認すると
program files はreadonlyだけど
program files(x86)はreadonlyでないと言われます
どちらも同じ属性じゃないとおかしい気がするんですが、なぜ異なるのですか?
662デフォルトの名無しさん
垢版 |
2021/08/24(火) 20:29:09.46ID:el4vEdwg
なんでここで聞いたかというと
pythonのstat.st_file_attributes使ってるからです
もしかしたらアクセス方法間違ってるとか
別言語では上手くいくとかあり得るのかなと思って。
2021/08/24(火) 22:04:24.96ID:SMXHl8SK
Ruby で、フォルダのモードを取得したら、どちらも40555 だった

file_paths = [ "C:/Program Files", "C:/Program Files (x86)" ]

file_paths.each do |file_path|
fs = File::Stat.new( file_path )
printf "%o\n", fs.mode
end

出力
40555
40555
2021/08/24(火) 23:08:06.06ID:OPjw/0cg
>>660
ありがとう!!
ご指摘の通りインデックス名が出力されてました
df.index.nameにカラム名と同じ名前をつけて解決しました
to_csvではカラム名は出力出来ないんですかね?
本当にありがとうございました!
2021/08/24(火) 23:59:28.05ID:SMXHl8SK
例えば、Ruby では、先頭にヘッダー行を追加できる

require 'csv'

input_csv = <<"EOT"
1,白石
2,西野
EOT

ary = CSV.parse( input_csv ) # 2次元配列
ary.unshift [ "ID", "名前" ] # 先頭に、ヘッダー行を挿入する

p ary #=> [["ID", "名前"], ["1", "白石"], ["2", "西野"]]

# 2次元配列を、CSV 文字列に変換する
csv_str = ary.map( &:to_csv ).join
puts csv_str

出力
ID,名前
1,白石
2,西野
2021/08/25(水) 01:10:46.53ID:xyhN2k85
ruby関係ないし
667デフォルトの名無しさん
垢版 |
2021/08/25(水) 09:24:28.96ID:U8ZXR+0V
>>664
マニュアル嫁
2021/08/26(木) 00:21:00.63ID:PW4YFNBs
もしかしてプログラムでわからないことがあったときって公式のマニュアルを見るのが普通なんですか??
今まで誰かが日本語で説明しているのをググって探してました
公式は英語の直訳で分かりにくくて苦手です
2021/08/26(木) 00:27:55.26ID:XerHugu7
>>668
英語の直訳が読みにくければ英語の原文を読めばいいよ
2021/08/26(木) 00:37:28.11ID:HdMtKHya
公式リファレンス読まないのはギルティ
読みやすいか、分かりやすいかは別だが
671デフォルトの名無しさん
垢版 |
2021/08/26(木) 00:49:51.62ID:zNekFy4I
別にググって探すのは悪くないよ。ただ、実際の動作の裏付けには公式のドキュメントの役割が大きい
だから、ググった上で公式のドキュメントも見るような感じがいいと思う

Pythonのドキュメントは原文も同じ書き方してるから和訳呼んでもわからなかったら原文読んでもわからんと思う
翻訳の問題じゃないから、>>668自信の技術力が足りてないか、原文自体の記述が悪いかみたいな話になるけど
672デフォルトの名無しさん
垢版 |
2021/08/26(木) 00:54:04.47ID:zNekFy4I
Pythonに限らず公式のドキュメントを読み慣れるのは大事だと思う
ドキュメントの構成だったり原文と翻訳の時差とか色々癖あるし
2021/08/26(木) 01:14:15.79ID:wylnrun/
なんだかんだで公式が一番詳しかったりするからな
フォーラムを巡ってもわからなかった問題が公式ドキュメントであっさり解決して、こんなことなら最初に読んでおけばと後悔したことが何度もある
2021/08/26(木) 01:36:05.61ID:2U1NMhFu
>>668
ドキュメントの書き方はどこの言語でもクセがあるから慣れだな
公式ドキュメントを読むクセ付けないとバージョンによっては挙動が違ったりするから
他の人の奴を参考にしてると稀に挙動が違ってて余計にハマったりする

一番信用できるドキュメントは公式、っていうのだけは念頭に置いておいて欲しい
2021/08/26(木) 09:31:05.38ID:ANYTQNnK
公式ドキュメントは専門用語をちゃんと使って
正確に書いてるから、そうとうわかってないと
意味不明だろうな
2021/08/26(木) 09:48:18.62ID:PKQtsNYj
一概にそういうわけでもなくて、文化だったり書いた人の性格や能力に依存するところが大きい
Pythonの公式ドキュメントは上から目線で不親切だと思うよ
Rustなんて遥かに難しくてユーザーのレベルも高いはずだけど、ドキュメントはPythonよりは分かりやすい
2021/08/26(木) 10:04:09.61ID:FZTkV2My
そうとうわかってないと意味不明な公式ドキュメント・・・
存在する意味がないな
2021/08/26(木) 10:44:16.68ID:k5gORvl5
攻略本は読みたくなるけど取扱説明書は読む気がしない
2021/08/26(木) 11:24:47.52ID:kArR7Ozy
操作方法が分からないのに攻略本しか読まないアホ
2021/08/26(木) 16:37:58.78ID:WPRv8+9f
>>671
技術力というより知能が足りない
2021/08/26(木) 17:00:14.47ID:5BXow/+L
>>680
csv読むときにどうやってインデックス名の付ければいいかわっかるかなぁ?
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

はたして君は知能が足りてるのか?
2021/08/26(木) 21:09:48.95ID:dja60KXS
>>677
専門家が度忘れしたときや念のために確認するときに役立つ
2021/08/27(金) 07:26:29.75ID:a7GWOZA3
ここのreferenceはまだ全然見やすい方
Java関係の公式とか酷かった
あと世の中の大半のフレームワークの公式は分かりにくいし雑だな
むしろ公式さえしっかりしてればフレームワーク自体は雑でもいいぐらい公式は重要なのに
フレームワークのフレームワークが公式なんだから
2021/08/27(金) 13:44:12.82ID:lxI1gnNr
Javaのoracle公式は内部で探しにくい
記述はちゃんとしていると思うが
2021/08/27(金) 14:35:37.85ID:FpTGA0p8
API一覧はどっかに載せといて欲しいんだよなあ
BeautifulSoupみたいなドキュメント大嫌い
2021/08/28(土) 15:20:25.04ID:1FNDrQ4q
androidスマホでクローリングとかスクレイピングとかPythonでやりやすいですか?

あるいは他に楽な方法あったら教えてください(プログラミング言語でなくとも)
687デフォルトの名無しさん
垢版 |
2021/08/28(土) 20:01:10.55ID:XJOj+thk
blenderでpython つかってるんですけど

10から-10の範囲で動く変数 var があって
その数値に応じてもう一つの変数 var2 を0から0.2の数値に変化させたいんですが
たとえばこう記述すると

if var >= 0:
var2 = 0.2
else:
var2 = 0

varがプラスになった途端にいきなりvar2の数字が0.2になっちゃうじゃないですか
なのでvar2を徐々に0.2にまで増やしていきたいんですが、なにかいい数式とかないですかね
変数varは一応10から-10の範囲を動くとはしていますが、場合によっては数値がまったく違ってくるので
varを条件式で使う場合の条件はvarが0以上の数値をもっているかいないかくらいしかないです
なのでvar2と他のなにかをつかって数値を調整するしか無いんですが
2021/08/28(土) 21:56:09.25ID:KCQB2Q+0
var2 = (var+10) / 100

これでどや!
2021/08/28(土) 23:04:51.28ID:o0C8VYNv
var2=(10-var)/100
じゃね?
2021/08/28(土) 23:10:19.97ID:Syg1tfaV
> 10から-10の範囲で動く変数 var があって
っと書いてあるのに
> varがプラスになった途端
とか意味わからんので俺は傍観中
2021/08/29(日) 00:00:15.10ID:f3cdDfKi
単純にリニアに対応させるのはよくやるしありそうだけど
残念ながら標準ライブラリにはない
python MinMax scaling
でググるといろいろでてくる
2021/08/29(日) 00:40:53.81ID:a8dnpsvI
変数名にvarとかletとか意味わからなくなるからやめろ
2021/08/29(日) 00:41:59.01ID:kSqJuAzn
じゃあhogeにします
2021/08/29(日) 00:44:34.75ID:a8dnpsvI
hogeとfugaも見ただけで思考が停止する
2021/08/29(日) 00:57:44.19ID:kSqJuAzn
bar bazならOKだね
696デフォルトの名無しさん
垢版 |
2021/08/29(日) 01:24:41.28ID:TPHdi4yb
わざとなのか知らんが
0->10
0.2->-10
なのか
0->-10
0.2->10
なのかはっきりしないな
圧倒的に知能の欠落を感じる
2021/08/29(日) 02:51:56.56ID:8LB32Hf6
そんな事いちいち書かなくても文章見れば分かるじゃない
ガイジなのは一目瞭然
2021/08/29(日) 07:38:58.20ID:H3IeLoxc
windows環境のpythonで追加モジュールインストールなしでシステム音量を変える方法はありますか
スクリプトを流し終わったらミュート解除して音を流してミュートにする的なことをやりたいです
winapi触るようなイメージなんですが
2021/08/29(日) 10:34:36.66ID:dJJJwYZf
windows 10、Python 3.9.1 の環境です
https://i.imgur.com/27ebmLL.jpeg

インポートの仕様についてですが、以下のファイルがあります
/run.py
/modules/a1.py
/modules/a2.py

runはa1を読み込んでいて、a1とa2はお互いに依存しているのでお互いをimportしています。
ここでrun.py を実行すると以下のエラーが表示されます。

Traceback (most recent call last):
File "C:\run.py", line 2, in <module>
from modules.a1 import A1C
File "C:\modules\a1.py", line 2, in <module>
from modules.a2 import A2C
File "C:\modules\a2.py", line 2, in <module>
from modules.a1 import A1C
ImportError: cannot import name 'A1C' from partially initialized module 'modules.a1' (most likely due to a circular import) (C:\modules\a1.py)

エラーの内容はrun→a1→a2→a1 と、インポートが循環しているからというのはわかるのですが、pythonの文法として 循環インポートはコード書く側が注意しないといけないものなのでしょうか
これ以上ファイルを増やしたくないのですが、 __init__.py というものを使う必要があるのでしょうか。
2021/08/29(日) 10:38:21.86ID:SOFRyS0H
>>699
普通はお互いに依存してる部分を切り出して共通クラスを作るぞ
2021/08/29(日) 11:42:47.82ID:6aPcdB/x
>>688>>689
アニメーションさせるオブジェクトの設定を見直していたら数値が変わってしまってvar2は0から1、varが取得する数値が-100から100くらいになってしまったので
最初にあげた数値とは違っていますけど参考にして書き直しました

(10+var)/400 if var >= 0 else (10-var)/400

varが0近辺になるときに返す値を0から1の範囲でうまい具合に動かしたかったんですがこれでなんとかなりました
どうもでした
2021/08/29(日) 12:50:56.45ID:Y4MENvlF
>>699
インポートが実行されるタイミングで循環が発生しないようにすればいい
その例だと「A1Cをimport -> そのためにはA2Cが必要 -> そのためにはA1Cが必要」で循環してる
例えばa2.pyのほうをimport modules.a1 as A1とかにすればインポート実行時には循環しない

設計を変更するのが一番だけど
何か特別な事情があるならインポートを遅延させるとかで対処する
2021/08/29(日) 13:13:15.88ID:nWxynwj6
これifいらんことない?
2021/08/29(日) 13:42:27.03ID:dJJJwYZf
>>700,702
どうもです。
という事は、最初1ファイルにズラーッと書いて一段落したからちゃんとクラスごとに別ファイルに分けようと思ったら
切り貼りしてimport文付け足すだけでリファクタリング出来る保証は1ミリも無いという事か・・・
2021/08/29(日) 13:44:36.38ID:ik0U7t7o
そんなに気にしなくていいよ
そのレベルだと、後でリファクタリングしたくなる頃には今より遥かに腕が上がっていて、最初の頃に書いた糞コードなんて全部捨てることになるから
2021/08/29(日) 14:28:14.75ID:W2eZWYJ9
>>699
コードとかレスはよく読んでないけど
公式ドキュメントにはfrom import使わずに全部importだけでやれば回避できると書いてあった気がする
まあ実際には100%問題を回避できるわけじゃないはずだが
2021/08/29(日) 17:14:19.33ID:D+nxUtQ9
>>686
オモチャでマジのプログラミングとか考えるな
HelloWorldまでにしとけ

>>698
Vista以降のボリューム変更は確かCOMでしか操作できないんだよなあ
MMDeviceだかってやつ
初心者(が/でなくとも)ctypesから使うのは荷が重い気がする
2021/08/29(日) 17:31:44.52ID:f3cdDfKi
外部プロセスでPowerShell呼ぶとか
そもそもPowerShellで書くのはダメなのか
適材適所
2021/08/29(日) 18:01:08.20ID:wRzFeJgq
趣味でゲームを作っているpython初心者です
発想を間違えている気がするのですが調べても独力で修正できないので質問させてください

pythonでは ファイル間を超えて有効な広域配列変数を定義することはできない という理解であっていますか?
アイテム情報や命名マスタなど「あちこちから参照したいマスタデータ」の持ち方が分からず困っています

トップレベル(≒高いレベル)でCSVロードを済ませた配列なりインスタンスなりを、中間クラスの引数として目的の関数まで持ちまわるしかないのでしょうか?
710デフォルトの名無しさん
垢版 |
2021/08/29(日) 20:57:36.98ID:+XFaADRO
モジュールとして参照できる

<vars.py>
X=10
Y=100

<main.py>
import vars
print(vars.X)
print(vars.Y)
711デフォルトの名無しさん
垢版 |
2021/08/30(月) 14:16:06.77ID:a7szkEqk
memcached
pymemcache
2021/08/30(月) 15:03:22.80ID:IH9WNTpQ
>>709
テストや柔軟性をかんがえるとクラス化してメソッド(関数)経由にしとくのであってる
Python定番の設定管理向けモジュールがないのが難

>>711
みたいに格納先を変えたい場合でも対応できるし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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