<jupyter_start><jupyter_text>Pythonの基礎  データ型<jupyter_code># [変数名] = [値] と書くと，その変数名を持った変数に値を代入できる．代入された値は後で利用したりすることができる．

x = 1 # 整数
y = 2.1 # 実数
z = 2 * x + y # 四則演算 (×→*, ÷→/)
print(z) # print(x)でxを表示．print(x, y, ...)ともかけて，xとyにスペースが入って出力される
str1 = "これは文字列"
str2 = 'これも文字列'
str3 = """
このように書くと
複数行に渡る文字列
を表現できる
"""
str4 = '''
こちらでも
良い
'''
str5 = str1 + str2 # 文字列の+は文字列の結合
print(str5)
arr1 = [1, 2, 3] # リスト
arr2 = [3, 4, 5]
arr3 = arr1 + arr2 # リストの+はリストの結合
print(arr3)
arr4 = ["文字列", "文字列"] # 何のリストであっても良い
arr5 = [1, "文字列"] # 文字と数字が入り乱れても良い

# arr[i] でarrリストのi+1番目の値を返す．iがマイナスの場合，末尾から数えて-i番目の値を返す
first = arr1[0] # 1番目の値を返す
print(first) 
second = arr1[1] # 2番目の値を返す
print(second) 
last = arr1[-1] # 後ろから1番目の値を返す
print(last)

# arr[i:j]でi+1番目以降，j+1番目より前の値をリストで返す．iとjは省略可能で，省略されるとそれぞれ「最初から」，「最後まで」と解釈される．
print(arr1[1:]) # 2番目以降の値をリストで返す
print(arr1[:2]) # 3番目より前の値をリストで返す
print(arr3[1:3]) # 1番目以降，4番目より前の値をリストで返す

# 文字列も配列のようにアクセス可能
s = "あいうえお"
print(s[1])
print(s[1:3])

# arr.append(x) で 配列arrの末尾に要素xを追加する
arr = [1, 2]
arr.append(3)
print(arr)
dict1 = {"a": 1, "b": 3, "c": 4} # 辞書．{key1: val1, key2: val2, ...}と書くと辞書を作れる．
# 辞書はキーと値からなる順序付けされていないデータ
# 1つのキーに対応する値は1つのみ
print(dict1["a"]) # dict[key]とすれば，dict辞書のkeyに対応した値を返す
dict2 = {} # 空の辞書も作れる
dict2["a"] = 2 # dict[key] = valueとすれば，dict辞書のkeyに値valueを対応させられる
dict2["b"] = 10
print(dict2)
dict3 = {1: "b", 3: "d"} # keyは数値，文字列などを用いることが可能，リストや辞書は不可．valueは何でも良い．
# ブール型．True or False
bool1 = True
bool2 = False 
bool3 = 1 == 2 # 1 == 2はFalseとなる
bool4 = 5 > 2 # 5 > 2はTrueとなる
bool5 = 4 in [1, 2, 3] # x in AはAがリストの場合Aにxが含まれればTrue
print(bool5)
bool6 = 4 in {1: "a", 3: "b", 4: "c"} # Aが辞書の場合，Aのキーにxが含まれればTrue
print(bool6)
bool7 = "きく" in "かきくけこ" # Aが文字列の場合，xがAの部分文字列ならTrue
print(bool7)

# ブール型は特にif文で利用される（詳細は後述）
d = {"a": 1, "b": 2}
if "a" in d:
    print("The condition was True")
else:
    print("The condition was False")<jupyter_output>False
True
True
The condition was True<jupyter_text>制御構文<jupyter_code>"""
if condition:
     # conditionがTrueのときにここが実行される
 else:
     # conditionがFalseのときにここが実行される（else:以降は省略可能）
"""
# 長いコメントは"""や'''で書ける

x = 3
if x > 2:
    print("x > 2")
else:
    print("x <= 2")

if x == 3:
    print("x == 3")

# Pythonでインデントは構文の一部!! 
# インデントが増えた箇所から元のインデント数に戻るまで，インデント数が同じ箇所は同じコードブロックと見なされる．
# コードブロック: if文やfor文，関数定義の影響が及ぼされる範囲

if x < 2: # インデント0
    print("x < 2") # インデント1
else: # インデント0
    print("x >= 2") # インデント1
    print("This line was also executed") # インデント1 この行もx < 2でない場合にのみ実行される
    
if x / 3 == 1: # インデント0
    print("x / 3 == 1") # インデント1
else: # インデント0
    print("x / 3 != 1") # インデント1
print("This line is executed whatever the condition is") # インデント0 この行は直前の行と同じコードブロックではない
"""
for x in arr:
     # リストarrの各要素xに対して，この箇所が実行される
"""

for x in [0, 1, 2]:
    print(x * 2)

for x in range(4): # range(x)で（厳密には違うが）xより小さい整数までの配列が得られる
    print(x * 2 + 2)

for x in range(1, 4): # range(x, y)で（厳密には違うが）xからyより小さい整数までの配列が得られる
    print(x * 3)

for i, x in enumerate([3, 4, 5]): # for i, x in enumerate(arr)とすれば，iに0, 1, ...というように何番目の繰り返しかを表す整数が代入される．
    print(i, x)
"""
while condition:
     # conditionがTureである間，この箇所が実行される
"""

i = 0
while i < 3:
    print(i)
    i = i + 1 # i += 1とも書ける
"""
try:
    # 例外が起こりそうな操作
except:
    # 例外が起こったときに実行される
"""

try:
    z = "文字" + 1 # 文字列と数値は足せない
except:
    print("例外が発生しました")

try:
    z = "文字" + 1 # 文字列と数値は足せない
except Exception as e: # 変数eに例外が代入される
    print(e)<jupyter_output>例外が発生しました
Can't convert 'int' object to str implicitly<jupyter_text>関数<jupyter_code>"""
def function_name(var1, var2, ...):
    # 関数の中身. e.g. x = var1 + var2
    return x
# 引数var1, var2, ...を与えて，xを返す関数function_nameを定義できる
"""

def square(x):
    result = x * x
    return result

y = square(2)
print(y)<jupyter_output>4
{'fraction_non_alphanumeric': 0.16456375838926174, 'fraction_numerical': 0.042953020134228186, 'mean_word_length': 4.262711864406779, 'pattern_counts': {'":': 5, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '3088', 'license': 'MIT', 'n_tokens_mistral': 2471, 'n_tokens_neox': 2351, 'n_words': 376, 'path': 'notebooks/11_python_basics.ipynb', 'repo_name': 'mpkato/iam', 'size': '3725'}