2

フォーラムを少し検索しましたが、まだ非常に混乱しています。誰かがこれをより深く説明する記事に私を導くことができれば、私はそれを大いに感謝します. 私はPythonコースの紹介を受けており、問題の解決策を見つけましたが、実際にそれがどのように\なぜ機能するのか知りたいです. 割り当ては、プレーヤーの打率を返し、MLB が表示するように表示することです。例えば、8打数4安打なら0.500。これが私が見つけたコードです。

from __future__ import division, print_function

def print_batting_average(at_bats, hits):
    average_str = "%.3f" % (hits / at_bats)
    if average_str.startswith("0"):
        average_str = average_str[1:]
    print("Batting average is", average_str)

print_batting_average(4, 2)

% はモジュラスであり、何かの残りを与えることを知っています。それがコードの他の部分にどのように適合するかわかりません。たとえば、「%.3f」。また、 % がさまざまな方法で使用されているのを見てきましたが、適切な説明を見つけたかっただけです。うまくいけば、私はこれを主張することで炎上しません。助けてくれてありがとう。

4

5 に答える 5

4

について質問しているコンテキストでは、%出力のフォーマットを支援するために使用され、mod操作とは何の関係もありません。

たとえば、%3dは、%.2f出力をフォーマットするすべての異なる方法です。最初の例は、整数を表示し、そのために 3 つのスペースを予約することを意味します。2 つ目は、小数点以下 2 桁の float 型の値を表示することを意味します。

さまざまなフォーマット タイプとオプションの詳細については、 http://docs.python.org/library/stdtypes.html#string-formatting-operationsを参照String Formatting Operationsして ください。

次のようなものに出くわすことがあります。

number_of_Widgets = 5
cost = 66.8788
print 'Total cost for %d widgets is $ %5.2f.' % (number_of_Widgets, cost)

収量:

Total cost for 5 widgets is $ 66.88.

' ' で囲まれた部分は、行末に向かって提供される実際の変数値のプレースホルダーとしてフォーマット指示を使用します。値の前には % が付き、() には値を提供する変数が含まれます。

出力の書式設定に書式文字列が役立つ理由を示す簡単な例を次に示します。

ここでは、数値用に追加のスペースを予約しておらず、10 に達すると出力がシフトすることがわかります。

In [9]: for i in xrange(5,15):
   ...:     print '%d is the number' % i
   ...:
5 is the number
6 is the number
7 is the number
8 is the number
9 is the number
10 is the number
11 is the number
12 is the number
13 is the number
14 is the number

ここでは、数値を 2 つのスペースでフォーマットし、1 桁の数値の先頭に空白スペースを取得します。

In [10]: for i in xrange(5,15):
   ....:     print '%2d is the number' % i
   ....:
 5 is the number
 6 is the number
 7 is the number
 8 is the number
 9 is the number
10 is the number
11 is the number
12 is the number
13 is the number
14 is the number
于 2012-04-26T17:03:48.957 に答える
3

算術式の % はモジュラスを意味します。

"%.3f" のようなリテラル文字列内の % は、単なる通常の文字です。モジュラスとは関係ありません。

ただし、% 記号を含む文字列は、% 演算子と組み合わせて使用​​すると特別です。この場合、左側の値は文字列であるため、モジュラスの意味は適用されません。代わりに、フォーマットを取得します。文字列内の % シーケンスは、タプル内の値に置き換えられるプレースホルダーであり、文字列内の各「%」の後に来るものに従ってフォーマットされます。たとえば、「%.3f」は「小数点以下 3 桁の浮動小数点値」を意味します。

フォーマット仕様の詳細については、http://docs.python.org/library/stdtypes.html#string-formattingを参照してください。printfC の関数ファミリーとほぼ同じです。

于 2012-04-26T17:05:06.257 に答える
1

の:

"%.3f" % (hits / at_bats)

パーセント記号は 2 つの異なる方法で使用されますが、どちらもモジュラス演算子とは関係ありません。

具体的には:

  • 2 番目%文字列書式演算子です。
  • 最初の%ものは最初のものと組み合わせて使用​​され、使用される実際の形式を定義します。
于 2012-04-26T17:04:54.847 に答える
0

これをチェックしてくださいhttp://docs.python.org/release/2.6/library/string.html

「フォーマット仕様」は、フォーマット文字列に含まれる置換フィールド内で使用され、個々の値の表示方法を定義します (フォーマット文字列の構文を参照してください)。これらは、組み込みの format() 関数に直接渡すこともできます。フォーマット可能な各タイプは、フォーマット仕様がどのように解釈されるかを定義できます。

Python のモジュラス関数はmod(p,q)

于 2012-04-26T17:04:04.073 に答える
0

文字列の%書式設定に使用される は、モジュラス演算子と同じではありません。引用符で囲まれていることに注意してください。

%文字列の書式設定は、多くのプログラミング言語の標準であり慣習です - http://en.wikipedia.org/wiki/Printf_format_string

于 2012-04-26T17:04:54.240 に答える