検索
ホームページバックエンド開発Python チュートリアルライブラリ分数モジュールを使用して、Python で分数型をサポートできるようにします。

最近仕事で分数処理に遭遇し、関連情報を検索したところ、Fraction クラスを使用して実装できることがわかりました。そこで、次の記事では主に、Python で分数型をサポートするための標準ライブラリの分数モジュールの使用に関する関連情報を紹介します。この記事ではコードの紹介が非常に詳細に行われているので、必要な場合は参考にしてください。

はじめに

分数を扱う必要はあまりないかもしれませんが、その場合は、Python の Fraction クラスが大いに役立ちます。この記事では、Python で分数型をサポートできるようにするための標準ライブラリの分数モジュールの使用法について詳しく説明し、参考と学習のために共有します。以下では多くを説明しません。詳細な紹介を見てみましょう。 :

fractionsモジュール

fractionsモジュールは、分数型のサポートを提供します。

Fraction クラス

このクラスは、Fraction モジュールのコアであり、numbers.Rational クラスを継承し、このクラスのすべてのメソッドを実装します。 numbers.Rational类并且实现了该类所有的方法。

构造函数并不复杂:


class fractions.Fraction(numerator=0, denominator=1) 
class fractions.Fraction(int|float|str|Decimal|Fraction)

可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeropisionError。

而如果只提供一个参数,则可以用上述五种类型进行初始化。当使用字符串进行初始化时,fractions模块使用内置的正则表达式进行匹配。而使用浮点数或者Decimal进行初始化时,fractions模块会在内部调用as_integer_ratio()

下面的代码示例来自官方文档,展示了各种实例化Fraction的方式:


>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)

限制分母

fractions.Fraction.limit_denominator(max_denominator=1000000)

有时候将浮点数或者Decimal作为Fraction实例的初始化数据可能会遇到舍入误差的问题,如上面调用Fraction(1.1)时不返回Fraction(11, 10)的例子。这时Fraction类提供了一个实例方法limit_denominator()用于减小这种误差。这个方法本来是为了通过限制分母来得到一个近似值,但是在出现舍入误差的时候反倒使得结果更加精确了,如下面的例子:


>>> from fractions import Fraction
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)

将Fraction用于算术运算、关系运算和其他多种操作

上面提到,Fraction类继承了numbers.Rational类并且实现了该类所有的方法。所以Fraction类事实上通过重载很多特殊函数,使得其实例可以直接用于多种算术运算。

不仅支持算术运算,Fraction类同时也支持关系运算、pickle模块、copy模块和哈希值的计算。


>>> from fractions import Fraction
>>> x = Fraction(1, 2)
>>> y = Fraction(1, 3)
>>> x + y
Fraction(5, 6)
>>> x - y
Fraction(1, 6)
>>> x * y
Fraction(1, 6)
>>> x / y
Fraction(3, 2)
>>> x ** 2
Fraction(1, 4)
>>> -x
Fraction(-1, 2)
>>> abs(x)
Fraction(1, 2)
>>> round(x)
0
>>> import math
>>> math.floor(x)
0
>>> math.ceil(x)
1
>>> x == y
False
>>> x > y
True

其他函数


fractions.Fraction.from_float(flt) 
fractions.Fraction.from_decimal(dec)

在Python3.2之前,Fraction类不支持通过将浮点数和Decimal传入构造方法来获得实例。而是提供了上面两个类方法,通过调用类方法的方式来产生实例,目前版本(Python 3.6.1)这两个类方法仍然存在。


fractions.gcd(a, b)

用于计算最大公约数。这个函数在Python3.5之后就废弃了,官方建议使用math.gcd()

コンストラクターは複雑ではありません:


rrreeeFraction クラスをインスタンス化するためにコンストラクターに分子と分母の両方を指定できますが、両方とも次の型である必要があります。 int または numbers.Rational を同時に指定しないと、型エラーがスローされます。分母が 0 の場合、初期化中に例外 ZeropisionError がスローされます。 そして、パラメータが 1 つだけ指定されている場合は、上記の 5 つのタイプで初期化できます。文字列で初期化される場合、分数モジュールは組み込みの正規表現マッチングを使用します。浮動小数点数または Decimal で初期化する場合、分数モジュールは内部で as_integer_ratio() を呼び出します。

次のコード例は公式ドキュメントからのもので、分数をインスタンス化するさまざまな方法を示しています: 🎜🎜


🎜rrreee🎜🎜🎜制限分母🎜🎜🎜🎜fractions。 Fraction.limit_denominator(max_denominator=1000000)🎜🎜Fraction インスタンスの初期化データとして浮動小数点数または Decimal を使用すると、Fraction(1.1) の呼び出しなど、丸め誤差の問題が発生する場合があります code> が使用されている場合は、Fraction(11, 10) を返します。現時点では、このエラーを軽減するために、Fraction クラスはインスタンス メソッド limit_denominator() を提供します。このメソッドは元々、分母を制限して近似値を取得することを目的としていましたが、丸め誤差が発生すると、次の例に示すように、実際には結果がより正確になります: 🎜


🎜rrreee 🎜 will Fraction は算術演算、関係演算、その他のさまざまな演算に使用されます。前述したように、Fraction クラスは numbers.Rational クラスを継承し、このクラスのすべてのメソッドを実装します。したがって、Fraction クラスは実際に多くの特殊関数をオーバーロードし、そのインスタンスをさまざまな算術演算に直接使用できるようにします。 🎜🎜Fraction クラスは算術演算をサポートするだけでなく、リレーショナル演算、pickle モジュール、コピー モジュール、ハッシュ値の計算もサポートします。 🎜


🎜rrreee🎜🎜🎜その他の関数🎜🎜🎜


🎜rrreee🎜 Python3.2 より前、Fraction クラスは受け渡しをサポートしていませんでした。浮動小数点数と Decimal がコンストラクターに渡されて、インスタンスが取得されます。代わりに、上記の 2 つのクラス メソッドは、クラス メソッドを呼び出すことでインスタンスを生成するために提供されており、現在のバージョン (Python 3.6.1) にも存在します。 🎜


🎜rrreee🎜 は最大公約数を計算するために使用されます。この関数は Python 3.5 以降では非推奨となり、公式では math.gcd() を使用することが推奨されています。 🎜🎜🎜🎜まとめ🎜🎜🎜🎜 まとめるものが無い…Pythonは便利すぎるとしか言いようがない…ちなみにこのブログ、実は私がずっと掘っていた穴です。以前ソースコードの一部を理解していなかったので、まだ投稿していません。笑、次の標準ライブラリ学習シリーズは引き続き更新されます。 🎜

以上がライブラリ分数モジュールを使用して、Python で分数型をサポートできるようにします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

アレイの均質な性質はパフォーマンスにどのように影響しますか?アレイの均質な性質はパフォーマンスにどのように影響しますか?Apr 25, 2025 am 12:13 AM

パフォーマンスに対する配列の均一性の影響は二重です。1)均一性により、コンパイラはメモリアクセスを最適化し、パフォーマンスを改善できます。 2)しかし、タイプの多様性を制限し、それが非効率につながる可能性があります。要するに、適切なデータ構造を選択することが重要です。

実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?Apr 25, 2025 am 12:11 AM

craftexecutablepythonscripts、次のようになります

numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?Apr 24, 2025 pm 03:53 PM

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Apr 24, 2025 pm 03:49 PM

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

CTypesモジュールは、Pythonの配列にどのように関連していますか?CTypesモジュールは、Pythonの配列にどのように関連していますか?Apr 24, 2025 pm 03:45 PM

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境