C言語を学んだあとにPythonを書き始めると、文字や数値を表示しようとして printf を使い、エラーになって戸惑うことがあります。これはPythonで画面表示ができないわけではなく、C言語とPythonでは出力に使う関数や書き方が異なるためです。
C言語では printf() を使うのが基本ですが、Pythonでは通常 print() を使います。また、C言語の %d や %f に近い書式指定をしたい場合は、Pythonではf文字列(f-string)などを使うと分かりやすく書けます。
ここではC言語の printf に慣れている人向けに、Pythonではどのように書き換えればよいのかを、整数、小数、文字列、桁数指定、改行なし出力などの具体例とともに解説します。
- PythonにはC言語と同じprintf関数はない
- printfをそのまま書くとエラーになる理由
- C言語の%dはPythonではどう書く?
- Pythonではf文字列を使うとprintfに近いことができる
- C言語とPythonの出力方法を比較
- 小数点以下の桁数を指定する方法
- 複数の変数を表示する場合
- Pythonでも%を使った書式指定はできる
- str.formatを使う方法もある
- Pythonのprintは自動的に改行する
- Pythonで改行したくない場合はendを指定する
- 複数の値の間に入る文字はsepで変更できる
- 整数の桁をそろえる方法
- パーセント表示もf文字列で簡単にできる
- 入力についてもC言語とPythonでは書き方が違う
- C言語のコードをPythonへそのまま翻訳しないことが大切
- よくある間違い1|Printと大文字で書く
- よくある間違い2|Python 2とPython 3の情報を混同する
- よくある間違い3|%dをprintへそのまま入れる
- 文字列と数値を+でつなぐとエラーになることがある
- C言語経験者向けprintfからprintへの置き換え早見表
- Pythonではprintfを作る必要はある?
- エラーが出たときはメッセージを確認する
- まとめ|Pythonではprintfではなくprintとf文字列を使う
PythonにはC言語と同じprintf関数はない
C言語では、標準出力へ文字列を表示するときに printf() を利用します。例えば次のようなコードです。
#include <stdio.h>
int main(void)
{
printf("Hello\n");
return 0;
}
一方、Pythonでは基本的に print() を使います。同じ内容なら次のように書けます。
print("Hello")
C言語のprintfをPythonでそのまま使うのではなく、まずprintfをprintへ置き換えると考えるのが基本です。
printfをそのまま書くとエラーになる理由
Pythonで次のように書くと、通常は printf という名前が定義されていないためエラーになります。
printf("Hello")
典型的には、NameError: name 'printf' is not defined のようなエラーになります。Pythonは printf という名前の関数を標準で用意していないからです。
これは文法ミスというより、「その名前の関数がPythonには存在しない」という問題です。次のように変更します。
print("Hello")
C言語の%dはPythonではどう書く?
C言語では整数を表示するとき、%d を使うことがよくあります。
int n = 10;
printf("%d\n", n);
Pythonでは、単純に値を表示するだけなら print() に変数を渡せば十分です。
n = 10
print(n)
「答えは10です」のように文字列と組み合わせる場合も、Pythonでは複数の書き方があります。
n = 10
print("答えは", n, "です")
ただし、現在のPythonでは後述するf文字列を使うと、より読みやすく書けることが多いです。
Pythonではf文字列を使うとprintfに近いことができる
Pythonで変数を文字列へ埋め込む場合、特に分かりやすいのがf文字列です。文字列の先頭に f を付け、表示したい値を {} の中へ書きます。
n = 10
print(f"答えは{n}です")
実行結果は次のようになります。
答えは10です
C言語の次のコードとほぼ同じ目的です。
printf("答えは%dです\n", n);
C言語からPythonへ移る場合は、printfの書式指定をそのまま移植するのではなく、f文字列で変数を埋め込むと考えると理解しやすくなります。
C言語とPythonの出力方法を比較
| やりたいこと | C言語 | Python |
|---|---|---|
| 文字を表示 | printf("Hello\n"); |
print("Hello") |
| 整数を表示 | printf("%d\n", n); |
print(n) |
| 文字列へ整数を埋め込む | printf("n=%d\n", n); |
print(f"n={n}") |
| 小数を表示 | printf("%f\n", x); |
print(x) |
| 小数点以下2桁 | printf("%.2f\n", x); |
print(f"{x:.2f}") |
このように、目的は同じでも文法が違います。C言語の構文をそのままPythonへコピーするのではなく、「このコードは何をしたいのか」を考えてPythonの書き方へ変換することが重要です。
小数点以下の桁数を指定する方法
C言語では %.2f のように書き、小数点以下の表示桁数を指定できます。
double x = 3.141592;
printf("%.2f\n", x);
この場合、表示結果は 3.14 です。Pythonではf文字列を使って次のように書けます。
x = 3.141592
print(f"{x:.2f}")
.2f は、小数点以下2桁の固定小数点形式で表示する指定です。3桁なら .3f とします。
print(f"{x:.3f}")
この場合は 3.142 と表示されます。
複数の変数を表示する場合
C言語では複数の値を一つの printf で表示できます。
int a = 10;
int b = 20;
printf("a=%d b=%d\n", a, b);
Pythonのf文字列では次のようになります。
a = 10
b = 20
print(f"a={a} b={b}")
値を増やしても、{変数名} を必要な場所へ置けばよいため、どの変数がどこへ表示されるか分かりやすい書き方です。
Pythonでも%を使った書式指定はできる
Pythonには、C言語の printf に似た % を使う古くからの文字列書式もあります。
n = 10
print("n=%d" % n)
小数なら次のように書けます。
x = 3.141592
print("%.2f" % x)
そのため、C言語の経験がある人には理解しやすい書き方です。ただし、新しくPythonを書く場合はf文字列のほうが読みやすいことが多いため、まずf文字列を覚えるとよいでしょう。
str.formatを使う方法もある
Pythonでは str.format() を利用した書式指定もできます。
name = "Taro"
age = 20
print("名前は{}、年齢は{}歳です".format(name, age))
これは次のf文字列と同じような結果になります。
print(f"名前は{name}、年齢は{age}歳です")
既存のPythonコードを読むと format() を使った書き方に出会うことがあるため、存在だけ知っておくとよいでしょう。
Pythonのprintは自動的に改行する
C言語の printf では、改行したければ通常 \n を自分で書きます。
printf("Hello\n");
Pythonの print() は、通常は最後に自動的に改行します。
print("Hello")
print("World")
結果は次のようになります。
Hello
World
そのため、Pythonでは毎回 \n を書く必要はありません。
Pythonで改行したくない場合はendを指定する
C言語では \n を書かなければ、そのまま次の出力を続けられます。
printf("Hello ");
printf("World");
Pythonでは print() が標準で改行するため、改行したくない場合は end を指定します。
print("Hello ", end="")
print("World")
結果は次のようになります。
Hello World
end="" は、「printの最後に何も付けない」という意味です。
複数の値の間に入る文字はsepで変更できる
Pythonの print() へ複数の値を渡すと、通常はスペースで区切って表示されます。
a = 10
b = 20
print(a, b)
結果は 10 20 です。区切り文字を変更したい場合は sep を使います。
print(a, b, sep=",")
この場合は 10,20 と表示されます。
CSVのような形式を簡単に表示したい場面では便利ですが、本格的にCSVファイルを扱う場合はPython標準の csv モジュールなどを利用するほうが安全です。
整数の桁をそろえる方法
C言語では %5d のような指定によって表示幅を設定できます。Pythonのf文字列でも同様の指定が可能です。
n = 42
print(f"{n:5d}")
この場合、5文字分の幅を使って整数が右寄せされます。
ゼロ埋めしたい場合は次のように書けます。
n = 42
print(f"{n:05d}")
結果は 00042 です。連番やIDなどを一定の桁数で表示したい場合に利用できます。
パーセント表示もf文字列で簡単にできる
割合をパーセントとして表示する場合もf文字列が便利です。
rate = 0.125
print(f"{rate:.1%}")
結果は 12.5% になります。
単純に値の後ろへ % を付けるだけではなく、0.125を12.5%へ変換する処理も含まれます。数値の書式指定を覚えると、C言語の printf と同じように細かな表示制御ができます。
入力についてもC言語とPythonでは書き方が違う
C言語をPythonへ書き換えるときは、出力だけでなく入力方法にも違いがあります。C言語では scanf が代表的です。
int n;
scanf("%d", &n);
Pythonでは基本的に input() を使います。ただし input() の結果は文字列なので、整数として利用したい場合は int() で変換します。
n = int(input())
入力した値をそのまま表示するなら次のようになります。
n = int(input())
print(n)
C言語のコードをPythonへそのまま翻訳しないことが大切
C言語とPythonには似た機能が多数ありますが、文法や設計思想は同じではありません。例えばC言語では変数の型を宣言しますが、Pythonでは通常 int n; のような宣言は行いません。
C言語なら次のように書く処理があります。
int a = 10;
int b = 20;
int sum = a + b;
printf("%d\n", sum);
Pythonでは次のように簡潔に書けます。
a = 10
b = 20
sum_value = a + b
print(sum_value)
セミコロンも通常は不要です。「C言語の命令を一語ずつPythonへ置き換える」のではなく、処理の目的をPythonの書き方で表現することがポイントです。
よくある間違い1|Printと大文字で書く
Pythonでは大文字と小文字が区別されます。そのため次のコードは print と同じ意味にはなりません。
Print("Hello")
正しくは小文字です。
print("Hello")
PRINT や Print も別の名前として扱われるため、初心者がエラーになったときはスペルと大文字・小文字を確認しましょう。
よくある間違い2|Python 2とPython 3の情報を混同する
古いWebページや教材を見ると、Pythonの出力が次のように書かれている場合があります。
print "Hello"
これは主に古いPython 2系の書き方です。現在一般的に利用されているPython 3では、print() を関数として使います。
print("Hello")
検索で見つけたコードを利用するときは、Python 2向けなのかPython 3向けなのかを確認することも重要です。
よくある間違い3|%dをprintへそのまま入れる
C言語の感覚で次のように書くと、期待した結果になりません。
n = 10
print("%d", n)
これは %d を自動的にnへ置き換える書き方ではなく、%d という文字列とnを別々の値として表示します。
f文字列を使うなら次のようにします。
print(f"{n}")
またはPythonの古い%書式を使うなら次のようにします。
print("%d" % n)
C言語の printf("%d", n) とPythonの print() では、引数の解釈方法が違うことを覚えておきましょう。
文字列と数値を+でつなぐとエラーになることがある
Pythonで次のように書くとエラーになります。
age = 20
print("年齢は" + age)
"年齢は" は文字列、age は整数なので、そのまま + で連結できないためです。
文字列へ変換するなら次のように書けます。
print("年齢は" + str(age))
ただし、f文字列を使えばより簡単です。
print(f"年齢は{age}")
C言語経験者向けprintfからprintへの置き換え早見表
| C言語 | Pythonでの書き方の例 |
|---|---|
printf("Hello\n"); |
print("Hello") |
printf("%d\n", n); |
print(n) |
printf("n=%d\n", n); |
print(f"n={n}") |
printf("%.2f\n", x); |
print(f"{x:.2f}") |
printf("%05d\n", n); |
print(f"{n:05d}") |
printf("Hello"); |
print("Hello", end="") |
最初はこの対応関係を見ながら書き換えれば十分です。慣れてくると、C言語を意識せずPythonらしい書き方ができるようになります。
Pythonではprintfを作る必要はある?
技術的には自分で printf という名前の関数を作ることはできますが、通常のPythonプログラムでそのようにする必要はありません。
例えば独自関数として printf を定義すること自体は可能ですが、他のPython利用者から見ると「なぜ標準のprintを使わないのか」が分かりにくくなることがあります。
学習段階では特に、Python標準の print() とf文字列を覚えたほうが、その後ほかのPythonコードも読みやすくなります。
エラーが出たときはメッセージを確認する
「printfができない」と感じた場合でも、実際には別の部分でエラーが発生していることがあります。Pythonではエラーメッセージの最後の数行を見ると、原因の手掛かりを得られます。
NameError なら存在しない名前を使っていないか、SyntaxError なら括弧や引用符などの文法に問題がないか、TypeError なら異なる型を不適切に組み合わせていないかを確認します。
質問サイトなどで相談するときも、「printfができません」だけではなく、実際に書いたコードと表示されたエラー全文を示すと、原因を特定しやすくなります。
まとめ|Pythonではprintfではなくprintとf文字列を使う
C言語で使う printf() は、Pythonでは標準の出力関数としてそのまま利用できません。Pythonで文字や数値を表示するときは基本的に print() を使います。
C言語の printf("%d", n) に相当する処理なら、単純な表示は print(n)、文章へ値を埋め込む場合は print(f"n={n}") のようなf文字列が分かりやすい書き方です。小数点以下2桁なら print(f"{x:.2f}") のように書式も指定できます。
C言語からPythonへ移るときは「printfをどう動かすか」ではなく、「printfでしていた処理をPythonではprintとf文字列でどう表すか」と考えることがポイントです。
また、Pythonの print() は自動で改行する、型宣言やセミコロンが通常不要など、C言語とはさまざまな違いがあります。C言語のコードをそのまま移植するのではなく、処理の意味を理解してPythonの文法へ置き換えていくと、よりスムーズに学習できます。


コメント