mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
39 lines
22 KiB
HTML
39 lines
22 KiB
HTML
<div class="body" role="main"><div class="section" id="module-fractions"><h1><span class="yiyi-st" id="yiyi-10">9.5. <a class="reference internal" href="#module-fractions" title="fractions: Rational numbers."><code class="xref py py-mod docutils literal"><span class="pre">fractions</span></code></a> - 有理数</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/fractions.py">Lib/fractions.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-fractions" title="fractions: Rational numbers."><code class="xref py py-mod docutils literal"><span class="pre">fractions</span></code></a>模块提供对有理数运算的支持。</span></p><p><span class="yiyi-st" id="yiyi-13">Fraction实例可以从一对整数,从另一个有理数,或从字符串构造。</span></p><dl class="class"><dt id="fractions.Fraction"><span class="yiyi-st" id="yiyi-14"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>numerator=0</em>, <em>denominator=1</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-15"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>other_fraction</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-16"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>float</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-17"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>decimal</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-18"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">第一个版本要求<em>分子</em>和<em>分母</em>是<a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>的实例,并返回一个新的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a> <code class="docutils literal"><span class="pre">numerator/denominator</span></code>。</span><span class="yiyi-st" id="yiyi-20">如果<em>分母</em>为<code class="xref py py-const docutils literal"><span class="pre">0</span></code>,则引发<a class="reference internal" href="exceptions.html#ZeroDivisionError" title="ZeroDivisionError"><code class="xref py py-exc docutils literal"><span class="pre">ZeroDivisionError</span></code></a>。</span><span class="yiyi-st" id="yiyi-21">第二个版本要求<em>other_fraction</em>是<a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>的实例,并返回具有相同值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-22">接下来的两个版本接受<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>或<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例,并返回具有完全相同值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-23">注意,由于二进制浮点的常见问题(见<a class="reference internal" href="../tutorial/floatingpoint.html#tut-fp-issues"><span>Floating Point Arithmetic: Issues and Limitations</span></a>),<code class="docutils literal"><span class="pre">Fraction(1.1)</span></code>的参数不完全等于11 / 10,因此<code class="docutils literal"><span class="pre">Fraction(1.1)</span></code>不<em>不</em>返回<code class="docutils literal"><span class="pre">分数(11,</span> <span class="pre">10)</span> / t7>。</code></span><span class="yiyi-st" id="yiyi-24">(但请参阅下面的<a class="reference internal" href="#fractions.Fraction.limit_denominator" title="fractions.Fraction.limit_denominator"><code class="xref py py-meth docutils literal"><span class="pre">limit_denominator()</span></code></a>方法的文档。)</span><span class="yiyi-st" id="yiyi-25">最后一个版本的构造函数需要一个字符串或unicode实例。</span><span class="yiyi-st" id="yiyi-26">本实例的通常形式是:</span></p><pre><code class="language-python"><span></span><span class="p">[</span><span class="n">sign</span><span class="p">]</span> <span class="n">numerator</span> <span class="p">[</span><span class="s1">'/'</span> <span class="n">denominator</span><span class="p">]</span>
|
||
</code></pre><p><span class="yiyi-st" id="yiyi-27">其中可选的<code class="docutils literal"><span class="pre">sign</span></code>可以是'+'或' - '和<code class="docutils literal"><span class="pre">numerator</span></code>和<code class="docutils literal"><span class="pre">denominator</span></code>(如果存在)是十进制数字串。</span><span class="yiyi-st" id="yiyi-28">此外,<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>构造函数接受的任何表示有限值的字符串也会被<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>构造函数接受。</span><span class="yiyi-st" id="yiyi-29">在任一形式中,输入字符串也可以具有前导和/或尾部空格。</span><span class="yiyi-st" id="yiyi-30">这里有些例子:</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">fractions</span> <span class="k">import</span> <span class="n">Fraction</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">)</span>
|
||
<span class="go">Fraction(-8, 5)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="mi">123</span><span class="p">)</span>
|
||
<span class="go">Fraction(123, 1)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">()</span>
|
||
<span class="go">Fraction(0, 1)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'3/7'</span><span class="p">)</span>
|
||
<span class="go">Fraction(3, 7)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">' -3/7 '</span><span class="p">)</span>
|
||
<span class="go">Fraction(-3, 7)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'1.414213 </span><span class="se">\t\n</span><span class="s1">'</span><span class="p">)</span>
|
||
<span class="go">Fraction(1414213, 1000000)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'-.125'</span><span class="p">)</span>
|
||
<span class="go">Fraction(-1, 8)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'7e-6'</span><span class="p">)</span>
|
||
<span class="go">Fraction(7, 1000000)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">2.25</span><span class="p">)</span>
|
||
<span class="go">Fraction(9, 4)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span>
|
||
<span class="go">Fraction(2476979795053773, 2251799813685248)</span>
|
||
<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">decimal</span> <span class="k">import</span> <span class="n">Decimal</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.1'</span><span class="p">))</span>
|
||
<span class="go">Fraction(11, 10)</span>
|
||
</code></pre><p><span class="yiyi-st" id="yiyi-31"><a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>类继承自抽象基类<a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>,并实现该类的所有方法和操作。</span><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例是可哈希的,应被视为不可变。</span><span class="yiyi-st" id="yiyi-33">此外,<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>具有以下属性和方法:</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-34"><span class="versionmodified">在版本3.2中更改:</span> <a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>构造函数现在接受<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>和<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例。</span></p></div><dl class="attribute"><dt id="fractions.Fraction.numerator"><span class="yiyi-st" id="yiyi-35"><code class="descname">numerator</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-36">最低分数的分数的分子。</span></p></dd></dl><dl class="attribute"><dt id="fractions.Fraction.denominator"><span class="yiyi-st" id="yiyi-37"><code class="descname">denominator</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-38">最低分数的分数的分母。</span></p></dd></dl><dl class="method"><dt id="fractions.Fraction.from_float"><span class="yiyi-st" id="yiyi-39"><code class="descname">from_float</code><span class="sig-paren">(</span><em>flt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-40">此类方法构造表示<em>flt</em>的精确值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>,其必须是<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>。</span><span class="yiyi-st" id="yiyi-41">注意<code class="docutils literal"><span class="pre">Fraction.from_float(0.3)</span></code>与<code class="docutils literal"><span class="pre">分数(3,</span> <span class="pre">10)</span></code>不同。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-42">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-43">从Python 3.2起,您还可以直接从<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>构建<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span></p></div></dd></dl><dl class="method"><dt id="fractions.Fraction.from_decimal"><span class="yiyi-st" id="yiyi-44"><code class="descname">from_decimal</code><span class="sig-paren">(</span><em>dec</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-45">此类方法构造表示<em>dec</em>的确切值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>,其必须是<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-46">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-47">从Python 3.2起,您还可以直接从<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例构建<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span></p></div></dd></dl><dl class="method"><dt id="fractions.Fraction.limit_denominator"><span class="yiyi-st" id="yiyi-48"><code class="descname">limit_denominator</code><span class="sig-paren">(</span><em>max_denominator=1000000</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">查找并返回最接近的具有分母max_denominator的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>到<code class="docutils literal"><span class="pre">self</span></code>。</span><span class="yiyi-st" id="yiyi-50">此方法对于找到给定浮点数的有理近似很有用:</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">fractions</span> <span class="k">import</span> <span class="n">Fraction</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'3.1415926535897932'</span><span class="p">)</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>
|
||
<span class="go">Fraction(355, 113)</span>
|
||
</code></pre><p><span class="yiyi-st" id="yiyi-51">或用于恢复表示为float的有理数:</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">pi</span><span class="p">,</span> <span class="n">cos</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="n">cos</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">3</span><span class="p">))</span>
|
||
<span class="go">Fraction(4503599627370497, 9007199254740992)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="n">cos</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">3</span><span class="p">))</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">()</span>
|
||
<span class="go">Fraction(1, 2)</span>
|
||
<span class="gp">>>> </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">()</span>
|
||
<span class="go">Fraction(11, 10)</span>
|
||
</code></pre></dd></dl><dl class="method"><dt id="fractions.Fraction.__floor__"><span class="yiyi-st" id="yiyi-52"><code class="descname">__floor__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">返回最大的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a> <code class="docutils literal"><span class="pre"> <span class="pre">self</span></span></code>。</span><span class="yiyi-st" id="yiyi-54">此方法也可以通过<a class="reference internal" href="math.html#math.floor" title="math.floor"><code class="xref py py-func docutils literal"><span class="pre">math.floor()</span></code></a>函数访问:</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">floor</span>
|
||
<span class="gp">>>> </span><span class="n">floor</span><span class="p">(</span><span class="n">Fraction</span><span class="p">(</span><span class="mi">355</span><span class="p">,</span> <span class="mi">113</span><span class="p">))</span>
|
||
<span class="go">3</span>
|
||
</code></pre></dd></dl><dl class="method"><dt id="fractions.Fraction.__ceil__"><span class="yiyi-st" id="yiyi-55"><code class="descname">__ceil__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">返回最小的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a> <code class="docutils literal"><span class="pre">> =</span> <span class="pre">self</span></code>。</span><span class="yiyi-st" id="yiyi-57">此方法也可以通过<a class="reference internal" href="math.html#math.ceil" title="math.ceil"><code class="xref py py-func docutils literal"><span class="pre">math.ceil()</span></code></a>函数访问。</span></p></dd></dl><dl class="method"><dt id="fractions.Fraction.__round__"><span class="yiyi-st" id="yiyi-58"><code class="descname">__round__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-59"><code class="descname">__round__</code><span class="sig-paren">(</span><em>ndigits</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">第一个版本将最近的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a>返回到<code class="docutils literal"><span class="pre">self</span></code>,将一半舍入到偶数。</span><span class="yiyi-st" id="yiyi-61">第二个版本将<code class="docutils literal"><span class="pre">self</span></code>舍入到最接近的<code class="docutils literal"><span class="pre">分数(1,</span> <span class="pre">10 ** ndigits)</span></code>如果<code class="docutils literal"><span class="pre">ndigits</span></code>为负数),再次向偶数舍入一半。</span><span class="yiyi-st" id="yiyi-62">此方法也可以通过<a class="reference internal" href="functions.html#round" title="round"><code class="xref py py-func docutils literal"><span class="pre">round()</span></code></a>函数访问。</span></p></dd></dl></dd></dl><dl class="function"><dt id="fractions.gcd"><span class="yiyi-st" id="yiyi-63"><code class="descclassname">fractions.</code><code class="descname">gcd</code><span class="sig-paren">(</span><em>a</em>, <em>b</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-64">返回整数<em>a</em>和<em>b</em>的最大公约数。</span><span class="yiyi-st" id="yiyi-65">If either <em>a</em> or <em>b</em> is nonzero, then the absolute value of <code class="docutils literal"><span class="pre">gcd(a,</span> <span class="pre">b)</span></code> is the largest integer that divides both <em>a</em> and <em>b</em>. <code class="docutils literal"><span class="pre">gcd(a,b)</span></code> has the same sign as <em>b</em> if <em>b</em> is nonzero; otherwise it takes the sign of <em>a</em>. <code class="docutils literal"><span class="pre">gcd(0,</span> <span class="pre">0)</span></code> returns <code class="docutils literal"><span class="pre">0</span></code>.</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-66"><span class="versionmodified">自版本3.5后已弃用:</span>改用<a class="reference internal" href="math.html#math.gcd" title="math.gcd"><code class="xref py py-func docutils literal"><span class="pre">math.gcd()</span></code></a>。</span></p></div></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-67">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-68">模块<a class="reference internal" href="numbers.html#module-numbers" title="numbers: Numeric abstract base classes (Complex, Real, Integral, etc.)."><code class="xref py py-mod docutils literal"><span class="pre">numbers</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-69">构成数字塔的抽象基类。</span></dd></dl></div></div></div> |