LoginSignup
6
2

More than 1 year has passed since last update.

Pythonの学習メモ

Last updated at Posted at 2019-03-27

ProgatePythonチュートリアルで、あらかた勉強したのですが、HackerRankで解けない・理解できない問題がいくつかありました。
そのため、基礎をこの本で固めます。

#文字列・リスト・タプル・辞書
##文字列
###複数行の文字列を作る
クォート文字を3つ連続して書けば、複数行の文字を書けます。
エスケープもできて便利。

>>> string = ''' He said, "I want to learn python very hard."
... However, he gave up studying it for only 2 months. '''
>>> print(string)
 He said, "I want to learn python very hard."
However, he gave up studying it for only 2 months. 

エスケープはこちらでも可能。

>>> escape_string = "He said, \"I don\'t have time to study.\" "
>>> print(escape_string)
He said, "I don't have time to study." 

上の方が分かりやすいですかね。

###データを文字列に埋め込む
こうやって書くことが多いと思いますが、

>>> myscore = 100
>>> message = "Your score is"
>>> print(message + str(myscore))
Your score is100

こんな風にも書けます。

>>> myscore = 100
>>> message = "Your score is %i."
>>> print(message % myscore)
Your score is 100.

>>> spaces = ' ' * 25
>>> print("%s March 19th ,2019" % spaces)
                          March 19th ,2019

ここで、iはint,sはstringです。

引数が複数あったらこんな感じ。

>>> m = "%s like %s."
>>> print(m % ("John", "Alis"))
John likes Alis.

##リスト
###リストをいじる

>>> colors = ["red","green","blue"]

>>> colors.append("black")  #append:添える,付加する
>>> print(colors)
['red', 'green', 'blue', 'black']

>>> del colors[1]
>>> print(colors)
['red', 'blue', 'black']

>>> favorite_colors = ["emerald", "silver"]
>>> print(colors + favorite_colors)  #リスト同士しか繋げないので注意
['red', 'blue', 'black', 'emerald', 'silver']

>>> print(colors * 3)
['red', 'blue', 'black', 'red', 'blue', 'black', 'red', 'blue', 'black']

ちなみに、リストの割り算や引き算はエラーになります。
分割する場所によって、複数の解釈が生まれるからです。
プログラミングの世界では、命令はいつも同じように解釈なければいけないわけですね。

##タプル
タプルは、別名「定数リスト」と呼ばれており、基本的には要素を追加削除できません。
また、()でくくります。

>>> numbers = (1,2,3)
>>> numbers[1] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

こんな風にエラーが出ます。
タプルは、
 要素の順番を変えられたくない時
 データ型が固定の場合
などに有効です。

##辞書
辞書は検索機能を持ったものではなく、「探しやすくデータをしまっておくもの」というイメージですかね。
キーのペアでデータを格納します。


>>> club_activities = {"naruto" : "Baseball",
... "sasuke" : "Soccer",
... "sakura" : "karate",
... "itachi" : "tennis"}

>>> print(club_activities["sasuke"])
Soccer

キーから値を引っ張ってきます。
リストと同じく、書き換えや追加、削除は可能です。
しかし、辞書を足し合わせることはできません。

##まとめ
文字列は"",リストは[],タプルは(),辞書は{}でくくります。

#関数とモジュールを使って月面体重計算プログラムを作る
自分で関数を定義する・モジュールをimportする・オブジェクトを使いこなす・うまく条件分岐させる...など、大事なことはたくさんです。
そんな大事なことを詰め込んだプログラムがこちら。
「年が経過するごとに、月面での体重はどうなるか」を計算します。

import sys    #I want to use "sys.stdin.readline()"
>>>def moon_weight():
       print("Please your current weight.")
       weight = float(sys.stdin.readline())
       print("Please enter the amount your weight might increase each year.")
       increase = float(sys.stdin.readline())
       print("Please enter the number of years.")
       year = int(sys.stdin.readline())
       for y in range(0,year+1):
           mw = round(weight * 0.165, 3)
           print("Year %s is %s" % (y, mw))
           weight += increase

>>> moon_weight()
Please your current weight.
76
Please enter the amount your weight might increase each year.
1.1
Please enter the number of years.
9
Year 0 is 12.54
Year 1 is 12.721
Year 2 is 12.903
Year 3 is 13.084
Year 4 is 13.266
Year 5 is 13.447
Year 6 is 13.629
Year 7 is 13.81
Year 8 is 13.992
Year 9 is 14.173

#クラスとオブジェクトの概念
Python初心者で最初に難しいのはクラスとオブジェクト(インスタンスとも呼ぶ)ではないでしょうか。
なんとなーくで使っていると、まじで訳わからんくなります(自分もその1人)。

ここでは、「キリン」で例えて分かりやすくします。

まず、キリンは基をたどると「物体」です。
この「物体」がすべてのものの親クラスとなります。
そして、親クラスから子クラスにたどっていって、「キリン」クラスまでたどり着きます。
その「キリン」クラスの中に「jackson」という名前のキリンがいたとします。
ここに来て初めて、名前がついたので、jacksonは「オブジェクト」となるのです。

つまり、
・クラスは「もの(オブジェクト)」をまとめる分類
・オブジェクトは名前がついたもの
となります。

さらに、それぞれのクラス(分類)には、機能があります。

例えば、「動物」クラスなら、
・呼吸する
・食べる
といった機能があり、
「哺乳類」なら、
・赤ちゃんをお腹の中で育てる
といった機能があり、
「キリン」なら、
・長い首を使って木から葉っぱを食べる
といった機能があります。

この機能は「関数(Method)」で表します。

コード例はこんな感じ。

>>> class Things:
...         pass    #今は関数を定義しない
...
>>> class Animate(Things):    #子クラス(親クラス)
...         pass
... 
>>> class Animals(Animate):
...         def breathe(self):    #selfには自分自身、つまり決めたキリンの名前(オブジェクト)が入る。
...                 print("bufooooo")  #キリンに呼吸させる
... 
>>> class Mammals(Animals):
...         def bring_up_babies(self):
...                 print("ogyaaaa")
... 
>>> class Giraffes(Mammals):
...         def eat_leaves(self):
...                 print("mosyamosyamosya")
... 
>>> jackson = Giraffes()    #キリンの名前を決める
>>> jackson.breathe()
bufooooo
>>> jackson.bring_up_babies()
ogyaaaa
>>> jackson.eat_leaves()
mosyamosyamosya

親クラスから子クラスに機能は継承されていくので、Giraffesクラスのjackson君はThings〜Goraffesクラスまでの機能をすべて持っています。

###便利な__init__関数
この関数にはこんなメリットがあります。
①オブジェクト(もの)を定義すると同時に関数を実行できる
②コードがシンプルになる

どういうことかと言うと、、、
動物園のキリンに名前をつける&体重を測る&体長を測る 例で見ていきます。

#__init__無しの場合
giraffes1 = Giraffes()
giraffes.name = jackson
giraffes.weight = 350
giraffes.height = 6.8

giraffes2 = Giraffes()
giraffes.name = malia
giraffes.weight = 290
giraffes.height = 5.6
#__init__ありの場合
#Giraffesクラスを編集
class Giraffes(Mammals):
    def __init__(self,name,weight,height):
        self.name = name
        self.weight = weight
        self.height = height
        def eat_leaves(self):
                print("mosyamosyamosya")


giraffes1 = Giraffes("jackson",350,6.8)
giraffes2 = Giraffes("malia",290,5.6)

1度定義してしまえばOKなので、楽チンですね。
キリンの数が増えるほど、効果を発揮します。

Giraffesクラスが呼び出されるごとに、オブジェクトを「初期化」して、新しいキリンの名前・体重・体長を決められます。

6
2
1

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