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

ライブラリ分数モジュールを使用して、Python で分数型をサポートできるようにします。

Aug 12, 2017 pm 02:24 PM
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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

vscodeはMacに使用できますか vscodeはMacに使用できますか Apr 15, 2025 pm 07:36 PM

VSコードはMacで利用できます。強力な拡張機能、GIT統合、ターミナル、デバッガーがあり、豊富なセットアップオプションも提供しています。ただし、特に大規模なプロジェクトまたは非常に専門的な開発の場合、コードと機能的な制限がある場合があります。

See all articles