文法・制御構文

基本的には、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 を割り当てながら、ブロック内を処理することになります。このプログラム自体は、ab 乗を loop で計算しながら、途中結果を表示しています。

ちなみに、a**b でも ab 乗を計算してくれたりもします。

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文)で計算して出力するプログラムを作成しましょう。