LoginSignup
2
4

More than 3 years have passed since last update.

Chainer チュートリアル 演習問題の解答

Last updated at Posted at 2019-08-23

本稿の投稿経緯

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

問題と解答

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

問2.1 (組み込み関数)

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

表示結果は、5

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

表示結果は、8

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

表示結果は、1

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

表示結果は、20

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

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

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

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

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

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

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

解答
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 から奇数の要素だけを残すコードを書いて下さい。
解答
a = [4, 8, 3, 4, 1]
squares = [x % 2 for x in a]
print(squares)

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

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

表示結果は、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桁までを表示して下さい。
解答
' '.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'

解答
'{:.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については、ズルをしました。スマートなコーディングがあれば、教えていただきたい。

2
4
2

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
2
4