質問: (Python)ランダムに与えた非負整数を要素に持つリスト(リストの個数も任意に与える)の総和を1にしたい Pythonにて,randintを用いて,ランダムに非負整数を,任意の数作成し,リストに格納した後,そのリストの総和を1にするような関数を作成しています. 任意個のランダム非負整数をリストとして作成することはrandintにより実現できました. 作成したリストの総和を1にするため,現在は,リストの総和で全要素を割っています(以降,この操作を正規化と呼びます). 理論的にはこの方法でリストの総和は1になりますが,実際にプログラムにてこれを実装すると,計算精度の問題か,正規化後のリストの総和をとると1とわずかに離れます. 作りたい関数は,リストの総和を厳密に1にしたいです. どのような操作を行えばいいでしょうか. **[追記 5/26]** ご解答有難うございます. 有理数表現というものを調べてみました. 最初の投稿の内容が足りていなくて,申し訳ないのですが,リストの総和を厳密に1にした後,作られたそれぞれの分数(小数)を用いて,計算を行いたいです. 素人質問で申し訳ないのですが,その場合は,どうしてもどこかで丸め誤差が発生してしまうと言う認識で間違いないでしょうか?
回答: fractions をつかってみては? * ``` $ python3 >>> from fractions import Fraction >>> list = [1/3, 2/3] >>> print(list[0]) 0.3333333333333333 >>> print(list[0] + list[1]) 1.0 >>> list = [Fraction(1,3), Fraction(2,3)] >>> print(list[0]) 1/3 >>> print(list[0] + list[1]) 1 ```