目次
はじめに
今までC言語をメインで扱ってきましたが、新たにPythonも学び始めました。
実際に触れてみるとプログラムの記述や考え方が大きく異なります。
本記事では「数字あてゲーム」を題材にして、C言語とPythonの違いを比較していきます。
C経験者にも、これからCを触る人にもイメージをつかんでもらえればと思います。
Pythonで数字あてゲームを作ってみた
https://www.python.jp/train/index.html
上記のサイトにてPythonの基礎を紹介しています。
こちらのサイトの内容を参考に以下のような数字あてゲームを作成しました。
ランダムで生成された数字をヒントをもとに特定していくシンプルな作りです。
正解するもしくはヒントを見ずに終了処理を行うまで繰り返します。
import random
print("数字当てゲームを始めます(1~10)")
rand_num = random.randint(1,10)
while True:
choice_num = int(input("数字を入力してください:"))
if rand_num == choice_num:
print("正解!")
break
else:
hint = input("外れ! ヒントを見ますか?(y/n)")
if hint != 'y':
print("終了します")
break
else:
if rand_num > choice_num:
print(f"正解の数字は{choice_num}より大きいです")
elif rand_num < choice_num:
print(f"正解の数字は{choice_num}より小さいです")
C言語で作成した場合のコード
C言語で作成した場合は以下のようなコードになります。
処理の流れは同じでも記述方法には大きく差があります。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int rand_num, choice_num;
char hint;
printf("数字当てゲームを始めます(1~10)\n");
srand(time(NULL)); // 乱数の初期化
rand_num = rand() % 10 + 1; // 1〜10の乱数
while (1) {
printf("数字を入力してください:");
scanf("%d", &choice_num);
if (rand_num == choice_num) {
printf("正解!\n");
break;
} else {
printf("外れ! ヒントを見ますか?(y/n):");
scanf(" %c", &hint);
if (hint != 'y') {
printf("終了します\n");
break;
} else {
if (rand_num > choice_num) {
printf("正解の数字は %d より大きいです\n", choice_num);
} else {
printf("正解の数字は %d より小さいです\n", choice_num);
}
}
}
}
return 0;
}
次の項目ではPythonとCの違いを所感も含めて紹介します。
PythonとC言語の違い
1. 型宣言の有無
C言語の場合は変数を利用する際に必ず変数の"型"を明示的に宣言しなくてはいけません。
int rand_num, choice_num; // 整数格納用変数
char hint; // 文字格納用変数(1文字分)
Pythonの場合は型の宣言は必要なく変数名のみ記述することで宣言可能です。
rand_num = random.randint(1,10)
Pythonは動的型付けのため、格納される値に応じて自動で型を決めてくれます。
Cを利用している中で初歩的ではありますが型誤りはコンパイルエラーにもなりうる要因になります。
そこを回避できるだけども有用だと感じました。
また、本内容とは異なりますが、C言語においては文末にセミコロンが必要ですがPythonは不要です。
これも付け忘れによりコンパイルエラーが発生し文が長くなればなるほど原因箇所の特定が難しくなります。これもありがたいです。
2. メイン関数の有無
C言語はプログラムを起動する際には、まずmain関数から動きます。
この関数がなければコンパイルエラーとなり、当然プログラムも動きません。
Pythonはメイン関数が必ずとも必須ではなくこれだけでも動きます。
print("数字当てゲームを始めます(1~10)")
3. プログラムの実行方法
C言語の場合はプログラムを実行する際に"コンパイル"という操作を行いプログラミング言語のソースコードを機械語に変換し、実行可能形式のファイルを生成することでプログラムを実行します。
先ほどまで記載していたコンパイルエラーというのはこの操作を行った際にコードの内容に不備がある等の理由でエラーを出力し、ファイル生成が行われない状態になります。
Pythonの場合はソースコードを実行時に一行ずつ解釈しながら処理を進める動作のため、コンパイルは必須でなく、不備のあるソースを実行するまでのプログラムは動きます。
C言語においてはコンパイルエラーが発生するとそもそも実行ファイルが生成されないため、どんなに他のプログラムの記述に問題がなくても動作させることはできません。途中まででも動作させられるPythonはエラー要因の特定においてもより優れているなと感じます。
4. 条件文のブロック区切り
それぞれの条件文の記述は以下の通りです。
if rand_num == choice_num:
print("正解!")
break
if (rand_num == choice_num) {
printf("正解!\n");
break;
}
Pythonの場合はif文の後にインデントを入れることで条件を満たした場合のみ処理を行うようになります。
C言語の場合は必ずしもそうとは言えませんが基本的には条件を適用したいコードは{}の範囲内に記述することで実現することができます。
ソースの記述は違いますが、処理の内容は全く一緒です。
終わりに
今回はC言語とPythonの違いというところでどちらでも利用する入出力や条件分岐、繰り返し文といった基本的な部分に注目してみましたが、これだけでもC言語と比較して考慮しなくてはいけない部分の考慮が不要だったり、コードの記述も分かりやすいなと感じました。
また、今回はメモリ管理の部分は触れてませんが、明示的にメモリ確保しなくてはいけないものもPythonの場合は自動で確保してくれるとのことで、オーバーフローの危険性も無くなるのは良いなと思いました。
次回以降は関数の使い方やタプルと呼ばれるPythonで使われる考え方等にも触れていきたいなと思います。
