[過去ログ] Pythonのお勉強 Part68 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
57: (ワッチョイ 17e0-PhD1) 2022/09/20(火)18:12 ID:0B59Bo4G0(1) AAS
>>56
外部リンク:www.google.com
58: (ワッチョイ 9763-eAa0) 2022/09/20(火)20:23 ID:zGhXnhGV0(1) AAS
case-insensitiveで [\da-f]
59(1): (ワッチョイ 9f14-t1N9) 2022/09/21(水)19:43 ID:b5Bal3Dn0(1/4) AAS
画像リンク[jpg]:i.ibb.co
pathlibというのを使って>>52と同じことをやってみたのですが、書き方が間違ってる気がしてならないので指摘して欲しいです
line14-15は何で上手くいかないのかも教えてほしいです
60(1): (ワッチョイ ffbb-hJeG) 2022/09/21(水)20:06 ID:Qxk2XzJU0(1/2) AAS
まず、12行目のmkdirで例外発生してない?
temporaryなんてらフォルダはchdirしてるからすでに存在してるんでしょう?
61: (ワッチョイ bf66-C6xl) 2022/09/21(水)20:13 ID:VhW4jWqJ0(1) AAS
os関連の処理は互換性とか捨てて、subprocessでやるのが楽でしかも安定してる
62(3): (ワッチョイ ffdb-OuJ4) 2022/09/21(水)20:30 ID:2GcRUbUk0(1/4) AAS
繰り返される任意の文字列を1回の繰り返しに直す方法ありませんか?
"abcdabcdabcdefg"→"abcdefg"(abcdの繰り返し)
"abababc"→"abc"(abの繰り返し)
"aabbaabbc"→"aabbc"(aabbの繰り返し)
パターンの長さはとりあえず固定でいいので(例えば4でabcdとaabbはマッチできる)一気に置換する方法ないでしょうか
63: (ワッチョイ 9f14-t1N9) 2022/09/21(水)20:30 ID:b5Bal3Dn0(2/4) AAS
>>60
存在してます。path.rename()書いてない時は、同名のフォルダが作られて「すでに存在してる〜」みたいなエラーを吐いてました
そもそもpathlib使って>>52をやりたい場合は、osを使う必要がなかったりもするのでしょうか?
64(1): (ワッチョイ d733-E+l9) 2022/09/21(水)20:31 ID:yjl6UhSi0(1/3) AAS
>>59
外部リンク:ideone.com
65: (ワッチョイ 9f14-t1N9) 2022/09/21(水)20:52 ID:b5Bal3Dn0(3/4) AAS
>>64
参考に直して見たら無事にできました。ありがとうございます。
画像リンク[jpg]:i.ibb.co
66: (ワッチョイ 9f14-t1N9) 2022/09/21(水)20:58 ID:b5Bal3Dn0(4/4) AAS
変数名とか色々、短く略して書いた方が良いのでしょうか?
入力時間的には大差ないので、見返した時に分かりやすいようにしてるのですが
これは初心者だからで、経験者から見ると見苦しいとか、むしろ略されてた方が見やすいとかありますか?
67(1): (ワッチョイ d733-E+l9) 2022/09/21(水)22:11 ID:yjl6UhSi0(2/3) AAS
>>62
競プロの問題?
68(1): (ワッチョイ 9f01-E+l9) 2022/09/21(水)22:25 ID:sVtx8qcf0(1) AAS
>>62
質問の意味がよくわからん
"abcdabcdefcdefg"の場合どうしたいの
69: (ワッチョイ d763-DwLj) 2022/09/21(水)22:30 ID:4122FyYT0(1) AAS
LZ78の考え方の応用で行け
70: (ワッチョイ ffdb-OuJ4) 2022/09/21(水)22:52 ID:2GcRUbUk0(2/4) AAS
>>67
普通に処理したいだけです
>>68
"abcdabcdefcdefg"なら"(abcdabcd)efcdefg"→"abcdefcdefg"だと思います
71: (ワッチョイ ffdb-OuJ4) 2022/09/21(水)22:55 ID:2GcRUbUk0(3/4) AAS
あ、cdefcdefが繰り返されていたんですね…
最終的に人がチェックする工程があるので、先にマッチした方優先とかで大丈夫です
72(1): (ワッチョイ d733-E+l9) 2022/09/21(水)23:11 ID:yjl6UhSi0(3/3) AAS
'abcabcdabcabcdefg'
だったら?
73(1): (ワッチョイ d74c-ldZd) 2022/09/21(水)23:16 ID:VS1qJent0(1) AAS
長さ4固定でいいなら、正規表現あたりで
>>> import re
>>> re.sub(r'(....)\1+', r'\1', "abcdabcdabcdefg")
'abcdefg'
>>> re.sub(r'(....)\1+', r'\1', "aabbaabbc")
'aabbc'
74(1): (ワッチョイ 9f01-bNpc) 2022/09/21(水)23:21 ID:757dNGj40(1) AAS
>>62
外部リンク:www.online-python.com
75: (ワッチョイ ffbb-hJeG) 2022/09/21(水)23:30 ID:Qxk2XzJU0(2/2) AAS
そこにforを使うなんて
76: (ワッチョイ ffdb-OuJ4) 2022/09/21(水)23:49 ID:2GcRUbUk0(4/4) AAS
>>73 >>74
ありがとうございます!
文中に含まれてるものにも対処したいので73を長さ変えながら複数回適用で使いたいと思います
77: (アウアウウー Sa5b-8eP5) 2022/09/22(木)11:05 ID:u9/ouAZsa(1/2) AAS
>>39
いらね
78: (アウアウウー Sa5b-8eP5) 2022/09/22(木)11:11 ID:u9/ouAZsa(2/2) AAS
>>72 の回答はよ
79: (ワッチョイ bf66-C6xl) 2022/09/22(木)11:12 ID:ufV304t80(1) AAS
見てすぐ判らんようなもんは使うべきではないな
80: (ワッチョイ f7da-PMJU) 2022/09/22(木)13:04 ID:kBSagdtc0(1) AAS
abracadabra
81(3): (ワッチョイ d72c-3X0R) 2022/09/23(金)06:05 ID:l/gDdEyB0(1) AAS
x = [i for i in range(10)]
idxs = [start, end] # 0 <= start <= end <= max(x)かつend +=1
xが上記の場合
最小はidxs = [0, 1]
最大は idxs = [0, 11]
です。このとき
for i in idxs:
__x[i]
だと最後が11のときindexErrorになるんだけど
try exceptでcontinueする以外にいい書き方ないですか
省4
82(1): (ガックシ 068f-G+99) 2022/09/23(金)06:29 ID:ciin+wbx6(1) AAS
その11にはどういう意味があるんですか
83: (テテンテンテン MM8f-UC+/) 2022/09/23(金)06:42 ID:j5q+73vfM(1) AAS
>>82
そもそも、「いい書き方」って何ですか
84(1): (ワッチョイ ffbb-AZvI) 2022/09/23(金)07:14 ID:ILPrLpfC0(1) AAS
これ、やべぇな
外部リンク:gigazine.net
GitHub Copilot とかで広まっちゃうのか
85: (スッププ Sdbf-HYId) 2022/09/23(金)09:31 ID:nucVVsrtd(1/2) AAS
>>84
これは完全に誤訳
翻訳元では、GitHub上の数多くのOSSにこの脆弱性が存在するからCopilot等がそれを学習して広がるかもしれないと言っているだけ
86(1): (ワッチョイ bf66-C6xl) 2022/09/23(金)09:39 ID:08DmGtnT0(1) AAS
そんな風に読んだけど違うの?
87: (ワッチョイ d763-DwLj) 2022/09/23(金)10:22 ID:7VR4OLWz0(1) AAS
確かにtarを使うリポジトリではcopilot経由で広がる可能性があるけど、tarを使うリポジトリなんてリポジトリ検索してもそんなにないので実数としては眉唾
依存関係から侵入してくる方がよっぽど可能性が高い
Copilotが批判されがちなので批判の文脈で喋ったほうが肯定的に聞いてもらえるだろうという余計な意図が入ってるのではと邪推してしまうね:)
88: (スッププ Sdbf-HYId) 2022/09/23(金)12:26 ID:nucVVsrtd(2/2) AAS
>>86
> Trellixによると、35万件を超えるリポジトリがこの脆弱性に脅かされていると見られ、その多くでGitHub Copilotなどの自動ツールが使われているとのこと。
前知識なく普通にこれ読んだら、35万件のリポジトリがGitHub Copilptを使っている、そして、Copilotがその脆弱性の原因であると思うでしょ
というかこの記事書いた人はたぶんそのように誤解してる
> 外部リンク[html]:www.trellix.com
まあソースも推計方法や論理がガバガバで似たようなレベルだが
89: (アウアウウー Sa5b-8eP5) 2022/09/23(金)13:17 ID:esyqbAqHa(1) AAS
>>81 が何を考えてるのか詳しく知りたいなωωω
90(1): (ワッチョイ b302-nX9g) 2022/09/24(土)01:05 ID:WVAdUwxP0(1) AAS
>>81
インデックスなら0~10の番号で管理すべきじゃないの
endを取り出して使うときに+1すれば良いんじゃない
スライシングと混同してるのかな
91: (JP 0H1f-nvXy) 2022/09/24(土)02:03 ID:6DJLRQJMH(1) AAS
>>90
外部入力でスライス範囲を受け取ってて(start, end)
その値を使いまわしてインデックスアクセスしたいんだろう
テーブル扱うGUIとかでままある
92: (ワッチョイ 1201-ut7I) 2022/09/24(土)07:13 ID:52DloiQc0(1/2) AAS
単にインデックスの範囲とスライスを混同してるだけだろ
外部からの入力なら値のチェックは必須だしその時に調整しとけばいいだけ
93(1): (ワッチョイ 1610-Nf8B) 2022/09/24(土)07:29 ID:RoHmfu6K0(1/2) AAS
一昔前のseabornのカラーマップだか忘れたけど1から数えて最後の数字を入れるようなインデックス指定を偶に見かける
[0, 10] → 0から9までと
[1, 10] → そもそも0が存在せず1から10
この2つの書き方にそれぞれ名前ついてたりする?
94(1): (ワッチョイ f2b7-AIux) 2022/09/24(土)08:37 ID:3mLYFKO40(1) AAS
>>93
前者は「半開区間」として [0,10) といった表記にするのをよく見る
95: (ワッチョイ 1610-Nf8B) 2022/09/24(土)09:09 ID:RoHmfu6K0(2/2) AAS
>>94
あーたしかに数学で見るわ
96: (ワッチョイ 1e66-yYUR) 2022/09/24(土)09:21 ID:P3HsQQA/0(1/3) AAS
メモリマップとかで、
A: 0x0000 - 0x0fff
B: 0x1000 - 0x1fff
みたいに末尾をfffにせずに、末尾は1足して表記する、という約束にした方が使いやすい
97: (ワッチョイ 9279-tX/F) 2022/09/24(土)09:53 ID:N1C+NhRL0(1) AAS
そうすると最後は
F: 0xf000 - 0x10000
と最後だけ2バイトでは表記しきれなくなるね
98(1): (ワッチョイ 1e66-yYUR) 2022/09/24(土)10:03 ID:P3HsQQA/0(2/3) AAS
それはもう0でいい
99: (ワッチョイ 1228-AIux) 2022/09/24(土)10:26 ID:8OhmHPew0(1/3) AAS
すみません、プログラミング初心者です、python構築について質問があります
python3.10.7をインストールしたのですがコンドプロンプトで確認したらpython 3.9.12になっています
もしかしたら以前DLしてたのかと思って探しても見つからないのですが
こういうものなのでしょうか?
100: (ワッチョイ 1228-AIux) 2022/09/24(土)10:37 ID:8OhmHPew0(2/3) AAS
すみません、調べてみたらanacondaの方にpythonが入ってたみたいです
101(1): (ワッチョイ 372c-nvXy) 2022/09/24(土)10:54 ID:gdtERKOB0(1/2) AAS
まーたanaconda被害者がひとり…
102: (ワッチョイ 1228-AIux) 2022/09/24(土)10:55 ID:8OhmHPew0(3/3) AAS
>>101
そんなに有名な事でしたか…
調べても出てこなかったので
103: (ワッチョイ 3733-6qsd) 2022/09/24(土)11:18 ID:4ctEaw520(1) AAS
君は悪くない、anacondaも悪くない
anacondaを進める入門的な書籍やサイトが悪い
104: (ワッチョイ 3763-eFJV) 2022/09/24(土)11:29 ID:8t4kL4/n0(1) AAS
pipでバイナリを配布できなかった時代ならまだしも、今そんな時代じゃないしな~
105: (ワッチョイ 1e66-yYUR) 2022/09/24(土)11:34 ID:P3HsQQA/0(3/3) AAS
何かのツールをインストールするとpythonも一緒にインストールされるのはよくある
python2だったりもする
大抵は、自分用のバイナリを自分で使うだけなので迷惑はかけないけど、
行儀の悪い奴もいる
106: (ワッチョイ 1201-ut7I) 2022/09/24(土)12:01 ID:52DloiQc0(2/2) AAS
>>98
さすがにそれはアホすぎる
107: (ワッチョイ 372c-nvXy) 2022/09/24(土)12:23 ID:gdtERKOB0(2/2) AAS
未だにpython事始めで検索すると
無責任な入門サイトの「anaconda入れとけ☆」 ばっかり
いやべつにいいんだけどさあanacondaでも。オールインワンで便利なのも分かるけど
108: (ワッチョイ 4b17-NGtF) 2022/09/24(土)13:25 ID:mEJjKZc00(1) AAS
anacondaでもpipでも両方使えばいいジャマイカ
109: (オッペケ Sr47-Nf8B) 2022/09/24(土)13:33 ID:+zHy6u5Kr(1) AAS
condaのコマンドで新しい環境作れるようにしたらスタンドアロンのpythonが外れた記憶ある
110: (ワッチョイ 5f01-DGnU) 2022/09/24(土)15:33 ID:BGgCMaIl0(1) AAS
俺も初心者の頃はアナコンダ入れてた。
けど後から無駄も多く必要ないことがわかったのでアンインストールした。
pythonとVSCodeあれば事足りる。
111(2): (ワッチョイ 1214-P81A) 2022/09/24(土)17:32 ID:nYu0cH9J0(1/2) AAS
ファイル名に使えない文字を全角に変換するコードってこんなに長くなるものなんですか?
外部リンク:qiita.com
name_ng = ["/","\",":","*","?","<",">","|"]
こんな感じでリストに入れてfor文の中で replace で置換すれば良いんじゃないかと思ったけど、リストにする段階でエラーになります
上記のURLの記述が最適解?
簡略化された書き方があったら教えてほしいです。
112(1): 2022/09/24(土)17:37 ID:xsaou6hs(1) AAS
a=True
b=True
aかつbがTrue、それ以外の全て
の条件って
if not (a and b): でよかったっけ・・?
113(1): (ブーイモ MMde-zdrj) 2022/09/24(土)18:00 ID:thjqxE2JM(1) AAS
>>111
translate使えばforすらいらない
114(1): (ワッチョイ b247-tX/F) 2022/09/24(土)18:29 ID:LDtPUxey0(1) AAS
>>111
その記事が最適かどうかは別問題として、まず0x5cをちゃんとエスケープして、あなたの考えを動くコードとして完成させよう
その上で、記事のコードと分かりやすさや速度を気の済むまで比較してみればよい
115: (ワッチョイ 1214-P81A) 2022/09/24(土)19:22 ID:nYu0cH9J0(2/2) AAS
>>113
調べて試してみます
>>114
そもそも ”\” は文字列としても単体では使うことができない感じですかね?
知らなかったです。教えてくれてありがとうございます
116: (アウアウウー Sa43-a1Je) 2022/09/24(土)20:25 ID:7pBAspe1a(1) AAS
r'hoge\hoge'
117: (ワッチョイ 127d-nvXy) 2022/09/25(日)00:00 ID:TfTFVrn20(1) AAS
>>112
if all([a, b]):
else
118: (ワッチョイ 1e66-yYUR) 2022/09/25(日)00:30 ID:wq9M03AC0(1/2) AAS
allとanyは積極的に使おう
フラグを別に持つとか途中で抜けてループ変数を見るとか、
何でレガシーな言語はそれで満足してたのか判らん
119: (ワッチョイ b302-QcAE) 2022/09/25(日)02:03 ID:ouzeiwB30(1) AAS
今日からPython始めたんだけど、エラーが出て動かなくて悩んでたらインデントが原因だったw
調べたらインデント自体プログラム構造的に意味を持ってたんだな。。。
120: (ワッチョイ 1214-P81A) 2022/09/25(日)05:32 ID:WCcUyzUQ0(1/2) AAS
少しコードが長くなってきたので、関数を定義してみようと思ったのですが
関数を使うくらいなら、最初からclassとmethodでやった方が後々便利ですかね?
それから現段階ではまだinstance変数を使うかどうかは不明ですが
classの最初に__init__は決まり文句として書いておいて良いのでしょうか?
仮に全く使わなかった場合にバグの元になったりするのでしょうか?
121: (ワッチョイ 372c-nvXy) 2022/09/25(日)05:38 ID:iEmY5l+s0(1/2) AAS
そのレベルならまず関数に慣れよう
classはそのあと
122: (ワッチョイ 1214-P81A) 2022/09/25(日)05:54 ID:WCcUyzUQ0(2/2) AAS
了解しました
123: (ワッチョイ 96bb-sDLX) 2022/09/25(日)11:02 ID:sQFmQmse0(1) AAS
classを使うほうが常に優れていると思ってるなら認識を改めたほうがいいよ。
classと関数両方使えるがpythonのメリット。
標準ライブラリだって両方共存してるのにどちらかを捨てるなんてもったいない
124: (ワッチョイ 4b17-NGtF) 2022/09/25(日)11:22 ID:Sdaj2srm0(1) AAS
自己満だからといっていつも意識的にそれらを考えていかなければより良い設計はできないのかもしれない
125(1): (ワッチョイ b302-nX9g) 2022/09/25(日)11:43 ID:rlnwElI30(1) AAS
クラスはメンバ変数にselfが強制だからコードが冗長になって嫌だわ
126: (オッペケ Sr47-d9EM) 2022/09/25(日)12:37 ID:uj3dGGMEr(1) AAS
>>125
インデントも深くなるし、状態持つ必要が無ければモジュール化で十分よな
127(1): (ワッチョイ 1e66-yYUR) 2022/09/25(日)12:49 ID:wq9M03AC0(2/2) AAS
大仰なクラスを作ろうとするから
インスタンス変数が2つだけ、みたいなのでも十分役立つ
128(1): (ワッチョイ 1610-d9EM) 2022/09/25(日)17:18 ID:hs4ndUhv0(1) AAS
>>127
それくらいならNamedTupleでも良いかな
129: (ワッチョイ 372c-nvXy) 2022/09/25(日)17:41 ID:iEmY5l+s0(2/2) AAS
dataclassええで
130: (ワッチョイ 4b08-KM/t) 2022/09/25(日)17:54 ID:AFTbeWYX0(1) AAS
クラスは実装の詳細を見せたくない時に限る
131: (ワッチョイ 1610-Nf8B) 2022/09/26(月)07:24 ID:ciNDFZ6I0(1) AAS
クラス名をclass Hoge
ファイル名をhoge.py
インポートでimport hoge
インスタンス名何にしようかいつも悩む
??? = hoge.Hoge()
132: (ワッチョイ 2f97-5djn) 2022/09/26(月)09:07 ID:P9G+/qqR0(1/2) AAS
>>81
そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな
あと、最大(?)は[0,10]じゃないか?
[0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない
半開区間に含まれる最小最大を取り出したいなら、
for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌?
133: (ワッチョイ 2f97-5djn) 2022/09/26(月)09:12 ID:P9G+/qqR0(2/2) AAS
木構造とかグラフ構造を自作したいなら(間々ある)、
クラスにした方が便利なときある気がするけどな。
get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。
実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。
確かにクラス作るまでもないようなことは多いけど。
134: (ワッチョイ 1e66-yYUR) 2022/09/26(月)20:32 ID:b9hyANFk0(1/2) AAS
>>128
値が変えられないがな
135(2): (ワッチョイ 429b-+bWc) 2022/09/26(月)23:15 ID:QR+uVx8I0(1/2) AAS
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 になるのでしょうか?
136(1): (ワッチョイ 429b-+bWc) 2022/09/26(月)23:17 ID:QR+uVx8I0(2/2) AAS
>>135
ideone に貼っときます
外部リンク:ideone.com
なぜでしょうか?
137: (ワッチョイ 1e66-yYUR) 2022/09/26(月)23:31 ID:b9hyANFk0(2/2) AAS
a = 1
c = 1
の時と同じ理由
138: (ワッチョイ 4b17-NGtF) 2022/09/26(月)23:32 ID:Gide+MMY0(1/2) AAS
>>136
ならない
139(1): (ワッチョイ 4b17-NGtF) 2022/09/26(月)23:33 ID:Gide+MMY0(2/2) AAS
ほらよ
画像リンク[jpg]:i.imgur.com
140(1): (ワッチョイ d201-/Peb) 2022/09/26(月)23:49 ID:eE4Lst2k0(1) AAS
>>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)
省1
141: (ワッチョイ 4212-+bWc) 2022/09/27(火)00:20 ID:LFY5tutJ0(1) AAS
>>140
ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました
142: (ワッチョイ 2f97-5djn) 2022/09/27(火)19:02 ID:zjZtbJ3M0(1) AAS
a is cが真になるかはかなりケースバイケースな気がするし、
中身を比較したいんだったら使うべきじゃないね
本当に同じtupleインスタンスかどうかを確認したいときだけにすべき
143: (ワッチョイ 3733-tX/F) 2022/09/27(火)22:33 ID:3OHfLHhN0(1/2) AAS
tupleだけの話ではなくてどの型でも同じだけどね
例えば文字列とか
144(3): 2022/09/27(火)23:35 ID:tKd9rAjb(1) AAS
n=12345.67
小数点以下が何桁あるのか調べたいのですが
len(str(n).split(".")[1]) if isinstance(n, float) else 0
こんなんでいいですかね・・?
145(1): (ワッチョイ 3733-tX/F) 2022/09/27(火)23:51 ID:3OHfLHhN0(2/2) AAS
>>144
外部リンク:ideone.com
146(1): (ワッチョイ 1610-DrlT) 2022/09/27(火)23:53 ID:+joc5Asc0(1) AAS
>>144
誤差で予想外の挙動しそうだからDecimal使う方がいい
147(1): (ワッチョイ 2701-tX/F) 2022/09/28(水)02:27 ID:OOL0jr8Q0(1/2) AAS
>>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
148: 2022/09/28(水)09:19 ID:9I9ISsCh(1/6) AAS
>>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました
149: 2022/09/28(水)10:07 ID:9I9ISsCh(2/6) AAS
やりたかったことは
受けとった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でもいい
みたいにしたかったのですが難しい・・
150: 2022/09/28(水)10:17 ID:9I9ISsCh(3/6) AAS
from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'
あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・
151: 2022/09/28(水)11:25 ID:9I9ISsCh(4/6) AAS
冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
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)
省4
152(1): 2022/09/28(水)11:30 ID:9I9ISsCh(5/6) AAS
連投すみません 結果です
外部リンク:ideone.com
153: (ワンミングク MM42-nX9g) 2022/09/28(水)13:38 ID:E42G0/DqM(1) AAS
元々の桁数でroundしたいって感じなのかな
154(2): (ワッチョイ 2701-tX/F) 2022/09/28(水)18:25 ID:OOL0jr8Q0(2/2) AAS
>>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のようにしたい場合
省2
155: 2022/09/28(水)19:37 ID:9I9ISsCh(6/6) AAS
>>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
外部リンク:ideone.com
ありがとうございました
156: (ワッチョイ 96bb-nd6Q) 2022/09/28(水)19:42 ID:o0cHd3Tq0(1) AAS
先にIEEE754読んでみては?
誤差に関しての勘所がわかるようになる
上下前次1-新書関写板覧索設栞歴
あと 846 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s