[過去ログ]
Pythonのお勉強 Part68 (1002レス)
Pythonのお勉強 Part68 http://mevius.5ch.net/test/read.cgi/tech/1663235546/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
127: デフォルトの名無しさん (ワッチョイ 1e66-yYUR) [sage] 2022/09/25(日) 12:49:19.19 ID:wq9M03AC0 大仰なクラスを作ろうとするから インスタンス変数が2つだけ、みたいなのでも十分役立つ http://mevius.5ch.net/test/read.cgi/tech/1663235546/127
128: デフォルトの名無しさん (ワッチョイ 1610-d9EM) [] 2022/09/25(日) 17:18:10.55 ID:hs4ndUhv0 >>127 それくらいならNamedTupleでも良いかな http://mevius.5ch.net/test/read.cgi/tech/1663235546/128
129: デフォルトの名無しさん (ワッチョイ 372c-nvXy) [] 2022/09/25(日) 17:41:46.06 ID:iEmY5l+s0 dataclassええで http://mevius.5ch.net/test/read.cgi/tech/1663235546/129
130: デフォルトの名無しさん (ワッチョイ 4b08-KM/t) [sage] 2022/09/25(日) 17:54:34.18 ID:AFTbeWYX0 クラスは実装の詳細を見せたくない時に限る http://mevius.5ch.net/test/read.cgi/tech/1663235546/130
131: デフォルトの名無しさん (ワッチョイ 1610-Nf8B) [sage] 2022/09/26(月) 07:24:51.77 ID:ciNDFZ6I0 クラス名をclass Hoge ファイル名をhoge.py インポートでimport hoge インスタンス名何にしようかいつも悩む ??? = hoge.Hoge() http://mevius.5ch.net/test/read.cgi/tech/1663235546/131
132: デフォルトの名無しさん (ワッチョイ 2f97-5djn) [] 2022/09/26(月) 09:07:29.52 ID:P9G+/qqR0 >>81 そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな あと、最大(?)は[0,10]じゃないか? [0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない 半開区間に含まれる最小最大を取り出したいなら、 for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌? http://mevius.5ch.net/test/read.cgi/tech/1663235546/132
133: デフォルトの名無しさん (ワッチョイ 2f97-5djn) [] 2022/09/26(月) 09:12:30.59 ID:P9G+/qqR0 木構造とかグラフ構造を自作したいなら(間々ある)、 クラスにした方が便利なときある気がするけどな。 get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。 実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。 確かにクラス作るまでもないようなことは多いけど。 http://mevius.5ch.net/test/read.cgi/tech/1663235546/133
134: デフォルトの名無しさん (ワッチョイ 1e66-yYUR) [sage] 2022/09/26(月) 20:32:27.38 ID:b9hyANFk0 >>128 値が変えられないがな http://mevius.5ch.net/test/read.cgi/tech/1663235546/134
135: デフォルトの名無しさん (ワッチョイ 429b-+bWc) [sage] 2022/09/26(月) 23:15:54.08 ID:QR+uVx8I0 python 3.9.10 a = (1, 2, 3) b = a c = (1, 2, 3) print(a==b) print(a is b) print(a==c) print(a is c) #True? なぜ a is c が true になるのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1663235546/135
136: デフォルトの名無しさん (ワッチョイ 429b-+bWc) [sage] 2022/09/26(月) 23:17:59.46 ID:QR+uVx8I0 >>135 ideone に貼っときます https://ideone.com/yVmxfv なぜでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1663235546/136
137: デフォルトの名無しさん (ワッチョイ 1e66-yYUR) [sage] 2022/09/26(月) 23:31:03.60 ID:b9hyANFk0 a = 1 c = 1 の時と同じ理由 http://mevius.5ch.net/test/read.cgi/tech/1663235546/137
138: デフォルトの名無しさん (ワッチョイ 4b17-NGtF) [sage] 2022/09/26(月) 23:32:02.41 ID:Gide+MMY0 >>136 ならない http://mevius.5ch.net/test/read.cgi/tech/1663235546/138
139: デフォルトの名無しさん (ワッチョイ 4b17-NGtF) [sage] 2022/09/26(月) 23:33:01.37 ID:Gide+MMY0 ほらよ https://i.imgur.com/mESpBvj.jpg http://mevius.5ch.net/test/read.cgi/tech/1663235546/139
140: デフォルトの名無しさん (ワッチョイ d201-/Peb) [sage] 2022/09/26(月) 23:49:19.92 ID:eE4Lst2k0 >>139 それREPLでやってるからinterningが効いてないじゃないかな >>135 Tupleはimmutableだからaとcが同じオブジェクトを指しても問題なくて Pythonが最適化をした場合はa is cがTrueになるケースがある 「interning」でググってみて 例えばTupleを関数で返すようにすればinterningされずにFalseになると思う def foo(x): return (x, x+1, x+2) a = foo(1) c = foo(1) http://mevius.5ch.net/test/read.cgi/tech/1663235546/140
141: デフォルトの名無しさん (ワッチョイ 4212-+bWc) [sage] 2022/09/27(火) 00:20:20.92 ID:LFY5tutJ0 >>140 ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました http://mevius.5ch.net/test/read.cgi/tech/1663235546/141
142: デフォルトの名無しさん (ワッチョイ 2f97-5djn) [] 2022/09/27(火) 19:02:24.07 ID:zjZtbJ3M0 a is cが真になるかはかなりケースバイケースな気がするし、 中身を比較したいんだったら使うべきじゃないね 本当に同じtupleインスタンスかどうかを確認したいときだけにすべき http://mevius.5ch.net/test/read.cgi/tech/1663235546/142
143: デフォルトの名無しさん (ワッチョイ 3733-tX/F) [] 2022/09/27(火) 22:33:08.85 ID:3OHfLHhN0 tupleだけの話ではなくてどの型でも同じだけどね 例えば文字列とか http://mevius.5ch.net/test/read.cgi/tech/1663235546/143
144: デフォルトの名無しさん [sage] 2022/09/27(火) 23:35:04.66 ID:tKd9rAjb n=12345.67 小数点以下が何桁あるのか調べたいのですが len(str(n).split(".")[1]) if isinstance(n, float) else 0 こんなんでいいですかね・・? http://mevius.5ch.net/test/read.cgi/tech/1663235546/144
145: デフォルトの名無しさん (ワッチョイ 3733-tX/F) [] 2022/09/27(火) 23:51:45.87 ID:3OHfLHhN0 >>144 https://ideone.com/pSUvOH http://mevius.5ch.net/test/read.cgi/tech/1663235546/145
146: デフォルトの名無しさん (ワッチョイ 1610-DrlT) [] 2022/09/27(火) 23:53:56.84 ID:+joc5Asc0 >>144 誤差で予想外の挙動しそうだからDecimal使う方がいい http://mevius.5ch.net/test/read.cgi/tech/1663235546/146
147: デフォルトの名無しさん (ワッチョイ 2701-tX/F) [sage] 2022/09/28(水) 02:27:12.38 ID:OOL0jr8Q0 >>144 それだと n=1.0 -> 1 n=0.00001 -> IndexError になる len(format(n,".17f").split(".")[1].rstrip("0")) 後ろのif isinstance(n, float) else 0も不要 n=1.0 -> 0 n=0.00001 -> 5 http://mevius.5ch.net/test/read.cgi/tech/1663235546/147
148: デフォルトの名無しさん [sage] 2022/09/28(水) 09:19:00.77 ID:9I9ISsCh >>145-147 たしかに 0.30000000000000004に対して17得られたのは正解だと思いますが 0.00001で1e-05になっててエラーでました Decimalかformat使ってみようと思います ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1663235546/148
149: デフォルトの名無しさん [sage] 2022/09/28(水) 10:07:58.97 ID:9I9ISsCh やりたかったことは 受けとった1234.56や0.12345などの固定小数点数に 0.1とかを掛けたり足したりして計算、変形したのを 受け取った固定小数点数の整数部と小数部の数を維持したまま 固定小数点か文字列で処理したかったのですが 改めてやってみるとなんか勝手に桁数が変わってしまいますね・・ 1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29 0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962 1234で受け取った場合、1.05
を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい みたいにしたかったのですが難しい・・ http://mevius.5ch.net/test/read.cgi/tech/1663235546/149
150: デフォルトの名無しさん [sage] 2022/09/28(水) 10:17:26.42 ID:9I9ISsCh from decimal import Decimal str(Decimal(0.123456)) str(Decimal(0.123456)*Decimal(1.05)) #'0.1296288000000000015945911258' あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ?? てところで詰まってます・・ http://mevius.5ch.net/test/read.cgi/tech/1663235546/150
151: デフォルトの名無しさん [sage] 2022/09/28(水) 11:25:04.93 ID:9I9ISsCh 冗長な気がしますがこんな感じにしてみました 何かバグが発生しそうな気がします from decimal import Decimal ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456] def f(n): s=format(n) return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0 r=1.05 for n in ary: d=f(n) c=Decimal(n)*Decimal(r) rs=c.quantize(Decimal("0."+(&qu
ot;0"*d))) print(n,c,d) print("-->",rs,"\n") http://mevius.5ch.net/test/read.cgi/tech/1663235546/151
152: デフォルトの名無しさん [sage] 2022/09/28(水) 11:30:47.23 ID:9I9ISsCh 連投すみません 結果です https://ideone.com/exojEw http://mevius.5ch.net/test/read.cgi/tech/1663235546/152
153: デフォルトの名無しさん (ワンミングク MM42-nX9g) [sage] 2022/09/28(水) 13:38:45.48 ID:E42G0/DqM 元々の桁数でroundしたいって感じなのかな http://mevius.5ch.net/test/read.cgi/tech/1663235546/153
154: デフォルトの名無しさん (ワッチョイ 2701-tX/F) [sage] 2022/09/28(水) 18:25:19.27 ID:OOL0jr8Q0 >>152 format使うの提案したけど使わないほうがよさそう、誤差がでる f(n): 負数で落ちる s=str(n).lstrip("-") c=Decimal(n*r) のところで n*r で誤差がでる c=Decimal(str(n)) * Decimal(str(r)) 負数対応四捨五入 -0.015 を四捨五入して -0.02 rs=((c > 0) - (c < 0)) * abs(c).quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP) -0.015 を四捨五入して -0.01のようにしたい場合 rs=c.qua
ntize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP) 四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ http://mevius.5ch.net/test/read.cgi/tech/1663235546/154
155: デフォルトの名無しさん [sage] 2022/09/28(水) 19:37:21.94 ID:9I9ISsCh >>154 ありがとうございます やはり至るところで誤差が発生するのですね 四捨五入は今回の用途ではどちらでも良い感じです せっかくなのでまとめてみました https://ideone.com/JmTu06 ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1663235546/155
156: デフォルトの名無しさん (ワッチョイ 96bb-nd6Q) [sage] 2022/09/28(水) 19:42:02.44 ID:o0cHd3Tq0 先にIEEE754読んでみては? 誤差に関しての勘所がわかるようになる http://mevius.5ch.net/test/read.cgi/tech/1663235546/156
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 846 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s