python

【python】if文,for文,while文

cやjavaなどでは、switch-case文がありますが、pythonには存在しないので注意してください

if, for, whileで使う演算子

比較演算子

演算子 意味
< x < y x は y より小さいとTrue、そうでないとFalse
> x > y x は y より大きいとTrue、そうでないとFlase
<= x <= y x は y以下だとTrue、そうでないとFalse
>= x >= y x は y以上だとTrue、そうでないとFalse
== x == y x と yは同値だとTrue、そうでないとFalse
!= x != y x と yは同値でないとTrue、そうでないとFalse
is x is y xとyは同じidである、xとyは同一であるとTrue、そうでないとFalse
is not x is not y xとyは同じidでない、xとyは同一でないとTrue、そうでないとFalse
in x in y xはyに含まれるとTrue、そうでないとFalse
not in x not in y xはyに含まれないTrue、そうでないとFalse

真偽値

真偽値を使うことで条件式を組み合わせることができます。

演算子 結果
or x or y xとyのどちらかがTrueだったらTrue、そうでなければFalse
and x and y xとyがTrueならTrue、そうでなければFalse
not not x xがFalseならTrue、xがTrueならFalseになる

if文

ifで条件分岐をします。この流れを変えるような処理のことをフロー制御と呼びます
pythonのif文やfor文の範囲

・pythonなどの言語は、インデントでブロックを表します。
・cやjavaなどの言語は、{}でブロックを表します。

上記のコードにおいて、print() 関数の部分はインデントが使われています。インデントはタブや (複数個の) スペース (半角スペース4つが推奨される) を使って表し、インデントがなされた部分をブロックといいます。if文やfor文で実行されるのはブロックに書かれた文です。ブロックの各行は同じ数 (深さ) だけインデントされていなければならないので注意してください。
if文だけでなく、for文や後の節で紹介するクラスの定義等でもインデントを用いてブロックを作る必要があるので、インデントの有無に気をつけながらテキストを読むようにしましょう。

pythonのif文
x = 42

if x < 0:
    print("xは負の整数です。")
elif x > 0:
    print("xは正の整数です。")#xは正の整数です。
else:
    print("xは0です。")
C言語のif文
#include <stdio.h>
int main(){
    int x = 42;

    if(x<0)printf("xは負の整数です。");
    else if(x>0)printf("xは正の整数です。\n"); //xは正の整数です。
    else printf("xは0です。\n");

return 0;
}
javaのif文
public class test{
    public static void main(Strings[] agrs){
        int x=42;

        if(x<0) System.out.println("xは負の整数です。");
        else if (x>0) System.out.println("xは正の整数です。");
        else System.out.println("xは0です");
    }
}

様々なものを比較する

数値を比較する
if 1 == 1:
   print("この条件はTrue")

#以下のように出力される
この条件はTrue
文字列を比較する
if "あああ" == "あああ" :
    print("この条件は、True")
else : 
  print("この条件は、False")

#以下のように出力される
この条件は、True
文字列を検索する
if "ABC" in "AABBCCDDABCEE" :
   print("この条件はTrue")

#以下のように出力される
この条件はTrue
リストを比較する
if [1,2,3,4] == [1,2,3,4] :
   print("この条件はTrue")

#以下のように出力される
この条件はTrue

一つ一つの要素が完全に一致する時に条件が成り立ちます

リストの要素を検索する
if "A" in ["A","B","C","D"] :
   print("リスト内にAの要素がある") 

#以下のように出力される
リスト内にAの要素がある
文字列を検索する
if "tomostudyblog" in "勉強をするならtomostudyblogをみよう!!":
    print("あった")
else:
    print("ない")
#以下のように出力される
あった

 

for文

for文で繰り返し処理を行います。
words = ['dwango', 'kabukiza', 'higashiginza']
for w in words:
    print(f"w = {w}, len(w) = {len(w)}")  # 単語と単語の長さを表示する 
# w = dwango, len(w) = 6
# w = kabukiza, len(w) = 8
# w = higashiginza, len(w) = 12

 

良く使われるテクニックと関数

range() 関数

簡単に数列を作ることができる
range(n) は 0 から n 未満までの整数を生成します。

for v in range(5):
        print("v =", v)
    # v = 0
    # v = 1
    # v = 2
    # v = 3
    # v = 4

    for v in range(5, 10):
        print("v =", v)
    #v = 5
    #v = 6
    #v = 7
    #v = 8
    #v = 9

    for v in range(0, 10, 3):
        print("v =", v)
    #v = 0
    #v = 3
    #v = 6
    #v = 9


    for v in range(-10, -100, -30):
        print("v =", v)
    #v = -10
    #v = -40
    #v = -70
range()の使い方

・range(a)
1からa未満まで1区切りで出力

・range(a,b)
aからb未満までで1区切りで出力

・range(a,b,c)
aからb未満まででc区切りで出力

enumerate()関数

リスト、タプルに対して、ループのときに要素とカウンター(何回目のループか)を一緒に取り出せます。

lst = list(range(5, 10))
    print("lst =", lst)
    #lst = [5, 6, 7, 8, 9]

    for i, v in enumerate(lst):
    print(f"i = {i},  v = {v}")
    #i = 0,  v = 5
    #i = 1,  v = 6
    #i = 2,  v = 7
    #i = 3,  v = 8
    #i = 4,  v = 9

    words = ['dwango', 'kabukiza', 'higashiginza']
    for i, w in enumerate(words):
    print(f"i = {i},  w = {w}")  # 添字と単語を表示する
    #i = 0,  w = dwango
    #i = 1,  w = kabukiza
    #i = 2,  w = higashiginza
zip()関数

2つ以上のシーケンスを一緒にループにする

    lst1 = list(range(1, 5))
    lst2 = list(range(5, 9))
    print('lst1:', lst1)
    print('lst2:', lst2)
    #lst1: [1, 2, 3, 4]
    #lst2: [5, 6, 7, 8]

    for a, b in zip(lst1, lst2):
    print(f"a = {a}, b={b}", a, b)
    #a = 1, b=5     1  5
    #a = 2, b=6     2  6
    #a = 3, b=7     3  7
    #a = 4, b=8     4  8
sorted() 関数

シーケンスを整列(ソート)された順序でループさせる

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    print(basket)
    #{'apple', 'orange', 'pear', 'banana'}

    for v in sorted(basket):
    print("v = ", v)
    #v =  apple
    #v =  banana
    #v =  orange
    #v =  pear
reversed() 関数
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    print(basket)
    #{'apple', 'orange', 'pear', 'banana'}

    for v in sorted(basket):
    print("v = ", v)
    #v =  apple
    #v =  banana
    #v =  orange
    #v =  pear
for文とelse文を組み合わせる
num = 11
for tmp in range(2,num):
  if num % tmp == 0:
    print(素数ではありません)
    break
else:
  print(素数です) #break文を一度も通らないでループが終了する場合

 

sort()関数とsorted()関数の違い
(reverse()関数とreversed())

 

・list.sort() メソッドはリストの中身を並び替えます。この時そのリスト自体を並び替えた状態にします。
・sorted() 関数は並び替えた新しいリストを作成します。元のリストは影響を受けません。

lst1 = [1, 3, 2]
        lst1.sort()
        print("lst1 =", lst1) #lst1 = [1, 2, 3]

        lst2 = [1, 3, 2]
        lst2_sorted = sorted(lst2)
        print("lst2_sorted =", lst2_sorted) #lst2_sorted = [1, 2, 3]
        print("lst2 =", lst2) #lst2 = [1, 3, 2]

※このようにメソッド(関数)を呼び出したことにより状態が変わる(この場合 lst1 が並び替えられた)ようなメソッド(関数)を副作用のあるメソッド(関数)、破壊的メソッド(関数)という呼びかたをします。

while文

while文はfor文と同様に繰り返し処理のときに使われますが、for文と違い、繰り返しの条件を与えます。

x = 0
while x < 5:
    print("x =", x)
    x += 1  # x = x + 1 と同じ
# x = 0
# x = 1
# x = 2
# x = 3
# x = 4
break文

ループを中断する

for v in range(10):
    print("v =", v)
    if v % 3 == 2:
        # vを3で割った余りが2のとき、ループを中断する
        break
# v = 0
# v = 1
# v = 2
continue文

あるループの回の途中の処理を飛ばし、次の回のループの処理を実行する

for x in range(5):
    for y in range(5):
        if x == y:
            continue
        print(f"x={x} y={y}")
# x=0 y=1
# x=0 y=2
# x=0 y=3
# x=0 y=4
# x=1 y=0  
# x=1 y=2 
# x=1 y=3
# x=1 y=4
# x=2 y=0
# x=2 y=1
# x=2 y=3
# x=2 y=4
# x=3 y=0
# x=3 y=1
# x=3 y=2
# x=3 y=4
# x=4 y=0
# x=4 y=1
# x=4 y=2
# x=4 y=3