Python/数値入力と文字入力と出力表示

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

入力[編集]

文字列の入力[編集]

文字列の入力には、組込み関数input()を使います。

x = input("文字を入力してみよう。")
print(2 * x)
文字を入力してみよう。
a
aa
たとえば a と入力すると、 aaが出力されます。
abcと入力すると、abcabc が出力されます。

なお、数字(12など)を入力しても、文字として認識されます。 たとえば上のプログラムの実行で1を入力すると、出力は11となります(文字列の乗算演算子は文字列をオペランドの個数分繰返した文字列を返します)。

数値の入力と計算[編集]

では、数値を入力させて、計算をさせたい場合、どうすればい良いのでしょうか?

文字列から整数への変換[編集]
s = input("数値を入力してください。2倍にします。")
n = int(s)
print(2 * n)
上記のコードを実行すると、数字の入力を求められますので、たとえば4と入力してエンターキーを押すと、8が表示されます。自動的に2倍にした数字(4と入力た場合は8)が表示されます。
int()により、入力された文字列を数値(整数)に変換します。intは、整数(integer)の略です。
上のプログラムで求められる入力に、2.7のような小数点の数を入れるとValueError例外があがります。
ValueError: invalid literal for int() with base 10: '2.7'
文字列から浮動小数点数への変換[編集]

文字列を浮動小数点数の数値を得たい場合は、組込み関数float()を使います。

s = input("数値を入力してください。2倍にします。")
n = float(s)
print(2 * n)
上のプログラムに、2.7を入力すると、5.4が表示されます。
上のプログラムで求められる入力に、2.7aのような小数点の数を入れるとValueError例外があがります。
ValueError: could not convert string to float: '2.7a'
文字列入力と例外処理
input関数で得た文字列は(人間が自由に入力したものなので)、int関数やfloat関数が想定する形式ではない場合があり、そのときはValueError例外があがります。

この他、input関数がEOF(End of File; ファイルの終端)に達するとEOFError例外があがます。 例外を捕捉しないと、プログラムは異常終了してしまいます。

例外を捕捉し再入力を求める例
while True:
    try:
        s = input("数値を入力してください:")
        n = int(s)
        print(f"{n} の二倍は {2 * n} です。")
        break
    except EOFError as e:
        print(e)
        break
    except ValueError as e:
        print(e)


変数と文字列を同時に表示したい場合[編集]

s = input("文字列を入力してみてください。")
print(s, "が入力されました。")
print関数の表示で、変数(上例の場合は、sが変数)と文字を一緒に表示したい場合は、たとえば上記のコードのように、「,」(カンマ)で区切って、一緒に表示することができます。

さきほどの数値の入力と計算プログラムを、この方法で、書き換えましょう。

s = input("数字を整数で入力してみよう。(入力値をiと表示します。) 2倍にするよ。")
i = int(s)
print(f"{i=}, {2 * i=}")

これを実行して、たとえば「5」と入力してエンターキーを押すと、出力として i=5, 2 * i=10 と表示されます。

フォーマット済み文字列リテラル[編集]

Python には文字列の中に式を埋込み文字列化する「フォーマット済み文字列リテラル(Formatted string literals; F文字列とも)」があります[1]

 print(f"文字列の中に{  }を埋め込むことができる")

のように、fを引用符の前につける事で利用できます。 引用符は二重引用符でも一重引用符でも、どちらでも構いません(ただし、引用符の開始と終始における引用符の種類は一致している必要があります。)。 JavaScriptなどの「テンプレート・リテラル」に相当する機能です[2]

コード例
x = 123

print(f"数は{x+100} です")
実行結果
数は223 です

F文字列は Pyhon3.6 から導入されました。Python2.x系では利用できません[3]

'{' と '}' 自身の文字列中での使用[編集]

場合によってはテンプレートリテラルを使いつつも '{' や '}' 自身を文字列中で使用したい場合があります。 その場合は、'{' は '{{'、'}' は '}}' と二重にします。

コード例
x = 123

print(f"文字列{{x}} には {x} が代入されます")
実行結果
文字列{x} には 123 が代入されます

{式=} :式と値の双方の文字列化[編集]

式の後に等号'='を付けることで式のテキストと評価後の値の両方を文字列化することができます。

コード例
x = 123

print(f"式と値の表示:{x=}")
print(f"式と値の表示:{[x * 2 for x in range(5)]=}")
print(f'''\
+++
{x=}
***
{[x * 2 for x in range(5)]=}
''')
実行結果
式と値の表示:x=123
式と値の表示:[x * 2 for x in range(5)]=[0, 2, 4, 6, 8]
+++
x=123
***
[x * 2 for x in range(5)]=[0, 2, 4, 6, 8]
から あるいは、""" から """ はヒアドキュメントで、複数行に渡る文字列を表現できます。
ヒアドキュメントに f あるいは F を前置すると、Fヒアドキュメントになり、式の埋め込みができます。
開始を、 '''\ の様に \ を後置すると最初の改行を抑止できます。

Pythonの文字列フーマッティングの歴史[編集]

文字列の%演算子[編集]

最初に、文字列の % 演算子がありました。

x = 333

print('数は %s です' % x )
実行結果
数は 333 です

文字列のformatメソッド[編集]

次に、文字列のformatメソッドができました[4]

x = 200

print('数は{y} です'.format(y=x) )
実行結果
数は200 です

脚註[編集]

  1. ^ Lexical analysis # Formatted string literals” (2021年11月29日). 2021年11月29日閲覧。
  2. ^ JavaScriptのテンプレート・リテラルはヒアドキュメントの機能も持っています。
  3. ^ Python2.x系のサポートは2021/01/01に終了しました。 ⇒ PEP 373 -- Python 2.7 Release Schedule, PEP 404 -- Python 2.8 Un-release Schedule
  4. ^ PEP 3101 -- Advanced String Formatting