本稿の投稿経緯
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については、ズルをしました。スマートなコーディングがあれば、教えていただきたい。