Python


サイト -Python | Progate リンク



Python 学習レッスン I > 真偽値と条件分岐 > 10. if文

ポイント

・インデント(字下げ)

 if文の条件式が成立した時の処理を書くときには、インデントをします。

 処理がif文の中にあるかどうかはインデントによって判別されます。条件が成立したときにif文の中の処理が実行されます。

 Pythonではコードの見た目(インデント)がそのままプログラムの動作に影響するので、インデントに気をつけましょう。

score = 50
if score == 100:
    print(if文の中身")
print("if文野外")

Python 学習レッスン II > 複数のデータを扱おう > 5. 辞書

ポイント

・辞書内の要素の順序

 Python 3.7以降はキーの順序を保証するようになりました。

fruits = {"apple":"りんご","banana":"バナナ","orange":"オレンジ"}
print(fruits)
{'apple': 'りんご', 'banana': 'バナナ', 'orange': 'オレンジ'}

Python 学習レッスン II > 複数のデータを扱おう > 7. for文(2)

ポイント

・辞書の要素のキーを取得

 「for 変数名 in 辞書:」と書くことで繰り返し処理をすることができます。ここで定義された変数にそれぞれの要素のキーが1つずつ代入されます

fruits = {'apple': 'りんご', 'banana': 'バナナ', 'grape': 'ぶどう'}

for fruit_key in fruits:
  print(fruit_key + "は" + fruits[fruit_key] + "という意味です")

appleはりんごという意味です

bananaはバナナという意味です

grapeはぶどうという意味です


Python 学習レッスン III > じゃんけんゲームを完成させよう > 12. モジュールを使おう

ポイント

・import

 importを使うことでモジュールを読み込むことができる

 モジュールを読み込んで使いたいファイルに「import モジュール名」と書くことで読み込むことができる

 モジュール名はファイル名から拡張子(.py)を取り除いたもの

 「モジュール名.関数名()」と書くことで、モジュール内の関数を実行することができる

 引数がある場合、関数を使用するときと同様に()のなかに書きます。

script.py
import utils

print('じゃんけんをはじめます')
player_name = input('名前を入力してください:')
print('何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand = int(input('数字で入力してください:'))

if utils.validate(player_hand):
    computer_hand = 1

    if player_name == '':
        utils.print_hand(player_hand)
    else:
        utils.print_hand(player_hand, player_name)

    utils.print_hand(computer_hand, 'コンピュータ')
    
    result = utils.judge(player_hand, computer_hand)
    print('結果は' + result + 'でした')
else:
    print('正しい数値を入力してください')
コンソール
じゃんけんをはじめます
名前を入力してください:    
何を出しますか?(0: グー, 1: チョキ, 2: パー)
数字で入力してください:0
ゲストはグーを出しました
コンピュータはチョキを出しました
結果は勝ちでした
utils.py
def validate(hand):
    if hand < 0 or hand > 2:
        return False
    return True

def print_hand(hand, name='ゲスト'):
    hands = ['グー', 'チョキ', 'パー']
    print(name + 'は' + hands[hand] + 'を出しました')

def judge(player, computer):
    if player == computer:
        return '引き分け'
    elif player == 0 and computer == 1:
        return '勝ち'
    elif player == 1 and computer == 2:
        return '勝ち'
    elif player == 2 and computer == 0:
        return '勝ち'
    else:
        return '負け'


Python 学習レッスン IV > クラスとインスタンス

ポイント

ポイント ソース 行数 メモ
クラス menu_item.py 1 クラスは「class クラス名:」とすることで定義できる。クラス名は「MenuItem」のように大文字で始める
      クラスの中身(設計図の内容)は「class MenuItem:」より後の行で、インデントをして書いていく
      クラスの中身で何もしない場合は pass と記述するく
    6, 9 クラスの中で定義した関数のことをメソッドと呼ぶ。メソッドの定義の方法は通常の関数と同じだが、第1引数にselfを追加する必要があるく
  script.py 3~6 「変数名 = クラス名()」とすることで、生成したインスタンスを変数に代入することがでるく
       
 インスタンスメソッド menu_item.py 6, 9  クラスの中で定義した関数のことをメソッドと呼ぶ。メソッドの定義の方法は通常の関数と同じだが、第1引数に「self」を追加する必要がある。「self」には、そのメソッドを呼び出したインスタンス自身が代入されている
    15  インスタンスメソッドは通常の関数と同様に、戻り値を返すようにすることもできる
  script.py  26 クラスの中で定義し、インスタンスに対して呼び出すメソッドのことを、「インスタンスメソッド」と呼ぶ
      インスタンスメソッドは、「インスタンス.メソッド名()」とすることで、そのメソッドを呼び出すことができる
       
 インスタンス変数  menu_item.py 3~4 

「name」や「price」のことを「インスタンス変数」と呼ぶ。__init__メソッドで設定すればインスタンス生成時にインスタンス変数に値を代入できる。script.pyでインスタンス生成の後でもインスタンス変数を作成することが出来る

   script.py  22 「インスタンス.インスタンス変数名」とすることで、そのインスタンス変数の値を用いることができる
       
 __init__メソッド  menu_item.py 2~4

__init__メソッドは、「クラス名()」でインスタンスを生成した直後に自動で呼び出される

インスタンスを生成すると同時にインスタンス変数に値を代入することができる

__init__メソッドは通常のインスタンスメソッドと同じように、引数を受け取ることもでき

       
 クラスを直接読み込む  script.py 「from モジュール名 import クラス名」とすることで、そのモジュール内の指定したクラスを直接読み込むことができる
       
 インスタンスのリスト  script.py  8, 12

MenuItemクラスから生成したインスタンスも、リストの要素にすることが可能

そのリストに対してfor文を用いることで、それぞれのインスタンスの情報を扱える

       
script.py
 1  from menu_item import MenuItem
 2  
 3  menu_item1 = MenuItem('サンドイッチ', 500)
 4  menu_item2 = MenuItem('チョコケーキ', 400)
 5  menu_item3 = MenuItem('コーヒー', 300)
 6  menu_item4 = MenuItem('オレンジジュース', 200)
 7  
 8  menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]
 9  
10  index = 0
11  
12  for item in menu_items:
13      print(str(index) + '. ' + item.info())
14      index += 1
15  
16  print('--------------------')
17  
18  order = int(input('メニューの番号を入力してください: '))
19 
20  selected_menu = menu_items[order]
21 
22  print('選択されたメニュー: ' + selected_menu.name)
23  
24  count = int(input('個数を入力してください(3つ以上で1割引): '))
25  
26  result = selected_menu.get_total_price(count)
27  
28  print('合計は' + str(result) + '円です')
menu_item.py
 1 class MenuItem:
 2     def __init__(self, name, price):
 3         self.name = name
 4         self.price = price
 5 
 6     def info(self):
 7         return self.name + ': ¥' + str(self.price)
 8 
 9     def get_total_price(self, count):
10         total_price = self.price * count
11         
12         if count >= 3:
13             total_price = total_price * 0.9
14         
15         return round(total_price)
コンソール
0. サンドイッチ: ¥500
1. チョコケーキ: ¥400
2. コーヒー: ¥300
3. オレンジジュース: ¥200
--------------------
メニューの番号を入力してください: 3
選択されたメニュー: オレンジジュース
個数を入力してください(3つ以上で1割引): 4
合計は720円です


Python 学習レッスン V > クラスの継承

ポイント

ポイント ソース 行数 メモ
 継承 food.py 3 あるクラスを元にして新たなクラスをつくることを「継承」と呼ぶ
      「class 新しいクラス名(元となるクラス名):」とすることで他のクラスを継承して、新しいクラスを定義することができる。このとき、新しいクラスは「子クラス」、元となるクラスは「親クラス」と呼ばれる
       
  script.py  38 継承をすると、子クラスは親クラスのインスタンスメソッドを引き継ぐ。Foodクラスのインスタンスは、MenuItemクラス内に定義してある「get_total_price」メソッドを使うことができる
       
   food.py 12 

子クラスでは、親クラスから引き継いだメソッド以外にも、独自にメソッドを追加することもできる

子クラスは「親クラス内に定義されているメソッド」と「独自に定義したメソッド」の両方が使える

ただし、親クラスでは子クラスのメソッドは使えない

       
 オーバーライド  food.py 4, 8  親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができる。これをメソッドの「オーバーライド」と呼ぶ。オーバーライドをすると、子クラスのインスタンスは親クラスのメソッドではなく、子クラスで定義したメソッドを呼び出すようになる
       
 super()  food.py  5 オーバーライドしたメソッドの中で「super()」とすることで、親クラスを呼び出すことができる。また、「super().メソッド名()」とすることで、親クラス内に定義されたインスタンスメソッドをそのまま利用することが可能
       
script.py
 1 from food import Food
 2 from drink import Drink
 3 
 4 food1 = Food('サンドイッチ', 500, 330)
 5 food2 = Food('チョコケーキ', 400, 450)
 6 food3 = Food('シュークリーム', 200, 180)
 7 
 8 foods = [food1, food2, food3]
 9 
10 drink1 = Drink('コーヒー', 300, 180)
11 drink2 = Drink('オレンジジュース', 200, 350)
12 drink3 = Drink('エスプレッソ', 300, 30)
13 
14 drinks = [drink1, drink2, drink3]
15 
16 print('食べ物メニュー')
17 index = 0
18 for food in foods:
19     print(str(index) + '. ' + food.info())
20     index += 1
21 
22 print('飲み物メニュー')
23 index = 0
24 for drink in drinks:
25     print(str(index) + '. ' + drink.info())
26     index += 1
27 
28 print('--------------------')
29 
30 food_order = int(input('食べ物の番号を選択してください: '))
31 selected_food = foods[food_order]
32 
33 drink_order = int(input('飲み物の番号を選択してください: '))
34 selected_drink = drinks[drink_order]
35 
36 count = int(input('何セット買いますか?(3つ以上で1割引): '))
37 
38 result = selected_food.get_total_price(count) + \
39          selected_drink.get_total_price(count)
40  
41 print('合計は' + str(result) + '円です')
コンソール
食べ物メニュー
0. サンドイッチ: ¥500 (330kcal)
1. チョコケーキ: ¥400 (450kcal)
2. シュークリーム: ¥200 (180kcal)
飲み物メニュー
0. コーヒー: ¥300 (180mL)
1. オレンジジュース: ¥200 (350mL)
2. エスプレッソ: ¥300 (30mL)
--------------------
食べ物の番号を選択してください: 1
飲み物の番号を選択してください: 0
何セット買いますか?(3つ以上で1割引): 4
合計は2520円です
menu_item.py
 1 class MenuItem:
 2     def __init__(self, name, price):
 3         self.name = name
 4         self.price = price
 5 
 6     def info(self):
 7         return self.name + ': ¥' + str(self.price)
 8 
 9     def get_total_price(self, count):
10         total_price = self.price * count
11 
12         if count >= 3:
13             total_price *= 0.9
14 
15         return round(total_price).py
food.py
 1 from menu_item import MenuItem
 2 
 3 class Food(MenuItem):
 4     def __init__(self, name, price, calorie):
 5         super().__init__(name, price)
 6         self.calorie = calorie
 7     
 8     def info(self):
 9         return self.name + ': ¥' + str(self.price) + \
10                ' (' + str(self.calorie) + 'kcal)'
11     
12     def calorie_info(self):
13         print(str(self.calorie) + 'kcalです')
drink.py
 1 from menu_item import MenuItem
 2 
 3 class Drink(MenuItem):
 4     def __init__(self, name, price, amount):
 5         super().__init__(name, price)
 6         self.amount = amount
 7 
 8     def info(self):
 9         return self.name + ': ¥' + str(self.price) + \
10         ' (' + str(self.amount) + 'mL)'


hoge

ポイント

・あ

print