クリックで問題と解答が表示されます。
次のうち、Pythonの説明として正しいものを1つ選びましょう。分からない語句は、Google検索を活用しても構いません。 1. Pythonは生産性が低く、読みづらい言語だ 2. Pythonはオブジェクト指向をサポートしていない 3. Pythonは可読性、生産性、汎用性に優れた静的言語だ 4. Pythonは可読性、生産性、汎用性に優れたスクリプト言語だ
答え:4 可読性、生産性、汎用性(汎用的)というキーワードは抑えておきましょう。 特に可読性は、「実行可能な疑似コード」と呼ばれるほどです。また、人気のある言語ということも覚えておきましょう。
次のうち、ZeroDivisionErrorとなるものを1つ選びましょう。 1. >>> 5 - 0 2. >>> 5 * 0 3. >>> 5 / 0 4. >>> 6 ** 0
答え:3 0で割る行為は許されません。それをした場合のエラーが「ZeroDivisionError」です。 Divisionは分割といった意味で、0で割る、ということがエラー名に表されています。 このように、エラー名はそのエラーの原因や種類がわかるようにつけられているので、覚えておいてください。
「+」「-」「*」「/」記号を1つずつ使い、括弧の中を埋めましょう。 >>> 10 + 5 15 >>> -10 - 10 -20 >>> 10 * 3 / 5 6.0
/ の結果、必ず浮動小数点数になることを抑えてください。
「%」「//」「**」記号を1つずつ使い、括弧の中を埋めましょう。 >>> 10 // 3 3 >>> 10 % 3 1 >>> 5 ** 2 25
// の結果、小数点部分が切り捨てられます。
次のうち、変数名として利用できないものを1つ選びましょう。 1. my_name 2. _name 3. __name 4. __init__ 5. name2 6. False
答え:6 Falseは、予約後なので使えません。 _nameや__nameのような先頭にアンダースコアを含む名前は、今は不思議に思うかもしれませんが使います。 __init__のような、アンダースコア2つを両端につけた名前は少し特殊な意味を持つのですが、こちらも使います。
前後の処理を見ながら、括弧の中に入る数値を考えましょう。 >>> price_a = 10 >>> price_b = 5 >>> price_c = price_a + price_b >>> price_c 15
前後の処理を見ながら、括弧の中に入る記号を考えましょう。 実行結果 3.4.1と表3.4.1が参考になります。 >>> price_a = 10 >>> price_b = 5 >>> price_a += price_b >>> price_a 15
ただの+だと、price_aの値が変化されません。+=を使います。
実行結果4.2.3を参考に、5行目に表示される内容を考えましょう。 >>> name = '' >>> name += '佐藤' >>> name += '太郎' >>> name '佐藤太郎'
「4.3 組み込み関数」を参考に、括弧の中に入る数値、文字列を考えましょう。
>>> int(1.1421356)
1
>>> str(100)
'100'
>>> len('こんにちは')
5
int関数では小数点部分が無視され、切り捨てによく使います。 str件数の結果は、'100'とシングルクォートがつきます。
表5.1.1を参考にして、次のうち「こんにちは、佐藤さん」と表示されないものを1つ選びましょう。
1. >>> 'こんにちは、{}さん'.format('佐藤')
2. >>> 'こんにちは、{0}さん'.format('佐藤')
3. >>> 'こんにちは、{name}さん'.format(name='佐藤')
4. >>> 'こんにちは、{0}さん'.replace('佐藤')
答え:4
replaceメソッドは、文字列の置換を行います。replace('置換前', '置換後')のように指定する必要があるメソッドなので、4はエラーです。
1, 2, 3はformatメソッドのサンプルとして覚えてください。
実行結果5.2.1を参考にして、括弧の中に入る文字を考えましょう。 >>> text = 'Python' >>> text[0] 'P' >>> text[5] 'n' >>> text[-1] 'n'
0番目から数えることをおさてください。
実行結果5.2.4を参考にして、次のうち「'日雨降'」と表示されるものを1つ選びましょう。 1. >>> '明日は雨が降ります。'[1:3:2] 2. >>> '明日は雨が降ります。'[1:6:2] 3. >>> '明日は雨が降ります。'[:8:2] 4. >>> '明日は雨が降ります。'[:6:2]
解答:2 '明日は雨が降ります。'の1番目にあたる、「日」が最初に表示されれるものとして1と2に絞れます。 [1:3:2]だと、'日'までの文字しか入りません。
リスト6.1.2を参考に、括弧の中に入るリスト、又は文字列を考えましょう。 >>> foods = ['米', 'パン', 'パスタ'] >>> foods[-1] 'パスタ' >>> foods[1] 'パン' >>> foods[1:] ['パン', 'パスタ'] >>> foods[::-1] ['パスタ', 'パン', '米']
実行結果6.1.3を参考に、括弧の中に入るリスト、又は文字列を考えましょう。
>>> languages = []
>>> languages.append('Python')
>>> languages.append('Ruby')
>>> languages
['Python', 'Ruby']
>>> languages.pop()
'Ruby'
>>> languages.remove('Python')
>>> languages
[]
popメソッドは、引数なしだと最後の要素が返され、削除されます。 removeメソッドは、値を返す動作はありません。)
# ではじまるヒントを見ながら、それぞれのnumbersの結果を考えましょう。 >>> numbers = [6, 3, 5, 4, 1, 2] >>> numbers.sort() # 小さいものから並びます。 >>> numbers [1, 2, 3, 4, 5, 6] >>> numbers.sort(reverse=True) # 大きいものから並びます。 >>> numbers [6, 5, 4, 3, 2, 1]
実行結果7.3.1を参考に、namesが['taro', 'siro', 'saburo']となるように括弧の中を埋めましょう。 >>> names = ['taro', 'jiro', 'saburo'] >>> names[1] = 'siro' >>> names ['taro', 'siro', 'saburo']
リストにおける、途中要素への代入の復習です。
# で始まるヒントと実行結果7.4.1を参考にしながら、5行目に表示される内容を考えましょう。 >>> names1 = ['taro', 'jiro', 'saburo'] >>> names2 = names1 >>> names1.clear() # リストの中を空([])にします >>> names2 []
names2 = names1としたので、この2つは実際は同じリストを指し、片方のリストに変更を加えるともう片方にも影響が出ます。 そのため、names1をclear()メソッドで空にするとnames2も空になります。
# で始まるヒントと実行結果7.4.2を参考にしながら、5行目に表示される内容を考えましょう。 >>> names1 = ['taro', 'jiro', 'saburo'] >>> names2 = names1.copy() # リストのコピーを作成します >>> names1.clear() # リストの中を空([])にします >>> names2 ['taro', 'jiro', 'saburo']
names2 = names1.copy()とすることで、中身が同じな、新しい、別のリストが代入されます。
次のうち、タプルの説明として正しいものを1つ選びましょう。 1. タプルはミュータブルで、シーケンス型である 2. タプルはミュータブルで、シーケンス型ではない 3. タプルはイミュータブルで、シーケンス型である 4. タプルはイミュータブルで、シーケンス型ではない
解答:3 変更ができない(イミュータブル)で、[0]のような属性アクセスを許可している(シーケンス型の特権)
次のうちエラーとならないものを1つ選びましょう。 「8.2 リストとの違い」が参考になります。 1. >>> numbers = 10, 5, 4, 1, 3 >>> numbersa.append(100) 2. >>> numbers = (10, 5, 4, 1, 3) >>> numbers.pop() 3. >>> numbers = 10, 5, 4, 1, 3 >>> numbers[4] = 100 4. >>> numbers = (10, 5, 4, 1, 3) >>> numbers[4]
解答:4 appendやpopはリストが持つメソッドですが、タプルにはありません。 3は代入を行いますが、タプルは要素への代入を禁じています。要素へのアクセスだけを行う4が正解です。
「8.3 アンパック」を参考に、それぞれのa, b, c, d, eの結果を考えましょう。 >>> numbers = 10, 5, 4, 1, 3 >>> a, b, c, d, e = numbers >>> a, b, c, d, e (10, 5, 4, 1, 3) >>> a, b, c, d, e = b, c, d, e, a >>> a, b, c, d, e (5, 4, 1, 3, 10)
上手く理解できない場合は、 2行目をa, b, c, d, e = 10, 5, 4, 1, 3 5行目をa, b, c, d, e = 5, 4, 1, 3, 10 と読み替えましょう。 結果は丸括弧がついていなくても、正解としてください。対話モードでは便宜上タプルが丸括弧で表示されますが、プログラム的には間違いではありません。
実行結果9.1.1、実行結果9.1.3を参考に、括弧の中の処理を考えましょう。
>>> report = {'math': 80, 'science': 100}
>>> report['japanese'] = 30
>>> report
{'math': 80, 'science': 100, 'japanese': 30}
>>> report['science']
100
>>> report['pc'] = 100
>>> report
{'math': 80, 'science': 100, 'japanese': 30, 'pc': 100}
表9.2.1のgetメソッドを見ながら、それぞれの結果を考えましょう。
>>> profile = {'age': 18, 'name': 'taro', 'phone': '000-0000-0000'}
>>> profile.get('age')
18
>>> profile.get('name')
'taro'
>>> profile.get('address', '沖縄')
'沖縄'
表9.2.1のupdateメソッドとヒント(#で始まるコメント)を見ながら、括弧の中に入る処理を考えましょう。
>>> profile = {'name': 'sato', 'age': 27, 'phone': '000-0000-0000', 'address': '北海道'}
>>> new_profile = {'name': 'yosida', 'age': 28, 'address': '東京'} # ここで新しい辞書を定義...
>>> profile.update(new_profile) # updateメソッドで一括変更しましょう。
>>> profile
{'name': 'yosida', 'age': 28, 'phone': '000-0000-0000', 'address': '東京'}
ベースとなる辞書.update(他の辞書)という書き方で、2つの辞書を結合できます。
profile = {'name': 'yosida', 'age': 28, 'phone': '000-0000-0000', 'address': '東京'}
のようなズルをすることもできますが、これは正解ではありません。
6行目で表示される内容を考えましょう。
>>> numbers = set()
>>> numbers.add(1)
>>> numbers.add(1)
>>> numbers.add(1)
>>> numbers
{1}
4行目で表示される内容を考えましょう。
>>> numbers = [1, 1, 1, 1, 1]
>>> numbers = set(numbers)
>>> numbers
{1}
集合が同じ値の重複を許さない、という原則を覚えておきましょう。
次のうち、シーケンス型の説明として誤っているものを1つ選びましょう。 1. シーケンス型は、sequence[0] のようにして位置に対応する値を取り出せる。 2. シーケンス型は、sequence[:10]のようにして範囲の値を取り出せる。 3. シーケンス型はリスト、タプル、文字列等が該当し、集合はシーケンス型ではない。 4. シーケンス型は全て、sequence[0] = 100 のような代入をサポートする。
答え:4 1、2、3は正しいです。 イミュータブルなタブルでは途中要素への代入ができません。4が誤りです。
次のうち、ミュータブル型、・イミュータブル型の説明として誤っているものを1つ選びましょう。 1. イミュータブル型は、自身を変更する操作がない。 2. ミュータブル型は、リスト、辞書、集合等が該当する。 3. イミュータブル型は、整数、浮動小数点数、文字列、タプル等が該当する。 4. ミュータブル型のデータは全て、mutable[0] = 'hello'のような代入をサポートする。
答え:4 集合はミュータブルですが、mutable[0] = 'hello'のような代入はできません。
次のうち、Pythonのインデントとして推奨されているものを1つ選びましょう。 1. インデントには半角スペースを2つ使う 2. インデントにはタブを使う 3. インデントには半角スペースを4つ使う 4. インデントには半角スペースとタブを混ぜて使う
答え:3 これは是非覚えてください。Pythonが公式的に推奨しているスタイルで、最も多くのPythonプログラマーが採用しているスタイルです。
以下のプログラムの実行結果を考えましょう。
name = '田中 太郎'
if name.endswith('太郎'):
print('こんにちは、太郎')
else:
print('はじめまして')
実行結果
こんにちは、太郎
以下のプログラムの実行結果を考えましょう。
name = '田中 太郎'
if name.startswith('田中'):
print('こんにちは、田中')
else:
print('はじめまして')
if name.endswith('太郎'):
print('こんにちは、太郎')
実行結果
こんにちは、田中
こんにちは、太郎
最初のif〜elseのどちらかにまず入り、ここで「こんにちは、田中」が出力されます。
次に、if name.endswith('太郎'): にも該当するので、ここで「こんにちは、太郎」と出力されます。
if〜elif, if〜elseは1つのまとまりとして考えましょう。
実行結果のとおりになるように、current_time変数の値を考えましょう。
current_time = 13
if current_time < 12:
print('おはようございます')
elif current_time < 14:
print('こんにちは')
else:
print('こんばんは')
実行結果
こんにちは
12以上で、14未満の値ならば問題なし。
表13.2.1、表13.3.1を参考にして、実行結果のとおりになるように、name変数とage変数の値を考えましょう。
name = 0
age = 0
if name and age:
print('ok')
elif name:
print('年齢が不正です')
elif age:
print('名前が不正です')
else:
print('名前と年齢が不正です')
実行結果
名前と年齢が不正です
0が暗黙のうちにFalseと評価されることに注意してください。 nameとageの値をFalseやNone等にしても同様の動作はします。
リスト14.1.1を参考に、numbers変数の中身を考えましょう。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
実行結果
1
2
3
4
5
リスト14.1.1を参考に、以下のfor文を使ったプログラムの実行結果を考えましょう。
menu = ['チャーハン', 'ラーメン', '餃子']
for food in menu:
print(food)
実行結果
チャーハン
ラーメン
餃子
括弧の中を埋めて、実行結果のとおりになるようにしましょう。
リスト14.1.2、又はリスト14.1.3が参考になります。
(正解1)
menu = {'チャーハン': 680, 'ラーメン': 700}
for key, value in menu.items():
print(key, value)
実行結果
チャーハン 680
ラーメン 700
(正解2)
menu = [('チャーハン', 680), ('ラーメン', 700)]
for key, value in menu.items():
print(key, value)
2行目でnumbers変数に何らかの処理を加えて、実行結果のとおりになるプログラムにしましょう。
Step6-7に出てきたsortメソッド、又はスライスでの逆順を思い出しましょう。
(正解1 スライスバージョン)
numbers = [1, 2, 3, 4, 5]
numbers = numbers[::-1]
for num in numbers:
print(num)
実行結果
5
4
3
2
1
(正解2 リストのsortメソッドバージョン)
numbers = [1, 2, 3, 4, 5]
numbers.sort(reverse=True)
for num in numbers:
print(num)
「15.1 指定回数の繰り返し」を参考に、次のfor文の実行結果を考えましょう。
for i in range(0, 10, 2):
print(i, end=',')
実行結果
0,2,4,6,8
end=','なので、カンマ区切りで表示がされます。
2つの括弧の中には、range関数の呼び出しが入ります。
実行結果のとおりになるように、埋めましょう。
for i in range(1, 4):
for j in range(1, 4):
result = '{0} * {1} = {2}'.format(i, j, i*j)
print(result)
実行結果
1 * 1 = 1
2 * 1 = 2
3 * 1 = 3
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
1 * 3 = 3
2 * 3 = 6
3 * 3 = 9
リスト15.3.1、リスト15.3.2を参考に、以下のプログラムを組み込み関数enumerateを使って書き直してください。
heights = [170, 180, 165, 171, 170]
for i in range(len(heights)):
print(i, heights[i])
実行結果
0 170
1 180
2 165
3 171
4 170
↓
heights = [170, 180, 165, 171, 170]
for i, h in enumerate(heights):
print(i, h)
次のうち、while文で書くべきものを1つ選びましょう。 1. リスト内の値を、順番に出力する。 2. 1から10まで繰り返し、各値を出力する。 3. ループの中でユーザーの入力を受付け、ある入力で終了する。
答え:3 1と2については、for文で書くほうが遥かに簡単です。
次のプログラムは、10から1までを表示するプログラムです。
括弧の中に入る処理を考えましょう。(リスト16.1.1が参考になります)
# 10から1まで出力するサンプル
now = 10
while now >= 1: # nowが1以上の間はループし続ける
print(now, end=' ')
now -= 1 # now = now - 1 と書いてもOKです
実行結果
10 9 8 7 6 5 4 3 2 1
次のプログラムを実行すると、途中で入力が求められます。
while文の処理を見ながら、(あなたの入力)に入る文字を考えましょう。
リスト16.1.4が参考になります。
while True:
your_name = input('あなたの名前は? (exitで終了)>')
if your_name == 'exit':
print('処理を終了します。')
break
else:
print(your_name)
実行結果
あなたの名前は? (exitで終了)>taro
taro
あなたの名前は? (exitで終了)>exit
処理を終了します。
次のsay関数を呼び出しましょう。
def say():
print('こんにちは')
say()
実行結果
こんにちは
リスト17.3.2を参考に、create_numbers関数を完成させましょう。
def create_numbers()
return [1, 2, 3, 4, 5] # 1から5までのリストを返す
numbers = create_numbers()
print(numbers)
実行結果
[1, 2, 3, 4, 5]
「17.2 引数」を参考に関数を定義して、実行結果のとおりになるプログラムを作成しましょう。
def hello(name, greet):
message = '{0}、{1}'.format(greet, name)
print(message)
hello(name='太郎', greet='こんにちは')
実行結果
こんにちは、太郎
関数を定義する際、以下の中でエラーとなる関数定義を1つ選びましょう(処理部分は考慮しないとします)。 リスト18.1.2が参考になります。 1. def send_mail(to='to@a.com', frm): 2. def send_mail(to, frm): 3. def send_mail(to='to@a.com', frm='from@a.com'): 4. def send_mail(*args, **kwargs):
解答:1 関数定義の際に、(デフォルト引数, デフォルトなし引数) のような定義はできません。
以下の関数を呼び出す際、エラーとなるものを1つ選びましょう。
リスト18.1.3が参考になります。
def send_mail(to, frm):
print(to, frm)
1. send_mail('to@a.com', 'from2@a.com')
2. send_mail('to@a.com', frm='from2@a.com')
3. send_mail(to='to@a.com', frm='from2@a.com')
4. send_mail(to='to@a.com', 'from2@a.com')
解答:4 関数呼び出しの際に、(キーワード引数, 位置引数) のような定義はできません。
実行結果のとおりになるように関数を定義しましょう。
引数は2つ、どちらもデフォルト値を持つ引数です。
def say_hello(greet='おはよう', name='名無し'):
message = '{0}、{1}'.format(greet, name)
say_hello()
say_hello('こんにちは')
say_hello('こんばんは', '田中')
実行結果
おはよう、名無し
こんにちは、名無し
こんばんは、田中
以下のプログラムを実行したとき、実行結果として正しいものを1つ選びましょう。
リスト19.1.3が参考になります。
def greet():
message = 'Hello'
greet()
print(message)
1. NameError: name 'name' is not defined
2. 'Hello'
3. 何も表示されない
答え:1 関数内で定義した変数は、関数の外側からは参照できません。 今回はmessage変数が関数内にしかないため、print(name)はエラーとなります。
以下のプログラムを実行したとき、実行結果として正しいものを1つ選びましょう。
message = 'Hi'
def greet():
message = 'Hello'
greet()
print(message)
1. NameError: name 'name' is not defined
2. 'Hello'
3. 'Hi'
答え:3 関数の外に同名の変数があった場合、外側の変数を書き換えるにはglobal文 を使う必要があります。 global文を使わない場合は、関数の外側では元の値のままです。そのため、print(message)は最初に代入された'Hi'のままです。
リスト19.1.5を参考にして、実行結果のとおりになるよう関数を定義しましょう。
name = 'taro'
def change_name(your_name):
global name
name = your_name
change_name('jiro')
print(name)
実行結果
jiro
change_name()の後に、関数の外側にあるname変数の値が変わっていることに注意です。 外側のname変数をglobal文で書き換える必要があります。
リスト20.2.1を参考ににして、実行結果のとおりになるようにクラスを定義しましょう。
class Person:
def __init__(self, name):
self.name = name
saburo = Person('saburo')
print(saburo.name)
実行結果
saburo
リスト20.2.3を参考にして、実行結果のとおりになるようにクラスを定義しましょう。
class Person:
def __init__(self, name):
self.name = name
def show_profile(self):
print(self.name)
saburo = Person('saburo')
saburo.show_name()
実行結果
saburo
Step18のデフォルト値を持つ関数定義を思い出しながら、実行結果のとおりになるようにクラスを定義しましょう
class Person:
def __init__(self, name='名無し'):
self.name = name
def say_hello(self):
message = 'おはよう、{0}'.format(self.name)
print(message)
anonymous = Person()
anonymous.say_hello()
tanaka = Person('tanaka')
tanaka.say_hello()
実行結果
おはよう、名無し
おはよう、tanaka
基礎
リスト21.1.2を参考に、実行結果のとおりになるようMaleクラスを定義しましょう。
class Person:
def __init__(self, name):
self.name = name
class Male(Person):
pass
saburo = Male('saburo')
print(saburo.name)
実行結果
saburo
「21.2 オーバーライド」を参考に、実行結果のとおりになるよう、show_profileメソッドをオーバーライドしましょう。
class Person:
def __init__(self, name):
self.name = name
def show_profile(self):
print('{0} 人です'.format(self.name))
class Male(Person):
def show_profile(self):
print('{0} 男性です'.format(self.name))
saburo = Male('saburo')
saburo.show_profile()
実行結果
saburo 男性です
リスト21.3.2を参考に、実行結果のとおりになるよう、Maleクラスの__init__メソッドを作成しましょう。
その際、super()を使って親のメソッドを呼んでください。
class Person:
def __init__(self, name):
self.name = name
def show_profile(self):
print('{0} 人です'.format(self.name))
class Male(Person):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def show_profile(self):
print('{0} {1}歳 男性です'.format(self.name, self.age))
saburo = Male('saburo', 20)
saburo.show_profile()
実行結果
saburo 20歳 男性です
リスト22.1.2、リスト22.2.1を参考にして、実行結果を考えましょう。
class Person:
count = 0
def __init__(self, name, age):
self.name = name
self.age = age
self.count = 1
taro = Person('taro', 20)
print(Person.count)
print(taro.count)
実行結果
0
1
Step21で学んだ継承を思い出しながら、実行結果のとおりになるよう、Charcterクラス内にshow_profileメソッドを定義しましょう。
ヒントとして、show_profileメソッド内では、「self.race」としてクラス属性にアクセスします。
class Charcter:
race = '基本クラス'
def __init__(self, name):
self.name = name
def show_profile(self):
message = '名前:{0} 種族:{1}'.format(self.name, self.race)
print(message)
# このようなクラス属性だけを上書きする継承はよく使います。
class Fighter(Charcter):
race = '戦士'
class Fencor(Charcter):
race = '剣士'
taro = Fighter('taro')
taro.show_profile()
jiro = Fencor('jiro')
jiro.show_profile()
実行結果
名前:taro 種族:戦士
名前:jiro 種族:剣士
基礎
add関数を参考にして、calcモジュールに掛け算を行う「mul」関数を新しく定義し、mainモジュールから呼び出してみましょう。
(calc.py)
def mul(a, b):
return a * b
(main.pyの例)
import calc
result = calc.mul(2, 2)
リスト23.2.2を参考にしてif __name__ == '__main__':ブロックを作成し、その中でadd関数を呼び出すように作成しましょう。
その際、2つの引数と結果をprint関数で表示するようにし、add関数が動作するか確認できるようにしてください。
(calc.pyの例)
if __name__ == '__main__':
a = 2
b = 3
result = add(a, b)
log = '{0} + {1} = {2}'.format(a, b, result)
print(log)
mainモジュールからyahooモジュールのimportとして、エラーとなるものを1つ選びましょう。 「24.1 パッケージとは」が参考になります。 1. from news import yahoo 2. import news 3. from news import yahoo as yh 4. import yahoo
「24.2 __init__.py」を参考にして、main.py内に「yahoo」という文字列を登場させることなく、read関数をimportしましょう。
from news import read
前後のプログラムの流れを見ながら、実行結果のとおりになるように括弧の中を埋めましょう。
リスト25.1.2、リスト25.2.1が参考になります。
text = 'やっほー'
with open('hello.txt', 'w', encoding='utf-8') as file:
file.write(text)
with open('hello.txt', 'r', encoding='utf-8') as file:
print(file.read())
実行結果
やっほー
可能な限りencoding引数も付けてください。
「'w'」「'a'」「'r'」を1つずつ使い、括弧の中を埋めて実行結果のとおりになるよう埋めましょう。
with open('hello.txt', 'w', encoding='utf-8') as file:
file.write('ハロー')
with open('hello.txt', 'a', encoding='utf-8') as file:
file.write('ワールド')
with open('hello.txt', 'r', encoding='utf-8') as file:
print(file.read())
実行結果
ハローワールド
try〜exceptの中身を見ながら、変数bに入る値を考えましょう。
a = 10
b = 0
try:
result = a / b
except ZeroDivisionError:
result = '0で割ってはいけません。'
print(result)
実行結果
0で割ってはいけません。
Step18のデフォルト値を持つ関数定義を思い出しながら、実行結果のとおりになるように関数を定義しましょう。
また、関数内部では、except KeyErrorを使います。
def get(report, kind, default=None):
try:
return report[kind]
except KeyError:
return default
report = {'math': 80}
point = get(report, 'math')
print(point)
point = get(report, 'english')
print(point)
point = get(report, 'english', default=0)
print(point)
実行結果
80
None
0
例外のステップなので、上のような関数を定義してくれることが理想ですが、以下のような関数でも正解です。
def get(target, key, default=None):
return target.get(key, default)