0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python学習日記(Progate編)

Last updated at Posted at 2024-08-09

1日目_2024/08/10

効率的に学習するために参考にする先駆者を探した。
ロードマップはいくつかネット上にあったが以下サイトがわかりやすかったため、ベースにすることにした。

1つ目の目標

ProgateでPythonの基礎を抑える。
そのために、毎日Progateに触れる。

2日目_2024/08/11

Progateを開始した。

Pythonレッスン1-2「文字列」

print('Hello World')

↓実行で以下を表示

Hello World

Progateレッスン1-3「数値」、1-4「計算してみよう」を学習

「''」ありの場合、文字列扱い。
なしの場合数値扱い。そのため四則演算ができる。

①print(1)
②print(1 + 1)
③print('1 + 1')

表示↓

①1
②2
③1 + 1

と表示できる。

3日目_2024/08/12

Progateレッスン1-5「変数」、1-6「変数を使ってみよう」

変数 = 右辺を左辺に代入すること。

例↓

name = 'honaki'
num = 1
print(name)
print(num)

表示↓

honaki
1

変数ルール

△
「namae」のようなローマ字
「名前」のような日本語

×
「1name」のような数字から始まるもの

変数を使う意義

①何を表わそているか分かり易い
②繰り返し使用可能 & 修正箇所が減らせる

①何を表わそているか分かり易い
appple = 3
apple_price = 100
total_price = appple * apple_price

以下だと何のことなのかわからない
total_price = 3 * 100

②繰り返し使用可能 & 修正箇所が減らせる
正方形の面積
length = 3
area = length * length

以下だと数字を修正する場合に一つ一つ修正しなければならない
変数なら1箇所で済む
area = 3 * 3

Progateレッスン1-7「変数を更新してみよう」

x = 1
print(x)

x = 11
print(x)

x = x + 22
print(x)

↓ 実行すると以下を表示する

1
11
33

変数の更新の四則演算

①基本系
x = x + 1
x = x - 1
x = x * 1
x = x / 1
x = x % 1

②省略系
x += 1
x -= 1
x *= 1
x /= 1
x %= 1

Progateレッスン1-8「文字列の連結」

name = honaki
print('私は' + name + 'です。')

↓表示

私はhonakiです。

Progateレッスン1-9「データ型」

'Hello'
→文字列型

1
→数値型

データ型が異なる連結はエラーが起こる↓

NG例)
age = 10
print('私は' + age + 'です。')
→TypeErrer:Can't convent 'int' object to str implicitiy
→異なる型同士の連結はできない

↓ 「型変換」を行うと連結ができる

OK例) 数値型を文字列型に型変換:str
age = 10
print('私は' + str(age) + 'です。')

OK例2)文字列型を数値型に型変換:int
apple = 5
price = '300'
total_price = apple * int(price)
print(total_price)

型変換表
・数値型→文字列型:str
・文字列型→数値型:int

Progateレッスン1-10「if文」

if文の公式

ポイント
①行末に「:」を必ず記載すること。
②インデント(字下げ)を行った行のみが条件結果に合致した場合に返す。
→下の例だと「print(222)」はif文に関係ない。理由はインデントしていないから。

if 条件文 比較演算子 条件内容:
    print(111)
print(222)←if文の外

score = 61
if score > 70:
    print(よくがんばりました!)
print(もう少しです!)

↓ 表示結果

もう少しです!

Progateレッスン1-11「真偽値」

真偽値

True:比較演算子が成り立つ場合
False:比較演算子が成り立たない場合

例
print(3 == 3)
print(3 == 5)

↓以下の表示になる

True
False

if文と真偽値の融合

score = 100
if score == 100
    print('100です。')
if score == 50
    print('50です。')

↓以下の表示になる

100です。

比較演算子一覧→条件通りならTrue、Falseを示す

等しいか

・==
・!=

大きいか

・<
・<=
・>
・>=

Progateレッスン1-12「else」

score = 60
if score > 70:
    print('合格です!')
else:
    print('次回がんばりましょう!')

↓以下の表示になる

次回がんばりましょう!

上記のポイント

elseには「:」を必ずつける!

Progateレッスン1-13「elif」

score = 80
if score > 90:
    print('優秀です!')
elif score > 70:
    print('合格です!')
else:
    print('次回がんばりましょう!')

↓以下の表示になる

合格です!

4日目_2024/08/13

Progateレッスン1-14「条件式を組み合わせよう」

論理演算子
・and
・or
・not

例)

num = 10
if num < 5 and 20 < num:
    print('5より大きく、20より小さいです')

↓上記と内容は同じ

if 5 < num < 20:
    print('5より大きく、20より小さいです')

例2)

num = 10
if not num == 5:
    print('5ではありません')

5日目_2024/08/14

Progateレッスン1-15「代金を計算しよう」

演習課題

6日目_2024/08/15

Progateレッスン1-16「入力を受け取ろう」

「input」:コードを実行した際に、
コンソールに文字を入力できるようになり、
スクリーンショット 2024-08-15 9.31.55.png
その↑入力された値を受け取ることができる。

「変数 = input('コンソールに表示したい文字列')」のように使えば
inputで取得した値を変数で管理することができる。

例)
apple_price = 200

input_count = input('購入するりんごの個数を入力してください:')

count = int(input_count)
total_price = apple_price * count

print('購入するりんごの個数は' + str(count) + '個です')
print('支払い金額は' + str(total_price) + '円です')

Progateレッスン1-17「条件分岐をしよう」

演習課題

Progateレッスン2-2「リスト」

foods = ['apple', 'orange', 'peach']
print(foods)
print(foods[1])

↓以下の表示になる

['apple', 'orange', 'peach']
orange

Progateレッスン2-2「リスト要素の更新・追加」

// 追加
foods = ['apple', 'orange', 'peach']
foods.append('banana')
print(foods)

// 更新
foods[0] = 'cherry'
print(foods)

↓以下の表示になる

['apple', 'orange', 'peach', 'banana']
['cherry', 'orange', 'peach', 'banana']

Progateレッスン2-3「for文」

// for文の公式(繰り返し処理)
for 変数名 in リスト:
    print(変数名)

// 例
foods = ['apple', 'orange', 'peach']
for food in foods:
    print('私は' + food + 'が好きです')

↓以下の表示になる

私はappleが好きです
私はorangeが好きです
私はpeachが好きです

7日目_2024/08/16

Progateレッスン2-5「辞書」

// リスト
foods = ['apple', 'orange', 'peach']

// 辞書
foods = {'apple':'red', 'orange':'orange', 'peach':'pink'}
print('リンゴの色は' + foods['apple'] + 'です。')

↓以下の表示になる

リンゴの色はredです。

Progateレッスン2-6「辞書の要素の更新・追加」

// 辞書
foods = {'apple':'red', 'orange':'orange', 'peach':'pink'}
foods['apple'] = 'green'
foods['banana'] = 'yellow'

print(foods)

↓以下の表示になる

{'apple':'green', 'orange':'orange', 'peach':'pink', 'banana':'yellow'}

Progateレッスン2-17「for文(2)」

// 辞書
foods = {'apple':'red', 'orange':'orange', 'peach':'pink'}
for food_key in foods:
    print(food_key + 'の色は' + foods + 'です。')

↓以下の表示になる

appleの色はredです。
orangeの色はorangeです。
peachの色はpinkです。

8日目_2024/08/17

Progateレッスン2-8「while文」

// 「while文」公式
while 条件式 :

// 例
x = 1
while x > 10
    print(x)
    x += 1

↓以下の表示になる

1
2
3
4
5
6
7
8
9
10

9日目_2024/08/18

Progateレッスン2-9「break」

break = 終了

// 例
nums = [1,2,3,4,5,6,7,8,9]
for num in nums:
    print(num)
    if num == 5:
        print('終了します')
        break

↓以下の表示になる

1
2
3
4
5
終了します

10日目_2024/08/19

Progateレッスン2-10「continue」

continue = スキップ

// 例
nums = [1,2,3,4,5,6,7,8,9]
for num in nums:
    if num % 2:
        continue
    print(num)

↓以下の表示になる

1
3
5
7
9

Progateレッスン2-11「商品を用意しよう」

演習問題

Progateレッスン2-12「商品を購入しよう」

演習問題

⭐️文章の中に「数字の変数」を含める際は「str(変数)」で文字列に変換しながら出力する

items = {'apple': 100, 'banana': 200}
for item_name in items:
    print(item_name + 'は1個' + str(items[item_name]) + '円です')

⭐️「input」は①コンソール入力を可能にし、②入力値を変数の中に代入できる。

・コード
スクリーンショット 2024-08-19 21.15.30.png

・実際のコンソール画像
スクリーンショット 2024-08-19 21.15.55.png

Progateレッスン2-13「条件分岐をしよう」

演習問題

// xは5以上
x >= 5

// xは5以下
x <= 5

// xは5未満
x < 5

Progateレッスン2-14「残金を計算をしよう」

演習問題

11日目_2024/08/20

Progateレッスン3-2「関数」

// 関数の公式
def 関数名():

// 例
def hello():
    print('Hello World')

hello()

↓以下の表示になる

Hello World

12日目_2024/08/21

Progateレッスン3-3「引数」

// 引数の公式
def 関数(仮引数):
    関数を実行する処理

※仮引数は、引数を代入する箱(変数)のようなもの。
※仮引数はに代入した値は、その関数内でしか使用できない。(この使用範囲のことを「スコープ」という。)

// 例
def hello(name):
    print('こんにちは、' + name + 'さん')

hello('佐藤')

↓以下の表示になる

こんにちは、佐藤さん

Progateレッスン3-4「複数の引数」

// 例
def hello(name,message):
    print(message + '、' + name + 'さん')

hello('佐藤','こんばんは')

↓以下の表示になる

こんばんは、佐藤さん

Progateレッスン3-5「複数の初期値」

// 例
def hello(name,message='おはようございます'):
    print(message + '、' + name + 'さん')

hello('佐藤','こんばんは')
hello('鈴木')

※仮引き引数に初期値がある場合、引数の省略OK

↓以下の表示になる

こんばんは、佐藤さん
おはようございます、鈴木さん

13日目_2024/08/25

方向性の再確認を22~24で行なった。

Progateレッスン3-6「名前を受け取ろう」

演習問題

Progateレッスン3-7「出す手を選べるようにしよう」

演習問題

14日目_2024/08/26

Progateレッスン3-6「戻り値」

ifのTrueとFalseの動き方

// 公式
def varidate(hand):
    if hand < 0 or hand > 2:
        return False
    else:
        return True

is_valid = varidate(1)
print(is_valid)

// 公式続き
if varidate(player_hand):
    // varidate関数の戻り値がTrueの場合の処理
else:
    // varidate関数の戻り値がFalseの場合の処理

↓以下の表示になる

True
// 例題
def validate(hand):
    if hand < 0 or hand > 2:
        return False
    else:
        return True

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

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

if validate(player_hand):
    if player_name == '':
        print_hand(player_hand)
    else:
        print_hand(player_hand, player_name)
else:
    print('正しい数値を入力してください')

↓以下の表示になる

スクリーンショット 2024-08-26 22.21.16.png

Progateレッスン3-7「returnの性質」

同じ関数内でも続きがあってもreturnより下は処理されない。

// validateで引数値が0より小さく、2より大きい場合、「return True」は処理されずに終わる。
def validate(hand):
    if hand < 0 or hand > 2:
        return False
    return True

Progateレッスン3-8「じゃんけんをしよう」

演習問題

15日目_2024/08/27

Progateレッスン3-11「勝ち負けを判定しよう」

演習問題

Progateレッスン3-12「モジュールを使おう」

モジュール = Pythonのコードが書かれたファイルのこと。

メインのモジュールだけではなく、関数ごとなど様々なモジュールでコードを管理しながらシステムを構築しようよって話。

main.py
import val

// 別モジュールを使う際の公式 = モジュール名.関数名(引数)
val.validate(3)
val.py
def validate(hand):
    if hand < 0 or hand > 2:
        return False
    return True

Progateレッスン3-13「ライブラリを使おう」

標準ライブラリ = あらかじめ用意されているモジュールは標準ライブラリ呼ばれる。
importすることで使用可能。

スクリーンショット 2024-08-27 23.32.52.png

main.py
// random をimportする
import random

// randomモジュールのrandint関数を使う
// randint関数は(a,b)aからbまでの数値をランダムで出す関数
num = random.randint(0,2)

Python学習レッスンⅠ~Ⅲ/1「条件分岐を使ってメッセージを変えよう」

len(リスト) = リストの要素の数を取得する関数

cart_items = [
    {'name': 'Tシャツ', 'type': 'clothes', 'price': 2000},
    {'name': 'キャップ', 'type': 'cap', 'price': 8000}
]

print len(cart_items)

↓以下の表示になる

2

必要な処理を考える際の考え方

条件分岐
①条件分岐は必要か
②分岐の条件
③条件分岐後の処理

繰り返し処理
①繰り返し処理は必要か
②繰り返しに使うデータは何?
③繰り返し処理内で行うことは?

16日目_2024/08/28

Python学習レッスンⅠ~Ⅲ/2「条件分岐を使ったポイント計算の処理を書こう」

round(小数) = 小数を四捨五入した整数を取得することができる。

// 例
total_price = 10000
point1 = round(total_price * 0.01)
point2 = total_price * 0.01

print(point1)
print(point2)

↓以下の表示になる

100
100.0

購入金額の1%のポイントを付与する方法

購入金額 * 0.01 = これでポイントを出すことができる。

// 例
def calculate_points(total_price, user):
    rate = 0.01
    point = round(total_price * rate)

    // user['status']がpremiumとbasicで判別
    if user['status'] == 'premium':
        point += round( total_price * rate)
    
    return point

Python学習レッスンⅠ~Ⅲ/3「繰り返し処理を使って税込合計金額を計算しよう」

復習:繰り返し処理

list = [0,1,2,3,4,5]
for list in lists:
    繰り返しの処理

復習:整数化

print round(100.0)

↓以下の表示になる

100.0

17日目_2024/08/29

Python学習レッスンⅠ~Ⅲ/4「条件分岐と繰り返し処理を組み合わせよう」

複数の値を空の変数に代入する際は、空のリストを用意する。

# 復習
[] :リスト
{} :辞書

例題

以下のようにordersのuser_id=1に該当するデータのみ抽出したい

スクリーンショット 2024-08-29 14.08.27.png

def get_order_history(user, orders):

    # ↓今回躓いたのはここ
    # 下記のordersリストが辞書だと勘違いして、「select = {}」を記載していた。
    # orders = [{}×4]のような構造になっている
    # 今回抽出したいのは[{}×4]の中の{}×4内にあるuser_id=1である全データ
    # 要するに{}×4部分を抜き出したい。
    # だからその空のリスト[]を作ってあげる。
    select = []
    
    for order in orders:
        if user['user_id'] == order['user_id']:
            select.append(order)
    return select
        
orders = [
    {
        'order_id': 1,
        'user_id': 1,
        'items': [
            {'name': 'キャップ', 'type': 'cap', 'price': 8000},
            {'name': 'Tシャツ', 'type': 'clothes', 'price': 2000}
        ]
    },
    {
        'order_id': 2,
        'user_id': 2,
        'items': [
            {'name': 'ランニングシューズ', 'type': 'shoes', 'price': 15000},
        ]
    },
    {
        'order_id': 3,
        'user_id': 1,
        'items': [
            {'name': 'スポーツドリンク', 'type': 'food', 'price': 150}
        ]
    },
    {
        'order_id': 4,
        'user_id': 3,
        'items': [
            {'name': 'アンダーウェア', 'type': 'clothes', 'price': 4500},
            {'name': 'テニスラケット', 'type': 'sports goods', 'price': 8000}          
        ]
    }
]

user = {'user_id': 1, 'status': 'basic'}
# 関数の呼び出し
user_orders = get_order_history(user, orders)
for order in user_orders:
    print(order)

Python学習レッスンⅠ~Ⅲ/5「商品と色の組み合わせを表示しよう」

繰り返し処理の中に繰り返し処理

スクリーンショット 2024-08-29 21.59.38.png

# items辞書とcolorsリストでパターンを出したい
# イメージは上記画像

def display_product_and_color(items, colors):
    for item in items:
        for color in colors:
            print(item['name'] + ':' + color)

items = [
    {'name': 'Tシャツ', 'type': 'clothes', 'price': 2000},
    {'name': 'キャップ', 'type': 'cap', 'price': 8000}
]
colors = ['Red', 'Blue', 'Black']

display_product_and_color(items, colors)

Python学習レッスンⅠ~Ⅲ/6「金額計算の処理を書こう」

ポイント

・コードを書く前に「何をするのか」を書き出してから順番に実行する
・「繰り返し処理」の中で「条件分岐」を行う

Python道場レッスンⅠ~Ⅲ/1「ウェルカムメッセージを返す処理を作ろう」

演習問題

Python道場レッスンⅠ~Ⅲ/2「新規レビューを追加しよう」

空の辞書に追加していく方法

# 以下のようにまとめて値を入力することができる。
def add_item_review(user, item, rating, review_text, reviews):
    new_review = {
        'user_id': user['user_id'],
        'item_id': item['id'],
        'rating': rating,
        'review_text': review_text
    }

⭐️リストと違い、辞書は空の辞書を作らなくても良い。
⭐️複数の値を1回でまとめて代入することが可能

# こっちは私が考えて書いたコード。間違いではない。
def add_item_review(user, item, rating, review_text, reviews):
    new_review = {}
    new_review['user_id'] = user['user_id']
    new_review['item_id'] = item['id']
    new_review['rating'] = rating
    new_review['review_text'] = review_text

リスト名.append(追記内容)の場合、returnと併用できない

def add_item_review(user, item, rating, review_text, reviews):
    new_review = {
        'user_id': user['user_id'],
        'item_id': item['id'],
        'rating': rating,
        'review_text': review_text
    }
    reviews.append(new_review)
    
    # 私は「return reviews.append(new_review)」にして、Noneと返されていた。
    # appendは追加するメソッドで返すメソッドではないから
    # 以下のようにappend使用後にリストをreturnすれば正常に動く
    return reviews

reviews = [
    {'user_id': 1, 'item_id': 2, 'rating': 4, 'review_text': '音質が期待通り'},
    {'user_id': 3, 'item_id': 3, 'rating': 2, 'review_text': '画面がすぐに割れてしまった'}
]
user = {'user_id': 2, 'name': 'John'}
item = {'id': 1, 'name': 'ゲームソフト', 'price': 5000}
rating = 5
review_text = '時間を忘れてしまうほど面白い'

reviews = add_item_review(user, item, rating, review_text, reviews)
for review in reviews:
  print(review)

18日目_2024/08/30

Python道場レッスンⅠ~Ⅲ/3「会員割引きの計算をしよう」

演習問題

Python道場レッスンⅠ~Ⅲ/4「条件分岐または繰り返し処理を使おう」

比較演算子

=
<
>
<=
>=

Python道場レッスンⅠ~Ⅲ/5「全商品の在庫を更新しよう」

演習問題

Python道場レッスンⅠ~Ⅲ/6「購入金額と会員情報による送料の有無を判定しよう」

ifの「True」と「False」の使い方

# 変数にTruenが入っていれば、Trueの処理。FalseならFalseの処理を行う。

if 変数など:
    Trueの処理
else:
    Falseの処理

例題

def is_shipping_free(cart_items, user):
    
    total_price = 0
    for cart_item in cart_items:
        total_price += cart_item['price']
        
    if user['status'] == 'basic' and total_price >= 10000:
        return True
    elif user['status'] == 'premium' and total_price >= 5000:
        return True
    else:
        return False

cart_items = [
    {'id': 2, 'name': 'ヘッドホン', 'price': 5500},
    {'id': 4, 'name': '乾電池', 'price': 100}
]
user = {'user_id': 2, 'name': 'John', 'status': 'basic'}

free_shipping = is_shipping_free(cart_items, user)
print('入力1:送料有料になる金額の場合')

# ⭐️ここ
if free_shipping:
    print("配送料は無料です")
else:
    print("配送料がかかります")

配送料がかかります

Python道場レッスンⅠ~Ⅲ/7「クーポンコードの割引を適用しよう」

演習問題

Python道場レッスンⅠ~Ⅲ/8「対象商品の在庫数を更新しよう」

演習問題

19日目_2024/08/31

Python道場レッスンⅠ~Ⅲ/9「注文した商品の注文ステータスをキャンセルに変更しよう」

演習問題

20日目_2024/09/01

Python道場レッスンⅠ~Ⅲ/10「すでに購入済みの商品かどうかを判定しよう」

演習問題

Python学習レッスンⅣ/2「クラスの定義」

クラスとインスタンス

クラス:設計図
インスタンス:もの

インスタンス生成ステップ

①クラス作成
②クラスから(空の)インスタンスを生成
③インスタンスに情報を入れていく(メニューなら名前など)

クラスの作り方

class クラス名:

例
class Menu:

21日目_2024/09/02

Python学習レッスンⅣ/3「インスタンスの生成」

インスタンスの生成方法

「クラス名()」で呼び出すことができる

例)
class Menu:

item = Menu()

22日目_2024/09/03

Python学習レッスンⅣ/4「インスタンス変数」

インスタンスに情報を入れていく

インスタンスに情報を入れていく公式
「インスタンスを代入した変数.情報名 = 入れたい情報」

例)
# クラス
class Menu:

# インスタンス化&代入
menu_item1 = Menu()

# インスタンスに情報を入れていく
menu_item1.name = 'サンドイッチ'
print(menu_item1.name)

menu_item1.price = 500
print(menu_item1.price)

サンドイッチ
500

23日目_2024/09/04

Python学習レッスンⅣ/5「複数のインスタンス」

1つのクラスから複数のインスタンスを作る

# クラス
class Menu:

# インスタンス化
menu_item1 = Menu()

# インスタンスに情報を代入
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

# 出力
print(menu_item1.name)
print(menu_item1.price)

# 2つ目のインスタンス化
menu_item2 = Menu()

# インスタンスに情報を代入
menu_item2.name = 'チョコケーキ'
menu_item2.price = 400

# 出力
print(menu_item2.name)
print(menu_item2.price)

サンドイッチ
500
チョコケーキ
400

Python学習レッスンⅣ/6「クラスとメソッド」

メソッド、インスタンスメソッド

メソッド = クラスの中にある関数のこと
インスタンスメソッド = クラスの中で定義し、インスタンスに対して呼び出すメソッドのこと

メソッドの呼び出し方

# 公式
class クラス名:
    def メソッド名(self):
        処理内容

変数 = クラス名()

変数.メソッド名() # メソッド呼び出し


# 例
class Menu:
    # infoメソッド
    # 必ず第一引数にselfを記載する
    def info(self):
        print('メニューの名前と値段が表示されます')

menu_item1 = Menu()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

# メソッドの呼び出し
menu_item1.info()

メニューの名前と値段が表示されます

Python学習レッスンⅣ/7「インスタンスメソッド(self)」

インスタンスメソッドの第1引数に指定した「self」には、
そのメソッドを呼び出したインスタンス自身が代入されている。
→下記コードで言うと、「menu_item1」のこと

下のコードのようにメソッド内で「self.name」とすることで、
そのメソッドを呼び出している「menu_item1」の「name」の値を取得することができる。

class Menu:
    def info(self):
        print(self.name)

menu_item1 = Menu()
menu_item1.name = 'サンドイッチ'

menu_item1.info()

スクリーンショット 2024-09-04 23.41.33.png

型変換

str() = 数字    → 文字列
int() = 文字列 → 数字

age = 27
print('私は' + str(age) + '歳です。')

Python学習レッスンⅣ/8「インスタンスメソッド(戻り値)」

戻り値はreturnを使う

class Menu:
    def info(self):
        # インスタンスメソッドはreturnもOK
        return self.name + ': ¥' + str(self.price)

menu_item1 = Menu()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

print(menu_item1.info())

24日目_2024/09/05

Python学習レッスンⅣ/9「インスタンスメソッド(引数)」

インスタンスメソッドのselfと引数

インスタンスメソッドに引数を渡す場合、
メソッドの定義側では「self」の分だけ引数の順番がずれる
スクリーンショット 2024-09-05 22.53.11.png

class Menu:
    def get_total_price(self, count):
        total_price = self.price * count
        return total_price

menu_item1 = Menu()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')

合計は2000円です

Python学習レッスンⅣ/10「__init__メソッド(1)」

__init__メソッド

__init__メソッド = 「クラス名()」でインスタンスを生成した直後に自動で呼び出される。
スクリーンショット 2024-09-05 23.11.46.png

class MenuItem:
    def __init__(self):
        print('MenuItemクラスのインスタンスが生成されました!')

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price


menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

print(menu_item1.info())

result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')

MenuItemクラスのインスタンスが生成されました!
サンドイッチ:¥500
合計は2000円です

Python学習レッスンⅣ/11「__init__メソッド(2)」

__init__メソッドの使用用途

インスタンスを生成すると同時にインスタンス変数に値を代入することができる。
すぐにインスタンスの情報を追加できるので便利。

スクリーンショット 2024-09-05 23.34.42.png

24日目_2024/09/06

Python学習レッスンⅣ/11「__init__メソッド(3)」

__init__メソッドに引数を渡す

__init__メソッドで引数を受け取る方法は、
インスタンスを生成している「クラス名()」に対して引数を渡すことで、__init__メソッドでその値を受け取ることができる。
スクリーンショット 2024-09-06 22.33.31.png

class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price

menu_item1 = MenuItem('サンドイッチ', 500)

print(menu_item1.info())

result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')

サンドイッチ:¥500
合計は2000円です

24日目_2024/09/07

Python学習レッスンⅣ/13「ファイルの分割」

「from モジュール名 import クラス名」

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price
script.py
# 今回のメイン
# 「from モジュール名 import クラス名」で別モジュールのクラスを活用可能にする
from menu_item import MenuItem

menu_item1 = MenuItem('サンドイッチ', 500)

print(menu_item1.info())

result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')

「import モジュール名」の場合

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price
script.py
# 「import モジュール名」
import menu_item 

# 「import モジュール名」の場合、「モジュール名.クラス名()」で別モジュールのクラスを活用可能。
menu_item1 = menu_item.MenuItem('サンドイッチ', 500)

print(menu_item1.info())

result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')

Python学習レッスンⅣ/14「メニュー一覧の作成(1)」

複数のインスタンス化したものを繰り返し処理で1つずつ出力する

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price
script.py
# モジュール、クラスの読み込み
from menu_item import MenuItem

# 4点インスタンス化
menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)

# インスタンスにしたものをmenu_itemsに代入
menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

#for文で繰り返し、「インスタンス化.メソッド名」で呼び出す
for menu_item in menu_items:
    print(menu_item.info())

復習

メソッドの呼び出し方

script.py
# 公式
class クラス名:
    def メソッド名(self):
        処理内容

変数 = クラス名() #インスタンス化

変数.メソッド名() # メソッド呼び出し


# 例
class Menu:
    # infoメソッド
    # 必ず第一引数にselfを記載する
    def info(self):
        print('メニューの名前と値段が表示されます')

menu_item1 = Menu() #インスタンス化
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

# メソッドの呼び出し
menu_item1.info()

Python学習レッスンⅣ/15「メニュー一覧の作成(2)」

繰り返し処理で番号を1ずつ増やしていく方法

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price
script.py
from menu_item import MenuItem

menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)

menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

# for文の外ではじめの数値を変数に代入する
index = 0

# for文
for item in menu_items:
    print(str(index) + '.' + item.info())
    
    # for文の中 & 数値を出力した後に+1する
    index += 1


スクリーンショット 2024-09-07 20.20.40.png

Python学習レッスンⅣ/16「入力を受け取る」

inputを受け取った時は、数値?文字?

A.文字列型になっている
→数値として扱いたいなら、以下のようにint()をつける

int(input('メニューの番号を入力してください: '))

復習

インスタンスの情報を出力する

script.py
class Menu:
    def info(self):
        print('メニューの名前と値段が表示されます')

menu_item1 = Menu() #インスタンス化
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

print(menu_item1.name)

サンドイッチ

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price
script.py
from menu_item import MenuItem

menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)

menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

index = 0

for item in menu_items:
    print(str(index) + '. ' + item.info())
    index += 1

print('--------------------')

# inputでユーザーの入力を取得する
# int()で数値型に変更
order = int(input('メニューの番号を入力してください: '))

# menu_itemsリストの番号を指定
# ユーザーが選んだ数値にするためinputを代入しているorderを使用
selected_menu = menu_items[order]

# selected_menu = MenuItemのどれか。
# MenuItemクラスをインスタンス化した中にある情報の「name」の中にメニュー名がある。
# インスタンス化を代入した変数.name でメニュー名を出力
print('選択されたメニュー:' + selected_menu.name)

Python学習レッスンⅣ/17「合計金額の計算」

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        # 3個以上選択の場合、1割引
        if count >= 3:
            total_price *= 0.9
        
        return round(total_price)
script.py
from menu_item import MenuItem

menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)

menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

index = 0

for item in menu_items:
    print(str(index) + '. ' + item.info())
    index += 1

print('--------------------')

order = int(input('メニューの番号を入力してください: '))
# メニュー番号のリストを選択して代入
selected_menu = menu_items[order]
print('選択されたメニュー: ' + selected_menu.name)

# inpurは文字列型なのでint()で数値型に変換
count = int(input('個数を入力してください(3つ以上で1割引): '))

# インスタンス.メソッド名(引数)
result = selected_menu.get_total_price(count)

# 数値型なので、str()で文字列型に変換
print('合計は' + str(result) + '円です')

Python学習レッスンⅤ/2「継承とは」

すでにあるクラスを利用して、それをもとに新しいクラスをつくることができる。
メリット:「共通部分をまとめることができ、効率的にコードを書くことができる」

公式

「class 新しいクラス(継承元クラス)」

イメージ

スクリーンショット 2024-09-07 21.37.03.png
スクリーンショット 2024-09-07 21.38.38.png

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
# 読み込み
from menu_item import MenuItem

# 「class 新しいクラス(継承元クラス)」
# 新しいクラス = 子クラス
# 継承元クラス = 親クラス
class Food(MenuItem):
    # 処理がない時にpassを使用する
    pass

Python学習レッスンⅤ/3「継承の仕組み」

インスタンスメソッド全て使用可能

子クラスは、親クラスのインスタンスメソッドをそのまま使うことができる。
init()」もその他も全部使用可能

スクリーンショット 2024-09-07 21.50.02.png
スクリーンショット 2024-09-07 21.52.17.png

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
# MenuItemクラスの読み込み
from menu_item import MenuItem

#  クラス継承
class Food(MenuItem):
    pass
script.py
# foodクラスの読み込み
from food import Food

# インスタンス化
food1 = Food('サンドイッチ', 500)

# infoメソッドの読み込み
# info()は、元は「MenuItem」にある。
# FoodクラスがMenuItemを継承したから使用可能になった。
print(food1.info())

25日目_2024/09/08

Python学習レッスンⅤ/4「インスタンスメソッドの追加」

子クラスに子クラスのみのインスタンスメソッドを追加する

子クラスは
・親クラスから継承したインスタンスメソッド
・子クラス独自で設定したインスタンスメソッド
の、両方を使用可能。

親クラスは、親クラスで設定したインスタンスメソッドのみ使用可能。
子クラス独自のインスタンスメソッドは使用不可。

スクリーンショット 2024-09-08 14.51.29.png

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
from menu_item import MenuItem

class Food(MenuItem):
    # 子クラス独自のインスタンスメソッド
    def calorie_info(self):
        print(str(self.calorie) + 'kcalです')
script.py
from food import Food

# インスタンス化
food1 = Food('サンドイッチ', 500)
# food1にcalorie=300を代入
food1.calorie = 330
# Foodクラスのcalorie_info()メソッドを呼び出し
food1.calorie_info()

Python学習レッスンⅤ/5「infoメソッドの改良」/Python学習レッスンⅤ/6「infoメソッドの改良(2)」

オーバーライド(親クラスのメソッドを上書き)

オーバーライド:親クラのメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができる。

スクリーンショット 2024-09-08 15.04.41.png

スクリーンショット 2024-09-08 15.05.17.png

例)子クラスからinfoメソッドを呼び出す場合

①親クラスでinfoメソッドを設定、子クラスにinfoメソッドなし
→親クラスのinfoメソッドを使用可能。
②親クラスでinfoメソッドを設定、子クラスでinfoメソッドを設定
→親クラスのinfoメソッドは使用不可。
子クラスのinfoメソッドは使用可能。(これが上書き。オーバーライド)

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
from menu_item import MenuItem

class Food(MenuItem):
    # infoメソッド(オーバーライド)
    def info(self):
        return self.name + ': ¥' + str(self.price) + ' (' + str(self.calorie) + 'kcal)' 
script.py
from food import Food
from drink import Drink

food1 = Food('サンドイッチ', 500)
food1.calorie = 330

# Foodクラス、food1インスタンス、infoメソッド呼び出し
print(food1.info())

Python学習レッスンⅤ/7「__info__メソッドのオーバーライド」

__info__メソッドもオーバーライドが可能。

親クラス.py
class 親クラス:
    def __init__(self, name, price):
        self.name = name
        self.price = price

↓ 以下、オーバーライド

子クラス.py
from 親クラスのモジュール import 親クラス

class 子クラス(親クラス):
    def __init__(self, name, price, calorie):
        self.name = name
        self.price = price
        self.calorie = calorie

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
from menu_item import MenuItem

class Food(MenuItem):
    # 子クラスの__init__メソッドのオーバーライド
    def __init__(self, name, price, calorie):
        self.name = name
        self.price = price
        self.calorie = calorie

    def info(self):
        return self.name + ': ¥' + str(self.price) + ' (' + str(self.calorie) + 'kcal)'
script.py
from food import Food

food1 = Food('サンドイッチ', 500, 330)

food1.info()

Python学習レッスンⅤ/8「super()」 / Python学習レッスンⅤ/9「オーバーライドの復習」

メソッド内の重複をまとめる方法

オーバーライドしたメソッドの中で「super()」使用することで、親クラスを呼び出すことができる。
また、下の図のように「super().メソッド名()」とすることで、親クラス内に定義されたインスタンスメソッドをそのまま利用することが可能。

スクリーンショット 2024-09-08 16.13.35.png

コード例

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
from menu_item import MenuItem

class Food(MenuItem):
    # 子クラスの__init__メソッドのオーバーライド
    def __init__(self, name, price, calorie):
        # super()で親クラスを呼び出せる
        # 「super().メソッド名」で親クラスのメソッドを使用可能。
        # 親と子でメソッド名が重複していて、子の方に付け足したい情報があるときに便利。
        super().__init__(name, price)
        
        self.calorie = calorie

    def info(self):
        return self.name + ': ¥' + str(self.price) + ' (' + str(self.calorie) + 'kcal)'
script.py
from food import Food

food1 = Food('サンドイッチ', 500, 330)

print(food1.info())

Python学習レッスンⅤ/10「総合演習」

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        return self.name + ': ¥' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count

        if count >= 3:
            total_price *= 0.9

        return round(total_price)
food.py
from menu_item import MenuItem

class Food(MenuItem):
    def __init__(self, name, price, calorie):
        super().__init__(name, price)
        self.calorie = calorie
    
    def info(self):
        return self.name + ': ¥' + str(self.price) + ' (' + str(self.calorie) + 'kcal)'
    
    def calorie_info(self):
        print(str(self.calorie) + 'kcalです')
drink.py
from menu_item import MenuItem

class Drink(MenuItem):
    def __init__(self, name, price, amount):
        super().__init__(name, price)
        self.amount = amount

    def info(self):
        return self.name + ': ¥' + str(self.price) + ' (' + str(self.amount) + 'mL)'
scrict.py
from food import Food
from drink import Drink

food1 = Food('サンドイッチ', 500, 330)
food2 = Food('チョコケーキ', 400, 450)
food3 = Food('シュークリーム', 200, 180)

foods = [food1, food2, food3]

drink1 = Drink('コーヒー', 300, 180)
drink2 = Drink('オレンジジュース', 200, 350)
drink3 = Drink('エスプレッソ', 300, 30)

drinks = [drink1, drink2, drink3]

print('食べ物メニュー')
index = 0
for food in foods:
    print(str(index) + '. ' + food.info())
    index += 1

print('飲み物メニュー')
index = 0
for drink in drinks:
    print(str(index) + '. ' + drink.info())
    index += 1

print('--------------------')

food_order = int(input('食べ物の番号を選択してください: '))
selected_food = foods[food_order]

drink_order = int(input('飲み物の番号を選択してください: '))
selected_drink = drinks[drink_order]

count = int(input('何セット買いますか?(3つ以上で1割引): '))

result = selected_food.get_total_price(count) + selected_drink.get_total_price(count)

print('合計は' + str(result) + '円です')


スクリーンショット 2024-09-08 18.32.00.png
スクリーンショット 2024-09-08 18.32.13.png

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?