本稿の投稿経緯

python初心者の私が、Chainer チュートリアルをやっていたところ、解答を探してもなく困ったので、なんとなくできた内容を共有し、私と同じように困っている人の参考になればと思い投稿。

問題と解答

さっそく、解答を記載していくが、pythonコードを書く問題のみを記載していく。

問2.1 (組み込み関数)

【問題】a=[4, 8, 3, 4, 1] というリストに対して以下の操作を行う組み込み関数適用する。
(1)リスト a の長さを求める。
(2)リスト a に含まれる値の最大値を求める。
(3)リスト a に含まれる値の最小値を求める。
(4)リスト a に含まれる値の合計値を求める。
(5)リスト a をソートして、[1, 3, 4, 4, 8] というリストを返す。

【(1)解答】
a = [4, 8, 3, 4, 1]
res = len(a)
print(res)

表示結果は、5

【(2)解答】
a = [4, 8, 3, 4, 1]
res = max(a)
print(res)

表示結果は、8

【(3)解答】
a = [4, 8, 3, 4, 1]
res = min(a)
print(res)

表示結果は、1

【(4)解答】
a = [4, 8, 3, 4, 1]
res = sum(a)
print(res)

表示結果は、20

【(5)解答】
a = [4, 8, 3, 4, 1]
res = sorted(a)
print(res)

表示結果は、[1, 3, 4, 4, 8]

問2.3 (リストの基本操作)

【問題】a=[4, 8, 3, 4, 1] というリストに対して以下の操作を行うコードを書いて下さい。
(1)リスト a の先頭の要素を取り除いて、[8, 3, 4, 1] となるようにして下さい。
(2)リスト a の末尾の要素を取り除いて、[4, 8, 3, 4] となるようにして下さい。
(3)リスト a の末尾に 100 という値を追加して、[4, 8, 3, 4, 1, 100] となるようにして下さい。

【(1)解答】
a=[4, 8, 3, 4, 1]
a.pop(0)
print(a)

表示結果は、[8, 3, 4, 1]

【(2)解答】
a=[4, 8, 3, 4, 1]
a.pop()
print(a)

表示結果は、[4, 8, 3, 4]

【(3)解答】
a=[4, 8, 3, 4, 1]
a.append(100)
print(a)

表示結果は、[4, 8, 3, 4, 1, 100]

問2.4 (リスト内包表記)

【問題】
(1) a=[4, 8, 3, 4, 1] というリストに対し、要素が偶数なら 0, 奇数なら 1 に変換するコードをリスト内包表記を用いて書いて下さい。この結果、このリストは [0, 0, 1, 0, 1] に変換されるべきです。
(2)組み込み関数を組み合わせて、リスト a に含まれる奇数の個数を数えるコードを書いて下さい。
(3)リスト内包表記を使ってリスト a から奇数の要素だけを残すコードを書いて下さい。

【(1)解答】
a = [4, 8, 3, 4, 1]
squares = [x % 2 for x in a]
print(squares)

表示結果は、[0, 0, 1, 0, 1]

【(2)解答】
a = [4, 8, 3, 4, 1] squares = [x % 2 for x in a] print(sum(squares))

表示結果は、2

【(2)解答】
a = [4, 8, 3, 4, 1]
squares = [x for x in a if x % 2 !=0]
print(squares)

表示結果は、[3, 1]

問2.5 (文字列)

【問題】
(1)str.join() を使って、0 から 99 までの数をスペース区切りで並べた文字列 "0 1 2 3 4 ... 99" を構成して下さい。
(2)str.format() を使って float の値 (1.0 / 7.0) の小数点以下9桁までを表示して下さい。

【(1)解答】' '.join([str(x) for x in range(100)])

表示結果は、'0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99'

【(2)解答】
'{:.9}'.format(1.0 / 7.0)

表示結果は、'0.142857143'

問2.6 (クラス)

【問題】クラスを実装する練習として、データを管理するクラスを実装してみましょう。
次のメソッドを全て持つクラス DataManager を記述して下さい。
__init__(self, x, y, z): 3つの数 x, y, z をコンストラクタで受け取り、インスタンスの属性でそれぞれの値を記憶する。
add_x(self, delta): x に delta だけ足して、値を更新する。
add_y(self, delta): y に delta だけ足して、値を更新する。
add_z(self, delta): z に delta だけ足して、値を更新する。
sum(self): x, y, z の3つの数の合計値を返す。
このクラスを使って以下のようなコードが書けるものとします。
data_manager = DataManager(2, 3, 5)
print(data_manager.sum()) # => 10
data_manager.add_x(4) # => data_manager.x の値が 2 から 6 に更新される
print(data_manager.sum()) # => 14
data_manager.add_y(0) # => data_manager.y の値が 3 から 3 に更新される
print(data_manager.sum()) # => 14
data_manager.add_z(-9) # => data_manager.z の値が 5 から -4 に更新される
print(data_manager.sum()) # => 5

【解答】
class DataManager:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def add_x(self, delta):
        self.x += delta

    def add_y(self, delta):
        self.y += delta

    def add_z(self, delta):
        self.z += delta

    def sum(self):
        return self.x + self.y + self.z

表示結果は、10,14,14,10

問2.8 (制御構文)

【問題】2以上の整数 p が素数であるとは、 「どんな 2 以上 p-1 以下の整数 k に対しても p は k で割り切れない」 が成り立つことを指します。素数を小さい順から列挙すると、 2, 3, 5, 7, 11, 13, 17, ... となります。
if や for を用いて、2 から 100 からまでに含まれる素数を列挙して下さい。

【解答】
x = [i for i in range(100)]
sosu = []
sosu.append(2)
    for i in range(3, len(x)):
        for p in range(2, i):
            if i % p != 0:
                if p == i-1:
                    sosu.append(i)
                else:
                    pass
            else:
                break
print(sosu)

表示結果は、[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

あとがき

とりあえず一通り、結果は妥当なものが出るようにできたが、 素数の問題が、特に難しかった。素数2については、ズルをしました。なお、本記事は、qiitaも投稿しており、そちらのコメントで、問2.8のもっとスマートなプログラムをご教示いただけましたので、そちらも参考にしていただけるとよいかと思います。