Pythonの基本的な入力、出力、および文字列の書式設定

Pythonの基本的な入力、出力、および文字列の書式設定

有用であるために、プログラムは通常、ユーザーから入力データを取得し、結果データをユーザーに表示することにより、外部と通信する必要があります。 このチュートリアルでは、Pythonの入出力について紹介します。

入力は、キーボードを介してユーザーから直接送られるか、ファイルやデータベースなどの外部ソースから送られます。 出力は、コンソールまたはIDEに直接表示するか、グラフィカルユーザーインターフェイス(GUI)を介して画面に表示するか、外部ソースに再度表示できます。

この入門シリーズのhttps://realpython.com/python-for-loop/[前のチュートリアル]では、次のことを行います。

  • プログラミング言語が明確な反復を実装するために使用するいくつかの異なるパラダイムの比較を見た

  • Pythonでの明確な反復の基礎を形成する2つの概念であるイテラブルとイテレータについて学びました

  • Pythonのforループについて学ぶためにすべてを結び付けた

このチュートリアルの終わりまでに、次の方法を理解できます。

  • 組み込み関数 + input()+ を使用して、キーボードからユーザー入力を取得します

  • 組み込み関数 + print()+ を使用してコンソールに出力を表示する

  • string modulo operator で文字列データをフォーマットします

苦労することなく、飛び込みましょう!

*無料ボーナス:*リンク:[Pythonチートシートを入手するにはここをクリック]して、データ型、辞書、リスト、Python関数の操作など、Python 3の基本を学びます。

キーボードからの入力の読み取り

プログラムは、通常、キーボードからの入力によって、ユーザーからデータを取得する必要があります。 Pythonでこれを達成する最も簡単な方法は、 `+ input()+`を使用することです。

+ input([<プロンプト>])+

_ キーボードから入力行を読み取ります。 _

`+ input()+`はプログラムの実行を一時停止し、ユーザーがキーボードからの入力行を入力できるようにします。 ユーザーが[.keys]#Enter#キーを押すと、入力されたすべての文字が読み取られ、文字列として返されます。

>>>

>>> s = input()
foo bar baz
>>> s
'foo bar baz'

ユーザーが[.keys]#Enter#キーを押したときに生成される改行は、戻り文字列の一部として含まれないことに注意してください。

オプションの引数 `+ <prompt> `を含めると、 ` input()+`は入力の読み取りを一時停止する前にユーザーにプロンプ​​トとして表示します:

>>>

>>> name = input('What is your name? ')
What is your name? Winston Smith
>>> name
'Winston Smith'

+ input()+`は常に文字列を返します。 数値型が必要な場合は、組み込み関数 `+ int()++ float()+、または `+ complex()+`を使用して、文字列を適切な型に変換する必要があります。

>>>

 1 >>> n = input('Enter a number: ')
 2 Enter a number: 50
 3 >>> print(n + 100)
 4 Traceback (most recent call last):
 5   File "<stdin>", line 1, in <module>
 6 TypeError: must be str, not int
 7
 8 >>> n = int(input('Enter a number: '))
 9 Enter a number: 50
10 >>> print(n + 100)
11 150

上記の例では、3行目の式「+ n + 100+」は無効です。これは、「+ n 」が文字列で、「 100+」が整数であるためです。 8行目は `+ n `を整数に変換し、10行目の ` print()+`ステートメントは成功します。

  • Pythonバージョン注:* Python 2.xコードを使用している場合は、Pythonバージョン2と3の間で入力関数のわずかな違いにぶつかることがあります。

Python 2の `+ raw_input()`はキーボードから入力を読み取り、それを返します。 Python 2の ` raw_input()`は、上記のPython 3の ` input()+`と同じように動作します。

しかし、Python 2には `+ input()`という関数もあります。 Python 2では、 ` input()+`はキーボードから入力を読み取り、_parsesしてPython式_として評価し、結果の値を返します。

Python 3は、Python 2の `+ input()`が行うことを正確に行う単一の関数を提供しません。 この効果は、式 ` eval(input())+`を使用してPython 3で模倣できます。 ただし、ユーザーが任意の潜在的に悪意のあるコードを実行できるため、これはセキュリティリスクと見なされます。

+ eval()+`およびhttps://en.wikipedia.org/wikiの詳細については、https://docs.python.org/3/library/functions.html#eval [Pythonドキュメント]を参照してください。/Eval [Wikipedia `+ eval + page]で潜在的なセキュリティリスクについて説明しています。

コンソールへの出力の書き込み

ユーザーからデータを取得することに加えて、プログラムは通常、ユーザーにデータを提示する必要があります。 Pythonでコンソールにプログラムデータを表示するには、 `+ print()+`を使用します。

未フォーマットのコンソール出力

オブジェクトをコンソールに表示するには、それらをコンマで区切られた引数のリストとして `+ print()+`に渡します。

+ print(<obj>、…​、<obj>)+

_ 各 `+ <obj> +`の文字列表現をコンソールに表示します。 _

デフォルトでは、 `+ print()+`は各オブジェクトを単一のスペースで区切り、出力の最後に改行を追加します:

>>>

>>> fname = 'Winston'
>>> lname = 'Smith'

>>> print('Name:', fname, lname)
Name: Winston Smith

任意のタイプのオブジェクトを `+ print()`の引数として指定できます。 オブジェクトが文字列ではない場合、 ` print()+`はそれを表示する適切な文字列表現に変換します:

>>>

>>> a = [1, 2, 3]
>>> type(a)
<class 'list'>

>>> b = -12
>>> type(b)
<class 'int'>

>>> d = {'foo': 1, 'bar': 2}
>>> type(d)
<class 'dict'>

>>> type(len)
<class 'builtin_function_or_method'>

>>> print(a, b, d, len)
[1, 2, 3] -12 {'foo': 1, 'bar': 2} <built-in function len>

ご覧のとおり、リスト、辞書、関数などの複雑なタイプでも、 `+ print()+`を使用してコンソールに表示できます。

`+ print()+`のキーワード引数

`+ print()+`は、出力の形式を控えめに制御するいくつかの追加の引数を取ります。 これらはそれぞれ keyword argument と呼ばれる特別なタイプの引数です。 この入門シリーズのチュートリアルには、関数とパラメーターの受け渡しに関するチュートリアルが含まれているため、キーワード引数について詳しく知ることができます。

今のところ、次のことを知っておく必要があります。

  • キーワード引数の形式は + <keyword> = <value> +`です。 *+ print()+`に渡されるキーワード引数は、表示するオブジェクトのリストの後、最後になければなりません。

次のセクションでは、これらのキーワード引数が `+ print()+`によって生成されるコンソール出力にどのように影響するかを確認します。

`+ sep = +`キーワード引数

キーワード引数 `+ sep = <str> `を追加すると、デフォルトの単一スペースではなく、文字列 ` <str> +`でオブジェクトが区切られます。

>>>

>>> print('foo', 42, 'bar')
foo 42 bar

>>> print('foo', 42, 'bar', sep='/')
foo/42/bar

>>> print('foo', 42, 'bar', sep='...')
foo...42...bar

>>> d = {'foo': 1, 'bar': 2, 'baz': 3}
>>> for k, v in d.items():
...     print(k, v, sep=' -> ')
...
foo -> 1
bar -> 2
baz -> 3

オブジェクトの間にスペースを入れずにオブジェクトをまとめてスキッシュするには、 `+ sep = '' +`を指定します。

>>>

>>> print('foo', 42, 'bar', sep='')
foo42bar

`+ sep = +`キーワードを使用して、セパレータとして任意の文字列を指定できます。

`+ end = +`キーワード引数

キーワード引数 `+ end = <str> `を使用すると、デフォルトの改行ではなく、 ` <str> +`で出力が終了します。

>>>

>>> if True:
...     print('foo', end='/')
...     print(42, end='/')
...     print('bar')
...
foo/42/bar

たとえば、ループで値を表示する場合、値を個別の行ではなく1行で表示するには、「+ end = +」を使用します。

>>>

>>> for n in range(10):
...     print(n)
...
0
1
2
3
4
5
6
7
8
9

>>> for n in range(10):
...     print(n, end=(' ' if n < 9 else '\n'))
...
0 1 2 3 4 5 6 7 8 9

`+ end = +`キーワードを使用して、出力ターミネータとして任意の文字列を指定できます。

出力ストリームのキーワード引数

`+ print()+`は、出力ストリームの処理に影響を与える2つの追加のキーワード引数を受け入れます。

* + file = <stream> +:*デフォルトでは、 `+ print()`は出力を ` sys.stdout `と呼ばれるデフォルトのストリームに送信します。これは通常コンソールと同等です。 ` file = <stream> `引数により、出力は代わりに ` <stream> +`で指定された代替ストリームに送信されます。
  1. * + flush = True +:*通常、 `+ print()`は出力をバッファリングし、断続的に出力ストリームにのみ書き込みます。 ` flush = True `は、出力ストリームが各 ` print()+`で強制的にフラッシュされることを指定します。

これら2つのキーワード引数は、完全を期すためにここに示されています。 この時点で、出力ストリームについてあまり気にする必要はないでしょう。 これらについては、このシリーズのファイルI/Oに関するチュートリアルで後ほど説明します。

フォーマットされた文字列出力

`+ print()+`は、せいぜい初歩的なコンソール出力のフォーマットをサポートします。 印刷されたオブジェクトを分離する方法を選択でき、印刷された行の最後に何を配置するかを指定できます。 それについてです。

多くの場合、表示するデータの外観をより正確に制御する必要があります。 Pythonは、出力文字列データをフォーマットするいくつかの方法を提供します。 このセクションでは、古いものの1つである string modulo operator について学びます。

Pythonの最近のバージョンでは、おそらく文字列モジュロ演算子よりも優れた文字列データをフォーマットする新しい方法があります: string + .format()+ method 、および f-strings 。 これらについては、このシリーズの次のチュートリアルで学習します。 これらの記事もご覧ください。

他のフォーマットオプションも使用できますが、文字列モジュロ演算子はまだ広く使用されています。 既存のPythonコードを読んでいる場合は、文字列モジュロ演算子に遭遇する可能性が高いので、慣れるのが有益です。

注意: https://en.wikipedia.org/wiki/Printf_format_string [+ printf()+] C、Perl、またはJavaの関数ファミリに精通している場合は、これらはPythonには存在しません。 ただし、 `+ printf()`と文字列モジュロ演算子の間にはかなりの類似性があるため、 ` printf()+`に精通している場合、以下の多くが馴染みがあると感じるでしょう。

一方、 `+ printf()+`に精通していなくても心配する必要はありません! 以下はまだ理にかなっているはずです。

文字列モジュロ演算子

modulo operator)は通常、数字で使用されます。この場合、除算の剰余を計算します。

>>>

>>> 11 % 3
2

文字列オペランドを使用する場合、モジュロ演算子の機能はまったく異なります:文字列の書式設定。 (2つの操作は、互いにあまり似ていません。 同じ記号で表されるため、同じ名前を共有します: 。)

文字列モジュロ演算子の構文は次のとおりです。

<format_string> % <values>

`%`演算子の左側にある `+ <format_string> `は、1つ以上の変換指定子を含む文字列です。 右側の ` <values> `は、変換指定子の代わりに ` <format_string> +`に挿入されます。 結果のフォーマットされた文字列は、式の値です。

例を始めましょう。 文字列モジュロ演算子を使用してフォーマットされた文字列を表示する `+ print()+`ステートメントは次のとおりです。

>>>

>>> print('%d %s cost $%.2f' % (6, 'bananas', 1.74))
6 bananas cost $1.74

文字列モジュロ演算自体を表すことに加えて、「」% ' 文字は、フォーマット文字列の変換指定子も示します。この場合、「+'%d '+'%s ' 、および + '%。2f' +

出力では、値のタプルからの各アイテムが文字列値に変換され、対応する変換指定子の代わりにフォーマット文字列に挿入されます。

  • タプルの最初の項目は `+ 6 `です。これは、フォーマット文字列の ` '%d' +`を置き換える数値です。

  • 次の項目は、文字列値「+ 'bananas' 」で、「」%s '+ `を置き換えます。 *最後の項目は、浮動小数点値「1.74」で、「」%。2f ' `を置き換えます。

結果の文字列は、次の図に示すように、「+ 6 bananas cost $ 1.74 +」です。

挿入する値が複数ある場合は、上記のようにそれらをタプルで囲む必要があります。 値が1つしかない場合は、それだけで表示されます。

>>>

>>> print('Hello, my name is %s.' % 'Graham')
Hello, my name is Graham.

また、文字列のモジュロ演算は印刷専用ではありません。 値をフォーマットして、別の文字列変数に割り当てることもできます。

>>>

>>> s = 'Hello, my name is %s.' % 'Graham'
>>> s
'Hello, my name is Graham.'

(繰り返しますが、 `+ printf()`に関連する関数に精通している場合、これは ` sprintf()+`を連想させます。 そうでない場合は、汗をかかないでください。)

変換指定子

変換指定子は `+ <format_string> +`に表示され、値が挿入されるときにフォーマットされる方法を決定します。

変換指定子は「%」文字で始まり、次のコンポーネントで構成されます。

_ +%[<flags>] [<width>] [。<precision>] <type> + _

`%`と `+ <type> +`が必要です。 角括弧で示される残りのコンポーネントはオプションです。

次の表は、変換指定子の各コンポーネントの機能をまとめたものです。

Component Meaning

%

Introduces the conversion specifier

<flags>

Indicates one or more flags that exert finer control over formatting

<width>

Specifies the minimum width of the formatted result

.<precision>

Determines the length and precision of floating point or string output

<type>

Indicates the type of conversion to be performed

これらがどのように機能するかについての詳細を読んでください。

変換タイプ

変換タイプ `+ <type> +`は、変換指定子の最後のコンポーネントです。

_ +%[<flags>] [<width>] [。<precision>] +* + <type> + * _

対応する値がフォーマット文字列に挿入される前に受ける変換のタイプを決定します。 可能な変換タイプをリストする表は次のとおりです。

<type> Conversion Type

d, i, u

Decimal integer

x, X

Hexadecimal integer

o

Octal integer

f, F

Floating point

e, E

Exponential

g, G

Floating point or Exponential

c

Single character

s, r, a

String

%

Single '%' character

これらのコンバージョンタイプの使用方法については、次のセクションで説明します。

整数変換タイプ

「+ d 」、「 i 」、「 u 」、「 x 」、「 X 」、および「 o +」の変換タイプは整数値に対応しています。

「+ d 」、「 i 」、および「 u +」は機能的に同等です。 これらはすべて、対応する引数を10進整数の文字列表現に変換します。

>>>

>>> '%d, %i, %u' % (42, 42, 42)
'42, 42, 42'

>>> '%d, %i, %u' % (-42, -42, -42)
'-42, -42, -42'

値は正または負のいずれかです。 負の場合、結果の値は「」-「」文字で始まります。

`+ x `と ` X `は16進整数値の文字列表現に変換し、 ` o +`は8進整数値の文字列表現に変換します。

>>>

>>> '%x, %X' % (252, 252)
'fc, FC'
>>> '%o' % 16
'20'

`+ x `は小文字の出力を生成し、 ` X `は大文字を生成します。 (大文字の「 'O' +」は有効な変換タイプではありません。)

*コンバージョンフラグ*を使用して、結果のフォーマットをさらに制御できます。これについては、今後のセクションで詳しく説明します。

浮動小数点変換タイプ

変換タイプ `+ f `および ` F `は浮動小数点数の文字列表現に変換されますが、 ` e `および ` E +`は指数(科学)表記を表す文字列を生成します。

>>>

>>> '%f, %F' % (3.14159, 3.14)
'3.141590, 3.140000'
>>> '%e, %E' % (1000.0, 1000.0)
'1.000000e+03, 1.000000E+03'

`+ e `は小文字の出力を生成し、 ` E +`は大文字を生成します。

_ _ ===== ディープダイブ: + inf +`および `+ NaN +

状況によっては、浮動小数点演算の結果、値が本質的に無限になる可能性があります。 Pythonでのそのような数値の文字列表現は `+ 'inf' +`です。

また、浮動小数点演算によって数値として表現できない値が生成される場合があります。 Pythonはこれを文字列 `+ 'NaN' +`で表します。

これらの値が文字列モジュロ演算子で変換されると、変換タイプの文字が結果の出力の大文字小文字を制御します。 `+ f `と ` e `は小文字を出力し、 ` F `と ` E +`は大文字を出力します:

>>>

>>> x = float('NaN')
>>> '%f, %e, %F, %E' % (x, x, x, x)
'nan, nan, NAN, NAN'
>>> y = float('Inf')
>>> '%f, %e, %F, %E' % (y, y, y, y)
'inf, inf, INF, INF'

これは、変換タイプ「+ f 」と「 F +」の唯一の違いです。 _ _

+ g +`および `+ G +`変換タイプは、指数の大きさと `+。<precision> +`に指定された値に応じて、浮動小数点出力または指数出力を選択します。 (以下を参照してください。)指数が `+ -4 +`未満または `+。<precision> +`以上の場合、出力は `+ e +/`+ E `と同じです。 それ以外の場合は、「 f 」/「 F +」と同じです。

>>>

>>> '%g' % 3.14
'3.14'

>>> '%g' % 0.00000003
'3e-08'
>>> '%G' % 0.00000003
'3E-08'

基本的に、これらの変換タイプは「合理的な」選択を行うものと考えることができます。 問題の値が適切な場合は浮動小数点出力を生成し、それ以外の場合は指数形式を生成します。

他の浮動小数点変換タイプと同様に、「+ g 」は小文字の出力を生成し、「 G +」は大文字を生成します。

文字変換タイプ

`+ c +`は単一の文字を挿入します。 対応する値は、整数または1文字の文字列です。

>>>

>>> '%c' % 97
'a'

>>> '[%c]' % 'y'
'[y]'

`+ c +`変換タイプはhttps://realpython.com/python-encodings-guide[Unicode]文字への変換もサポートしています:

>>>

>>> '%c' % 8721
'∑'

+ s ++ r +、および + a +`は、組み込み関数https://docs.python.org/3/library/stdtypes.html#str[+str()を使用して文字列出力を生成します`]、https://docs.python.org/3/library/functions.html#repr [` + repr() ]、およびhttps://docs.python.org/3/library/functions.html #ascii [+ ascii()+`]、それぞれ:

>>>

>>> '%s' % 'foo'
'foo'
>>> '%r' % 'foo'
"'foo'"
>>> '%a' % 'foo'
"'foo'"

すぐにわかるように、文字列出力の位置調整とパディングは、 `+ <width> `および `。<precision> +`指定子で制御できます。

`+ '%' +`文字の挿入

リテラルの `+ '%' `文字を出力に挿入するには、フォーマット文字列に2つの連続した `%`文字を指定します。 1つ目は(通常どおり)変換指定子を導入し、2つ目は変換タイプが `%`であることを指定します。これにより、出力に単一の ` '%' +`文字が含まれます。

この例では、「%d %% +」は10進整数変換タイプとそれに続くリテラル「」% '+ `文字を意味します。

>>>

>>> 'Get %d%% off on %s today only!' % (30, 'bananas')
'Get 30% off on bananas today only!'

「%」変換タイプは、文字列モジュロ演算子の右側にある「+ <values> +」のいずれも消費しないことに注意してください。

幅と精度の指定子

`+ <width> `と `。<precision> +`は変換指定子の中央にあります:

_ +%[<flags>] + * + [<width>] [。<precision>] + * + <type> + _

フォーマットされた値が占める水平スペースの量を決定します。

`+ <width> +`指定子

`+ <width> `は出力フィールドの最小幅を指定します。 出力が ` <width> `より短い場合、デフォルトでは ` <width> +`文字幅のフィールドで右揃えされ、左側にASCIIスペース文字が埋め込まれます。

>>>

>>> '%5s' % 'foo'
'  foo'

>>> '%3d' % 4
'  4'

(ジャスティフィケーションおよびパディング文字は変更できます。 以下の*変換フラグ*を参照してください。)

出力の長さが `+ <width> `より大きい場合、 ` <width> +`は効果がありません:

>>>

>>> '%2d' % 1234, '%d' % 1234
('1234', '1234')
>>> '%2s' % 'foobar', '%s' % 'foobar'
('foobar', 'foobar')

これらの例はそれぞれ、「+ 2+」のフィールド幅を指定しています。 ただし、フォーマットされる値は3文字以上なので、結果は `+ <width> +`が指定されていない場合と同じです。

`+。<precision> +`指定子

`+。<精度> +`は、浮動小数点、指数、および文字列の変換タイプに影響します。

「+ f 」、「 F 」、「 e 」、および「 E 」タイプの場合、「。<精度> +」は小数点以下の桁数を決定します。

>>>

>>> '%.2f' % 123.456789
'123.46'

>>> '%.2e' % 123.456789
'1.23e+02'

`+ g `および ` G `タイプの場合、 `。<precision> +`は小数点の前後の有効桁数の合計を決定します。

>>>

>>> '%.2g' % 123.456789
'1.2e+02'

+ s ++ r +、および `+ a `タイプでフォーマットされた文字列値は、 `。<precision> +`で指定された長さに切り捨てられます。

>>>

>>> '%.4s' % 'foobar'
'foob'

`+ <width> `と `。<precision> +`が一緒に使用されるのは非常に一般的です:

>>>

>>> '%8.2f' % 123.45678
'  123.46'

>>> '%8.3s' % 'foobar'
'     foo'

+ <width> +`または `+。<precision> +`のいずれかをアスタリスク文字( `+ * +)として指定できます。この場合、使用される値は `の次の項目から取得されます+ <値> + `タプル:

>>>

>>> '%*d' % (5, 123)
'  123'

`+ <width> +`値が定数として指定されている場合、これはそれほど必要ありません。 上記の例とこれとの間に機能的な違いはありません。

>>>

>>> '%5d' % 123
'  123'

しかし、変数で `+ <width> `と `。<precision> +`を指定することもできます:

>>>

>>> for i in range(3):
...     w = int(input('Enter width: '))
...     print('[%*s]' % (w, 'foo'))
...
Enter width: 2
[foo]
Enter width: 4
[ foo]
Enter width: 8
[     foo]

これにより、実行時に幅または精度を決定することができ、実行ごとに幅が変わる可能性があります。

変換フラグ

オプションの変換 `+ <flags> `は、最初の `%+`文字の直後に指定されます:

_ * + [<flags>] + * + [<width>] [。<precision>] <type> + _

これらにより、特定の変換タイプの表示をより細かく制御できます。 `+ <flags> +`には、次の表に示す文字を含めることができます。

Character Controls

#

Display of base or decimal point for integer and floating point values

0

Padding of values that are shorter than the specified field width

-

Justification of values that are shorter than the specified field width

+ + ' ' (space)

Display of leading sign for numeric values

以下のセクションでは、変換フラグがどのように機能するかについて詳しく説明します。

`#`フラグ

8進数および16進数の変換タイプの場合、「#」フラグを使用すると、フォーマットされた出力に基本情報が含まれます。 `+ o `変換タイプの場合、このフラグは先頭に ` '0o' `を追加します。 ` x `および ` X `変換タイプの場合、先頭に ` '0x' `または ` '0X' +`が追加されます。

>>>

>>> '%#o' % 16
'0o20'

>>> '%#x' % 16, '%#X' % 16
('0x10', '0X10')

10進変換タイプ + d ++ i +、および `+ u `の場合、 `#+`フラグは無視されます。

浮動小数点値の場合、「#」フラグを使用すると、出力に常に小数点が含まれるようになります。 通常、浮動小数点値の後に小数点がない場合、浮動小数点値には小数点が含まれません。 このフラグは小数点を強制的に含めます:

>>>

>>> '%.0f' % 123
'123'
>>> '%#.0f' % 123
'123.'

>>> '%.0e' % 123
'1e+02'
>>> '%#.0e' % 123
'1.e+02'

これは、示されているように、指数表記で表示される値に対しても機能します。

`+ 0 +`フラグ

書式設定された数値が指定されたフィールド幅より短い場合、デフォルトの動作では、フィールドにASCIIスペース文字が埋め込まれます。 `+ 0 `フラグは、代わりに ` '0' +`文字でパディングします:

>>>

>>> '%05d' % 123
'00123'

>>> '%08.2f' % 1.2
'00001.20'

+ 0 +`フラグはすべての数値変換タイプで使用できます: `+ d ++ i ++ u ++ x ++ X ++ o ++ f + `、 + F + + e + + E + + g + 、および + G + `。

`-`フラグ

フォーマットされた値が指定されたフィールド幅より短い場合、通常はフィールド内で右寄せされます。 `-`フラグは、代わりに指定されたフィールドで値を左揃えにします:

>>>

>>> '%-5d' % 123
'123  '

>>> '%-8.2f' % 123.3
'123.30  '

>>> '%-*s' % (10, 'foo')
'foo       '

すべての数値変換タイプだけでなく、文字列変換タイプ + s ++ a +、および `+ r `で `-`フラグを使用できます。 数値型の場合、「 0+」と「-」の両方が存在する場合、「+ 0+」は無視されます。

`+`および `+ '' +`フラグ

デフォルトでは、正の数値には先行符号文字がありません。 `+`フラグは、数値出力の左側に `+ '+' +`文字を追加します。

>>>

>>> '%+d' % 3
'+3'
>>> '%+5d' % 3
'   +3'

+ '' +(スペース文字)フラグにより​​、正の数値の前にスペース文字が付きます。

>>>

>>> '% d' % 3
' 3'

これらのフラグは、常に先頭に「」-「」文字が付いている負の数値には影響しません。

辞書マッピングによる値の指定

フォーマット文字列に挿入される `+ <values> `は、タプルではなく辞書として指定できます。 その場合、各変換指定子には、 ` '%' +`文字の直後の括弧内に辞書キーの1つが含まれている必要があります。

例を示しましょう。

>>>

>>> '%d %s cost $%.2f' % (6, 'bananas', 1.74)
'6 bananas cost $1.74'

>>> d = {'quantity': 6, 'item': 'bananas', 'price': 1.74}
>>> '%(quantity)d %(item)s cost $%(price).2f' % d
'6 bananas cost $1.74'

この手法を使用すると、挿入された値を任意の順序で指定できます。

>>>

>>> d = {'quantity': 6, 'item': 'bananas', 'price': 1.74}

>>> '%(quantity)d %(item)s cost $%(price).2f' % d
'6 bananas cost $1.74'

>>> 'It will cost you $%(price).2f for %(item)s, if you buy %(quantity)d' % d
'It will cost you $1.74 for bananas, if you buy 6'

上記のすべての変換指定子アイテム( + <flags> ++ <width> ++。<precision> +、および + <type> +)は同じ意味を持ちます。

>>>

>>> 'Quantity: %(quantity)03d' % d
'Quantity: 006'

>>> 'Item:     %(item).5s' % d
'Item:     banan'

*注意:*辞書マッピングで `+ <values> `を指定する場合、 ` *`を使用して ` <width> `または `。<precision> +`を指定することはできません。

Pythonの入出力:結論

このチュートリアルでは、Pythonの入力と出力、およびPythonプログラムがユーザーと通信する方法について学習しました。* + input()+ でユーザーからデータを取得し、 *+ print()+ で結果をコンソールに表示できるようになります。

また、 string modulo operator でフォーマットすることにより、ユーザーに表示されるデータをより見やすくする方法を学びました。

文字列モジュロ演算子と同様に汎用性が高いので、Pythonはさらに優れた文字列データをフォーマットする2つの新しい方法を提供します: string + .format()+ method および formatted string literal 。 次のチュートリアルに進んで、それらについて学んでください!