import os

# ◆文字列から"b"の文字が最初に現れる位置(先頭が0)を得る
a = "orange melon strawberry grape"
n = a.find("b")
# 18
print(str(n))

# ◆その位置から5文字を切り出す
# Pythonにはsubstrに当たる関数はなく、スライス演算で切り出す
b = a[n:n+5]
# berry
print(b)

# ◆文字列の一部置き換え
print(a.replace("mel", "lem"))

# ◆数値と文字列をそれぞれ加算、文字列連結する
# Pythonでは内部データ型が異なる変数は+できない。必ず型変換が必要
v1 = 10.2
v2 = "15.3"
# 25.5 10.215.3 25.5 15.310.2
v3 = v1 + float(v2)
v4 = str(v1) + v2
v5 = float(v2) + v1
v6 = v2 + str(v1)
print(f"{v3} {v4} {v5} {v6}")

# ◆配列の3番目の要素から3個を取り出し、文字列に連結して出力する
arr = ["orange", "melon", "strawberry", "grape", "apple", "banana"]

# [2..4]ではなく[2:5]。Perlと異なり終端のインデックスは範囲に含まれない
arrsub = arr[2:2+3]
# strawberry graph apple
# joinの使い方が独特なので注意。joinの前の文字列が間に挟まって連結される
print(" ".join(arrsub))

# ◆要素の追加
arr.append("peach")

# ◆要素の検索
print("index of 'peach' is:" + str(arr.index("peach")))

# ◆配列要素を変数に一括代入する
e1, e2, e3 = arrsub
# strawberry graph apple
print(f"{e1} {e2} {e3}")

harr = { "orange" : 80, "melon" : 1200, "strawberry" : 350 }
harr["grape"] = 450
# ◆辞書のキーの存在有無をチェックする
# yes
if "melon" in harr:
    print("yes")
else:
    print("no")
# no
if "lemon" in harr:
    print("yes")
else:
    print("no")

# ◆辞書のキー一覧をソートして、キーと値を出力する
for k in sorted(harr):
    print(k + "\t" + str(harr[k]))

# ◆既定値付き引数を持つ関数を定義する
# os.listdirはファイル名だけの、os.scandirはファイル属性情報を含むリストを返す
def get_file_names(dir, ext = ""):
    files = []
    for f in os.scandir(dir):
        if not f.is_file(): continue
        if ext != "" and not f.name.endswith(ext): continue
        files.append(f.name)
    return files
print(" ".join(get_file_names(".")))
print(" ".join(get_file_names(".", ".txt")))

# ◆可変長引数を持つ関数を定義する
def get_sum(*nums):
    sum = 0
    for v in nums: sum += v
    return sum

# 46
print(str(get_sum(10,11,12,13)));