第2回 Python 3 基礎 模擬試験 第2回 Python 3 基礎 模擬試験 へようこそ。 以下の各項目を入力後、「次へ」をクリックして模擬試験を開始してください。 ※あらかじめ利用規約をご確認ください(プライム・ストラテジーから採用やイベントの情報など届くことがあります)。 ※結果の詳細は入力いただいたメールアドレス宛てにのみお送りします。必ず確認可能なメールアドレスを入力してください。 お名前 メールアドレス(結果の詳細をお送りします) 利用規約に同意する。 1. Pythonの特徴に関する次の記述のうち、誤っているものはどれか。 Pythonは柔軟な配列や集合、ディクショナリといった、非常に高水準のデータ型を組み込みで持つ。データ型の一般性が高いためPythonの対応可能な問題領域はAwkより広いが、Perlと比べると同程度である。 Pythonは簡単に使えるとはいえ本格的なプログラム言語であり、大きなプログラムを書くために提供された構造やサポート、エラーチェック機構が、シェルスクリプトなどに比べはるかに多く存在する。 PythonはWindows、MacOS、Linuxなど多くの環境で動作する、拡張可能なフリーのオープンソースソフトウェアである。 Pythonでは、文のグルーピングはカッコで囲うことでなくインデントで行われるなど、プログラムを小さく読みやすく書けるという特徴がある。 Pythonはインタープリタ言語であり、コンパイル等が必要でないため、プログラム開発における時間を節約してくれる。インタープリタは対話的に使うことも可能である。 2. Pythonインタープリタに関する次の記述のうち、誤っているものはどれか。 標準入力がttyデバイスに接続された状態で起動した場合は、コマンドを対話的に読み込んで実行するが、引数にファイル名を与えたり、標準入力からファイルを与えて起動した場合は、このファイルに入った「スクリプト」を読み込んで実行する。 インタープリタがスクリプト名(スクリプトのファイル名)と続く引数群を知らされると、これらは文字列のリストとなる。import listitems を実行することで、このリストにアクセスできる。 デフォルトの設定では、プライマリプロンプトの記号は「>>>」、セカンダリプロンプトの記号は「…」である。 インタープリタを対話モードで起動すると、はじめにバージョンと著作権からはじまるメッセージが表示され、その後にプライマリプロンプトが表示される。 プログラムの冒頭で「# coding: (エンコーディング方式)」のようにすると、デフォルト以外のエンコーディングを使うことも可能である。 3. 数値に関する次の記述のうち、正しいものはどれか。 演算を行うための「 + 」や「 - 」などの記号はオペランドと呼ばれ、演算の対象は演算子と呼ばれる。 切り下げ除算を行って整数解を得たい場合(剰余を捨てたい場合)は「 / 」を使い、剰余のみ得たい場合は「 // 」を使う。 変数は、定義(値の代入)や宣言がなされないまま使おうとするとエラーとなる。 整数はintという型を持つ。小数点を伴う数はfloatという型を持つ。除算は常にfloatを返す。 対話モードでは、最後に表示した式を変数「**」(アスタリスク2つ)に代入してある。 4. 次のコードの実行結果として正しいものはどれか。a = 2 b = a ** 3c = b / 2 + 3 d = 10e = d // b f = d % c print ('{1}, {0}'.format(e, f)) 3.0, 1 3.0, 1.25 1.0, 1.25 4.0, 1 1.6666666666666667, 1 5. 文字列に関する次の記述のうち、正しいものはどれか。なお「\」はバックスラッシュに読み替えること。 バックスラッシュを前置した文字が特殊文字に解釈されるのが嫌な時は、最初の引用符の前に「print(raw'C:\some\name')」のように「raw」を記述する。 文字列リテラルを複数行にわたり書く一つの方法は、トリプルクオートを使う方法である。最初の改行などの行末文字が文字列に含まれることを避けたい場合は、行末に「-」を置く。 変数と文字列リテラルの連結、そして変数同士の連結には「.」(ドット)を使う。 文字列は「*」で繰り返すことができる。「'w' + 3 * 'o'」は対話型インタープリタで出力「wwwo」が得られる。 対話型インタープリタでは文字列は引用符に囲まれ、特殊文字はバックスラッシュでエスケープされた状態で出力される。print()関数では全体を囲む引用符が除去され、エスケープ文字や特殊文字がプリントされた状態で出力される。 6. 以下の結果を得たい場合、コードの【A】に入るものとして正しいものはどれか。[実行結果]sNow[ コード ]Zen = 'NowIsBetterThanNever'print('{}{}{}'.format(【A】)) Zen[5], Zen[-4], Zen[2:4] Zen[4], Zen[-6], Zen[1:3] Zen[4], Zen[-5], Zen[1:3] Zen[4], Zen[-5], Zen[1:2] Zen[5], Zen[-4], Zen[1:3] 7. 次の変数Zenに関して指定した場合、実行時にエラーとならないものはどれか。Zen = 'BeautifulIsBetterThanUgly' Zen[1000:10000] Zen[50] Zen[10] = 'a' Zen['B'] Zen[1:10] + b 8. 次のコードの実行結果として正しいものはどれか。a, b = 0, 1while a < 10: print(a, end=',') a, b = b, a+b 1,1,2,3,5,8, 0,1,1,2,3,5,8, 1,2,3,5,8,13, 0,1,2,3,5,8, 0,1,2,2,3,5, 9. 次のコードの実行結果として正しいものはどれか。months = ['January', 'March', 'May', 'July']months.append('September')for month in months[:]: if len(month) > 5: months.insert(0,month)print(months, end = '') ['March', 'January', 'January', 'March', 'May', 'July'] ['March', 'January', 'January', 'March', 'May', 'July', 'September'] ['September', 'March', 'January', 'January', 'March', 'May', 'July', 'September'] ['September', 'January', 'January', 'March', 'May', 'July', 'September'] ['September', 'March', 'January', 'May', 'July'] 10. 次の結果を得たい場合、コード【A】【B】に入る組み合わせとして適切なものはどれか。なお【A】は★aの行と、【B】は★bの行と同じ数の空白でインデントされている。[ 実行結果 ]2 is a prime number3 is a prime number4 equals 2 * 25 is a prime number6 equals 2 * 37 is a prime number8 equals 2 * 49 equals 3 * 3[ コード ]for n in range(2, 10): for x in range(2 ,n): …★b if n % x == 0: print(n, 'equals', x, '*', n//x) …★a 【A】 【B】 print(n,'is a prime number') 【A】continue 【B】 else: 【A】continue 【B】 else 【A】break 【B】 each: 【A】break: 【B】 else 【A】break 【B】 else: 11. 次のコードの実行結果として正しいものはどれか。for i in range(-3, -18, -3): print(i, end=", ") -3, 0, 3, 6, 9, 12, 15, -3, -6, -9, -12, -15, -18, -3, -6, -9, -12, -15, -6, -9, -12, -15, -18, -6, -9, -12, -15, 12. 次の結果を得たい場合、コードの2行目以降を代替するものとして正しいものはどれか。なお各選択肢の次の行には「 print(i, Zen[i]) 」が記述されるものとする。[ 実行結果 ]0 Now1 is2 better3 than4 never[コード]Zen = ['Now','is','better','than','never']for i ,v in enumerate(Zen): print(i, v) for i in range(len(Zen)): in i for Zen[0:5]: for i in range(Zen[0:5]): while i < range(len(Zen)): while i < len(Zen): 13. 次のコードの実行結果として正しいものはどれか。i = 1 i = 2 def f(arg): i = 3 print(arg)i = 4i = 5f(i) 1 2 3 4 5 14. 次のコードに関し、【A】の行の出力として正しいものはどれか。def culc(a, b, squares=[], cubes=[]): squares.append(a ** 2) cubes.append(b ** 3) return squares, cubesprint(culc(2,2))print(culc(3,3))print(culc(4,4)) 【A】print(culc(5,5)) ([16], [64]) ([4, 8], [9, 27], [16, 64]) ([4, 6, 8], [6, 9, 12]) ([4, 9, 16], [8, 27, 64]) ([8, 27, 64], [4, 9, 16]) 15. 次の関数を呼び出す際に、引数の指定として正しいものはどれか。def location(city, state='NewYork', country='USA'): print("I live in", country, ".") print("My company is located in",city,",",state,".") location(city='chiyoda', state='Tokyo', zipcode='1000004') location(state='California', country='USA', 'San Francisco') location(state='Jakarta', city='Cikini') location('Geelong', city='Melbourne') location() 16. 次のコード1行目の【A】【B】に入る組み合わせとして正しいものはどれか。[ コード ]def shop(name,【A】, 【B】): print("flowershop:", name) keys = sorted(argsX.keys()) for kw in keys: print(kw, ":", argsX[kw]) for Y in argsY: print(Y)shop("Iris","Open: 9:30 am","Close: 10:30 pm","Monday and holidays are closed.",bouquet="Sunflower",plants="Pachira",dried="Rose") 【A】argsX 【B】argsY 【A】*argsY 【B】**argsX 【A】**argsY 【B】*argsX 【A】*argsX 【B】**argsY 【A】**argsX 【B】*argsY 17. 次の記述のうち、誤っているものはどれか。 関数注釈(アノテーション)は関数の__annotations__属性にディクショナリとして格納され、関数のほかの部分にはいかなる影響も及ぼさない。 例えば「def func(a: int, b:str) -> value」と関数を記述したときにアノテーションに該当するものは「-> value」のみである。 docstringの1行目は、常にオブジェクトの目的の短く簡潔な要約を記述し、大文字で始まりピリオドで終わる行とすべきである。 docstringに2行目以降がある場合、2行目は空行としてようやくと他の記述を視覚的に分離すべきである。 PEP 8では、演算子の周囲やカンマの後ろにはスペースを入れるが、カッコのすぐ内側にはスペースを入れるべきではないとされる。 18. 次の結果を得たい場合に、コードの1行目~3行目を代替するものとして正しいものはどれか。[ 実行結果 ][0, 9, 36, 81][ コード ]squares = []for x in range(0, 10, 3): squares.append(x ** 2)print(squares) squares = [x in x ** 2 for range(0, 10, 3)] squares = [x for x ** 2 in range(0, 10, 3)] squares = [x ** 2 in x for range(0, 10, 3)] squares = [x ** 2 for range(0, 10, 3) in x] squares = [x ** 2 for x in range(0, 10, 3)] 19. 次の実行結果を得たい場合に、コードの2行目(★印の行)を代替するものとして正しいものはどれか。[実行結果][(1, 4, 8), (3, 9, 27), (5, 25, 125)][コード]matrix = [[1, 3, 5], [4, 9, 25], [8, 27, 125]]power = [[row[i] for row in matrix] for i in range(3)] ★print(power) power = list(zip(*matrix)) power = list(sum(*matrix)) power = list(zip(matrix)) power = set(sum(*matrix)) power = set(sum(matrix)) 20. 次の実行結果を得たい場合に、コード1行目~5行目を代替するものとして正しいものはどれか。[ 実行結果 ][(1, 3), (1, 2), (1, 5), (2, 3), (2, 5), (3, 2), (3, 5)][ コード ]combs = []for x in [1,2,3]: for y in [3,2,5]: if x != y: combs.append((x, y)) print(combs) combs = [(a,b) in a for [1,2,3] in b for [3,2,5] if a != b] combs = [[a,b] for a in [3,2,5] for b in [1,2,3] if a = b] combs = [(a,b) for list[1,2,3] for list[3,2,5] if a != b] combs = [(a,b) for a in [1,2,3] for b in [3,2,5] if a != b] combs = [[a,b] in a for [1,2,3] in b for [3,2,5] if a = b] 21. 次のコードの実行結果として正しいものはどれか。list = [-10, 1, 15, 20, 30] list.append(50)list.sort(reverse = True)list.insert(2,5)list.pop(-1)print(list) [50, 2, 30, 20, 15, 1] [50, 30, 20, 15, 1, -10] [50, 30, 5, 20, 15, 1] [-10, 1, 5, 15, 20, 30] [30, 20, 15, 5, 1, -10] 22. 次のコードの実行結果として正しいものはどれか。Zen = 'FlatIsBetterThanNested'print(Zen[0:20:3]) FItTNe tBtTns FtBtTnsd FtBtTns FItTN 23. データ構造に関する次の記述のうち正しいものはどれか。 ディクショナリに対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の対象は「キー」ではなく「値」である。 「set = {} 」において{}は空集合を生成する式であり、{}は空辞書を生成することはできない。 リストとタプルは変更可能(mutable)、集合は変更不能(immutable)である。 ディクショナリは変更不能(immutable)であるが、キーの型は変更可能(mutable)であり、その値は一意でなければならない。 リストとタプルは順序を持つ要素の集まりであるという共通点がある。 24. 対話モードで入力したときに「True」が返されるものは次のうちどれか。 (-1, -10, -3, -4) > (-1, -2, -5) 1 > -1 == (1-2) (1, 2) > (1, 2, -1) 'Matplotlib' > 'NumPy' > 'pandas' > 'scikit-learn' ('bb', 'c') > ('bcd', 'a') 25. モジュールに関する次の記述のうち、誤っているものはどれか。 パッケージとは、「ドット区切モジュール名」を使って、Pythonのモジュールを構築する方法である。 あるモジュールがインポートされるときにインタープリタが検索する順序は、まずビルトインモジュール、次にsys.path変数で得られるディレクトリである。シンボリックリンクを置いてあるディレクトリはモジュール検索パスに入らない。 sys.pathが初期化されている場所は、入力スクリプトのあるディレクトリ、PYTHONPATHであり、インストールごとのデフォルトは含まれない。 Pythonはソースファイルの最終更新日時をコンパイル済みのバージョンと比較し、再コンパイルが必要か判断する。これは完全に自動的に行われる。 コンパイル済みのモジュールはプラットフォーム非依存なので、ひとつのライブラリを異なるアーキテクチャのシステム間で共有できる。 26. モジュールが定義している名前を対話モードで確認したい。次のコードの2行目【A】に入るものとして正しいものはどれか。import sys【A】 mod(systems) mod(sys) mod() dir(mod) dir(sys) 27. 次のコードの実行結果として正しいものはどれか。import mathprint('{1:.5f}, {0:.3f}'.format(math.pi, math.e)) 3.142, 2.71828 3.14159, 2.718 2.71828, 3.142 2.718, 3.14159 1:3.14159f, 0:2.718f 28. 次のコードを実行して「整数a:」に「3」、「整数b:」に「0」を入力した場合の正しい結果はどれか。なお選択肢中の「, 」は改行に読み替えること。try: int_a = int(input('整数a:')) int_b = int(input('整数b:')) print(int_a ** 3) print((int_a ** 3) / int_b)except(ZeroDivisionError) : print('C')except(ValueError) as v: print(type(v)) print('D')except: print('E')else: print('F')finally: print('G') 27, 0, C, E, F, G 27, 0, C, F, G 27, C, E, F, G 27, F, G 27, C, G 29. エラーと例外に関する次の記述のうち誤っているものはどれか。 raise文を用いることで、指定の例外を意図的に発生させることができる。raiseの引数は送出する例外を示すものであり、例外インスタンスでも、Exceptionクラスの派生クラスであるクラス(例外クラス)でも構わない。 発生した例外に値が付随することもあり、これを例外の引数と呼ぶ。except 節では、例外名の後に変数を指定することができる。この変数は例外インスタンスに結び付けられており、instance.args に例外インスタンス生成時の引数が格納される。 [Ctrl]+[C]キーなどでユーザーがプログラムに割り込みをかけると、KeyError例外が送出される。 パーサ(構文解釈器)は違反のある行を表示し、最初にエラーが検知された点を小さな矢印で示す。エラーは矢印より前のトークンが原因である。 例外のほとんどはプログラムでは処理されず、その結果はエラーメッセージにあらわれる。エラーメッセージの最終行には、NameError、TypeErrorなど例外の型が記されている。 30. 次のコードを実行した場合には適切な方法で、あるクリーンアップがなされる。具体的にはどのような処理がなされているか。with open("file.txt") as f: for line in f: print(line, end="") close("file.txt") file.close() file.clean() f.close() f.clean() 31. 次の実行結果を得たい場合、コードの【A】【B】【C】に入る組み合わせとして適切なものはどれか。[ 実行結果 ]David is astrategicAI[コード]class wexal(Exception): passname = 'David' def func(name: int): try: if name != 0: raise_his_character(name) except wexal: print('【A】') raise Exceptiondef raise_his_character(a): print(a, '【B】') raise wexal print('【C】')try: func(name)except Exception: print('【D】') 【A】strategic 【B】is a 【C】naughty boy 【D】AI 【A】is a 【B】strategic 【C】naughty boy 【D】AI 【A】strategic 【B】is a 【C】AI 【D】naughty boy 【A】naughty boy 【B】is a 【C】strategic 【D】AI 【A】AI 【B】strategic 【C】is a 【D】naughty boy 32. 次のコードの実行結果として正しいものはどれか。なお各選択肢内は改行されているものとして読み替えること。def scope(): loc = "init" def do_local(): loc = "local" def do_nonlocal(): nonlocal loc loc = "nonlocal" def do_global(): global loc loc = "global" do_local() print("A:", loc) do_nonlocal() print("B:", loc) do_global() print("C:", loc)scope()print("D:", loc) A: init B: local C: nonlocal D: global A: init B: nonlocal C: nonlocal D: global A: init B: local C: global D: global A: local B: nonlocal C: global D: global A: local B: nonlocal C: nonlocal D: global 33. 次の実行結果を得たい場合、コードの【A】【B】の行および【C】に入る組み合わせとして適切なものはどれか。なお【A】は★aの行と、【B】は★bの行と同じ数の空白でインデントされている。[ 実行結果 ]Need Speed?I'm Saya.Need Speed?I'm David.[ コード ]class kusanagi(): def s(self): print("Need Speed?") …★a 【A】 def m(self): …★b print("I'm Saya.")class wexal(kusanagi): def 【B】: print("I'm David.")k = kusanagi()w = wexal()k.s()w.【C】 【A】self.m() 【B】m(self): 【C】s() 【A】self.m() 【B】self(m): 【C】s() 【A】self(m) 【B】m(self): 【C】s() 【A】self(m) 【B】self(m): 【C】s(self) 【A】self.s() 【B】m(self): 【C】s(self) 34. コマンドライン上で「python3 script.py one two three four five」を実行したときに、以下の結果を得たい。コード2行目の【A】に入るものとして正しいものはどれか。[ 実行結果 ]['script.py', 'one', 'two'][ script.pyのコード ]import sysprint(【A】) sys.argv[0:2] sys.argv[0:3] sys.argv[1:3] sys.args[1:3] sys.args[1:4] 35. 次の正規表現を用いたコードの【A】の部分に入れたときエラーとなるものはどれか。import reprog = re.compile('(K|S)u(r|s)(a|o)nf?(a|o)(o|m)?g?i?(saya)?', re.IGNORECASE)【A】print(ret[0]) ret = prog.search('KUSANAGI') ret = prog.search('Kuronami') ret = prog.search('kurofune') ret = prog.search('SUSANOO') ret = prog.search('kusanomi') 36. 対話モードでrandomモジュールを用い以下のような各結果を得たい場合、各コード【A】~【C】に入る正しい組み合わせはどれか。>>> import random>>> random.【A】(['apple', 'pear', 'banana']) 'apple' >>> random.【B】(range(10),3) [3, 7, 5]>>> random.【C】(5)4 【A】choice 【B】random 【C】rand 【A】choice 【B】sample 【C】rand 【A】choice 【B】sample 【C】randrange 【A】sample 【B】choice 【C】rand 【A】sample 【B】random 【C】randrange 37. 今日の日付を次の実行結果のように得たい場合、コードの1行目【A】と2行目の【B】に入る適切なものはどれか。[ 実行結果 ]2020-06-27[ コード ]【A】now = 【B】print(now) 【A】import date 【B】datetime.date(today) 【A】from date 【B】datetime.today() 【A】import datetime from date 【B】datetime.today() 【A】from datetime import date 【B】date.today() 【A】import date from datetime 【B】datetime.today() 38. loggingモジュールのメッセージの優先度として正しいものはどれか。左から順に優先度が低いものとする。 DEBUG、INFO、WARNING、ERROR、CRITICAL INFO、DEBUG、WARNING、ERROR、CRITICAL DEBUG、INFO、ERROR、WARNING、CRITICAL INFO、DEBUG、ERROR、CRITICAL、WARNING DEBUG、INFO、CRITICAL、ERROR、WARNING 39. 仮想環境とパッケージに関する次の記述のうち誤っているものはどれか。 pip install でパッケージ名を指定し、そのパッケージ名の後ろに==とバージョン名を付けると、そのバージョンのパッケージをインストールできる。 pip install --upgradeとすることで、当該パッケージを最新バージョンにアップグレードすることができる。 「pip list パッケージ名」で、ある特定のパッケージの詳細情報が表示される。 pip uninstall にパッケージ名を指定すると、その仮想環境からパッケージを削除できる。削除対象となるパッケージの複数指定も可能である。 pip freezeはその仮想環境にインストールされたすべてのパッケージを、pip install向けの形式で出力する。 40. 次の記述に関して誤っているものはどれか。 デフォルト設定ではユーザーディレクトリの「.python_history」ファイルにヒストリが保存される。ヒストリは対話型インタープリタセッションで利用できる。 [Tab]キーを押すと補完機能が呼び出せる。この機能はPythonの文(命令)の名前、現在のローカル変数、使用できるモジュール名を検索するものである。 拡張された対話型インタープリタとしてbpythonがある。これはタブ補完、オブジェクト探索、高度なヒストリ管理などの機能を持つ。 bpythonに類似した拡張対話環境にIPythonがある。IPythonは「pip install ipython」でインストールでき、IPythonの対話モードはipythonコマンドで起動できる。 変数とモジュールの補完機能は、インタープリタの起動時には有効になっていないため設定が必要である。 Time's up試験は終了です。「回答を送信」ボタンを押下してください。