雑記 Pythonの関数やクラスの練習
「コードは上から順番に処理されるのでその通りに手続き型で書いて構わないが、エラーやバグが出たときに探しにくいので、なるべく関数で細かな機能別の断片にして書く方がよい」なんて事が入門書に書いてあったりする。
Pythonでライブドア天気APIから今日と明日の天気予報を取得する - よちよちpythonの最後にまとめた(つもりの)コードは、文字列取得
と文字列の表示
が混ざって
書いていて読みにくい。別けて書くべき
だった。
今回は特にテーマなし。
tax = 10 text = "今月から消費税が{}%に上がりました。".format(tax) print(text) print(list(text)) print(len(list(text)))
今月から消費税が10%に上がりました。
['今', '月', 'か', 'ら', '消', '費', '税', 'が', '1', '0', '%', 'に', '上', 'が', 'り', 'ま', 'し', 'た', '。']
19
関数にしてみる
こんな風になっている。
""" # tax 変数x = 値 # taxをtextに変換した部分 def func1(x): 変換処理 return text # textをリスト化した部分 def func2(text): リスト化処理 return リスト # リストの要素数を表示した部分 def func3(リスト): リストの要素数を数える処理 return 要素数 """
typeHintを付けた。
tax = 10 def func1(tax:int)->str: text = "今月から消費税{}%ですが、スシロー限定0%!!".format(tax) return text def func2(text:str)->list: lst = list(text) return lst def func3(lst:list)->int: lst_len = len(lst) return lst_len
実行する
tax = 10 f1 = func1(tax) print(f1)
今月から消費税10%ですが、スシロー限定0%!!
f2 = func2(f1)
print(f2)
['今', '月', 'か', 'ら', '消', '費', '税', '1', '0', '%', 'で', 'す', 'が', '、', 'ス', 'シ', 'ロ', 'ー', '限', '定', '0', '%', '!', '!']
f3 = func3(f2)
print(f3)
24
クラスを使う
初心者の鬼門である!
よくわからんがこね繰り回す。
class Who: def __init__(self,name,sex,age): self.name=name self.sex=sex self.age=age def greet(self): intro = "{}、{}、{}歳です。".format(self.name,self.sex,self.age) text = intro return text def to_list(self): text = self.greet() lst = list(text) return lst def shuffle_lst(self): lst = self.to_list() import random shuffle_lst = random.sample(lst,len(lst)) return shuffle_lst def shuffle_join(lst): shuffle_str = "".join(lst) return shuffle_str
実行する
ozaki = Who("尾崎豊","男性","15")
ozaki.name
'尾崎豊'
ozaki.sex
'男性'
ozaki.greet()
'尾崎豊、男性、15歳です。'
mike = Who("マイケル・ジャクソン","男性",50)
mike.name
'マイケル・ジャクソン'
mike.to_list()
['マ',
'イ',
'ケ',
'ル',
'・',
'ジ',
'ャ',
'ク',
'ソ',
'ン',
'、',
'男',
'性',
'、',
'5',
'0',
'歳',
'で',
'す',
'。']
ozaki.to_list()
['尾', '崎', '豊', '、', '男', '性', '、', '1', '5', '歳', 'で', 'す', '。']
ozaki.shuffle_lst()
['1', '崎', '歳', '豊', '尾', '5', '。', '性', '、', 'で', '男', '、', 'す']
mike.shuffle_lst()
['イ',
'。',
'ン',
'ャ',
'、',
'ソ',
'ク',
'す',
'5',
'男',
'0',
'性',
'、',
'・',
'マ',
'歳',
'ケ',
'ル',
'ジ',
'で']
mike_shuffle = mike.shuffle_lst()
text = shuffle_join(mike_shuffle)
print(text)
・マル性、。ャンすジ男0ク、イ5ケ歳でソ
標準ライブラリdataclassでinit関数を省略
from dataclasses import dataclass tax_rate = 0.1 @dataclass class Book: title : str price : int def price_with_tax(self): price_with_tax = int(self.price*(1+tax_rate)) return price_with_tax
a = Book("吾が輩は猫ではない",2380) print(a.title) print(a.price)
吾が輩は猫ではない
2380
a.price_with_tax()
2618
print(repr(a))
Book(title='吾が輩は猫ではない', price=2380)
マイケルジャクソンが縦書きになるのはなんでだぜ?