Python3の復習(if文・while文・for文)
こんにちは。
就活に関して意識低めのかにたまごです。
そろそろ動き出さないとなーと思ってはいるんですが、就活に活かせる材料がないもんで・・・。
ボチボチ情報を集めていきたいと思います。
さて、今回は
- if文
- for文
について、復習していきたいと思います。
今までのPython3 復習履歴は以下の通り。
if文
僕がプログラミングを始めてから今に至るまで、最もお世話になったと言える構文。
Unityでアプリ作ったときのコードは、ほぼif文で埋め尽くされてた・・・( ^ω^)
いわゆるスパゲッティコードの温床となることが多い構文。
if構文下の左端インデントは必ず揃っていなければならない。
推奨スタイル(4つのスペース)はPEP8。
比較演算子や論理演算子を用いると複雑な条件分岐が実現可能。
比較演算子/論理演算子について
num = 9 if num % 3 == 0 and num % 5 == 0: print("FizzBuzz!!!") elif num % 3 == 0: print("Fizz!") elif num % 5 == 0: print("Buzz!") else: print(num) 出力 -> Fizz!
- True・Falseとは
下記の値は全てFalseとみなされる。
bool = False null = None int_zero = 0 float_zero = 0.0 string = "" list = [] tuple = tuple() dict = dict() set = set() #flase_val = bool if false_val: print("True") else: print("False") 出力 -> 全てFalse
それ以外の値は全てTrueとみなされる。
val = 10 if val: print("True") else: print("False") 出力 -> True
while文
複数回の処理を行いたい場合に利用される構文。
永遠ループ怖いって印象。
- インクリメントでループ中断
ループ変数は自分で定義する必要がある。
count = 1 while count <= 10: print("Loop ",count) count += 1 出力 -> Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 Loop 7 Loop 8 Loop 9 Loop 10
インクリメント(count += 1)を忘れると永遠ループ・・・。
#永遠に10にならないから'Loop 1'が出力され続ける。 count = 1 while count <= 10: print("Loop ",count) 出力 -> Loop 1 Loop 1 Loop 1 Loop 1 Loop 1 Loop 1 (無限)
- ある条件でループ中断
中断条件が不規則な場合は、永遠ループ中にbreak文を入れてループを止める。
while True: print("入力された文字を逆にします。") word = input("文字列を入力してください: ") if word == "q": break reversed_word = word[::-1] print(word+"を逆順にすると、"+reversed_word+"になります。\n") 入力 -> モブサイコ 出力 -> コイサブモ
continue文を使用すると、ある条件に当てはまる処理をスキップし、次のイテレーションに移行できる。
while True: print("入力された文字を逆にします。") word = input("文字列を入力してください: ") if word == "q": break reversed_word = word[::-1] if word == reversed_word: print("回文!!!\n") continue print(word+"を逆順にすると、"+reversed_word+"になります。\n") 入力1 -> たいにいきたい 出力1 -> いたきいにいた 入力2 -> みぎてばてぎみ 出力2 -> 回文!!!
ある条件を満たす値をbreak文でチェックしたいとき、その条件を満たさなかった場合の処理をelse節に記述できる。
exists = ["aiaipy", "pypyde", "thonpy", "oopython", "pythodn"] not_exists = ["aiaipy", "pypyde", "thonpy", "ppap", "pythodn"] idx = 0 while idx < len(exists): if "python" in exists[idx]: print("pythonを含む文字列を見つけました") print("該当文字列: ", exists[idx]) break idx += 1 else: print("pythonを含む文字列はありませんでした。") exists -> oopythonが引っかかる not_exists -> else節が実行される
for文
while文と同じく、複数回の処理を行いたい場合に利用される構文。
while文と違い、ループ変数を定義する必要がない。
つまり、データ構造(サイズ等)を意識せずにループ処理をすることができる。
先ほどのコードは以下のように記述できる。
for word in exists: if "python" in word: print("pythonを含む文字列を見つけました") print("該当文字列: ", word) break else: print("pythonを含む文字列はありませんでした。")
文字列、タプル、辞書、集合などもリストと同様にイテラブルオブジェクトなので、for文で処理することができる。
文字列:
string = "Python3 復習" for s in string: print(s) 出力 -> P y t h o n 3 復 習 #空白も一文字として処理される
タプル:
tuple = ("Python", "復習") for t in tuple: print(t) 出力 -> Python 復習
辞書:
dict = {"名前": "かにたまご", "年齢": 22, "性別": "男", "職業": "大学生"} #普通にfor文処理 for d in dict: print(d) 出力 -> 名前 年齢 性別 職業 #明示的にキーを取り出す keys = dict.keys() #dict_keys(['名前', '年齢', '性別', '職業']) for key in dict.keys(): print(key) 出力 -> 名前 年齢 性別 職業 #値のみを取り出す for value in dict.values(): print(value) 出力 -> かにたまご 22 男 大学生 #キーと値を取得 for item in dict.items(): print(item) 出力 -> ('名前', 'かにたまご') ('年齢', 22) ('性別', '男') ('職業', '大学生') #別々に取得したい場合 for key, value in dict.items(): print("KEY: ", key) print("VALUE: ", value) print() 出力 -> KEY: 名前 VALUE: かにたまご KEY: 年齢 VALUE: 22 KEY: 性別 VALUE: 男 KEY: 職業 VALUE: 大学生
集合:
set = set([1, 2, 3, 4, 4, 5, 3, 2]) #{1, 2, 3, 4, 5} for s in set: print(s) 出力 -> 1 2 3 4 5
- zip関数で複数のシーケンスを処理
zip関数で複数のシーケンスを並列的にループ処理することができる。
(無理くり作ったコード感ハンパない。) nums = [] odd_even = [] squaring_nums = [] count = 1 while count <= 100: nums.append(count) if count % 2 == 0: odd_even.append("偶数") else: odd_even.append("奇数") squaring_nums.append(count**2) count += 1 for num, div, sq in zip(nums, odd_even, squaring_nums): print(num, "は", div) print("二乗すると、", sq) print() 出力 -> 1 は奇数 二乗すると、1 2 は偶数 二乗すると、4 3 は奇数 二乗すると、9 (100まで)
zip関数から返されるイテラブルオブジェクトをタプルや辞書に変換することが可能。
zippedObj1 = zip(nums, odd_even, squaring_nums) #<zip object at 0x032DB530> #対応する値同士がタプル化される print(list(zippedObj1)) 出力1 -> [(1, '奇数', 1), (2, '偶数', 4), (3, '奇数', 9)...(100まで)] zippedObj2 = zip(nums, squaring_nums) #<zip object at 0x032DC738> #2要素のシーケンスを辞書化 print(dict(zippedObj2)) 出力2 -> {1: 1, 2: 4, 3: 9...(100まで)}
このコード見たときに一瞬「中身どうなってるっけ・・・?」と思ってしまったので強調しておく。
- range関数で数値シーケンスの作成
決まった範囲の処理をするならば、range関数で数値シーケンスを作成してループ処理をした方が手軽。
for num in range(1, 101): str_num = str(num) if len(str_num) == 2 and str_num[0] == str_num[1]: print(str_num+"はゾロ目です!") 出力 -> 11はゾロ目です! 22はゾロ目です! 33はゾロ目です! 44はゾロ目です! 55はゾロ目です! 66はゾロ目です! 77はゾロ目です! 88はゾロ目です! 99はゾロ目です!
第三引数にステップ数を指定できる。
for num in range(1, -100, -2): print(num) 出力 -> 1 -1 -3 -5 (-99まで)
zip関数と同様に、range関数もイテラブルオブジェクトを返すので、リスト等のシーケンスに変換することができる。
#リスト化 one_to_hundred = list(range(1, 101)) print(one_to_hundred) 出力1 -> [1, 2, 3, 4, 5...(100まで)] #タプル化 one_to_hundred = tuple(range(1, 101)) print(one_to_hundred) 出力2 -> (1, 2, 3, 4, 5...(100まで))
今回のお試しコードはありきたりな感じだ。
なんにせよ、楽しみつつ色々と考えながらコードを書くことを心がけていこう。
以上です。