find100

日常の中で見つけた面白そうなことを発信します

MENU

独学プログラマーのチャレンジ問題をPythonでやってみる

先日、独学プログラマーという本を買ったのでその書評を書いていきたいと思います。

 

こういう技術的な本は小説や新書とは違い、実際に手を動かしながらやるのが理解を深めるベストな方法だと思ったのでこの本に載っているチャレンジ問題などの演習は積極的に取り組もうと思ってます。

 

また、この記事だけで全てを語ることは難しそうなので複数にまたがると思います。


 

1 本書の概要

 

この本はコーリー・アルソフという人が独学でプログラミングを身につけ、その際に感じたことを書いているので効率よくPythonを学べるようになっています。

 

また、この人は独学してから一年でソフトウェア・エンジニアに就職しているそうです。

 

そしてこの本の他とは違う最大のポイントはプログラマーとしての心得がしっかりと書いてあるところです。

 

Pythonだけを学ぶなら他の本でも可能ですが、そういった初心者のころから知っておきたい事柄まで載っているところが良いと思います。

 

2 本書の良い点と読むべき人

 

 本書の良い点は先に例をコードとして示し、それからそのコードが実際にどういう意味合いで使われているかを解説しているところだと思います。

そのためその説明を読んでからコードを写経して、写経している最中にこの行はこういった意味だと自分で確認すればより理解が深まると思います。

 

ところどころ出てくる実際にコードを書く際に気をつけることも役立ちます。

 

また、本書はPythonを用いて何かやりたいことがあるけれど、あまりPythonの書き方を知らないような初心者に向いていると思います。

他の言語をやったことが少しでもあるならなおさら取り組みやすいと思います。

しかし、逆にPythonが初めてのプログラミング言語だったり、全く情報系の知識がゼロで不安がある人はまずプロゲートなどのオンラインサービスで学んだ方が良いと思います。

 

そもそも最初の環境構築の段階で何時間もかかって体力切れになるのはキツイと思うので。
最初はサクサク進めた方が楽しいかと。

 

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

3 本書の目次

 

第1部(Part 1)

 

第1章 イントロダクション

第2章 さあ、はじめよう!

第3章 プログラミング入門

第4章 関数

第5章 コンテナ

第6章 文字列操作

第7章 ループ





第27章 次のステップ

4 本書の内容

 

第1章 イントロダクション

まぁイントロダクションなのでこの本を読むと得られる知識だったり学ぶ姿勢とかが軽く書いてあります。

 

第2章 さあ、はじめよう!

Pythonとはなんぞや、というところから始まってPythonのインストール方法やIDLEの使い方が書いてあります。

Pythonのインストール方法は詳しく書かれておらず、ココを参照してね程度です。

 

ちなみにですが、最初にIDLEの対話シェルを使うときは警告文が出ています。

普通に使う分にはこの警告文が出たままでも特に問題ないらしいので僕はそのままにしています。

ですが、日本語は打てません。自分だけかもしれませんが。

 

 

第3章 プログラミング入門

ココではプログラミング言語のキーワードについて書かれています。

 

あとはif文とかその辺ですね。

 

この章の最後にチャレンジ問題があったので自分のコードを載せます。

 p48

#charange1 
#Q1
print("a","cocos","heisei")

#Q2
x = 17
if x < 10:
print("10未満だね")
else:
print("10以上だね")

#Q3
if x <= 10:
print("10以下やん")
elif x > 10 and x <= 25:
print("中途半端な数字だな")
else:
print("大きいな")

#Q4
print(76%18)

#Q5
print(76//18)

#Q6
age = 35
if age < 20:
print("お酒は飲めません")
else:
print("お酒は飲めます")

 

問3の答えを見てみると

elif x <= 25:

となっているので確かにandとか使う必要なかったなぁと。

 

そして答えの問6がいまいち分かりませんでした。

自分が書いた上記のやつは正常に動きます。もちろん答えのコードも正常に動きますけど、その意味が分からないということです。

 

age = 64
retirement = age - 65

if retirement < 10:
print("you get to retire soon.")
else:
print("you have to a long time until you can retire!")

 

問6の答えはこんな感じなんですけど、これだと100歳の人が退職まで時間ありますって出力されますよね笑

今回はとりあえず条件分岐ができればそれでOKかもしれませんがリアルな世界で考えると働きすぎですよね。

 

第4章 関数

この章では関数に渡す引数や組込関数について学びます。

知らない知識として、ドキュメンテーション文字列や例外処理の書き方を学びました。

 

それでは、p69のチャレンジ問題の自分のコードを載せます。

 

#charange2

 

#Q1
number = input("type a number:")
n = int(number)
def f(n):
return (n ** 2)
print(f(n))

 

#Q2
def string(hahaha):
print(hahaha)
string("k")

 

#Q3
def sum_number(a,b,c,d = 5,e = 10):
return a + b + c + d + e
print(sum_number(1,2,3,4))

 

#Q4
n = 7
def even_odd(n):
return n/2
a = even_odd(n)
def multi(a):
return a * 4
print(multi(a))

#Q5
def flo(intenger):
try:
return float(intenger)
except ValueError:
print("could not convert string to float.")
print(flo("l"))

 

第5章 コンテナ

この章ではリストやタプル、辞書の使い方について学びます。

では、章末のチャレンジ問題の自分の答えを載せておきます。


 

#charange3

#Q1
like_musician = ["banp","uuum","aaa"]
print(like_musician)

 

#Q2
place = []
japan = (36,140)
america = (39,77)
place.append(japan)
place.append(america)
print(place)

 

#Q3
me = {"0":"men","1":"blue"}
print(me)

 

#Q4
i = input("type a number:")
if i in me:
koko = me[i]
print(koko)
else:
print("not conclude number")

 

#Q5
love_musician = {"aaa":["s","L"],"bbb":["r","w"]}
print(love_musician)

 

Q6

set型はミュータブルな型で、イミュータブルなfrozenset型もあります。

 

set型は重複しない要素の集まりで集合演算に用いられます。

例えば和集合だったら

s1 = {0,0,2,3}
s2 = {1,2,3}
s3 = {0,2,4}
s_union = s1.union(s2,s3)
print(s_union)
#{0,1,2,3,4}

という感じです。


第6章 文字列操作

この章では文字列の編集をメインに解説しています。
余談ですが、Courseraのバイオインフォマティクス講座の初級レベルのコースをとった時にスライスを使っていて最初は全然何やってるか分からなかった記憶があります。

p102の自分のコードです。

#charange4

#Q1
string = "camu"
for i in range(len(string)):
    print(string[i])

#Q2
print("I wrote {} and sent {} yesterday!".format("letter","you"))


#Q3
print("aldous Huxley was born in 1894.".capitalize())

#Q4
print("where? who? when?".split("?"))

#Q5
p = ["The","fox","jumped","over","the","fence","."]
p = " ".join(p)
p = p[0:29] + "."
print(p)

#Q6
string = "A screaming comes across the sky."
string = string.replace("s","$")
print(string)

#Q7
print("Hemingway".index("m"))

#Q8
print("He said 'Yes we can'")

#Q9
print("three" + "three" + "three")
print("three" * 3)

#Q10
sentence = "I am happy boy,and my brother is also happy boy."
sentenceL = slice(0,14)
print(sentence[sentenceL])

Q1はforを使って書きました。

Q5はあえて[0:29]という書き方をしました。
解答は[0:-2]という書き方をしていますが。
空白も一文字として数えるんですね。

Q10はslice関数を使いました。


第7章 ループ

この章ではfor文やwhileといった繰り返し処理を行うようなキーワードについて学びます。

それでは、p116の自分のコードを載せておきます。

#charange5


#Q1
strings = ["run","work","play","step","seed"]
for string in strings:
    print(string)

#Q2
for i in range(25,51):
    print(i)

#Q3
for i, j in enumerate(strings):
    print(i, j)

#Q4
answer_num = [1,2,3,4,5]
while True:
    num = input("type a number or string:")
    if num == "q":
        break
    try:
        num = int(num)
    except ValueError:
        print("type a number or q to retire")
    if num in answer_num:
        print("correct!")        
    elif num not in answer_num:
        print("incorrect")


#Q5
li1 = [8,19,148,4]
li2 = [9,1,33,83]
multi = []
for i in li1:
    for j in li2:
        multi.append(i*j)
print(multi)


Q4が少し難しかったです。

入力の時点では文字として認識されているのでintを用いて整数に変換するんですね。

今回は7章のループまでにしておきます。

続きはこちらです
find314.hatenablog.com



また、もっとこうした方が分かりやすいよ、とかそういったアドバイスがあればぜひ教えてください!

よろしくお願いします。