はじめに
本講座では、一問一答形式を通して「Python 3 エンジニア認定 基礎試験」の範囲を学んでいただきます。
実際の試験では四肢択一(四択)の出題形式です。これに合わせて4択形式で進めるのもよいのですが、
本講座では1択ずつ回答、解説することで、体系的に知識を定着できるように制作しています。
受講方法
正しい、または、誤り、である問題の文章が表示されます。
正しいか誤りか考えた上で、問題の下にある回答を押してください。回答はリスト形式になっており、押下すると開きます。
解説を読んでいただき、次の問題に進んでください。
・プライバシーポリシーと免責
本サイトはブラウザのCookieを使用しています。
個人情報を利用することはありません。
本サイトは合格を約束するものではありません。
管理者はいかなる責任も負いかねます。
基礎・初級
問題1
Python3は、Windows、Mac OS X、UNIXで使える。
◯正しい
Python 3は、主要なすべてのOS(オペレーティングシステム)で動作するように設計されたクロスプラットフォームなプログラミング言語です。
解説
Windows: Microsoftが提供するOS。公式インストーラーが提供されています。
Mac OS X (macOS): Appleが提供するOS。標準でインストールされていることも多いですが、公式サイトから最新版を導入できます。
UNIX: LinuxやBSDなどのUNIX系OSを含みます。これらはサーバーなどでよく使われており、Pythonがシステムの一部として組み込まれていることが一般的です。
このように、使うパソコンの種類を選ばずに学習や開発ができる点がPythonの大きなメリットの一つです。
○正しい
Python3は「インタプリタ言語」と呼ばれる種類のプログラミング言語であり、人間が書いたソースコードをコンピュータが実行する際に、一行ずつ即座に解釈して実行します。
C言語やJavaのような「コンパイル言語」では、プログラムを実行する前にあらかじめソースコード全体をコンピュータ専用の言葉に変換する「コンパイル」という作業が必要になります。しかし、Python3はその作業を自動的に、あるいは実行と同時に裏側で行ってくれるため、ユーザーが手動でコンパイルを行う必要はありません。
そのため、プログラムを書き換えたらすぐに実行して結果を確認できるという利点があります。
問題3
Python3は、文のグルーピングはカッコで囲う。
×誤り
Python3では、文のまとまり(ブロック)を表現するためにカッコ { } は使いません。その代わりに、行の先頭に空白を入れる「インデント」という仕組みを使って、どこからどこまでがひと塊の処理なのかを判別します。
多くのプログラミング言語ではカッコを使いますが、Pythonは見た目の美しさと読みやすさを重視しているため、このインデントのルールが非常に厳格に決まっています。
以下のコードを見てください。if文の中に含まれる処理は、行の先頭が下がっている(インデントされている)ことがわかります。
Python
score = 80
if score > 70:
print("合格です")
print("おめでとうございます")
もしこのインデントがずれていたり、忘れていたりすると、コンピュータは「どこまでがif文の処理かわからない」と判断してエラーを出してしまいます。
問題4
Python3は、インタープリタは対話的に使うことができる。
〇正しい
Python3のインタープリタは「対話型モード(インタラクティブモード)」として使うことができます。これは、キーボードからプログラムを1行入力するごとに、その結果がすぐに画面に表示される仕組みのことです。
通常、プログラミングは「プログラムを書いて保存し、実行する」という手順が必要ですが、対話型モードを使えば、ちょっとした計算をしたり、新しい関数の動きを試したりする際に、保存の手間をかけずにその場で動作を確認できます。
パソコンのターミナルやコマンドプロンプトで「python」と入力して実行すると、以下のような状態で入力を待つ画面に切り替わります。
Python
>>> 1 + 1
2
>>> print("こんにちは")
こんにちは
この「>>>」という記号が表示されている間は、Pythonと直接会話をするようにプログラムを動かすことが可能です。
問題5
Python3は、インタープリタはend()で終了する。
×誤り
Python3の対話型インタープリタを終了させるには、end() ではなく exit() または quit() という関数を使います。
endという言葉は「終わり」を意味しますが、Pythonのプログラムにおいては「print文の最後に付け加える文字を指定するオプション(引数)」などで使われることはあっても、インタープリタそのものを終了させる命令としては定義されていません。
対話型モードを終了して通常の画面に戻りたいときは、以下のように入力してEnterキーを押します。
Python
exit()
また、キーボードのショートカットを使って終了させることもできます。Windowsの場合は「Ctrlキーを押しながらZを押した後にEnter」、MacやLinuxの場合は「Ctrlキーを押しながらD」を押すことで、文字を打ち込まずに終了することが可能です。
問題6
Python3は、インタープリタでコマンド入力を促すプロンプトを「プライマリプロンプト」という。
〇正しい
Python3の対話型インタープリタを起動した際、ユーザーにコマンドの入力を促すために表示される記号「>>>」のことを「プライマリプロンプト」と呼びます。
このプライマリプロンプトが表示されているときは、Pythonが新しい命令を受け付ける準備ができている状態を指します。
一方で、if文やfor文などの続きを入力する必要がある場合には、記号が「...」に変わります。これを「セカンダリプロンプト」と呼びます。これら2つのプロンプトによって、今から新しい命令を書くのか、それとも前の行の続きを書くのかを区別することができます。
実際の画面では以下のように表示が切り替わります。
Python
>>> x = 10 # これがプライマリプロンプト
>>> if x > 0: # Enterを押すと次の行へ
... print("正の数です") # これがセカンダリプロンプト
このように、プロンプトの形を見るだけで、インタープリタがどのような入力状態にあるのかを判断できるようになっています。
問題7
Python3は、デフォルトではPythonのソースコードはUTF-8でエンコードしてあるものとして扱われる。
〇正しい
Python3では、プログラムが書かれたファイル(ソースコード)は、標準で「UTF-8」という文字コードで保存されているものとして読み込まれます。
文字コードとは、コンピュータが文字を扱うための番号札のようなルールです。以前のPython2や他の古いプログラミング言語では、日本語を扱う際に特別な設定が必要なこともありましたが、現在のPython3は世界共通で広く使われているUTF-8を標準に採用しているため、特別な指定をしなくても日本語のコメントや文字列をスムーズに扱うことができます。
もし、意図的に別の文字コード(例えばShift_JISなど)でファイルを保存して実行したい場合は、ファイルの1行目か2行目に以下のような特殊なコメントを記述して、Pythonに教えてあげる必要があります。
Python
# -*- coding: shift_jis -*-
print("日本語を表示します")
しかし、基本的にはこの設定を書かずに済むよう、ファイルを保存する側の設定をUTF-8にしておくのが現代のプログラミングでは一般的です。
問題8
Python3は、デフォルト以外のエンコーディングを使うことができる。
〇正しい
Python3は標準ではUTF-8という文字コードを使用しますが、必要に応じてそれ以外のエンコーディング(Shift_JISやEUC-JPなど)を使ってソースコードを記述することも可能です。
コンピュータに「このファイルはUTF-8ではなく、別のルールで書かれています」と伝えるためには、ファイルの先頭(1行目または2行目)に特別な形式のコメントを記述します。これを「エンコーディング宣言」と呼びます。
例えば、Windowsで昔から使われているShift_JISという形式でプログラムを書きたい場合は、以下のように記述します。
Python
# -*- coding: shift_jis -*-
print("これはShift_JISで書かれた日本語です")
この記述がない状態でUTF-8以外の文字コードを使って日本語などを書き込むと、Pythonは正しく文字を読み取ることができず「SyntaxError(文法エラー)」を出してしまいます。
基本的には世界標準のUTF-8を使うのが一番安全ですが、古いシステムで作成されたファイルを読み書きする場合など、特定の理由があるときにはこの機能が非常に役立ちます。
問題9
Python3は、
# A
foo = 1 # B
text = 'HeAlo. # C'
このとき #A、#B、#C、全てコメントとして扱われる。
×誤り
Pythonにおいて、シャープ記号 # がコメントとして機能するのは、それが「文字列の外」にあるときだけです。
問題の例では、# A と # B はプログラムの命令の外側にあるため、コメントとして扱われ、実行時には無視されます。しかし、# C はシングルクォート ' ' で囲まれた文字列の中に含まれているため、コメントではなく「ただの文字(データ)」として扱われます。
それぞれの扱いは以下のようになります。
# A:行の先頭にあるため、その行全体がコメントになります。
# B:命令の後に記述されており、そこから行末までがコメントになります。
# C:文字列の一部なので、そのまま変数 text の中身に保存されます。
以下のコードを実行して確かめてみましょう。
Python
# A
foo = 1 # B
text = 'HeAlo. # C'
print(foo)
print(text)
これを実行すると、foo の値である 1 と、文字列である HeAlo. # C がそのまま画面に表示されます。もし # C がコメントであれば、画面には HeAlo. としか表示されないはずですが、実際には # C も文字として出力されます。
問題10
Python3は、文字列は+演算子で連結できない。
×誤り
Python3では、+ 演算子を使って文字列を連結することができます。
数値の計算で使われる + は「足し算」を意味しますが、文字列同士で + を使うと、左側の文字列のすぐ後ろに右側の文字列をくっつけて、一つの新しい文字列を作るという動作になります。
以下のコードを実行すると、苗字と名前が連結されて表示されます。
Python
last_name = "山田"
first_name = "太郎"
full_name = last_name + first_name
print(full_name)
このとき、注意が必要なのは「文字列と数値」を + で連結しようとすることです。Pythonはデータ型に厳しいため、文字列に数値をそのまま足そうとするとエラーになります。数値を連結したい場合は、str() という命令を使って数値を文字列に変換する必要があります。
Python
age = 16
# print("私は" + age + "歳です") # これはエラーになります
print("私は" + str(age) + "歳です") # 正しい書き方
問題11
Python3は、文字列はインデックス指定(番号による指定)ができない。
×誤り
Python3では、文字列の中の特定の文字を取り出すために、インデックス(添字)を使って場所を指定することができます。
文字列の各文字には、先頭から順番に「0, 1, 2...」と番号が振られています。この番号を、文字列の変数名の後ろに角カッコ [ ] を付けて記述することで、その位置にある文字を取り出せます。
注意点として、プログラミングの世界では番号は「1」からではなく「0」から数え始めます。
以下のコードで確認してみましょう。
Python
word = "Python"
# 0番目(1文字目)を取り出す
print(word[0])
# 2番目(3文字目)を取り出す
print(word[2])
このコードを実行すると、それぞれ「P」と「t」が表示されます。また、マイナスの数値を使って word[-1] と書くと、一番後ろの文字(この場合は「n」)を簡単に取り出すこともできます。
ただし、インデックスを使って「文字を取り出す」ことはできますが、word[0] = "J" のように「中身の文字を直接書き換える」ことはできないというルールがあります。
問題12
Python3は、文字列は値を変更できる。
×誤り
Pythonにおいて、文字列は「イミュータブル(不変)」という性質を持っており、一度作成した文字列の一部を後から直接書き換えることはできません。
例えば、数値のリスト(配列)であれば中身の一部を入れ替えることができますが、文字列で同じことをしようとするとエラーが発生します。
以下のコードを実行しようとすると、「'str' object does not support item assignment」というエラーになります。
Python
word = "Python"
# 0番目の 'P' を 'J' に書き換えようとするとエラー
word[0] = "J"
もし文字列の内容を変えたい場合は、元の文字列を書き換えるのではなく、必要な部分を切り貼りして「新しい文字列」を作り、それを元の変数に代入し直すという手順を踏みます。
Python
word = "Python"
# 最初の文字を「J」に変えた新しい文字列を作って代入し直す
word = "J" + word[1:]
print(word) # 結果は「Jython」になる
このように、一見すると変数の内容が変わったように見えても、実際にはコンピュータの中で新しいデータが作り直されています。
問題13
Python3は、リスト(list)は、作成した後に要素を書き換えたり追加したりできる。
〇正しい
Pythonのリストは、作成した後から中身を自由に変更できる「ミュータブル(可変)」という性質を持っています。
文字列の場合は一度作ると中身を書き換えられませんでしたが、リストであれば特定の場所(インデックス)の値を別の値に入れ替えたり、新しいデータを最後に追加したりすることが簡単にできます。
以下のコードで、値の変更と追加の動きを確認してみましょう。
Python
# リストの作成
fruits = ["りんご", "バナナ", "ぶどう"]
# 1. 要素を書き換える(バナナをオレンジに変更)
fruits[1] = "オレンジ"
# 2. 要素を最後に追加する
fruits.append("いちご")
print(fruits)
このコードを実行すると、結果は ['りんご', 'オレンジ', 'ぶどう', 'いちご'] となり、リストの内容が変化していることがわかります。
値を変更するときは角カッコ [ ] で場所を指定し、新しく追加するときは append() という命令を使うのが基本です。このように柔軟に中身を操作できるのがリストの大きな特徴です。
問題14
Python3は、タプル(tuple)は、文字列と同様に一度作成すると中身を変更できない。
〇正しい
Pythonのタプルは、文字列と同じように「イミュータブル(不変)」という性質を持っており、一度作成するとその中身を書き換えたり、新しく要素を追加したりすることができません。
リストは角カッコ [ ] を使って作成し、中身を自由に変更できましたが、タプルは丸カッコ ( ) を使って作成し、作成した瞬間にその中身が固定されます。
以下のコードを実行しようとすると、値を書き換えようとした部分で「'tuple' object does not support item assignment」というエラーが発生します。
Python
# タプルの作成
numbers = (1, 2, 3)
# 0番目の「1」を「100」に書き換えようとするとエラーになります
numbers[0] = 100
なぜ変更できない不便なものがあるのかというと、中身が変わらないことが保証されているため、プログラムの実行速度がリストよりも速くなったり、誤ってデータを書き換えてしまうミスを防げたりするメリットがあるからです。
設定値や日付のように、プログラムの途中で変わってほしくないデータをまとめて扱うときによく使われます。
問題15
Python3は、辞書(dict)の「キー(Key)」には、リストを使うことができる。
×誤り
Pythonの辞書の「キー」には、リストを使うことはできません。
辞書のキーには、一度作成したら中身が変更できない「不変(イミュータブル)」なデータしか使えないというルールがあります。リストは後から中身を書き換えることができる「可変(ミュータブル)」なデータであるため、キーとして登録しようとすると「TypeError: unhashable type: 'list'」というエラーが発生します。
もしリストを辞書のキーとして使おうとすると、以下のようなエラーになります。
Python
# エラーになる例
my_dict = {}
my_list = [1, 2]
my_dict[my_list] = "このキーはリストです"
辞書は、キーの値からデータの保管場所を素早く計算するため、途中で中身が変わってしまう可能性があるリストをキーにすることを禁止しています。
一方で、同じデータのまとまりでも、中身を変更できない「タプル」であれば辞書のキーとして使うことができます。
Python
# タプルならキーにできる
my_dict = {}
my_tuple = (1, 2)
my_dict[my_tuple] = "このキーはタプルです"
print(my_dict[(1, 2)])
問題16
Python3は、文字列リテラルを複数行にわたって書く場合は、トリプルクオーテーション(""" か ''')で囲う。
〇正しい
Python3で、改行を含んだ長い文字列をそのままソースコードに書き込みたい場合は、引用符を3つ並べた「トリプルクォート(三重引用符)」を使用します。
通常のシングルクォート ' ' やダブルクォート " " では、文字列の途中で改行を入れるとエラーになってしまいますが、トリプルクォートを使えば、入力した改行がそのままデータとして保持されます。
以下のコードのように記述することで、見たままの形で文字列を扱うことができます。
Python
introduction = """はじめまして。
私はPythonの学習用プログラムです。
よろしくお願いします。"""
print(introduction)
この方法は、関数の説明文(ドキュメント文字列)を書くときや、長いメッセージを表示させたいときによく使われます。また、ハッシュ記号 # を使わずに複数行をまとめてコメントアウトしたいときの代用手段としても利用されることがあります。
問題17
Python3は、次のプログラムを実行した際、出力される文字列は
TokyoGoGoTo
である。
s = 'Tokyo' + 'Go' * 2 + 'To'
print(s)
〇正しい
Python3では、文字列に対して + 演算子で「連結」、* 演算子で「反復(繰り返し)」を行うことができます。
算数の計算と同じように、プログラミングでも足し算より掛け算の方が優先されるというルールがあります。そのため、このプログラムではまず 'Go' * 2 の計算が行われ、その後に前後の文字列が連結されます。
具体的な計算の手順は以下の通りです。
まず 'Go' * 2 が計算され、'GoGo' になります。
次に 'Tokyo' と 'GoGo' が連結され、'TokyoGoGo' になります。
最後に 'To' が連結され、結果として 'TokyoGoGoTo' という文字列が完成します。
実際にコードを動かした際の結果は以下のようになります。
Python
s = 'Tokyo' + 'Go' * 2 + 'To'
print(s) # 出力:TokyoGoGoTo
もし 'TokyoGo' 全体を2回繰り返してから最後に 'To' を付けたい場合は、( 'Tokyo' + 'Go' ) * 2 + 'To' のようにカッコを使って優先順位を変える必要があります。
問題18
Pythonで以下のプログラムを実行した際、出力される結果は
Base2ball
である。
word = 'Base' + 'ball' * 2
print(word)
×誤り
Pythonでは、文字列の足し算(連結)よりも掛け算(反復)が優先して計算されます。そのため、まず 'ball' * 2 が計算され、その結果に 'Base' がくっつく形になります。
具体的な計算順序は以下の通りです。
'ball' * 2 を計算して 'ballball' になります。
'Base' と 'ballball' を連結します。
結果として 'Baseballball' という文字列になります。
もし、問題文にあるような「2」という数字を文字列の間に入れたい場合は、* 演算子ではなく、文字列としての '2' を直接足す必要があります。
Python
word = 'Base' + 'ball' * 2
print(word) # 出力:Baseballball
# もし Base2ball と出したい場合
word_2 = 'Base' + '2' + 'ball'
print(word_2) # 出力:Base2ball
このように、演算子の優先順位を意識することが大切です。
問題19
次のコードを実行したとき、出力結果は 5 である。
s = 'Apple'
print(len(s))
〇正しい
Python3において、len() はオブジェクトの「長さ」や「要素の数」を取得するための関数です。文字列に対して使用した場合は、その文字列に含まれている文字の数を返します。
今回のケースでは、変数 s に代入された 'Apple' という文字列の文字数を数えることになります。
具体的に数えてみると、以下のようになります。
1文字目:A
2文字目:p
3文字目:p
4文字目:l
5文字目:e
合計で5文字あるため、len(s) の結果は 5 となり、画面には 5 が出力されます。
この len() 関数は非常に便利で、文字列だけでなく、リストの中身が何個あるか、辞書に何組のデータが入っているかなどを調べる際にも全く同じ書き方で使うことができます。
Python
# リストの場合も要素の数を教えてくれます
fruits = ['Apple', 'Banana', 'Orange']
print(len(fruits)) # 出力は 3 になります
問題20
次のコードを実行したとき、出力結果は 11 である。
text = 'Hello World'
print(len(text))
〇正しい
Pythonの len() 関数で文字列の長さを数える際、アルファベットだけでなく「スペース(空白)」も1文字としてカウントされます。
今回の 'Hello World' という文字列の内訳を詳しく見てみると、以下のようになります。
H
e
l
l
o
(スペース)
W
o
r
l
d
このように、文字と文字の間にある空白もデータとしてしっかり数えられるため、合計で11文字となります。
もし、この文字列からスペースを除いた純粋なアルファベットだけの数を数えたい場合は、replace() という命令を使ってスペースを消してから len() で数えるといった工夫が必要になります。
Python
text = 'Hello World'
# スペースを消してから数える例
no_space_text = text.replace(' ', '')
print(len(no_space_text)) # これなら 10 と出力されます
問題21
次のコードを実行したとき、出力結果は [10, 20] である。
a = [10, 20, 30, 40, 50]
print(a[0:2])
〇正しい
Pythonのリストで [開始位置:終了位置] と指定して一部分を取り出す操作を「スライス」と呼びます。
スライスには「開始位置は含むが、終了位置は含まない」という重要なルールがあります。今回の a[0:2] という指定の場合、インデックスが「0」の要素から「2」の直前、つまり「0番目と1番目」の要素を取り出すことになります。
リスト a の中身を順番に見ていくと以下のようになります。
このうち、0番目と1番目を取り出すので、結果は [10, 20] となります。
Python
a = [10, 20, 30, 40, 50]
# 0番目から2番目の手前までを取り出す
print(a[0:2]) # [10, 20]
# 1番目から4番目の手前までを取り出すなら
print(a[1:4]) # [20, 30, 40]
このように、終わりの番号は「その番号の要素は含まない」という点に注意するのが、スライスを使いこなすコツです。
問題22
次のコードのように、開始位置を省略して [:3] と書いた場合、リストの先頭からインデックス2までの要素(計3つ)が取得される。
a = [10, 20, 30, 40, 50]
print(a[:3])
〇正しい
Pythonのスライスにおいて、コロン : の左側(開始位置)を省略すると、自動的に「リストの先頭(インデックス0)」からと見なされます。
今回の a[:3] という指定は、a[0:3] と書いたのと同じ意味になります。スライスのルールである「終了位置(インデックス3)の直前まで」が適用されるため、取り出されるのはインデックス 0, 1, 2 の合計3つの要素です。
]
実際にリストの中身を当てはめると以下のようになります。
0番目:10
1番目:20
2番目:30
(3番目の40は含まれません)
したがって、出力結果は [10, 20, 30] となります。
Python
a = [10, 20, 30, 40, 50]
# 先頭から3つの要素を取得
print(a[:3]) # [10, 20, 30]
# 逆に、特定の位置から最後までを取得したい場合は右側を省略します
print(a[2:]) # [30, 40, 50] (インデックス2から最後まで)
スライスの開始や終了を省略する書き方は、コードを短く読みやすくできるため、Pythonでは非常によく使われるテクニックです。
問題23
次のコードを実行したとき、出力結果は 4 である。
data = [10, 20, 30, 40]
print(len(data))
〇正しい
Pythonの len() 関数は、文字列の長さを数えるときと同様に、リストに対して使用した場合は「リストの中に含まれる要素の数」を返します。
今回のリスト data の中身を確認すると、以下のようになっています。
10
20
30
40
全部で 4つ の要素が入っているため、len(data) を実行すると 4 という数値が得られ、それが画面に出力されます。
リストの要素がどれだけ複雑になっても(数値、文字列、あるいはリストの中にリストが入っていても)、一番外側のリストに直接入っている「個数」を正確に教えてくれます。
Python
# 中身がバラバラでも個数を数えます
mixed_data = [10, "Hello", [1, 2], True]
print(len(mixed_data)) # これも 4 になります
問題24
次のコードのように、リストの中に文字列や数値が混在していても、len() 関数は正しく要素の数を返すことができる。
mixed_list = [1, 'Apple', 3.14]
print(len(mixed_list))
〇正しい
Pythonのリストは、異なるデータ型(数値、文字列、浮動小数点数など)を一つのまとまりとして保持することができ、len() 関数はそれらがどのような種類であっても、一つの「要素」として正確にカウントします。
今回の mixed_list の中身を数えると以下のようになります:
1 (整数)
'Apple' (文字列)
3.14 (浮動小数点数)
合計で 3つ の要素があるため、len(mixed_list) は 3 を返し、プログラムの実行結果も 3 となります。
Python
mixed_list = [1, 'Apple', 3.14]
print(len(mixed_list)) # 出力:3
このように、Pythonのリストは非常に自由度が高く、種類の違うデータをまとめて管理するのに適しています。
問題25
次のコードを実行したとき、出力結果は B である。
score = 80
if score >= 90:
print('A')
elif score >= 70:
print('B')
else:
print('C')
〇正しい
Pythonの if-elif-else 構文は、上から順番に条件を判定し、最初に条件が一致(True)したブロックだけを実行する仕組みです。
今回のプログラムの流れを追ってみましょう。
まず if score >= 90: を判定します。80 >= 90 は正しくないので、次の条件へ進みます。
次に elif score >= 70: を判定します。80 >= 70 は正しい(True)ので、このブロックの中にある print('B') が実行されます。
一度条件が一致すると、それ以降の else などの処理はスキップされます。
結果として、画面には B が出力されます。
Python
score = 80
if score >= 90:
print('A')
elif score >= 70:
# 80は70以上なので、ここが実行される!
print('B')
else:
print('C')
もし score = 60 だった場合は、すべての条件に当てはまらないため、最後の else に進み C が出力されることになります。
問題26
次のコードを実行したとき、出力結果は 10以上 である。
Python
x = 10
if x > 10:
print('10より大きい')
elif x == 10:
print('10ちょうど')
else:
print('10未満')
×誤り
出力される結果は「10以上」ではなく、「10ちょうど」です。
このプログラムの条件分岐(比較演算子)に注目して、処理の流れを確認してみましょう。
まず if x > 10: を判定します。x は 10 なので、「10より大きい」という条件には当てはまりません(10は10より大きくないため)。
次に elif x == 10: を判定します。x は 10 なので、この条件は True(正解) となります。
その結果、print('10ちょうど') が実行されます。
もし「10以上」という文字列を出力させたい場合は、コードを以下のように書く必要があります。
Python
x = 10
if x >= 10: # 「10以上」という条件(10を含む)
print('10以上')
else:
print('10未満')
Pythonでは、> (より大きい)と >= (以上)は明確に区別されます。境界線となる数値(今回なら10)が含まれるかどうかに注意が必要です。
問題27
次のコードを実行したとき、出力結果は 1 2 3 が順に表示される。
Python
numbers = [1, 2, 3]
for n in numbers:
print(n)
〇正しい
Pythonの for 文は、リストやタプルなどのデータの集まりから、要素を一つずつ順番に取り出して繰り返し処理を行うための構文です。
このプログラムの動きを分解すると、以下のようになります。
リスト numbers の最初の要素 1 が変数 n に代入され、print(1) が実行されます。
次の要素 2 が変数 n に代入され、print(2) が実行されます。
最後の要素 3 が変数 n に代入され、print(3) が実行されます。
リストの要素をすべて取り出し終えたので、繰り返し処理が終了します。
実行結果は以下の通り、各数字が改行されて順番に表示されます。
Plaintext
1
2
3
このように、データの数だけ自動的に処理を繰り返してくれるのが for 文の便利なところです。
問題28
次のコードを実行したとき、文字列 'Hi' が 3回 繰り返し表示される。
Python
for i in [1, 2, 3]:
print('Hi')
〇正しい
このプログラムでは、リスト [1, 2, 3] の要素の数だけ for 文の処理が繰り返されます。
リストの中身が 1, 2, 3 という具体的な数値であっても、print('Hi') の部分でその数値(変数 i)を使わずに固定の文字列を出力させているため、単純に「リストの要素の数(3回)」だけ 'Hi' が表示されることになります。
処理の流れは以下の通りです:
i に 1 が入り、'Hi' を表示。
i に 2 が入り、'Hi' を表示。
i に 3 が入り、'Hi' を表示。
このように、リストの中身そのものを使わなくても、「〇回繰り返したい」という目的のために for 文を使うことができます。
Python
for i in [1, 2, 3]:
print('Hi')
# 出力結果:
# Hi
# Hi
# Hi
問題29
次のコードを実行したとき、出力結果は 0 1 2 3 4 が順に表示される。
Python
for i in range(5):
print(i)
〇正しい
Pythonの range() 関数は、連続した整数の並びを自動的に生成してくれる便利な機能です。
range(5) と書いた場合、「0から始まって、指定した数(5)の直前まで」の整数を順に生成します。スライスのルールと同様に、終わりの数は含まれないのがポイントです。
このプログラムの動きを順番に見ると以下のようになります。
range(5) によって 0, 1, 2, 3, 4 という数字の列が用意されます。
まず i に 0 が入り、print(0) が実行されます。
次に i に 1 が入り、print(1) が実行されます。
これを繰り返して、最後に i に 4 が入って表示されたところで終了します。
実行結果は以下の通りです。
Plaintext
0
1
2
3
4
「5回処理を繰り返したい」というときに、リスト [0, 1, 2, 3, 4] を手書きする代わりに range(5) と書くだけで済むため、Pythonでは非常によく使われる書き方です。
問題30
次のコードを実行したとき、何も出力されずに終了する。
Python
for i in range(0):
print('Hello')
〇正しい
range(0) は、「0から始まって、0の直前まで」の数字の列を作ろうとしますが、開始地点がすでに終了地点に達している(あるいは超えている)ため、中身が空っぽの状態になります。
Pythonの for 文は、取り出す要素が一つもない場合、ループ内の処理(今回なら print('Hello'))を一度も実行せずに終了します。
このプログラムの挙動を整理すると以下のようになります。
range(0) を評価しますが、要素が空のため、変数 i に代入するものがありません。
そのため、print('Hello') は一度も呼び出されません。
そのままプログラムは次の行(あるいは終了)へ進みます。
Python
for i in range(0):
print('Hello')
# 実行しても何も表示されません
ちなみに、range(-5) のようにマイナスの数値を指定した場合も、同様に空の範囲となり、何も実行されません。
問題31
以下のコードを実行すると、出力結果は「0」と「1」の2行になる。
Python
for i in range(4):
if i == 2:
break
print(i)
〇正しい
range(0) は、「0から始まって、0の直前まで」の数字の列を作ろうとしますが、開始地点がすでに終了地点に達している(あるいは超えている)ため、中身が空っぽの状態になります。
Pythonの for 文は、取り出す要素が一つもない場合、ループ内の処理(今回なら print('Hello'))を一度も実行せずに終了します。
このプログラムの挙動を整理すると以下のようになります。
range(0) を評価しますが、要素が空のため、変数 i に代入するものがありません。
そのため、print('Hello') は一度も呼び出されません。
そのままプログラムは次の行(あるいは終了)へ進みます。
Python
for i in range(0):
print('Hello')
# 実行しても何も表示されません
ちなみに、range(-5) のようにマイナスの数値を指定した場合も、同様に空の範囲となり、何も実行されません。
問題32
次のコードを実行したとき、出力結果の最後に表示される数値は 5 である。
for i in range(1, 5):
print(i)
×誤り
出力結果の最後に表示される数値は 4 です。
Pythonの range(開始, 終了) 関数には、「開始番号は含むが、終了番号は含まない(終了番号の直前まで)」という非常に重要なルールがあります。
今回のプログラムの動きを分解してみましょう。
range(1, 5) は、1から始まって5の直前までの数字、つまり 1, 2, 3, 4 という数字の列を作ります。
for 文によって、これらの数字が順番に変数 i に代入されます。
1、2、3、4 の順に print() が実行されます。
実行結果は以下のようになります。
1
2
3
4
もし最後に 5 を表示させたい場合は、終了番号を一つ増やして range(1, 6) と書く必要があります。
問題33
Pythonにおいて pass 文は「何もしない」ことを指示する命令であり、関数の内部に処理を何も書かないと構文エラー(SyntaxError)になる場合に、文法上の穴埋めとして利用できる。
〇正しい
Pythonでは、if文、for文、defによる関数定義など、コロン : の後に続くブロックの中には、必ず何らかの処理(文)を書かなければならないという文法ルールがあります。
もし「中身は後で書きたいけれど、とりあえずエラーが出ないようにしておきたい」という時に、何も書かずに空欄にすると IndentationError(字下げのエラー) や SyntaxError(構文エラー) が発生してしまいます。
そこで使われるのが pass 文です。
具体的には、以下のように利用します。
Python
# 将来的に中身を書きたい関数
def future_function():
pass # 何もしない。これがないとエラーになる
# 条件は作ったが、今は何もさせたくない場合
if True:
pass
print("プログラムは正常に動いています")
このように、pass は「何もしない」という命令を置くことで、Pythonの構文を正しく保つための「プレースホルダー(仮置き場)」としての役割を果たします。
問題34
次のコードを実行したとき、
Hello
と出力される。
Python
def test():
print("Hello")
×誤り
このコードを実行しても、何も出力されません。
Pythonにおいて def は関数の「定義(作り方)」を記述する命令ですが、定義しただけでは中身の処理は実行されません。中身を動かすためには、作成した関数を呼び出す(実行する)必要があります。
今回のコードに「呼び出し」を加えると、正しく出力されるようになります。
Python
# 1. 関数の定義(これだけでは動かない)
def test():
print("Hello")
# 2. 関数の呼び出し(ここで初めて実行される)
test()
このように、def ブロックは「test という名前を呼んだら、この処理をやってね」という予約のようなものだと考えると分かりやすいです。
問題35
次のコードを実行したとき、出力結果は 20 となる。
Python
def add_ten(x):
print(x + 10)
add_ten(10)
〇正しい
このコードを実行すると、出力結果は 20 となります。
今回のコードには、関数の「定義」と「呼び出し」の両方が含まれているため、プログラムが最後まで正しく実行されます。
処理の流れ
定義: def add_ten(x): で、受け取った値に 10 を足して表示する関数を定義します。
呼び出し: add_ten(10) で関数を実行します。このとき、カッコの中の 10 が関数内の変数 x に渡されます。
計算と出力: 関数の中で 10 + 10 が計算され、print() によって 20 が画面に表示されます。
似たコードとの違い
もし、以下のようなコードだった場合は注意が必要です。
Python
def add_ten(x):
return x + 10 # print ではなく return を使っている場合
result = add_ten(10)
# これだけでは画面に何も表示されません(値が戻ってくるだけ)
今回の問題のコードは、関数の中で直接 print() を使っているため、呼び出すだけで結果が表示されます。
問題36
次のコードを実行したとき、 5 と出力される。
def calc(a):
result = a * 5
calc(1) print(result)
×誤り
このコードを実行すると、エラー(SyntaxError および NameError)が発生し、5 と出力されることはありません。
主な理由は以下の2点です。
1. 文法上のエラー(SyntaxError)
Pythonでは、関数の呼び出し(calc(1))と別の命令(print)を、セミコロン ; なしで同じ行に並べて書くことはできません。
2. 変数のスコープ(範囲)の問題
たとえ行を分けて書いたとしても、エラーになります。
関数 calc の中で作成された変数 result は、その関数の中だけで有効な「ローカル変数」です。関数の外側(print(result))からは、その変数の中身を見ることはできません。
正しく「5」と出力させるための修正案
関数で計算した結果を外で使いたい場合は、return(戻り値)を使い、受け取った値を表示させる必要があります。
Python
def calc(a):
return a * 5 # 計算結果を「戻り値」として外に渡す
result = calc(1) # 戻ってきた値(5)を変数に代入する
print(result) # 5 と出力される
このように、関数の中の値を外へ持ち出すには「関数の出口(return)」をしっかり作ってあげることが重要です。
問題37
次のコードを実行したとき、数値の足し算ではなく文字列の結合が行われ、出力結果は 101 となる。
Python
def show_id(val):
print(val + "1")
show_id("10")
〇正しい
このコードを実行すると、数値の足し算ではなく文字列の結合が行われ、結果として 101 が出力されます。
理由は、関数に渡しているデータが "10" という「文字列(str型)」だからです。
動作の仕組み
呼び出し: show_id("10") により、文字列の "10" が引数 val に渡されます。
計算(結合): val + "1" は、文字列の "10" と 文字列の "1" を足すことになります。
結果: Pythonにおいて文字列同士を + でつなぐと、それらが連結されます。そのため、数値の 11 ではなく、文字が並んだ "101" になります。
もし数値として計算したい場合は?
もし結果を 11 にしたいのであれば、以下のように「数値」として扱う必要があります。
Python
# 方法1:呼び出すときに数値として渡す
show_id(10) # 関数の中も val + 1 に修正が必要
# 方法2:関数の中で数値に変換(キャスト)する
def show_id(val):
print(int(val) + 1)
show_id("10") # これなら 11 と出力される
このように、Pythonでは「データの種類(型)」によって + 記号の役割が「足し算」か「連結」かに変わるため、注意が必要です。
問題38
次のコードを実行したとき、 6 が表示され、その次の行に None が表示される。
Python
def sub_job(arg):
print(arg + 1)
print(sub_job(5))
〇正しい
このコードを実行すると、画面には 6 と None が順番に表示されます。これは、関数の「実行」と「戻り値」の仕組みが組み合わさって起こる現象です。
なぜ 2行 表示されるのか?
1行目の「6」: print(sub_job(5)) のカッコ内を処理するために、まず sub_job(5) が実行されます。関数の中にある print(arg + 1) が動き、5 + 1 の結果である 6 が出力されます。
2行目の「None」: Pythonの関数は、return 文で戻り値を指定していない場合、自動的に None(値がないことを示す値)を返す仕組みになっています。
外側の print: sub_job(5) の実行が終わると、その場所には戻り値である None が残ります。それを外側の print() が受け取って表示するため、2行目に None が出力されます。
コードの動きを整理すると
Python
def sub_job(arg):
print(arg + 1) # ここで 6 が表示される
# 実際にはここに return None が隠れている
# 以下の 1行は、実質的に 2つの処理を行っている
# 1. sub_job(5) を実行する(6 と表示される)
# 2. print(None) を実行する(None と表示される)
print(sub_job(5))
もし「6」という結果だけを他の計算などで使いたい場合は、関数内を print ではなく return arg + 1 に書き換える必要があります。
問題39
次のコードを実行したとき、出力結果は 15 となる。
Python
def calc(a, b=10):
return a + b
print(calc(10, 5))
〇正しい
このコードを実行すると、出力結果は 15 となります。
ここでのポイントは、関数の引数に設定されている 「デフォルト値(初期値)」 の扱いです。
動作の解説
関数の定義: def calc(a, b=10): では、b にあらかじめ 10 という値がセットされています。これは「もし b に値が渡されなかったら 10 を使ってね」という意味です。
関数の呼び出し: print(calc(10, 5)) では、a に 10、b に 5 を渡しています。
値の上書き: 呼び出し時に 5 という値が明示的に渡されているため、デフォルト値の 10 は無視され、b は 5 として扱われます。
計算: 10 + 5 が計算され、結果の 15 が返されます。
もしデフォルト値が使われる場合は?
以下のように、2つ目の値を省略して呼び出した場合にのみ、デフォルト値の 10 が活躍します。
Python
print(calc(10))
# bを指定していないので、10 + 10 = 20 と出力される
デフォルト値は、よく使う設定値をあらかじめ決めておきつつ、必要に応じて変更したい場合に非常に便利です。
問題40
次のコードを実行するとエラー(TypeError)になる。
Python
def greet(msg, name="Guest"):
return msg + ", " + name
print(greet("Hello"))
×誤り
このコードを実行してもエラーにはならず、「Hello, Guest」と正しく出力されます。
エラーにならない理由は、Pythonの「デフォルト引数(初期値)」という仕組みが正しく働いているからです。
動作の解説
関数の定義: name="Guest" と書くことで、name という引数に初期値を設定しています。
呼び出し: greet("Hello") と呼び出す際、1つ目の引数 msg には "Hello" が入りますが、2つ目の引数は省略されています。
補完: 2つ目の引数が渡されなかったため、Pythonは自動的にデフォルト値の "Guest" を使って処理を進めます。
結果: "Hello" + ", " + "Guest" が結合され、エラーなく結果が返されます。
エラー(TypeError)になるケース
逆に、以下のような場合はエラーになります。
デフォルト値がない引数を省略したとき
print(greet()) のように、初期値のない msg まで省略すると、「引数が足りない」というエラーになります。
引数の順番を間違えて定義したとき
def greet(name="Guest", msg): のように、デフォルト値がある引数を、ない引数よりも前に書いて定義しようとすると、文法エラーになります。
次のステップはこちら
関連講座はこちら