よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

雑記 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)

マイケルジャクソンが縦書きになるのはなんでだぜ?