文法・制御構文
基本的には、python も C 言語も、制御構文の種類 ( if 文や for, while など)は 変わりません。
大きな違いは、以下のポイントでしょうか。
- C 言語では、main 関数を定義して、そこから処理が開始したが、python では実行対象ファイルを順番に実行していく。
- C 言語が、ブロック構造を
{}
で記述していたのに対し、python では indent を用いて構造を表現している。逆に、文法構造を制限しているので、文の終わりにセミコロン(;
)を書く必要がなかったり、式が来ると分かっている場所も()
などを表記する必要がない。 - C が変数に型を明記するのに対して、python では、格納された値(データ)の方に型情報があって、実行時に確認しながら動作します。
lang_test/basic_test.py のプログラムを見ながら、少し説明していきます。
if 文
if a > b:
print(a, '>', b)
elif a < b:
print(a, '<', b)
else:
print(a, '=', b)
a, b に対して、大小に応じて表記を変えるプログラムです。indent に意味があるので、間違えないように。
対応する C 言語はこんなかんじですよね。
if (a > b) {
printf("%d > %d\n", a, b);
} else if (a < b) {
printf("%d < %d\n", a, b);
} else {
printf("%d = %d\n", a, b);
}
for 文
python の for 文は、与えられた要素群を順番に処理していく時に使います。
result = 1
for i in range(b):
print('Loop:', a, '^', i, '=', result)
result *= a
range(b)
は { 0, 1, ..., b-1}
という数字群を意味するので、
上記 for 文は i を 0, 1, ..., b-1
を割り当てながら、ブロック内を処理することになります。このプログラム自体は、a
の b
乗を loop で計算しながら、途中結果を表示しています。
ちなみに、a**b
でも a
の b
乗を計算してくれたりもします。
while 文
条件に応じてループをまわすのは while 文です。
result = 1
while result*a <= 1000:
result *= a
print(f'result: {result}') # 1000以下の a**i なる最大値
このプログラムでは、 a**i を計算しながら 1000 以下の最大値を求めています。
input
入力を1行受け取り、その文字列を返すのは、input()
です。
整数に変換するには、int(文字列)
みたいに変換しなくてはいけません。
n = int(input())
で、1行に2数ある場合は、空白で分割して2つの文字列にしてから(input().split()
)、それぞれ int に変換し(map(int, words)
)、二つの変数に格納するみたいになります。
a, b = map(int, input().split())
当然複数の文に分けて書いてくれても大丈夫です。
練習問題
整数 n を受け取り
1*1 + 2*2 + ... + n*n
の値をループ(for もしくは while文)で計算して出力するプログラムを作成しましょう。