練習問題:オブジェクトと変数#
Jupyter Notebook ファイルの準備
練習問題用に「practice6.ipynb」 という名前で Jupyter Notebook のファイルを作成してください。
この練習問題を通して、 オブジェクトと変数 で学習した内容を改めて確認してください。
オブジェクトを変数に代入する#
問題1#
以下の名前で変数を宣言できるか予想した上で、実際にコードを入力して確かめてください。
yen_to_$ = 0.00655percentage = 0.05from = 'Japan'_ = None
解説を見る
yen_to_$ = 0.0065:宣言できない_以外の記号は識別子として使用できません。5percentage = 0.05:宣言できない 識別子は数字から始めることはできません。from = 'Japan':宣言できないfromは予約語であるため、識別子として使用できません。_ = None:宣言できる_は識別子で唯一使用できる記号です。このように1文字だけの識別子として使うこともできます。
問題2#
スクリプトファイルの作成
この問題は「practice3.py」 という名前でスクリプトファイルを作成して、スクリプトを実行してください。Jupyter Notebook 上で実行すると、後の課題で作成するスクリプト内で print 関数が呼び出せなくなります。
print という名前で変数を宣言し、文字列の "print" を代入してください。この代入文の後に、 print 関数を print('Python') で呼び出そうとすると、例外が送出(スロー)されることを確認してください。
解説を見る
以下のスクリプトを実行すると、TypeError という例外が送出されます。print は標準で組み込まれている関数名として使われていますが、予約語ではないため、変数名として使用できてしまいます。この場合、print という名前は元の関数オブジェクトではなく新たに代入された文字列オブジェクトを参照するように上書きされるため、これ以降は print を関数として呼び出すことはできません。このように、標準で組み込まれている名前の使用は思わぬ不具合を引き起こす原因となってしまうため、重複を避けるようにしてください。
実行するスクリプト
print = "print"
print('Python')
実行時のエラーメッセージ
Traceback (most recent call last):
File "**\practice3.py", line 2, in <module>
print('Python')
TypeError: 'str' object is not callable
2つのオブジェクトが等しいかどうかを比較する#
問題1#
次の2つの変数が参照しているオブジェクトが同一のものであることを、「1. id 関数の値が同じである」「2. is 演算子の評価結果が True である」の2点から確認してください。
string_1 = "python"
string_2 = "python"
解説を見る
文字列は、インターンという仕組みによって、同じリテラル(同じ文字の並び)からオブジェクトが作成されようとした場合、既に存在するオブジェクトが使いまわされるようになっています。そのため、2つの変数は同じ文字列オブジェクトを参照しています。
string_1 = "python"
string_2 = "python"
print(id(string_1), id(string_2))
print(string_1 is string_2)
問題2#
以下の2つの変数が参照するオブジェクトが同一のものであるか、それとも異なるものであるかを調べてください。
lower_python = "python"
upper_python = lower_python.upper()
解説を見る
文字列オブジェクトの upper メソッドは、自身の内容を変更するのではなく、新たな文字列オブジェクトを作成して返します。そのため、2つの変数はそれぞれ異なるオブジェクトを参照しています。
lower_python = "python"
upper_python = lower_python.upper()
print(lower_python is upper_python) # False
【発展】少し変わった変数への代入方法#
問題1#
複合代入演算子を用いて、以下の順番で変数 val に代入されている値を用いた計算処理と結果の再代入を行うコードを記述してください。
step1:
valに2を足した値を再代入するstep2: step1 の
valに3を掛けた値を再代入するspte3: step2 の
valを4乗した値を再代入する
val = 5
# step1 のコード
# step2 のコード
# step3 のコード
print(val) # 期待される出力:194481
解答例を見る
val = 5
val += 2 # val = val + 5 と同じ
val *= 3 # val = val * 3 と同じ
val **= 4 # val = val ** 4 と同じ
print(val)
問題2#
以下の変数 x, y, z に代入されている値を利用して、それぞれ
x: 現在のyの 2 倍の値、y: 現在のxの値z: 現在のxの値の 3 倍 に 2 を足した値
で計算される値を、各変数へ再代入するコードをひとつの文にまとめて記述してください。
x = 3
y = 6
z = 0
# ここに再代入のコードを記述
print(x, y, z) # 期待される出力:12 3 11
解答例を見る
x, y, z = 2 * y, x, 3 * x + 2 の代入文は右オペランドが先に評価されるため、各式はすべて変更前の値を使って評価されます。
x = 3
y = 6
z = 0
x, y, z = 2 * y, x, 3 * x + 2
print(x, y, z)