先日は、
前日の記事
にてwhileについて書きました。whileは条件分岐で判定を行うのでifと同じ考え方ができます。ifでは、Trueの時に処理を実行する仕組みになっていますが、whileも同様にTrueの時にループの実行をする仕組みになっています。
そのため、whileでは、
while(1):
のようにすると常にTrueになるので無限ループを作ることができます。このループを作ると
■ CTRL+Z
■ CTRL+C
などでループを停止する必要がありますが、コードを書くことでループのコントロールを行うことができます。ループでは、
【 停止 】
break
【 ループの戦闘に戻る 】
continue
を使用できるのでループ内にifを実装することでループの制御をすることができます。
breakはループを終了して次の処理を実行できるので、do〜while〜のような動作を実装することができます。この場合、
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>n=0
>>>max=10
>>>
>>>def d_while():
... while(l):
... print(n)
... n+=1
... if n==max:
... break
...
...
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようなコードを書くと同じ処理を実装することができます。
continueはループのあとに条件を付与して使用することで、後の処理をスキップしてループを実行することができるようになっています。コードを書くと
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>n=0
>>>max=10
>>>
>>>def d_while():
... while n<=max:
... n+=1
... if n%2 == 1:
... print(f'{n}は奇数です')
... continue
... print(f'{n}は偶数です')
...
...
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。このコードでは、whileに対して条件を実装していますが、比較演算子で
nがmaxよりも小さい場合
を指定しています。この条件がTrueのときにループするようになっていますが、その後の判定で奇数と偶数の判定を行っています。ifで奇数の判定を行っており、それ以外だと偶数になります。このときの処理ですが、
n%2
で剰余を求めて1になったら奇数と表示するようにしています。この判定から外れた場合、剰余は0になるので偶数ということになります。このコードだけだと奇数の判定のあとの偶数の表示も行われてしまうのでcontinueで奇数の判定がTrueの場合continueでその後のループ内の処理をキャンセルしてループを行えるようにしてあります。
プログラミング言語ではdo〜while〜がありますが同様の機能を実装する場合にはbreakを使用することになり、continueを使用することで後の処理をキャンセルしてループを再開することができるので奇数の表示のみを行うことができます。Falseの場合だと条件分岐の内部の処理は実行されず次の処理が行われるので偶数の表示が行われます。
forループ
Pythonのループにはwhileだけでなくforもあります。whileは判定によってループを行う仕組みになっていましたが、forは対象や状態を指定してループを行う仕組みになっています。
このときにオブジェクトやスライスなどを使用しますが、forでは条件分岐ではなくデータの集まりや範囲指定などを用いてループの指定を粉得るようになっています。
(t)オブジェクトのデータを使用する
forを使用すると
■ リスト
■ タプル
■ 辞書
■ セット
などの要素を呼び出して使用することができます。これらは一つの名称を使用して複数の値を格納できるものになりますが、これを使用することにより複数のデータをまとめて管理することができます。このときの構文は、
■ forの公文
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
for 変数名 in リテラブル:
処理
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。コードを書くと
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>max=10
>>>
>>>def lp1():
... a=[1,2,3,4,5,6]
... for a in a:
... print(a)
...
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになりますが、これを実行すると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>max=10
>>>
>>>def lp1():
... a=[1,2,3,4,5,6]
... for a in a:
... print(a)
...
>>>lp1()
1
2
3
4
5
6
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。このときに
■ 変数名 : リスト名
■ リテラブル : リスト名
にすることで上記のようにリスト内の値を取得することができるようになっています。ちなみに、ループので指定する変数名を変更するとリストをリストの要素の数だけ表示されます。
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp2():
... a=[1,2,3,4,5,6]
... for i in a:
... print(a)
...
>>>lp2()
[1,2,3,4,5,6]
[1,2,3,4,5,6]
[1,2,3,4,5,6]
[1,2,3,4,5,6]
[1,2,3,4,5,6]
[1,2,3,4,5,6]
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
これはリストを表示するコードなのでこのような処理になりますが、変数を指定するように変更すると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp2():
... a=[1,2,3,4,5,6]
... for i in a:
... print(i)
...
>>>lp2()
1
2
3
4
5
6
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のように値を取得することができます。
タプルも処理の方法は同じなので割愛しますが、[]が()に変わっただけの記述になります。
【 タプルの表記 】
変数名=(要素,要素,要素,...)
タプルは更新不能なデータとして使用できるのですが、1つの要素だけだと変更ができてしまうので、複数のデータを用意して使用する必要があります。
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp3():
... a=(1,2,3,4,5,6)
... for a in a:
... print(a)
...
>>>lp3()
1
2
3
4
5
6
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
セットは、高校の数学で登場する集合と同じで{}の中に要素を格納したものになりますが、これも同様の方法で要素を取り出すことができます。このときの記述は{}を使用しますが、
【 セットの表記 】
変数名={要素,要素,要素,...}
のような形でして利することができます。
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp4():
... a={1,2,3,4,5,6}
... for a in a:
... print(a)
...
>>>lp4()
1
2
3
4
5
6
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Pythonでは、辞書という機能が存在していますが、これは
■ キーワード
■ 値
を一つのセットにして管理することができます。辞書の書式は
【 辞書の表記 】
変数名={キーワード : 値 , キーワード : 値 , ...}
のようになっており、セットに2つの情報を書く農地多様な形になっています。
変数の場合だと
a="HP:"
b=50
のように管理する必要があり、これを使用する場合だと、
c=a+str(b)
のようにして値を作って使用することになります。この状態だと変数bは数値型(整数型)なので計算で値を変更できますが、print(c)のように値を表示する場合だと、
HP:50
のように扱うことができます。この管理ですが、リストを使用すると
a=['HP:','MP:','EXP:']
b=[50,20,0]
のようにできるので
print(a[0]+srt(b[0])
print(a[1]+srt(b[1])
print(a[2]+srt(b[2])
のようにインデックスを組み合わせることで
HP:50
MP:20
EXP:0
のように表示することができます。辞書を使用するとこのような項目と値を一つの要素として記録できるので、
a={'HP' : 50 , 'MP' : 20 , 'EXP':0}
のように管理できます。ループを使用する際には、
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp5():
... a={'HP' : 50 , 'MP' : 20 , 'EXP':0}
... for b, a in a.items():
... print(f'{b}: {a}')
...
>>>lp5()
HP:50
MP:20
EXP:0
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになりますが、forの変数とリテラブルは
【 forの変数 】
変数,辞書名
【 forの変数 】
辞書名.items()
のようになります。
break
breakについては先日書きましたが、
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp6():
... a=['HP' , 'MP' , 'EXP']
... for i in a:
... if a=='EXP':
... print('break')
... break
... print(i)
>>>
>>>lp6()
HP
MP
break
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようにbreakの判定は後に来るので先に判定外のものが表示されて、条件を満たしたときにbreakの表示とループの終了が実行されます。
else
ループ終了後になにかの処理を実行する際にはelseを使用します。コードの構造は
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp7():
... a=['HP' , 'MP' , 'EXP']
... for i in a:
... if a=='EXP':
... print('end')
... contiue
... print(i)
... else:
... print('Finish')
>>>
>>>lp7()
HP
MP
end
finish
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。これはループが終了した場合のみ実行される処理なので、breakを使用するとelseの処理は実行されません。
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def lp8():
... a=['HP' , 'MP' , 'EXP']
... for i in a:
... if a=='EXP':
... print('break')
... break
... print(i)
... else
... print('Finish')
>>>
>>>lp8()
HP
MP
break
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
スライス
forを使用するとリストなどを使用して包含されている要素を使用することができます。これまでの処理の方法では全体を使用していましたが、スライスを使用することでデータの選別をしてループの実行をすることができます。
スライスは[]の中に3つの要素を格納して使用することになりますが、それらは、
■ start
■ end
■ step
で構成されており、
【 スライスの表記 】
オブジェクト[start : end : step]
で指定することができます。リストを使用した場合だと
リスト名[start : end : step]
で指定することができます。先程のリストを使用して
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def sl1():
... a=['HP' , 'MP' , 'EXP']
... for i in a[2]:
... print(i)
...
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようなコードを作って関数を実行すると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def sl1():
... a=['HP' , 'MP' , 'EXP']
... for i in a[2]:
... print(i)
...
>>>
>>>sl1()
E
X
P
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。1文字だと単体の文字が表示されますが、複数だとその中の文字をループして表示するようです。これはstartのみの処理になりますが、endを指定して範囲指定をすると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def sl2():
... a=['HP' , 'MP' , 'EXP']
... for i in a[1:2]:
... print(i)
...
>>>
>>>sl2()
HP
MP
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようにインデックスが1と2の要素が表示されます。この処理は範囲選択なので変域を設けているのと同じなので、範囲をnとした場合、
【 start ≦ n ≦ end 】
と同じ状態になります。この範囲をインデックスの値で指定することになりますが、スライスでは 【 step 】 が使用できるので
【 等差数列の公差と同じものを指定できる 】
ようになっています。スライスの仕組みですが
■ 初項 : start
■ 末項 : end
■ 交差 : step
で指定できるので基本となる数列を作っておけば、スライスだけで等差数列を作ることができます。コードを書くと
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def sl3():
... a=['1','2','3','4','5','6','7','8','9,'10']
... for i in a[0:9:2]:
... print(i)
...
>>>lp3()
1
3
5
7
9
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。これは通常の等差数列ですが、等差数列には最初の値に何かが付与されている状態のものもあります。この場合、等差数列の法則性に値を足せばいいので
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def sl3():
... a=['1','2','3','4','5','6','7','8','9,'10']
... b=5
... for i in a[0:9:2]:
... print(int(i)+b)
...
>>>lp3()
6
8
10
12
14
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。
range
スライスを使用した場合、指定したインデックスの要素を取得できますが、回数分のループを指定することはできません。こうしたループを使用する際にはrangeを使用します。
rangeを使用すると値の指定でループ回数を指定できます。rangeもスライスと同様に
■ 初項 : start
■ 末項 : stop
■ 交差 : step
を指定することができます。記述方法は
【 rangeの表記 】
range(start , end , step)
のようになります。回数指定のループの場合、
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def rng1():
... for i in range(5):
... print(i)
...
>>>lp3()
0
1
2
3
4
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。
プログラミング言語の数値は桁内に格納できる値で推移しているので、10個の値を使用する場合には、 【 0〜9 】 を使用することになります。この値に10の累乗を付与すると桁の変化を与えることができるので、このような仕様になっています。
この処理はインデックスの指定をしていますが、インデックスの範囲をnとするとnの値は
【 0 ≦ n ≦ インデックス−1 】
で推移します。
startとendを使用した場合
■ start : 指定した値
■ stop : 指定した値−1
の間でループします。コードを書くと
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def rng2():
... for i in range(1,5):
... print(i)
...
>>>lp3()
1
2
3
4
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになりますが、stopの値に+1をすることで指定した値の範囲でループをさせることができます。
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def rng3():
... a,b=1,5
... for i in range(a,b+1):
... print(i)
...
>>>lp3()
1
2
3
4
5
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ステップを使うと等差数列のようにその数分だけ数を飛ばして値を取得することができます。実際に使用すると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def rng4():
... a,b,c=1,10,3
... for i in range(a,b+1,c):
... print(i)
...
>>>lp4()
1
4
7
10
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。上記のコードのようにstopに+1を行うと数の指定だけで等差数列を作ることができます。
コード内では、
... a,b,c=1,10,3
のような表記をしていますが、これは、
... a=1
... b=10
... c=3
を一行にまとめたものになります。
インデックスと要素を表示
forでは、
■ リスト : 要素
■ range : インデックス
を取得できますが、この2つを並べて表示する際にはptint関数の引数でこの2つを表示することになりますが、Pythonでは、この2つを指定できる 【 enumerate 】 があります。
これは辞書のループと同様にループの変数を2つ用意することになるので、
【 enumerateの表記 】
for 変数1 , 変数2 in enumerate(リスト名)
で指定します。実際に使用してみると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>>def enr1():
... a=['HP','MP','EXP']
... for i,n in enumerate(a):
... print(i,n)
...
>>>enr1()
0 HP
1 MP
2 EXP
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。データベースやスプレッドシートを使用する場合だとインデックスと名前を組み合わせたものを用意して使うこともありますが、名前だけのデータで出席番号を表示したい場合だと、名前のデータを昇順でソート(並び替え)をかけておいて、そのデータをリストに適応してその時のインデックスの値を+1することで出席番号1番から最終の番号までを付与することができます。
複数の要素を使用する
enumerate()ではインデックスと要素を組み合わせて使用しましたが、項目と値のように異なるリストで管理しているものを使用することがあります。
データベースだと二次元配列にして異なるカラムの値を使用することになると思いますが、Pythonでは複数の一次元配列のリストの値を異なるカラムのように使用してデータを整形して表示することができます。
この場合、読み込むデータの数が増えるので
【 zipの表記 】
for 変数1 , 変数2 in zip(リスト名 , リスト名)
のようになります。実際に使用してみると
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>> def zp1():
... a=['HP:','MP:','EXP:']
... b=[100,50,0]
... for a,b in zip(a,b):
... print(a,b)
...
>>> zp1()
HP: 100
MP: 50
EXP: 0
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。f文字列を使用するとレイアウトができるので、
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>> def zp2():
... a=['HP:','MP:','EXP:']
... b=[100,50,0]
... for a,b in zip(a,b):
... print(f'{a:^5}{b:>3}')
...
>>> zp2()
HP: 100
MP: 50
EXP: 0
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のように文字を揃えて表示することができます。このときの位置の調整ですが、
■ f文字列
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【 文字を揃える 】
■ 右揃え : >
■ 左揃え : <
■ 中央揃え : ^
【 文字数の指定 】
数字を追加
(例)
print(f'{a:^5}')
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようにして行うことができます。
インデックスと複数の要素を使用する
enumerateとzipは組み合わせて使用することができるので、
【 enumerateとzipの組み合わせ 】
for 変数,(変数,変数) in enumerate(\
zip(リスト名,リスト名))
のような形で指定することができます。先程のコードを使うと
■ サンプルコード
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>>
>>> def zp1():
... a=['HP:','MP:','EXP:']
... b=[100,50,0]
... for i,(a,b) in enumerate(zip(a,b)):
... print(f'{i:>3}{a:^5}{b:>3}')
...
>>> zp1()
0 HP: 100
1 MP: 50
2EXP: 0
>>>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
のようになります。このようにenumerateとzipを使用するとインデックスと複数の要素を組み合わせて使用することができます。
whileはループを判定を用いて実行する仕組みになっていますが、forはリストなどの複数の値を格納したオブジェクトの内容を表示できるほか、インデックスと要素を組み合わせて表示することもできます。

