#Python入門その2
##条件分岐と繰り返し文
今回は3つの文法に触れていきます。
その前におさらいです。
・条件分岐
if文のことです。もし~~だったらだったらどうする、という処理を書きたいときに使います。
・繰り返し文
for文、while文のことです。ある処理を繰り返して行いたい時に使います。
###条件分岐
それでは、実際にif文をpythonで書くとどうなるのかをみてみます。
#pythonの場合
var1 = 10
if var1 == 10:
print("このva1の値は10です。")
このようになります。
それでは、これをunity(c#)で書こうとすると、次のようになります。
//C#の場合
int var1 = 10;
if(var1 == 10){
Debug.Log("このvar1の値は10です。");
}
重要な異なる点は3つです
1.条件を囲む()がいらない
2.if文全体を取り囲む{}もいらない
3.ただし、条件の後に:を記述する。
####インデントのお話
ここでpythonについてとても重要な話をします。
上のif文では始まりと終わりの{}がありませんでした。
では、どのように始まりと終わりを判断するのでしょうか?
pythonでは、if文やfor文の中身を一段下げます。
例えば、↓をみてください。
var1 = 20
if var1 == 10:
print("このva1の値は10です。")#①
print("ここはif文の外です。")#②
上の文は、①のprintは表示されません。なぜなら、var1は10ではなく、20だからです。
しかし、②のprintは表示されます。なぜなら、これはif文より下の改行の外にいるからです。
このように、文章の行頭に空白を挿入して先頭の文字を右に押しやることをインデントと言います。
このインデントがpythonを書く上で重要なカギになります。
話を条件分岐(if文)に戻します。
if文にはif...else文とif...else if文もありました。
else文とは、if文の条件を外れていた時に実行するモノです。
pythonの場合とc#の場合を比較してみましょう。
#pythonの場合
var1 = 350
if var1 == 0 :
MyLayerColor = 'red'
else :
MyLayerColor = 'blue'
print(MyLayerColor)
//c#の場合
int var1 = 350;
if(var1 == 0){
MyLayerColor = "res";
}else{
MyLayerColor = "blue";
}
Debug.Log(MyLayerColor);
今回もインデントが大事になります。
else文の中身はインデントを下げて、else文から出る時はインデントを戻します。
else...if文は以下のように記述します。
var1 = 0
if var1 == 0 :
print( "number is 0")
elif var1 == 1 :
print ("number is 1")
elif var1 == 2 :
print ("number is 2")
else :
print ("others")
ex2-1
・ある数字を入力して、その数字が10より大きければ'big'、小さければ'small'と出力するプログラムを書いてみましょう。
n = input()
でnに数字が代入できます。
・ある数字を入力して、その数字が2で割り切れれば偶数、割れなければ奇数と出力するプログラムを書いてみましょう。
###繰り返し文
ここではfor文とwhile文を紹介します。
どちらもc#にあった文法なので、書き方さえわかればできるようになると思います。
ただし、for文はc系統の言語と全然違うので、そっちに慣れていると書くのが若干めんどくさいです笑
####for文
pythonでは、for文を次のように記載します。
#python
for x in range(0,10):
print (x)
これで0から9までの数字が出力されます。
ここでもインデントを一つ下げることでfor文の中身を作っています。
C#だと次のように書きます
//c#
for(int i = 0;i <= 10:i++){
Debug.Log(i);
}
pythonでは、カウンタ変数 in 範囲
のように書きます。
上では、Xが0から10まで、という意味です。
pythonでは、ループが一回終わると自動でカウンタが1増えます.
なので、i++みたいなのを書いていません。
2ずつ増やしたいときは以下のようにします。
for x in range(0,10,2):
print (x)
これだと、2こ飛ばしで加算されます。
####listのすべての要素で繰り返すfor文
プログラムを書いていると、リストをすべて探索したい、というときが訪れます。
その時は次のように記述します。
mylist = [1,2,4,5]
for i in mylist:
print(i)
1,2,4,5が順に出力されます。
例えば、リストの中で’95’という数字があるかどうが確認したいといったときに使います。
ex2-2
・0から100までを出力するプログラムを書いてみましょう。
・次は、100から0に向かって、100,99,98,97,,,とカウントするプログラムを書いてみましょう。(ヒント:range(開始,終了,ループ終了時にカウンタに加える数)と書きます。
・上のループを改造して、100から2こ飛ばしで0までカウントするプログラムを書いてみましょう。
####while文
while文は、実はそんなに使われません。でも重要なのでやります。
こんなふうに書きます。
#python
var1 = 0
while var1 < 10:
var1 = var1 + 1
print (var1)
print ("ループ終了")
これで、上記のfor文と同じように0から9までカウントします。
みて分かる通り、for文より書くのに手間がかかります。
C#だとこんな感じです。
//c#
int var1 = 0;
while(var1 < 10){
var1 = var1 + 1;
Debug.Log(var1);
}
Debug.Log("ループ終了");
while文は、特に永久にループさせたい時に使用されます。
下のように永久ループは使います。
while True:
n = input()
if n == 10:
break
print "end"
変数名=input()
で数字を変数名の中に入れることができます。
上のプログラムでは、10と入力するまで永久にループし続け、10が入力されると、breakによってwhileの外に出ます。
####ネストについて
ネストとは、あるものの中に、それと同じ種類か似たものが入っている構造のことを言います。
こう書くと、非常にむずかしそうですが、例えば、二重になっったfor文や、for文のなかにif文が入っている状態のことを指します。
上の永久ループの例がそれです。
####入力について
後々詳しくはやりますが、入力は変数名=input()
で数字が入力できると言ってきました。
それでは、文字を入力したいときはどうすれば良いでしょうか?
※※※pythonのバージョンによって異なります!!
変数名=input()
が文字列の場合もあります。ややこしいですね。
そういうときは変数名=int(元の変数)
で数値化できます。
文字を入力したいときは、変数名=raw_input()
で入力させます。実際に確かめてみましょう。
n = raw_input()
s = input()
print(type(n))
print(type(s))
以下のように出力されると思います。
<type 'str'>
<type 'int'>
strとは文字型、intとは整数型のことです。
ex2-3
・永久ループを使うプログラムを書きます。'hello'と入力されるまで終わらないプログラムを書いてください。
・while文を用いて、先ほどのex2-2の100から0までカウントするプログラムを書いてみてください。
ex2-4
・0から100まで、2で割り切れる数のみ出力するプログラムを書きましょう。ただし、for x in range(0,100,2)
は使わず、for文(またはwhile)とif文を組み合わせて書いてみましょう。
・掛け算九九を出力してみましょう。(ヒント:for文を二重に回します。)
##引用
[https://developer.rhino3d.com/guides/rhinopython/]