第1回 Pythonの基礎 練習問題

全部で80問あります。身に着くまで繰り返しあるのみ!

変数の定義と演算

  1. 文字列"Hello"を出力する
  2. 整数10をxとして定義する
  3. xを出力する
  4. 整数3をyとして定義する
  5. xyの和を変数sumとして計算する
  6. xyの差を変数diffとして計算する
  7. xyの積を変数prodとして計算する
  8. x割るyの商を変数ratとして計算する
  9. x割るyの商の整数部を変数rat_intとして計算する
  10. x割るyの余りを変数resとして計算する
  11. sum + diff + prod + rat + rat_int + resを出力し、57.333333333333336となることを確かめる
  12. 1000000(100万)を指数表記で定義し、変数aとする
  13. 0.000001(100万分の1)を指数表記で定義し、変数bとする
  14. 1+bのa乗を計算し、出力する(自然対数の底e=2.7183...に近いはずです)

配列

  1. 1, 3, 5, 7, ..., 19(1から奇数10個)のリストを直接定義し、リスト名list1とする
  2. 1.と同じリストをrange関数を用いて定義し、リスト名list2とする
  3. listlist2を出力し、両者が一致することを確かめる
  4. -10, -7, -4, ..., 17(-10から始めて公差3、項数10の等差数列)をrange関数を用いて定義し、リスト名list3とする
  5. list1のあとにlist3を繋げた一つのリストを作り、list4とする
  6. list4の第13項(以下、項数は0から数えたもの)を出力する
  7. list4の第2項から第5項(以下、後ろの項数は含む。つまり、第2, 3, 4, 5項)をスライスで指定し、出力する
  8. list4の第8項以降すべてをスライスで指定し、出力する
  9. list4の後ろから4番目の項を出力する
  10. list4の後ろから10番目から4番目の項をスライスで指定し、出力する
  11. list4の偶数番目の項をスライスで指定し、出力する
  12. list4の1, 4, 7, ...(3ごと)項をスライスで指定し、list5とする
  13. len関数を用いてlist5の項数を出力し、7であることを確かめる

for構文での繰り返し

  1. 0, 1, 2, ..., 9の列をrange関数を使って表す
  2. -2, -1, 0, 1, 2の列をrange関数を使って表す
  3. 10, 9, 8, ..., 1の列をrange関数を使って表す(ヒント:?から始まって?で終わる、公差?の等差数列)
  4. for構文で、"Hello"を5回出力する
  5. for構文を使って、$n\ (n=0, 1, ..., 9)$を順に出力する
  6. for構文を使って、$3n\ (n=0, 1, ..., 9)$を順に出力する
  7. for構文を使って、$n^3\ (n=0, 1, ..., 9)$を順に出力する
  8. for構文を使って、$3^n\ (n=0, 1, ..., 9)$を順に出力する
  9. total=0を定義する
  10. for構文を使って、$\sum_{i=0}^n i$をn=0, 1, ..., 9まで順に出力する(ヒント:totalを使おう)
  11. for構文を使って、$\sum_{i=0}^n i^2$をn=0, 1, ..., 9まで順に出力する(ヒント:もう一度total=0を定義)
  12. prod=1を定義する
  13. for構文を使って、$n!=1\cdot2\cdot ... \cdot n$をn=1, ..., 9まで順に出力する(ヒント:prodを使おう)
  14. for構文を使って、$\Pi_{i=0}^n(3i+1)=1\cdot 4\cdot 7 \cdot ... \cdot n$をn=0,...,9まで順に出力する
  15. for構文を使って、$(1+1/n)^n$をn=1, 10, 100, 1000, 10000, ..., 10^10まで順に出力する(eに近づくはず)
  16. for構文を使って、$1-1/2+1/3-1/4+...+(-1)^{n-1}/n$をn=1, ..., 20まで順に出力する(log2=0.693...にゆっくり近づくはず)
  17. 好きな数字を10個入れたリストをmylistと定義する
  18. mylistの要素$a_n$について、for構文を用いて$2^{a_n}$を順に出力する

if構文での条件分岐

  1. mに好きな整数を設定する
  2. mが5より大きいか否か(TrueFalseか)を論理演算式で評価し、出力する
  3. mが5以上か否かを出力する
  4. mが2に等しいか否かを出力する
  5. mが2未満か否かを出力する
  6. mが偶数か否かを出力する
  7. mが5以上10未満の範囲に入るか否かを出力する
  8. mが2未満または12以上の範囲に入るか否かを出力する
  9. mが10以上なら"large"と出力するプログラムを書く
  10. mが10以上なら"large", そうでなければ"small"と出力するプログラムを書く
  11. mが10以上なら"large", 5以上10未満なら"medium", 5未満なら"small"と出力するプログラムを書く
  12. いくつかのmについて上のプログラムが想定通りに動作することを確認する
  13. mが奇数なら$3m+1$, 偶数なら$2m+2$を出力するif分岐を書く
  14. いくつかのmについて上のプログラムが想定通りに動作することを確認する

関数でのコードの再利用

  1. 引数xについて、$x^3$を返す関数をfという名で定義する
  2. $x=0, 3, -2$について、$f(x)$の結果を出力する
  3. 引数nについて、nが3の倍数なら1, 3で割った余りが1なら10, 3で割った余りが2なら50を返す関数をgという名で定義する
  4. 引数xおよびyについて、$xy - x - 2y$を返す関数をhという名で定義する
  5. $(x,y)=(1,2), (-10,5)$についてそれぞれ、$h(x,y)$の結果を出力する
  6. 引数u,v,wについて、$(u^2+v^2+w^2)^{1/2}$を返す関数をvlenという名で定義する。wはデフォルト値として0を設定する
  7. $(u,v,w)=(-2, 0.5, 3)$について${\rm vlen}(u,v,w)$の結果を出力する
  8. $(u,v,w)=(5, 3, 0)$について${\rm vlen}(u,v,w)$の結果を出力する。デフォルト値を使う
  9. 引数nを与え、"Hello"n回出力する関数を定義する
  10. 上の関数を好きなnについて呼び出す
  11. 引数nを与え、[1, 1, 1, ..., 1]のように整数1がn個ならんだリストを返す関数を定義する
  12. 9.の関数を好きな整数nについて呼び出す
  13. 引数x, yを与え、座標平面上の象限(1~4)を返す関数を定義する(余力があれば、軸上の点では0を返すようにしてみましょう)
  14. 引数u1, v1, u2, v2を与え、ベクトル$(u_1, v_1)$と$(u_2, v_2)$の内積を返す関数を定義する
  15. 引数u1, v1, u2, v2を与え、ベクトル$(u_1, v_1)$と$(u_2, v_2)$の張る平行四辺形の面積を返す関数を定義する

総合問題

  1. 引数でリストを受け取って、リストの成分の平均値を返す関数を定義する
  2. 引数でリストを受け取って、リストの成分の分散を返す関数を定義する
  3. 引数でリストを受け取って、リストの成分の最大値を返す関数を定義する
  4. 引数で自然数nを受け取って、nが素数か否かを判別する関数を定義する(解説に例がありますが、ぜひ自力で!)
  5. 引数で自然数nを受け取って、自然数n以下の素数をリストにして返す関数を定義する
  6. 引数で自然数nを受け取って、nを素因数分解してその素因数をリストにして返す関数を定義する