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」:コードを実行した際に、
コンソールに文字を入力できるようになり、
その↑入力された値を受け取ることができる。
「変数 = 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」は①コンソール入力を可能にし、②入力値を変数の中に代入できる。
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('正しい数値を入力してください')
↓以下の表示になる
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のコードが書かれたファイルのこと。
メインのモジュールだけではなく、関数ごとなど様々なモジュールでコードを管理しながらシステムを構築しようよって話。
import val
// 別モジュールを使う際の公式 = モジュール名.関数名(引数)
val.validate(3)
def validate(hand):
if hand < 0 or hand > 2:
return False
return True
Progateレッスン3-13「ライブラリを使おう」
標準ライブラリ = あらかじめ用意されているモジュールは標準ライブラリ呼ばれる。
importすることで使用可能。
// 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に該当するデータのみ抽出したい
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「商品と色の組み合わせを表示しよう」
繰り返し処理の中に繰り返し処理
# 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()
型変換
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」の分だけ引数の順番がずれる
例
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__メソッド = 「クラス名()」でインスタンスを生成した直後に自動で呼び出される。
例
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__メソッドの使用用途
インスタンスを生成すると同時にインスタンス変数に値を代入することができる。
すぐにインスタンスの情報を追加できるので便利。
24日目_2024/09/06
Python学習レッスンⅣ/11「__init__メソッド(3)」
__init__メソッドに引数を渡す
__init__メソッドで引数を受け取る方法は、
インスタンスを生成している「クラス名()」に対して引数を渡すことで、__init__メソッドでその値を受け取ることができる。
例
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 クラス名」
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
# 今回のメイン
# 「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 モジュール名」の場合
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
# 「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つずつ出力する
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
# モジュール、クラスの読み込み
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())
復習
メソッドの呼び出し方
# 公式
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ずつ増やしていく方法
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
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
Python学習レッスンⅣ/16「入力を受け取る」
inputを受け取った時は、数値?文字?
A.文字列型になっている
→数値として扱いたいなら、以下のようにint()をつける
int(input('メニューの番号を入力してください: '))
復習
インスタンスの情報を出力する
class Menu:
def info(self):
print('メニューの名前と値段が表示されます')
menu_item1 = Menu() #インスタンス化
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
print(menu_item1.name)
↓
サンドイッチ
例
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
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「合計金額の計算」
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)
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 新しいクラス(継承元クラス)」
イメージ
コード例
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)
# 読み込み
from menu_item import MenuItem
# 「class 新しいクラス(継承元クラス)」
# 新しいクラス = 子クラス
# 継承元クラス = 親クラス
class Food(MenuItem):
# 処理がない時にpassを使用する
pass
Python学習レッスンⅤ/3「継承の仕組み」
インスタンスメソッド全て使用可能
子クラスは、親クラスのインスタンスメソッドをそのまま使うことができる。
「init()」もその他も全部使用可能
コード例
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)
# MenuItemクラスの読み込み
from menu_item import MenuItem
# クラス継承
class Food(MenuItem):
pass
# foodクラスの読み込み
from food import Food
# インスタンス化
food1 = Food('サンドイッチ', 500)
# infoメソッドの読み込み
# info()は、元は「MenuItem」にある。
# FoodクラスがMenuItemを継承したから使用可能になった。
print(food1.info())
25日目_2024/09/08
Python学習レッスンⅤ/4「インスタンスメソッドの追加」
子クラスに子クラスのみのインスタンスメソッドを追加する
子クラスは
・親クラスから継承したインスタンスメソッド
・子クラス独自で設定したインスタンスメソッド
の、両方を使用可能。
親クラスは、親クラスで設定したインスタンスメソッドのみ使用可能。
子クラス独自のインスタンスメソッドは使用不可。
コード例
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)
from menu_item import MenuItem
class Food(MenuItem):
# 子クラス独自のインスタンスメソッド
def calorie_info(self):
print(str(self.calorie) + 'kcalです')
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)」
オーバーライド(親クラスのメソッドを上書き)
オーバーライド:親クラのメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができる。
例)子クラスからinfoメソッドを呼び出す場合
①親クラスでinfoメソッドを設定、子クラスにinfoメソッドなし
→親クラスのinfoメソッドを使用可能。
②親クラスでinfoメソッドを設定、子クラスでinfoメソッドを設定
→親クラスのinfoメソッドは使用不可。
子クラスのinfoメソッドは使用可能。(これが上書き。オーバーライド)
コード例
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)
from menu_item import MenuItem
class Food(MenuItem):
# infoメソッド(オーバーライド)
def info(self):
return self.name + ': ¥' + str(self.price) + ' (' + str(self.calorie) + 'kcal)'
from food import Food
from drink import Drink
food1 = Food('サンドイッチ', 500)
food1.calorie = 330
# Foodクラス、food1インスタンス、infoメソッド呼び出し
print(food1.info())
Python学習レッスンⅤ/7「__info__メソッドのオーバーライド」
__info__メソッドもオーバーライドが可能。
class 親クラス:
def __init__(self, name, price):
self.name = name
self.price = price
↓ 以下、オーバーライド
from 親クラスのモジュール import 親クラス
class 子クラス(親クラス):
def __init__(self, name, price, calorie):
self.name = name
self.price = price
self.calorie = calorie
コード例
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)
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)'
from food import Food
food1 = Food('サンドイッチ', 500, 330)
food1.info()
Python学習レッスンⅤ/8「super()」 / Python学習レッスンⅤ/9「オーバーライドの復習」
メソッド内の重複をまとめる方法
オーバーライドしたメソッドの中で「super()」使用することで、親クラスを呼び出すことができる。
また、下の図のように「super().メソッド名()」とすることで、親クラス内に定義されたインスタンスメソッドをそのまま利用することが可能。
コード例
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)
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)'
from food import Food
food1 = Food('サンドイッチ', 500, 330)
print(food1.info())
Python学習レッスンⅤ/10「総合演習」
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)
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です')
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)'
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) + '円です')