Pythonのお勉強 Part68 at TECH
[2ch|▼Menu]
[1からを表示]
50:デフォルトの名無しさん
22/09/20 14:59:07.65 HlTpV5j10.net
>>49
>>35

51:デフォルトの名無しさん
22/09/20 15:12:53.61 0+YIm89I0.net
30について回答くれた方々ありがとうございます。コメントで教えてもらったサイト見てみます
ググって意味を調べる時間の短縮目的は、そもそも我儘な要望だったかもしれません

52:デフォルトの名無しさん
22/09/20 15:33:22.20 0+YIm89I0.net
URLリンク(i.ibb.co)
望みの実行結果にはなるのですが、パスがないエラーを吐いてしまいます
本来は、os.mkdir(“パス名”)、os.makedirs(“パス名”)、のようにパス名を挿れるとのことですが
for文の変数を引数に渡したい場合はどう記述すればエラーを吐かないのでしょうか?
今朝始めたばっかなので用語の使い方間違ってるかもしれません

53:デフォルトの名無しさん
22/09/20 15:54:52.63 yGE7fJx20.net
>>52
エラーメッセージにあるように空文字が渡されてるのがエラーの原因
split(‘\n’)した結果のfolder_listの中身を確認すると分かると思う
でもってsplit()じゃなくsplitlines()を使うといい

54:デフォルトの名無しさん
22/09/20 16:08:35.44 0+YIm89I0.net
>>53
おかげで解決しましたありがとうございます
テキストファイルに何もない改行がありました

55:デフォルトの名無しさん
22/09/20 17:56:48.55 xv+EClXQ0.net
問題とは関係ないけれど
パスを操作する時はpathlibのほうがいいよ

56:デフォルトの名無しさん
22/09/20 18:02:43.94 GUzHgw240.net
正規表現で16進数を表すのに、いちいち[0-9a-fA-F]と書くのが面倒
もっとスマートに書けないものか

57:デフォルトの名無しさん
22/09/20 18:12:50.27 0B59Bo4G0.net
>>56
URLリンク(www.google.com)

58:デフォルトの名無しさん
22/09/20 20:23:11.29 zGhXnhGV0.net
case-insensitiveで [\da-f]

59:デフォルトの名無しさん
22/09/21 19:43:53.71 b5Bal3Dn0.net
URLリンク(i.ibb.co)
pathlibというのを使って>>52と同じことをやってみたのですが、書き方が間違ってる気がしてならないので指摘して欲しいです
line14-15は何で上手くいかないのかも教えてほしいです

60:デフォルトの名無しさん
22/09/21 20:06:17.61 Qxk2XzJU0.net
まず、12行目のmkdirで例外発生してない?
temporaryなんてらフォルダはchdirしてるからすでに存在してるんでしょう?

61:デフォルトの名無しさん
22/09/21 20:13:22.49 VhW4jWqJ0.net
os関連の処理は互換性とか捨てて、subprocessでやるのが楽でしかも安定してる

62:デフォルトの名無しさん
22/09/21 20:30:50.72 2GcRUbUk0.net
繰り返される任意の文字列を1回の繰り返しに直す方法ありませんか?
"abcdabcdabcdefg"→"abcdefg"(abcdの繰り返し)
"abababc"→"abc"(abの繰り返し)
"aabbaabbc"→"aabbc"(aabbの繰り返し)
パターンの長さはとりあえず固定でいいので(例えば4でabcdとaabbはマッチできる)一気に置換する方法ないでしょうか

63:デフォルトの名無しさん
22/09/21 20:30:55.54 b5Bal3Dn0.net
>>60
存在してます。path.rename()書いてない時は、同名のフォルダが作られて「すでに存在してる〜」みたいなエラーを吐いてました
そもそもpathlib使って>>52をやりたい場合は、osを使う必要がなかったりもするのでしょうか?

64:デフォルトの名無しさん
22/09/21 20:31:19.96 yjl6UhSi0.net
>>59
URLリンク(ideone.com)

65:デフォルトの名無しさん
22/09/21 20:52:17.39 b5Bal3Dn0.net
>>64
参考に直して見たら無事にできました。ありがとうございます。
URLリンク(i.ibb.co)

66:デフォルトの名無しさん
22/09/21 20:58:11.32 b5Bal3Dn0.net
変数名とか色々、短く略して書いた方が良いのでしょうか?
入力時間的には大差ないので、見返した時に分かりやすいようにしてるのですが
これは初心者だからで、経験者から見ると見苦しいとか、むしろ略されてた方が見やすいとかありますか?

67:デフォルトの名無しさん
22/09/21 22:11:39.31 yjl6UhSi0.net
>>62
競プロの問題?

68:デフォルトの名無しさん
22/09/21 22:25:22.90 sVtx8qcf0.net
>>62
質問の意味がよくわからん
"abcdabcdefcdefg"の場合どうしたいの

69:デフォルトの名無しさん (ワッチョイ d763-DwLj)
[ここ壊れてます] .net
LZ78の考え方の応用で行け

70:デフォルトの名無しさん (ワッチョイ ffdb-OuJ4)
[ここ壊れてます] .net
>>67
普通に処理したいだけです

>>68
"abcdabcdefcdefg"なら"(abcdabcd)efcdefg"→"abcdefcdefg"だと思います

71:デフォルトの名無しさん (ワッチョイ ffdb-OuJ4)
[ここ壊れてます] .net
あ、cdefcdefが繰り返されていたんですね…
最終的に人がチェックする工程があるので、先にマッチした方優先とかで大丈夫です

72:デフォルトの名無しさん
22/09/21 23:11:15.16 yjl6UhSi0.net
'abcabcdabcabcdefg'
だったら?

73:デフォルトの名無しさん
22/09/21 23:16:47.91 VS1qJent0.net
長さ4固定でいいなら、正規表現あたりで
>>> import re
>>> re.sub(r'(....)\1+', r'\1', "abcdabcdabcdefg")
'abcdefg'
>>> re.sub(r'(....)\1+', r'\1', "aabbaabbc")
'aabbc'

74:デフォルトの名無しさん
22/09/21 23:21:53.64 757dNGj40.net
>>62
URLリンク(www.online-python.com)

75:デフォルトの名無しさん
22/09/21 23:30:41.78 Qxk2XzJU0.net
そこにforを使うなんて

76:デフォルトの名無しさん
22/09/21 23:49:19.41 2GcRUbUk0.net
>>73 >>74
ありがとうございます!
文中に含まれてるものにも対処したいので73を長さ変えながら複数回適用で使いたいと思います

77:デフォルトの名無しさん (アウアウウー Sa5b-8eP5)
[ここ壊れてます] .net
>>39
いらね

78:デフォルトの名無しさん
22/09/22 11:11:13.09 u9/ouAZsa.net
>>72 の回答はよ

79:デフォルトの名無しさん
22/09/22 11:12:02.23 ufV304t80.net
見てすぐ判らんようなもんは使うべきではないな

80:デフォルトの名無しさん
22/09/22 13:04:09.56 kBSagdtc0.net
abracadabra

81:デフォルトの名無しさん
22/09/23 06:05:04.44 l/gDdEyB0.net
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する以外にいい書き方ないですか
if i == len(x): breakみたいなのとか
_idxs[1] -= 1
for i in idxs:
みたいなのは嫌です

82:デフォルトの名無しさん
22/09/23 06:29:46.22 ciin+wbx6.net
その11にはどういう意味があるんですか

83:デフォルトの名無しさん
22/09/23 06:42:29.24 j5q+73vfM.net
>>82
そもそも、「いい書き方」って何ですか

84:デフォルトの名無しさん
22/09/23 07:14:40.79 ILPrLpfC0.net
これ、やべぇな
URLリンク(gigazine.net)
GitHub Copilot とかで広まっちゃうのか

85:デフォルトの名無しさん (スッププ Sdbf-HYId)
[ここ壊れてます] .net
>>84
これは完全に誤訳
翻訳元では、GitHub上の数多くのOSSにこの脆弱性が存在するからCopilot等がそれを学習して広がるかもしれないと言っているだけ

86:デフォルトの名無しさん (ワッチョイ bf66-C6xl)
[ここ壊れてます] .net
そんな風に読んだけど違うの?

87:デフォルトの名無しさん
22/09/23 10:22:01.14 7VR4OLWz0.net
確かにtarを使うリポジトリではcopilot経由で広がる可能性があるけど、tarを使うリポジトリなんてリポジトリ検索してもそんなにないので実数としては眉唾
依存関係から侵入してくる方がよっぽど可能性が高い
Copilotが批判されがちなので批判の文脈で喋ったほうが肯定的に聞いてもらえるだろうという余計な意図が入ってるのではと邪推してしまうね:)

88:デフォルトの名無しさん
22/09/23 12:26:25.28 nucVVsrtd.net
>>86
> Trellixによると、35万件を超えるリポジトリがこの脆弱性に脅かされていると見られ、その多くでGitHub Copilotなどの自動ツールが使われているとのこと。
前知識なく普通にこれ読んだら、35万件のリポジトリがGitHub Copilptを使っている、そして、Copilotがその脆弱性の原因であると思うでしょ
というかこの記事書いた人はたぶんそのように誤解してる
> URLリンク(www.trellix.com)
まあソースも推計方法や論理がガバガバで似たようなレベルだが

89:デフォルトの名無しさん (アウアウウー Sa5b-8eP5)
[ここ壊れてます] .net
>>81 が何を考えてるのか詳しく知りたいなωωω

90:デフォルトの名無しさん
22/09/24 01:05:33.05 WVAdUwxP0.net
>>81
インデックスなら0~10の番号で管理すべきじゃないの
endを取り出して使うときに+1すれば良いんじゃない
スライシングと混同してるのかな

91:デフォルトの名無しさん
22/09/24 02:03:35.51 6DJLRQJMH.net
>>90
外部入力でスライス範囲を受け取ってて(start, end)
その値を使いまわしてインデックスアクセスしたいんだろう
テーブル扱うGUIとかでままある

92:デフォルトの名無しさん
22/09/24 07:13:39.52 52DloiQc0.net
単にインデックスの範囲とスライスを混同してるだけだろ
外部からの入力なら値のチェックは必須だしその時に調整しとけばいいだけ

93:デフォルトの名無しさん
22/09/24 07:29:05.56 RoHmfu6K0.net
一昔前のseabornのカラーマップだか忘れたけど1から数えて最後の数字を入れるようなインデックス指定を偶に見かける
[0, 10] → 0から9までと
[1, 10] → そもそも0が存在せず1から10
この2つの書き方にそれぞれ名前ついてたりする?

94:デフォルトの名無しさん
22/09/24 08:37:46.88 3mLYFKO40.net
>>93
前者は「半開区間」として [0,10) といった表記にするのをよく見る

95:デフォルトの名無しさん
22/09/24 09:09:58.79 RoHmfu6K0.net
>>94
あーたしかに数学で見るわ

96:デフォルトの名無しさん
22/09/24 09:21:01.36 P3HsQQA/0.net
メモリマップとかで、
A: 0x0000 - 0x0fff
B: 0x1000 - 0x1fff
みたいに末尾をfffにせずに、末尾は1足して表記する、という約束にした方が使いやすい

97:デフォルトの名無しさん
22/09/24 09:53:57.04 N1C+NhRL0.net
そうすると最後は
F: 0xf000 - 0x10000
と最後だけ2バイトでは表記しきれなくなるね

98:デフォルトの名無しさん
22/09/24 10:03:22.17 P3HsQQA/0.net
それはもう0でいい

99:デフォルトの名無しさん
22/09/24 10:26:03.89 8OhmHPew0.net
すみません、プログラミング初心者です、python構築について質問があります
python3.10.7をインストールしたのですがコンドプロンプトで確認したらpython 3.9.12になっています
もしかしたら以前DLしてたのかと思って探しても見つからないのですが
こういうものなのでしょうか?

100:デフォルトの名無しさん
22/09/24 10:37:33.81 8OhmHPew0.net
すみません、調べてみたらanacondaの方にpythonが入ってたみたいです

101:デフォルトの名無しさん
22/09/24 10:54:04.69 gdtERKOB0.net
まーたanaconda被害者がひとり…

102:デフォルトの名無しさん
22/09/24 10:55:37.98 8OhmHPew0.net
>>101
そんなに有名な事でしたか…
調べても出てこなかったので

103:デフォルトの名無しさん
22/09/24 11:18:28.18 4ctEaw520.net
君は悪くない、anacondaも悪くない
anacondaを進める入門的な書籍やサイトが悪い

104:デフォルトの名無しさん
22/09/24 11:29:33.35 8t4kL4/n0.net
pipでバイナリを配布できなかった時代ならまだしも、今そんな時代じゃないしな~

105:デフォルトの名無しさん
22/09/24 11:34:58.91 P3HsQQA/0.net
何かのツールをインストールするとpythonも一緒にインストールされるのはよくある
python2だったりもする
大抵は、自分用のバイナリを自分で使うだけなので迷惑はかけないけど、
行儀の悪い奴もいる

106:デフォルトの名無しさん
22/09/24 12:01:38.29 52DloiQc0.net
>>98
さすがにそれはアホすぎる

107:デフォルトの名無しさん
22/09/24 12:23:45.45 gdtERKOB0.net
未だにpython事始めで検索すると
無責任な入門サイトの「anaconda入れとけ☆」 ばっかり
いやべつにいいんだけどさあanacondaでも。オールインワンで便利なのも分かるけど

108:デフォルトの名無しさん
22/09/24 13:25:40.55 mEJjKZc00.net
anacondaでもpipでも両方使えばいいジャマイカ

109:デフォルトの名無しさん
22/09/24 13:33:00.23 +zHy6u5Kr.net
condaのコマンドで新しい環境作れるようにしたらスタンドアロンのpythonが外れた記憶ある

110:デフォルトの名無しさん
22/09/24 15:33:58.69 BGgCMaIl0.net
俺も初心者の頃はアナコンダ入れてた。
けど後から無駄も多く必要ないことがわかったのでアンインストールした。
pythonとVSCodeあれば事足りる。

111:デフォルトの名無しさん (ワッチョイ 1214-P81A)
[ここ壊れてます] .net
ファイル名に使えない文字を全角に変換するコードってこんなに長くなるものなんですか?
URLリンク(qiita.com)

name_ng = ["/","\",":","*","?","<",">","|"]
こんな感じでリストに入れてfor文の中で replace で置換すれば良いんじゃないかと思ったけど、リストにする段階でエラーになります

上記のURLの記述が最適解?
簡略化された書き方があったら教えてほしいです。

112:デフォルトの名無しさん
[ここ壊れてます] .net
a=True
b=True

aかつbがTrue、それ以外の全て
の条件って
if not (a and b): でよかったっけ・・?

113:デフォルトの名無しさん (ブーイモ MMde-zdrj)
[ここ壊れてます] .net
>>111
translate使えばforすらいらない

114:デフォルトの名無しさん
22/09/24 18:29:31.09 LDtPUxey0.net
>>111
その記事が最適かどうかは別問題として、まず0x5cをちゃんとエスケープして、あなたの考えを動くコードとして完成させよう
その上で、記事のコードと分かりやすさや速度を気の済むまで比較してみればよい

115:デフォルトの名無しさん
22/09/24 19:22:50.96 nYu0cH9J0.net
>>113
調べて試してみます
>>114
そもそも ”\” は文字列としても単体では使うことができない感じですかね?
知らなかったです。教えてくれてありがとうございます

116:デフォルトの名無しさん (アウアウウー Sa43-a1Je)
[ここ壊れてます] .net
r'hoge\hoge'

117:デフォルトの名無しさん
22/09/25 00:00:20.77 TfTFVrn20.net
>>112
if all([a, b]):
else

118:デフォルトの名無しさん
22/09/25 00:30:59.06 wq9M03AC0.net
allとanyは積極的に使おう
フラグを別に持つとか途中で抜けてループ変数を見るとか、
何でレガシーな言語はそれで満足してたのか判らん

119:デフォルトの名無しさん
22/09/25 02:03:20.35 ouzeiwB30.net
今日からPython始めたんだけど、エラーが出て動かなくて悩んでたらインデントが原因だったw
調べたらインデント自体プログラム構造的に意味を持ってたんだな。。。

120:デフォルトの名無しさん
22/09/25 05:32:21.54 WCcUyzUQ0.net
少しコードが長くなってきたので、関数を定義してみようと思ったのですが
関数を使うくらいなら、最初からclassとmethodでやった方が後々便利ですかね?
それから現段階ではまだinstance変数を使うかどうかは不明ですが
classの最初に__init__は決まり文句として書いておいて良いのでしょうか?
仮に全く使わなかった場合にバグの元になったりするのでしょうか?

121:デフォルトの名無しさん
22/09/25 05:38:14.60 iEmY5l+s0.net
そのレベルならまず関数に慣れよう
classはそのあと

122:デフォルトの名無しさん
22/09/25 05:54:55.13 WCcUyzUQ0.net
了解しました

123:デフォルトの名無しさん
22/09/25 11:02:47.56 sQFmQmse0.net
classを使うほうが常に優れていると思ってるなら認識を改めたほうがいいよ。
classと関数両方使えるがpythonのメリット。
標準ライブラリだって両方共存してるのにどちらかを捨てるなんてもったいない

124:デフォルトの名無しさん
22/09/25 11:22:42.32 Sdaj2srm0.net
自己満だからといっていつも意識的にそれらを考えていかなければより良い設計はできないのかもしれない

125:デフォルトの名無しさん
22/09/25 11:43:23.68 rlnwElI30.net
クラスはメンバ変数にselfが強制だからコードが冗長になって嫌だわ

126:デフォルトの名無しさん
22/09/25 12:37:00.29 uj3dGGMEr.net
>>125
インデントも深くなるし、状態持つ必要が無ければモジュール化で十分よな

127:デフォルトの名無しさん
22/09/25 12:49:19.19 wq9M03AC0.net
大仰なクラスを作ろうとするから
インスタンス変数が2つだけ、みたいなのでも十分役立つ

128:デフォルトの名無しさん
22/09/25 17:18:10.55 hs4ndUhv0.net
>>127
それくらいならNamedTupleでも良いかな

129:デフォルトの名無しさん
22/09/25 17:41:46.06 iEmY5l+s0.net
dataclassええで

130:デフォルトの名無しさん
22/09/25 17:54:34.18 AFTbeWYX0.net
クラスは実装の詳細を見せたくない時に限る

131:デフォルトの名無しさん
22/09/26 07:24:51.77 ciNDFZ6I0.net
クラス名をclass Hoge
ファイル名をhoge.py
インポートでimport hoge
インスタンス名何にしようかいつも悩む
??? = hoge.Hoge()

132:デフォルトの名無しさん
22/09/26 09:07:29.52 P9G+/qqR0.net
>>81
そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな
あと、最大(?)は[0,10]じゃないか?
[0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない
半開区間に含まれる最小最大を取り出したいなら、
for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌?

133:デフォルトの名無しさん
22/09/26 09:12:30.59 P9G+/qqR0.net
木構造とかグラフ構造を自作したいなら(間々ある)、
クラスにした方が便利なときある気がするけどな。
get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。
実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。
確かにクラス作るまでもないようなことは多いけど。

134:デフォルトの名無しさん
22/09/26 20:32:27.38 b9hyANFk0.net
>>128
値が変えられないがな

135:デフォルトの名無しさん
22/09/26 23:15:54.08 QR+uVx8I0.net
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:デフォルトの名無しさん
22/09/26 23:17:59.46 QR+uVx8I0.net
>>135
ideone に貼っときます
URLリンク(ideone.com)
なぜでしょうか?

137:デフォルトの名無しさん
22/09/26 23:31:03.60 b9hyANFk0.net
a = 1
c = 1
の時と同じ理由

138:デフォルトの名無しさん
22/09/26 23:32:02.41 Gide+MMY0.net
>>136
ならない

139:デフォルトの名無しさん
22/09/26 23:33:01.37 Gide+MMY0.net
ほらよ
URLリンク(i.imgur.com)

140:デフォルトの名無しさん
22/09/26 23:49:19.92 eE4Lst2k0.net
>>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)

141:デフォルトの名無しさん
22/09/27 00:20:20.92 LFY5tutJ0.net
>>140
ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました

142:デフォルトの名無しさん
22/09/27 19:02:24.07 zjZtbJ3M0.net
a is cが真になるかはかなりケースバイケースな気がするし、
中身を比較したいんだったら使うべきじゃないね
本当に同じtupleインスタンスかどうかを確認したいときだけにすべき

143:デフォルトの名無しさん
22/09/27 22:33:08.85 3OHfLHhN0.net
tupleだけの話ではなくてどの型でも同じだけどね
例えば文字列とか

144:デフォルトの名無しさん
22/09/27 23:35:04.66 tKd9rAjb.net
n=12345.67
小数点以下が何桁あるのか調べたいのですが
len(str(n).split(".")[1]) if isinstance(n, float) else 0
こんなんでいいですかね・・?

145:デフォルトの名無しさん
22/09/27 23:51:45.87 3OHfLHhN0.net
>>144
URLリンク(ideone.com)

146:デフォルトの名無しさん
22/09/27 23:53:56.84 +joc5Asc0.net
>>144
誤差で予想外の挙動しそうだからDecimal使う方がいい

147:デフォルトの名無しさん
22/09/28 02:27:12.38 OOL0jr8Q0.net
>>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:デフォルトの名無しさん
22/09/28 09:19:00.77 9I9ISsCh.net
>>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました

149:デフォルトの名無しさん
22/09/28 10:07:58.97 9I9ISsCh.net
やりたかったことは
受けとった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:デフォルトの名無しさん
22/09/28 10:17:26.42 9I9ISsCh.net
from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'
あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・

151:デフォルトの名無しさん
22/09/28 11:25:04.93 9I9ISsCh.net
冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
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."+("0"*d)))
 print(n,c,d)
 print("-->",rs,"\n")

152:デフォルトの名無しさん
22/09/28 11:30:47.23 9I9ISsCh.net
連投すみません 結果です
URLリンク(ideone.com)

153:デフォルトの名無しさん
22/09/28 13:38:45.48 E42G0/DqM.net
元々の桁数でroundしたいって感じなのかな

154:デフォルトの名無しさん
22/09/28 18:25:19.27 OOL0jr8Q0.net
>>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.quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)
四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ

155:デフォルトの名無しさん
22/09/28 19:37:21.94 9I9ISsCh.net
>>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
URLリンク(ideone.com)
ありがとうございました

156:デフォルトの名無しさん
22/09/28 19:42:02.44 o0cHd3Tq0.net
先にIEEE754読んでみては?
誤差に関しての勘所がわかるようになる

157:デフォルトの名無しさん
22/09/28 20:32:50.93 x5UMfEp40.net
Pythonに限らず浮動小数点数を使う場合は常に誤差の問題がつきまとう。
0.1というのがすでに二進数ではきっちり表現できない数字なので、有効数字を何桁にするのかというのは実装の段階で決めなくちゃならない。
URLリンク(docs.python.org)
正確に表現できるのは、0.5,0.25,0.125...と1を2で割っていった数とその整数倍のみ
0.1は1/(2×5)となり1/5が2進数では循環小数となり浮動小数点数では正確に表せない。
ということを念頭に置いてまず何がやりたいか考えた方がいいよ。
decimalモジュールは便利そうだね。

158:デフォルトの名無しさん
22/09/28 23:21:28.71 FDPwu/KN0.net
log2で有効桁数計算出来るでしょ

159:デフォルトの名無しさん
22/09/29 00:26:06.29 3C3gpnCY0.net
>>154
どちらの書き方でも
-0.015 を四捨五入したら-0.02だった、すまん
-0.01にしたい場合は自力でなんとかして

160:デフォルトの名無しさん
22/09/30 00:55:04.52 qun5+YRs0.net
昔から不思議なんだけど
何で分数で処理しないのかな?
最後に割り算を一回だけすれば
誤差がでないじゃないの

161:デフォルトの名無しさん
22/09/30 01:46:32.47 0IYvIpx66.net
掛け算でも足し算でも誤差が出るから

162:デフォルトの名無しさん
22/09/30 01:53:32.93 sForoGQI0.net
Pythonは整数側の桁数制限が無いのを利用して高精度にできそう

163:デフォルトの名無しさん (アウアウウー Sa43-hb2l)
[ここ壊れてます] .net
>>160
似たような大きさの数字ならその発想もいいけどね
現実はコスパの悪い任意精度の演算が必要になることが多いのでは

164:デフォルトの名無しさん
22/09/30 03:11:26.40 FkDRVgM50.net
>>160
つ fractions

165:デフォルトの名無しさん
22/09/30 04:56:46.10 HxNT59pn0.net
だから誤差の話するならIEEE754読めよ

166:デフォルトの名無しさん
22/09/30 04:57:30.60 CfDFJOy00.net
>>160
昔GCD付きの分数クラス作ったけど
結局はdoubleになったことがある

167:デフォルトの名無しさん
22/09/30 05:21:28.14 oHn8O8ll0.net
>>160
四則演算だけならいいけど√とかsin( )とかはどうする?
>>161
掛け算、足し算で誤差がでるケースとは?

168:デフォルトの名無しさん
22/09/30 08:01:25.94 Gm4+1fgX0.net
sinとかも内部は四則演算

169:デフォルトの名無しさん
22/09/30 09:17:00.10 oHn8O8ll0.net
>>168
近似演算の話されても困るんだがw

170:デフォルトの名無しさん
22/09/30 09:23:23.51 k91OtGRla.net
三角関数の近似じゃない演算て

171:デフォルトの名無しさん
22/09/30 10:05:45.64 EsKmogiV0.net
python chapelについて質問です。
情報があまりないので、チャペルについてお勧めのサイトがあれば教えてほしいです。

172:デフォルトの名無しさん
22/09/30 10:38:01.55 t/wNXSJY0.net
クヌースのTAOCP読むといいよ
コンピュータでの数値計算の全てが書かれてる

173:デフォルトの名無しさん
22/09/30 13:20:23.85 oHn8O8ll0.net
>>170
sinsin, cos のまま計算するって話だろ
数学不得意か?

174:デフォルトの名無しさん
22/09/30 13:47:23.87 k91OtGRla.net
>>173
そんなもん代数的な操作だろ

175:デフォルトの名無しさん
22/09/30 13:54:50.47 oSg68bQdM.net
>>160
遅いからだよ

176:デフォルトの名無しさん
22/09/30 14:09:07.38 oHn8O8ll0.net
>>174
話は>>160から始まってて途中は代数的な操作で最後に一回だけ演算することで誤差を抑えられるって話な

177:デフォルトの名無しさん
22/09/30 16:11:14.18 7g2iZKZC0.net
三角関数は二項演算じゃないから後も先もないだろ

178:デフォルトの名無しさん
22/09/30 16:39:44.93 du1MSukG0.net
ここまで有効数字の話なし

179:デフォルトの名無しさん
22/09/30 16:40:16.15 Gm4+1fgX0.net
有理数演算に有効数字は関係ない

180:デフォルトの名無しさん
22/09/30 17:02:40.52 7g2iZKZC0.net
実は誰も数値計算誤差について知らないのである

181:デフォルトの名無しさん (ワッチョイ 1e66-yYUR)
[ここ壊れてます] .net
組み込み系で、積算の量を保持していて
1秒毎に測定して何年というスパンで計算を続けると、
もう32bitでは精度が足りなくなる

182:デフォルトの名無しさん
22/09/30 18:26:40.60 J+iH2myB0.net
最後に浮動小数点数にして誤差を減らす方法は、代数的な計算ができる必要がある。
Mathematicaとか、SymPyだな。
ただ代数的な計算は上手いこと式を整理してやらないと簡単にならないことも多い。積分は公式を知らないと出来ない、というのと同じ。
有理数の四則演算だったら単なる有理数演算を逐次的に実行していけば問題ないだろうが。

183:デフォルトの名無しさん
22/09/30 18:28:54.96 J+iH2myB0.net
>>177
んなことないだろ。加法定理やら積和、和積の公式とか習わなかったのか。あの辺使うと極端な場合の誤差減らせるよ。
xが0に非常に近い場合のsin2x/sinxとかね。

184:デフォルトの名無しさん
22/10/01 03:53:03.59 SpYHa2lW0.net
お金の計算とかは
有理数しか出てこないんだから
分数で十分のような気がするんだが

185:デフォルトの名無しさん
22/10/01 05:23:12.47 9xFR6mUQ0.net
丸めたくない意図だと思うが加減算だけで速攻破綻する

186:デフォルトの名無しさん
22/10/01 05:55:22.47 jubCkgWp0.net
単にbit数が足りなくなるという話なので、
必要に応じてbit数を増やしていけばいい
無限に増えることは絶対ない

187:デフォルトの名無しさん
22/10/01 06:02:40.31 WTWdfTM50.net
質問です。
djangoの資格を作りたいとおもってます。
需要はありますか?

188:デフォルトの名無しさん
22/10/03 07:28:28.28 qHW/WFxU0.net
URLリンク(translate.google.com)
Google翻訳のページで、テキスト入力ボックスから「Tabキー」を1回押すと必ず「音声を聞く」のアイコンに移動するようにしたいのですが、Pythonで可能ですか?
通常は3回で行けるのですが、”原文の言語”や”もしかして”が表示されるとTabキーを押す回数が変わって面倒です。しかもリストが表示されててそのパターンなのか見えない。
Pythonで何とかしようとしてるのがそもそも間違っている気がして、簡単なHPをJavaとか?で作ったり、アドオンを組んだりとか別の手段が必要ですかね?

189:デフォルトの名無しさん
22/10/03 07:35:38.92 y8eCR1Dta.net
うるせえ

190:デフォルトの名無しさん
22/10/03 09:20:27.54 XqhFz79Ma.net
>>188
現在のフォーカスを取得することでTab回数制御できそうだけど
そもそも音声を聞く、のidありゃそこに飛ばせるやろ

191:デフォルトの名無しさん
22/10/03 10:02:57.41 qHW/WFxU0.net
>>190
seleniumを使ってプログラムを実行した時だけなら出来たのですが、普段使いで常にその状態にさせる方法が分からなかったです。
独自の簡単なChrome拡張機能を作る方向が一番良さそうな感じです。そっちで少しやってみます。お騒がせしました。

192:デフォルトの名無しさん
22/10/03 10:19:40.80 2xmZEmoH0.net
>>191
拡張起こさなくてもTampermonkey拡張でスクリプト書くだけ

193:デフォルトの名無しさん
22/10/03 10:33:51.18 vUZPctIIM.net
USWCとか使ってESCキーを押したら画像認識で再生ボタンクリックとかにすると簡単そう
ESCだと位置的に押しやすいし予測候補も消える
pyautoguiみたいなの使えばPythonでもUWSCと同じ事出来たはず
windows限定の話だけど

194:デフォルトの名無しさん
22/10/03 10:49:36.68 WjbJBDxU0.net
拡張する方向でやってもすぐに使えなくなったりするので、
キーやマウスの操作を発生させる方向でやるのが結局ベストだったりする

195:デフォルトの名無しさん
22/10/03 10:54:58.28 qHW/WFxU0.net
>>192-194
最初に調べるキーワードが出てこなくて分からないことが多いので情報助かります
頂いた情報を元に解決する方向でやってみます。ありがとうございました。

196:デフォルトの名無しさん
22/10/03 10:55:37.39 S1BqvHYWd.net
>>169
>>173
複素数や四元数を使うのが割りとマジでお薦め

197:デフォルトの名無しさん
22/10/03 11:05:12.96 zOLlU4yCa.net
オイラーをほめたたえよ

198:デフォルトの名無しさん
22/10/03 18:00:29.25 pcuzjq2H0.net
>>188
Ruby, Selenium でも、JavaScript を使って出来たけど、
ソースコードの何かの単語がブロックされるので、
ここには貼れないので以下へ
URLリンク(jsfiddle.net)

199:デフォルトの名無しさん
22/10/03 18:09:52.15 wCVa7NBkM.net
>>198
どーゆーこと?

200:1
22/10/03 22:09:32.24 yB/cj66NM.net
質問です
以下のプログラム(wikipediaの今日は何の日)をエクセルで起動させたときに最後の年号の()が取れてないとおかしいのですがどこのコードが間違っていますか?
優しい方教えてください
import requests
from bs4 import BeautifulSoup
import csv
import re
url="URLリンク(ja.wikipedia.org")
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser")
top_entry=soup.find("div",attrs={"id":"on_this_day"})
entries=top_entry.find_all("li")
today_list=[]
for i,entry in enumerate(entries):
today_text=entry.get_text().replace("(","(").replace(")",")")
match=re.search("\(([1-9].*?)年\)", today_text)
if match:
today_list.append([i+1, entry.get_text(),match.group(1)])
else:
today_list.append([i+1, entry.get_text()])
with open("output.csv", "w", encoding="Shift_JIS") as file:
writer=csv.writer(file, lineterminator="\n")
writer.writerows(today_list)

201:1
22/10/03 22:11:29.02 yB/cj66NM.net
何度も本(スクレイピング・ハッキング・ラぼ)見返したけど間違ってないんです…

202:デフォルトの名無しさん
22/10/03 22:13:35.20 WjbJBDxU0.net
漢字コードとか?

203:デフォルトの名無しさん
22/10/03 22:15:49.89 phcGwi7g0.net
とりあえずこれに聞こうぜ
URLリンク(aiprogrammer.hashlab.jp)

204:デフォルトの名無しさん
22/10/03 22:28:30.42 cMmfYMlm0.net
お願いします
URLリンク(ideone.com)
for i in range(1, 100) で 99 回 next を呼んでいるのに、なぜ 79 で終わってしまうのですか?

205:デフォルトの名無しさん
22/10/03 22:28:53.24 fB4Oth8WM.net
>>203
すげぇこんなのあるんだ
でも解決しなかった(´・ω・`)

206:デフォルトの名無しさん
22/10/03 22:36:32.61 Hgv/NPoj0.net
>>204
n=15のときFizzBuzz Fizz Buzzの3つ表示されます

207:デフォルトの名無しさん
22/10/03 22:54:57.92 phcGwi7g0.net
これでいけそうですが、どうでしょうか
1から100までカウントして、15で割れたらFizzBuzzと表示して、5で割れたらBuzzと表示して、3で割れたらFizzして数字を表示する

208:デフォルトの名無しさん
22/10/03 22:58:18.22 phcGwi7g0.net
修正した
1から100までカウントして、15で割れたらFizzBuzzと表示して、5で割れたらBuzzと表示して、3で割れたらFizzして数字を文字列で表示する

209:デフォルトの名無しさん
22/10/03 23:01:03.63 cMmfYMlm0.net
>>206
elif にするべきだったんですね!ありがとうございます!

210:デフォルトの名無しさん
22/10/03 23:48:34.11 DL3YHdAw0.net
ウェブスクレイピングをやってみたくて奮闘しておりますが、CSVへの書き込み時にエラーがでます
どう改善すればよいかわからず困っています。助けてください。
おま環(Python 3.9.12+Windows10+VScode)
【コード】
for a in soup.find_all('a'):
link = a.get('href'), a.text
link.to_csv('link.csv')
【エラー】
link.to_csv('link.csv')
AttributeError: 'tuple' object has no attribute 'to_csv'

211:デフォルトの名無しさん
22/10/04 00:31:15.23 QZmM2iut0.net
>>210
URLリンク(pastebin.com)

212:デフォルトの名無しさん
22/10/04 06:25:16.21 UhX37WNP0.net
>>203
Python
Tuple to dataframe
で聞く

213:デフォルトの名無しさん
22/10/04 06:51:23.40 jZxsvBQn0.net
URLリンク(aiprogrammer.hashlab.jp)
ウェブスクレイピングで、aタグを取得し、そのaタグをcsvファイルに出力するコードを作成してください。
import csv
from bs4 import BeautifulSoup
with open("sample.html") as f:
soup = BeautifulSoup(f, "html.parser")
csv_file = open("output.csv", "w", encoding="utf-8")
writer = csv.writer(csv_file)
for a in soup.find_all("a"):
writer.writerow([a.text, a.get("href")])
csv_file.close()

214:デフォルトの名無しさん
22/10/04 22:24:51.48 fseuENfmM.net
知恵袋にも質問したのですがどなたか教えていただけると嬉しいです

URLリンク(detail.chiebukuro.yahoo.co.jp)

215:デフォルトの名無しさん
22/10/04 22:40:41.78 g6GmefYL0.net
>>211 213
丁寧に教えてくださりありがとうございます。

216:デフォルトの名無しさん
22/10/04 23:17:10.94 CNGS9dK70.net
>知恵袋にも質問したのですが
5ch はマルチポスト禁止です!
5chで質問する場合は、他での質問を取り消してからにしてください

217:デフォルトの名無しさん
22/10/04 23:19:23.00 NeQlYRE40.net
んなこたーない

218:デフォルトの名無しさん
22/10/04 23:24:09.71 4YJ9syiq0.net
さすがにインストールできてないのは答えようがない

219:デフォルトの名無しさん
22/10/04 23:28:30.56 IUIBMeejH.net
>>216
fj ではマルチポスト禁止の理由がありクロスポストという代替があったけれども、ここでのマルチポスト禁止の理由は?

220:デフォルトの名無しさん
22/10/05 00:22:21.08 Tx2gHWm/0.net
せっかくの集合知が分散するからじゃないの?

221:デフォルトの名無しさん
22/10/05 00:31:43.32 rm6FRUcS0.net
マルチ野郎はよそで解決しても報告しない
放置してそこら中にゴミを残す

222:デフォルトの名無しさん
22/10/05 00:40:43.93 93gtHac60.net
ぶっちゃけスレは落ちて過去ログになるし
検索性も低いから集合知の蓄積なんてしないよ
マルチポスト禁止は形骸化した旧きネチケットだと思う

223:デフォルトの名無しさん
22/10/05 00:56:27.52 Tx2gHWm/0.net
>>222
いやぁそうでもないと思うけどねぇ
2ちゃんねるの過去ログをあさって解決方法を見つけたことも数多あるし
解決できない場合でも、ヒントになるようなことが散らばっていて、それをきっかけに探し出せることもある
検索のやり方次第じゃないか?

224:デフォルトの名無しさん
22/10/05 01:03:22.70 93gtHac60.net
>>223
調べごとはよくするけど
2ちゃんで解決したことはないな、というか、検索方法によるだろうが出てきすらしない
大体Qiita、個人ブログ、stackoverflowのどれか


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

474日前に更新/241 KB
担当:undef