ExamApp 模擬試験アプリ Python3エンジニア認定試験 基礎・中級問題 解いてみた

こんにちは！WEBの問題集を解きました。
結果と間違えた問題の見直しをしていきます。

[模擬試験アプリ Python3エンジニア認定試験](https://python-basic.com/)

https://python-basic.com/

**基礎・中級問題**
| 開始日 | ステータス | 正解率 |
|:-----------|------------:|:------------:|
| 2024年01月12日14時10分 | 完了 | 45% |

資格の合格ラインは正解率 **70%** です。

以下は間違えた問題の見直しです。
## 見直し
```ruby:Pythonの特徴に関する説明
# Pythonで書いたプログラムはモジュール群に分割可能
# Pythonで書いたプログラムは、同等のC、C++、Javaプログラムより比較的短く書けます。
# Pythonはインタープリタ言語であり、コンパイルは不要です。
# 変数の宣言が不要である。
  #「num = 1」と記述するだけでnumを変数として利用できます。
```

```ruby:Pythonのインタープリタに関する説明
# インタープリンタを置くディレクトリは、インストール時に指定できる。
# プライマリプロンプト（>>>）が出ているとき、UNIXでは[Ctrl]+[D]キー、Windowsでは[Ctrl]+[Z]キーでインタープリンタが終了する。
# インタープリタを起動するコマンドは、以下のいずれかとなります。
  # python
  # python[バージョン]
  # python -c コマンド [引数]
# セカンダリプロンプトのデフォルトの記号はドット3つ（...）である。
```

```ruby:問題 6
str = 'pen'
print(str + 'pine' 'apple')

# 回答
penpineapple
```

```ruby:問題 8
a = [1, 2, 3, 4, 5]
a.append(6, 7)
print(a)

# 回答
# エラーになる。
# append()メソッドが取れる引数は一つのため、TypeErrorとなります。
# 「a.append(6)」と「a.append(7)」で一つずつ追加するか、「a = a + [6, 7]」としてリストの末尾に追加します。
```
```ruby:問題 9
x = 10

if x == 10:
    print('a')
    if x <= 10:
        print('b')
        if x > 10:
            print('c')
            if x >= 10:
                print('d')

print('e')

# 回答
a
b
e
```
```ruby:問題 11
for count in range(3, 7, 2):
    print(count)

# 回答
3
5
```
```ruby:Pythonのスコープに関する説明
# for文の中で代入した変数は、for文の外から参照できる。
# if文の中で代入した変数は、if文の外から参照できる。
# 関数の中で代入した変数は、関数の中でしか参照できません。
# グローバル変数は、for文、if文、関数の中から参照できる。
```
```ruby:問題 15
def job(foo, bar):
    print(bar, foo)

job(foo=30, 20)

# 回答
# エラーになる。
# 「job(foo=30, 20)」は位置引数が後になっているため、「SyntaxError: positional argument follows keyword argument」のエラーになります。
```
```ruby:問題 16
def job(arg, /):
    print(arg)

job(arg=5)

# 回答
# エラーになる。
```
:::note info
「/」は、その前が位置引数だけであることを示す記号です。
:::
:::note warn
仮引数の記述の仕方
位置引数：複数の仮引数を書いた場合、仮引数に記述した順番通りに実引数を記述する方法
キーワード引数：順番の間違いをなくすため、辞書形式で実引数にキーワードをつける方法
デフォルト引数：仮引数にデフォルト値を設定することで、実引数を省略することができる
*（アスタリスク）による位置引数のタプル化：アスタリスクを付けることで可変個の位置引数をタプルにまとめることができる
**（アスタリスク2つ）によるキーワード引数：アスタリスク2つを付けることで可変個のキーワード引数を1つの辞書にまとめることができる
:::

```ruby:問題 17
def job(pos, /, arg, *, kwarg):
    print(pos, arg, kwarg)

job(1, arg=2, kwarg=3)

# 回答
1 2 3
```
```ruby:問題 19
file1 = ['a.txt', 'b.jpeg', 'c.txt', 'd.jpeg']

file2 = [s for s in file1 if ".txt" not in s]

print(file2)

# 回答
['b.jpeg', 'd.jpeg']
```
```ruby:問題 21
a = {'one', 'two'}
b = {'two', 'three'}
print(a | b)

# 回答
 {'three', 'one', 'two'}
```
:::note info
集合の演算
・和集合
和集合とは 2 つの集合の少なくともどちらか 1 つに含まれる要素の集合のこと。
　集合 = 集合1 | 集合2
　集合 = 集合1.union(集合2)

・積集合
積集合とは 2 つの集合の両方に含まれる要素の集合のこと。
　集合 = 集合1 & 集合2
　集合 = 集合1.intersection(集合2)

・差集合
集合 1 に含まれているけれど集合 2 には含まれていない要素の集合のこと。
　集合 = 集合1 - 集合2
　集合 = 集合1.difference(集合2)

・対称差集合
2つの集合のどちらか片方だけに含まれる要素の集合のこと。
　集合 = 集合1 ^ 集合2
　集合 = 集合1.symmetric_difference(集合2)
:::


```ruby:問題 23
list = ['b', 'a', 'c']
sorted(list)
print(list)

# 回答
['b', 'a', 'c']
# sorted()関数は、リスト、タプル、辞書、集合、文字列を辞書順に並び替えて、リストで返します。
# 非破壊のため、対象の変数に影響はありません。
```
```ruby:問題 24
if 1 < 2 > 3:
    print('a')
elif 1 < 2 and 2 > 3:
    print('b')

# 回答
# 何も表示されない。
```
```ruby:例外の処理に関する説明
# try文に複数のexcept節を設定すると、複数の例外に対するハンドラを設けられる。
# try文に複数のexcept節がある場合、一度の処理で実行されるexcept節は一つまでです。
# ハンドラはtry節の中で起きた例外を処理するのみで、except節の中で起きた例外を処理することはない。
# 単一のexcept節の中で、タプルを使って複数の例外を指定することができる。
```
```ruby:問題 30
try:
    print('try')
except:
    print('except')
else:
    print('else')

# 回答
try
else
```
```ruby:問題 31
def func(arg):
    1 / arg

try:
    func(0)
except Exception as e:
    print(type(e))

# 回答
<class 'ZeroDivisionError'>
```
```ruby:問題 32
arg = 'out'

def func1():

    def func2():
        arg = 'local'

    def func3():
        nonlocal arg
        arg = 'nonlocal'

    def func4():
        global arg
        arg = 'global'

    arg = 'in'

    func2()
    print(arg) #【A】

    func3()
    print(arg) #【B】

    func4()
    print(arg) #【C】

func1()
print(arg) #【D】

# 回答
in
nonlocal
nonlocal
global

#【A】func2で代入した変数は、func2の外側には影響しないため、直前で代入した「in」が表示されます。
#【B】func3の「nonlocal」で宣言した変数は、func1の階層にも影響するため、「nonlocal」が表示されます。
#【C】func4で「arg = 'global'」としていますが、「global」で宣言した変数は、func1も含めて関数の中には影響しないため、func3の「nonlocal」で宣言した変数が有効です。
#【D】すべての関数の外側にあるため、func4の「global」で宣言した変数が有効です。
```

```ruby:mathモジュールのfloor関数とceil関数
# ceilは小数点以下を切り上げて整数を返し、floorは小数点以下を切り捨てて整数を返します。
# floorは｢指定した値以下の最大の整数」を返すため、マイナスの値を指定した場合は注意が必要です。
```

```ruby:メール関連のPythonの標準モジュール
# emailという標準ライブラリはありますが、mailというライブラリはありません。
# 以下は標準モジュール
mailbox
smtplib
poplib
```
:::note info
メール関連のPythonの標準モジュール
mailbox：様々な形式のメールボックス操作
smtplib：SMTP プロトコルクライアント
poplib：POP3 プロトコルクライアント
email：電子メールと MIME 処理のためのパッケージ
:::

```ruby:外部パッケージのインストール、アップグレード、リムーブを行うpipの使い方
# 最新バージョンをインストールする記述
pip install requests

# バージョンを指定してインストールする記述
pip install requests==2.6.0

# アンインストールする記述
pip uninstall requests

# アップグレードする記述
pip install --upgrade requests
pip install -U requests
```
```ruby:パッケージのリスト「requirements.txt」を作る際に使うコマンド
# listとfreezeは、実行環境にインストールされたすべてのパッケージを表示します。

#「pip list」の実行例
-------------------------------
psycopg2-binary   2.9.1
SQLAlchemy        1.4.20
-------------------------------

# freezeは、「pip freeze > requirements.txt」とすると、pip install向けの形式で出力できます。

# requirements.txtの例
-------------------------------
psycopg2-binary==2.9.1
SQLAlchemy==1.4.20
-------------------------------
```