Python演習ドリル200 基礎練習11〜20

Pythonプログラムを学び始めた方向けの演習ドリルです。

今回は、基礎練習の11〜20です。

jupyterとjupyter notebook

本演習ではjupyter notebookを使用します。 インストールされているか確認してください。 インストールされていない場合、jupyterjupyter notebookのインストール方法については、レッスン33を参照してください。

演習前の基礎学習

実際にjupyter notebookを使用して演習を行う前に、演習の中で使用するPythonの機能について学習しましょう。

  • 条件分岐(論理演算子)

    複数の条件を組み合わたものを条件とする場合、以下のような論理演算子を使います。

    • and

      条件1 and 条件2で、「条件1かつ条件2」つまり、両方の条件が満たされた時のみ条件が満たされます

    • or

      条件1 or 条件2で、「条件1または条件2」つまり、どちらかの条件を満たされた時、条件が満たされます (両方の条件が満たされていても良い)

    • not

      not 条件1で、条件1が満たされない時、条件が満たされます

    • xor

      条件1 xor 条件2で、「条件1排他的にまたは条件2」つまり、どちらか一方の条件のみ満たされた時に、条件が満たされます (両方の条件が満たされている時や両方とも条件が満たされていないときは、条件は満たされない)

    なお、xyzが全て等しい場合の条件は、論理演算子を使わず、x == y == zのように書くこともできます。

  • 条件演算子

    条件演算子はX if 条件 else Yという1行で、条件が満たされればXの値に、満たされなければYの値になります。 これを使って、条件によって変数に設定する値を変えたり、print関数などの関数の引数の値を変えたりすることができます。

    例えば変数x0以上なら"0以上"、それ以外(0未満)なら"0未満"と表示するprint関数は、条件演算子を使って以下のように記述できます。

    	print("0以上" if x >= 0 else "0未満")
    

    このとき文末のコロン(:)は不要です。

  • ループ(for文)

    以下のように所定の回数ループする場合は、for i in range(n):を使い、forの下にインデントで(字下げして)書かれたプログラム文(ブロック)をn回繰り返し、実行します。

    for i in range(10):
    	print("AAA")		# for文の対象、10回繰り返す
    	print("BBB")		# for文の対象、10回繰り返す
    print("CCC")			# for文の対象でない
    

    なお、変数iには各ループごとに0から1ずつ加算された値がn-1まで入ります。 range(a, b)とすると各ループごとにaから1ずつ加算された値がiに入り、iの値がb以上になったらループを抜けます。 range(a, b, c)とすると各ループごとにaからcずつ加算された値がiに入り、iの値がb以上になったらループを抜けます。

    結果としてrange(a, b)とすると変数iには順にa, a+1, a+2, ..., b-1の値が入り、ループ処理が行われます。(最後の値がbでないことに注意してください)

    変数iの値を使用しない場合はfor _ in range(n):のように変数名を_にして、変数を使用しないようにすることができます。

    cには負の値を入れることもできます。 その場合、変数iには最初にaの値が入り、次にa+c(cが負なのでaより小さい値)が入り、iの値がc以下になったら、ループを終了します。

    結果としてrange(a, b, -1)とすると変数iには順にa, a-1, a-2, ..., b+1の値が入り、ループ処理が行われます。(最後の値がbでないことに注意してください)

  • ループ(while文)

    以下のように、ある条件が満たされている間ループする場合は、while 条件:を使い、whileの下にインデントで(字下げして)書かれたプログラムを条件が満たされるまで繰り返し実行します。

    x = 10
    while x > 0:			# xが0より大きい間繰り返す
    	print("AAA")		# while文の対象
    	x -= 1				# while文の対象、xを1つずつ減らす
    print("BBB")			# while文の対象でない
    

    ループ処理の中で条件が満たされなくならないと無限ループといってループを無限に繰り返し、プログラムが終わらなくなってしまいます。 例えば上記プログラムでx -= 1の代わりにx += 1とすると、xはいくら立ってもx > 0のままなので、無限ループになってしまいます。

    条件にTrueを指定して、意図的に無限ループを繰り返させることもあります。 もちろん、このままだとプログラムが終わらなくなってしまうので、ループの中にbreakを指定してこのループから抜けさせます。

    また、ループの途中でcontinueを指定すると、ループの途中で処理を中断して、ループの先頭に戻り、次のループを続けさせることができます。

    while True:	# 無限ループ
    	i = int(input("正の値を入れてください"))	# キーボードから数値を入力
    	if i > 0:		# 値が正だったら
    		break		# ループから抜ける
    	elif i == 0:	# 値が0だったら
    		continue	# ループの先頭に戻って処理を続ける
    	print("負の値が入力されました")	# メッセージを出力してループの先頭に戻る
    print(i)	# breakでループから抜けた後の処理
    

    なお、breakcontinuefor文でも使用することができます。

  • その他

    • 配列

      [値1, 値2..., 値n]という記述で、n個の値をまとめて配列を作ることができます。

      配列print関数で表示すると[値1, 値2..., 値n]のように出力されます。

      配列の各値は0から始まるインデックスを使って配列[0]配列[1]、… 配列[n-1]のようにして値を取り出したり、値を変更したりすることができます。

      なお、配列の要素を全て取り出す場合、変数1, 変数2, ... 変数n = 配列のようにして変数に直接入れて取り出すこともできます。

      配列に対して、以下のようないろいろな関数で計算ができます。

      • sum(配列)

        配列の総和を返す

      • min(配列)

        配列の最小値を返す

      • max(配列)

        配列の最大値を返す

      • mean(配列)

        配列の平均値を返す

      • sorted(配列)

        昇順(小さい順)にソートした配列を返す

      • sorted(配列, reversed=True)

        降順(大きい順)にソートした配列を返す

    • ランダム

      プログラムの先頭でimport randomを宣言し、random.ranbint(x, y)を実行すると、x〜yの数値をランダムに返します。

    • スリープ

      プログラムの先頭でimport timeを宣言し、time.sleep(秒)を実行すると、指定の秒数処理を待ってから処理が続けられます。

演習

それでは実際にjupyter notebookを使用して、演習を行います。

コマンドラインからgit pullを実行してmcc1フォルダに最新のファイルをダウンロードしてください。

ターミナルのコマンドラインからcd mcc1/code/jupyterを実行して、jupyterフォルダに移動し、jupyter notebookを実行してください。

すると、ブラウザが起動し、jupyterのホーム画面が表示されます。

その中からPython演習ドリル200基礎練習11〜20.ipynbをクリックしてください。

そうするとPython演習ドリル200基礎練習11〜20というタイトルの演習問題が表示されます。

課題11から課題20までありますので、課題の内容にしたがって、In[]:の部分にPythonプログラムを書いてください。 書き終わったら、画面上の ▶| Run というアイコンをクリックすると、今書いたPythonプログラムが実行されます。

出力結果が課題の(実行画面)と一致するか確認してください。

どうしても正解がわからないときは、▶プログラム例 をクリックすると、正解例のPythonプログラムが表示されます。

まとめ

今回はPython演習として、条件分岐と繰り返し処理の演習を行いました。

今後も新しい演習問題を追加していきますので、演習を通じてPythonを学んでいきましょう。