練習問題:基本的なデータの型と演算子#
Jupyter Notebook ファイルの準備
練習問題用に「practice5.ipynb」 という名前で Jupyter Notebook のファイルを作成してください。
この練習問題を通して、 基本的なデータの型と演算子 で学習した内容を改めて確認してください。
数値演算子#
問題1#
以下の計算をそれぞれ行い、結果を print 関数で出力してください。
10÷3の商の整数部10÷3の余り2の3乗
解答例を見る
切り捨ての除算 // と 剰余 % は、反対にして覚えてしまわないように気を付けてください。
print(10 // 3) # 10 ÷ 3 の商の整数値
print(10 % 3) # 10 ÷ 3 の余り
print(2 ** 3) # 2 の 3 乗
問題2#
以下の計算をそれぞれ行い、結果を print 関数で出力してください。
4と-6の和を2で割った商-3の2乗
解答例を見る
加算を行う演算子 + は、除算の演算子 / より評価の優先順位が低いため、和の式を () で囲み、先に評価されるようにします。また、べき乗の演算子 ** は、数の正や負を表す単項演算子の + や - よりも優先して評価されるため、負の数は () で囲み、評価の優先順を上げる必要があります。
print((4 + -6) / 2) # `4` と `-6` の和を `2` で割った商
print((-3) ** 2) # 10 ÷ 3 の余り
文字列を連結する演算子#
問題1#
「"人工知能"と'機械学習'」という文字列をエスケープ文字(\)を使わずに、+ 演算子を用いた文字列の連結で作成して、出力してください。
解答例を見る
文字列のリテラルで使う " や ' は、\を付けてエスケープする以外に、もう一方の記号で囲むことでも文字として扱うことができます。
print('"人工知能"と' + "'機械学習'")
問題2#
以下の文字列を出力するスクリプトを、+ や * の演算子を使って、それぞれできるだけ短いコードで記述してください。
100_000_000_000_000_000abcabc121212abcabc121212
解答例を見る
一定の規則で文字列が繰り返されている場合は、* 演算子を使うと、短いコードで記述できます。
100_000_000_000_000print('100' + '_000' * 5)
abcabc121212abcabc121212print(('abc' * 2 + '12' * 3) * 2)
比較演算子#
問題1#
以下の 2 つの値を比較演算子を用いて表し、結果を print 関数で出力してください。
2 ** 10の結果は1000以上である10 / 3の商は3.0以上4.0未満である
解答例を見る
2 ** 10の結果は1000以上である 数値演算子は比較演算子より優先して評価されるため、式2 ** 10を()で囲む必要はありません。print(2 ** 10 >= 1000)
10 / 3の商は3.0以上4.0未満である/演算子の商はfloat型であるため、比較する値も小数を用いて表す方が良いでしょう。print(3.0 <= 10 / 3 < 4.0)
問題2#
以下の 2 つの値を == 演算子を用いて比較すると、それぞれどのような結果になるかを予想した上で、実際にコードを書いて確認してください。
整数の
10と文字列の'10'浮動小数点数どうしの和
0.1 + 0.2と浮動小数点数の0.3
解答例を見る
整数の
10と文字列の'10'Java のように型に厳格な言語では、異なる型の値を==演算子で比較しようとするとエラーになりますが、Python では異なる型どうしであっても比較することができます。print(10 == '10') # False
浮動小数点数どうしの和
0.1 + 0.2と浮動小数点数の0.3コンピュータの内部では、浮動小数点数は 2 進数で近似的に表現されます。そのため、0.1 のような単純な 10 進数の小数でも、2 進数では正確に表現ができず、わずかな誤差が生じることがあります。この誤差によって、==での比較が期待通りにならないことがあります。print(0.1 + 0.2 == 0.3) # False
そのため、設定した許容誤差の範囲内で比較する関数など、別の方法を用いる必要があります。以下の例では、後のノートで解説する math というモジュールに用意されている isclose() 関数を使って 2 つの値が近いかどうかを比較しています。
import math # モジュールのインポート
# デフォルトの設定では、評価が True の場合 2 つの値が9桁同じことを保証します。
math.isclose(0.1 + 0.2, 0.3) # True
論理演算子#
問題1#
変数 num が 3 の倍数かつ 5 の倍数である場合は True を、そうでない場合は False が出力されるように、以下の print 関数の () 内に論理演算子を用いた式を記述してください。
num = 30
print() # () 内に論理演算子を用いた式を記述
解答例を見る
2 つの条件式がどちらも成り立つかどうかを調べるときは、条件式を and 演算子でつなぎます。
num = 30
print( num % 3 == 0 and num % 5 == 0)
# 以下のように not 演算子と or 演算子を組み合わせた書き方もあります
# print(not (num % 3 or num % 5))
問題2#
変数 score に代入された整数値が 60 以上の場合は「合格」を、60 未満の場合は「不合格」と出力するように、以下の print 関数の () 内に論理演算子を用いた式を記述してください。
score = 70
print() # () 内に論理演算子を用いた式を記述
解答例を見る
「条件式 and 真の場合の値(※) or 偽の場合の値」とすることで、 条件式の評価結果によって処理を分けることができます。
score = 70
print(score >= 60 and '合格' or '不合格')
Note
※ ここには Falsy な値は指定できません。
型の変換#
問題1#
文字列の 'Sum' と整数の 41 を、間に半角スペースを入れて、+ 演算子で連結し、 Sum 41 と出力してください。
解答例を見る
整数と文字列を + 演算子で連結することはできません。そのため、 str() を利用して、事前に整数を文字列に変換する必要があります。
print('Sum' + ' ' + str(41))
問題2#
input 関数で入力された金額(整数値)に対してかかる消費税を計算し、print 関数で出力します。 print 関数の () 内に適切な式を記述し、以下のスクリプトを完成させてください。なお、消費税率は 10% として計算し、端数を切り捨てず、浮動小数点数のまま出力してください。
amount = input('金額を入力>>>')
print() # () 内に消費税を求める式を記述してください
解答例を見る
input 関数は入力されたデータを文字列に変換して返します。そのため、 int() を利用して、事前に文字列を整数に変換する必要があります。
amount = input('金額を入力>>>')
print(int(amount) * 0.10)
文字列の書式指定#
問題1#
以下の年月日を表す 3 つの変数に代入されている値を使い「今日は2024年9月1日です。」の書式で文字列を出力してください。ただし、書式指定には f 文字列を使用してください。
year = 2024 # 年
month = 9 # 月
day = 1 # 日
print() # () 内に f 文字列 を記述
解答例を見る
f 文字列の {} 内には整数など文字列以外の値も指定できます。
year = 2024
month = 9
day = 1
print(f'今日は{year}年{month}月{day}日です。')
問題2#
以下の年月日を表す 3 つの変数に代入されている値い、「今日は2024年05月06日です。」の書式で文字列を出力してください。ただし、書式指定には f 文字列を使用してください。
year = 2024 # 年
month = 5 # 月
day = 6 # 日
print() # () 内に f 文字列 を記述
解答例を見る
「05月」や「06日」のように、数値を 2 桁で表示し、かつ左の余白を 0 で埋める場合は、:0>2 と書式を指定します。
year = 2024
month = 9
day = 1
print(f'今日は{year}年{month:0>2}月{day:0>2}日です。')