LoginSignup
9
11

More than 1 year has passed since last update.

Pythonエンジニア認定基礎試験の勉強してたら、意外と知らないことがあった件

Posted at

はじめに

Python 3 エンジニア認定基礎試験受けてきました。
勉強してたら知らないことがちらほらあったのでまとめてみました。

プロフィール

  • 社会人5年目
  • プログラミングは大学の授業からやり始めて9年目
  • Pythonやる前はCとJavaがメイン

どんな勉強したか

  • 「模擬試験→間違えたところ調べる→コード書いて動かしてみる」を何回かやった
  • 勉強期間は1週間ほど
  • 模擬試験はExamAppDIVE INTO EXAMPRIME STUDYを使用
  • 間違えたところはまずPython チュートリアル読んでみる
  • チュートリアルがわかりづらかったらネット上で記事探して補助してもらう
  • 調べたものを書いて結果をprint()で出力してみる(こういうときはコピペ、入力補助使わないのが個人的にはおすすめ。)

チュートリアル読むだけとかだと1分でおやすみなさいする人なので、なるべく手を動かしました。

ちなみに模擬試験のサイトはPython初心者によるPython3エンジニア認定基礎試験の勉強方法(2020年8月合格)で知りました。教材から当日の状況まで、分かり易くまとめられています。

知らなかったこと

さて本題。今回勉強中に出会って「へぇ~」ってなったやつです。
こんなん知ってるわ!ってところは読み飛ばしてくださいね。

スライス

3.1.2 文字列のところにしれっと書いてあったのですが、、、

str_py = "PythonTutorial"
print(str_py[-1000:1000])
PythonTutorial

範囲外でスライスしてもエラーにならない。
もちろんstr_py[1000]とかやるとIndexErrorです。
プログラミングしてる時は便利だけど、問題で出されると戸惑うやつ。

rangeの型

4.3 range()関数から。
range()の型ってわかりますか?

r = range(5, 15, 3)
print(type(r), r)

rangeの型はrangeです。
正直、listだと思ってました。。。

<class 'range'> range(5, 15, 3)

これは知らんかった。
チュートリアルのrangeのリンクとぶと、class rangeって書いてありましたね。もう忘れない。(活かせる場面無さそうだけど。笑)

ループのあとのelse

4.4 break文とcontinue文、ループにおけるelse節から。
forのあとに何が書けるかみたいな問題で、「そんなんあったっけ???」ってなりました。
(ここはチュートリアルにある素数判定のコードを。)

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        print(n, 'is a prime number')

forwhileのあとにelse書けるんですね。CとかJavaでは見たことないぞ?

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

ループ最後まで回りきったときにelseに入って、
breakで抜けた時はelseには入らないとな。なるほど。

enumerate

5.6 ループのテクニックから。
(ここに書いてあるやつ、いつでも役立ちそうだから覚えておくべき!!!)

知らん単語出てきた!って感じでしたが、これは知っててもいいはずでしたね。。。

seq = ['a', 2, 'b', 1, 'cd', 0.3]
print(list(enumerate(seq)))

enumerate()インデックス番号と要素を取得できます。

[(0, 'a'), (1, 2), (2, 'b'), (3, 1), (4, 'cd'), (5, 0.3)]

これならforでインデックス番号と要素両方扱うのが楽になりますね。
インデックス番号でいちいち指定しなくてよくなる。

for i, data in enumerate(seq):
    print(i, data)
0 a
1 2
2 b
3 1
4 cd
5 0.3

他の言語やってた人はインデックス番号でfor回しがちですよね。(言い訳)

zip

5.6 ループのテクニックからあと二つほど。
これももっと早く知っときたかったやつ。

seq1 = ['a', 2, 'b', 1, 'cd', 0.3]
seq2 = ['A', 20, 'B', 10, 'CD', 0.03]
print(list(zip(seq, seq2)))

zip()複数のリストの要素をまとめて取得できます。

[('a', 'A'), (2, 20), ('b', 'B'), (1, 10), ('cd', 'CD'), (0.3, 0.03)]

これでforもスッキリ書ける。Python便利。

for data1, data2 in zip(seq1, seq2):
    print(data1, data2)
a A
2 20
b B
1 10
cd CD
0.3 0.03

items

もう一つ、5.6 ループのテクニックから。
辞書型をforで回す時に便利なitems()

dic = {"a": 1, "b": 2, "c": 3, "d": 4}
print(list(dic.items()))

items()辞書型のキーと値を同時に取得できます。

[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

一つ目がキー、二つ目が値です。
forで使うとこんな感じ。

for key, value in dic.items():
    print(key, value)
a 1
b 2
c 3
d 4

ちなみにkeys()でキーだけ、values()で値だけが取り出せます。
冷静に考えればわかるけど、選択肢に三つ並んでると自信なくなるやつ。

random

10.6 数学から。
こいつら、どう違うかわかりますか?

  • random.random()
  • random.randint()
  • random.uniform()
  • random.choice()

普段から使ってないと覚えてないやつですよね。

メソッド名 機能
random.random() 0.0以上1.0未満の浮動小数点を返す
random.randint(a, b) a以上b以下の整数を返す
random.uniform(a, b) a以上b以下の浮動小数点を返す
random.choice(seq) 与えたシーケンスの中から要素を1つ返す

初心に戻って、下のコード何回か実行して遊んでました。笑

import random

random_random = random.random()
print(type(random_random), random_random)

random_randint = random.randint(1, 10)
print(type(random_randint), random_randint)

random_uniform = random.uniform(1, 10)
print(type(random_uniform), random_uniform)

seq = ['a', 2, 'b', 1, 'cd', 0.3]
random_choice = random.choice(seq)
print(random_choice)

実行結果の例。

<class 'float'> 0.8565668866682062
<class 'int'> 2
<class 'float'> 3.0892644087182597
<class 'str'> b

おまけ

一回引っかかったのが、問題文中のプログラムの構文エラー。
SyntaxErrorが選択肢にあったら、構文合ってるかまず確認するのがいいかも。
ifとかforのあとに:無いとか。
普段は開発ツールたちが教えてくれますからね、意外と見てない。(言い訳②)

まとめ

個人的に知らなかったことまとめてみましたが、for文で使うやつ中心になっちゃいましたかね。
まだCとかJavaの頭なのかも。。。
まあ今回勉強しなかったら永遠に知らなかったかもしれないので、いい機会でしたね!
普段書いてるプログラムも見やすくできそう。
気が向いたら実践試験も受けてみようかなぁ・・・。気が向いたら。

これから受験する方のお力に、少しでもなれてたら嬉しいです!
読んでいただきありがとうございました!

参考文献

Python 3 エンジニア認定基礎試験
Python チュートリアル
Python初心者によるPython3エンジニア認定基礎試験の勉強方法(2020年8月合格)
ExamApp
DIVE INTO EXAM
PRIME STUDY

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11