47
@yumechi0525

Python勉強会 2015 12-16

Embed Size (px)

Citation preview

Page 1: Python勉強会 2015 12-16

@yumechi0525

Page 2: Python勉強会 2015 12-16

• 分岐の書き方– if文

• 繰り返しの書き方– while文– for文 # ちょっと特殊なので注意

• 標準入力の書き方– input()– 2系と3系で大きく動作が違うので注意

2015/12/14 2

Page 3: Python勉強会 2015 12-16

• 分岐とは?(おさらい)– Aの時,Bって処理をする• 処理に柔軟性が生まれる! やれることの幅が非常に広がる!

• 分岐の実現には,if文,switch文などで実現される

2015/12/14 3

Page 4: Python勉強会 2015 12-16

if 条件式:処理

• インデントがとても重要• 条件式のあとは”:”(コロンが必要)

2015/12/14 4

Page 5: Python勉強会 2015 12-16

if 条件式:処理1

else:処理2

• ここもインデントと,”:”が重要

2015/12/14 5

Page 6: Python勉強会 2015 12-16

• A > B : AはBより大きい• A >= B : AはB以上• A < B : AはBより小さい(AはB未満)• A <= B : AはB以下• A == B : AとBが等しい• A != B : AとBが等しくない

2015/12/14 6

Page 7: Python勉強会 2015 12-16

• 計算結果が10以上の時に10以上! それ以外なら10以下と出力するプログラムを作ってみましょう

• ファイル名はiftest.pyで!

2015/12/14 7

Page 8: Python勉強会 2015 12-16

i1 = 9i2 = 5i3 = i1+i2if i3 >= 10:

print("10以上です")else:

print("10未満です")

2015/12/14 8

Page 9: Python勉強会 2015 12-16

2015/12/14 9

Page 10: Python勉強会 2015 12-16

• C言語,Java言語でもありましたが,「かつ」「または」などによって,複数の条件式が設定できる(ブール演算子)

• ただし書き方に癖があるので,要注意

• if A > B or C > D:• 処理• みたいな…2015/12/14 10

Page 11: Python勉強会 2015 12-16

• C言語,Java言語と大きく書き方が違うので注意!(Rubyとかっぽい)

• A > B and C > D– AがBより大きく,かつCがDより大きい時

• A > B or C > D– AがBより大きいまたはCがDより大きい時

• not A > B– AがBより大きくない時(AがB以下の時)

2015/12/14 11

Page 12: Python勉強会 2015 12-16

• 計算結果が– 10以上20以下の時に「10以上!20以下!」–それ以外の時「10以上20以下でではないです」

• と出力するプログラムを作ってみましょう

• 先ほどのiftest.pyに書き加えましょう

2015/12/14 12

Page 13: Python勉強会 2015 12-16

i1 = 9i2 = 5i3 = i1+i2

if i3 >= 10 and i3 <= 20:print("10以上20以下です")

else:print("それ以外です")

2015/12/14 13

Page 14: Python勉強会 2015 12-16

2015/12/14 14

Page 15: Python勉強会 2015 12-16

• 幾つかに分岐したい…• → if else 文を使う(実例↓)

# 前の分岐から処理される点に要注意if i3 >= 20:

print("20以上です")elif i3 <= 10:

print("10以上です")else:

print("それ以外です")2015/12/14 15

Page 16: Python勉強会 2015 12-16

• 少し長かったかもしれませんが,次はループについてやっていきます

• ちょっと質問タイム(休憩)

2015/12/14 16

Page 17: Python勉強会 2015 12-16

• while文を書く• C言語やJava言語と形が似ている

while 条件式:処理

ここでも,条件式と”:”が重要

2015/12/14 17

Page 18: Python勉強会 2015 12-16

• looptest.pyというファイルを作ってください

2015/12/14 18

Page 19: Python勉強会 2015 12-16

i = 0while i < 10:

print("iの値は%d" % i)i = i + 1# i += 1 でもOK, i++はだめ# pyhton2の場合,coding指定いる

2015/12/14 19

Page 20: Python勉強会 2015 12-16

2015/12/14 20

Page 21: Python勉強会 2015 12-16

• for文を使う• C言語,Java言語とは大きく書き方が違うので注意!• (Javaでいうfor-eachが基本)

for i in 任意のシーケンス型:処理

2015/12/14 21

Page 22: Python勉強会 2015 12-16

for i in range(0, 10):print("iの値は%dですよん" % i)

2015/12/14 22

Page 23: Python勉強会 2015 12-16

2015/12/14 23

Page 24: Python勉強会 2015 12-16

• for文の形がなれない形だったと思います–つまりよく復習しておいて!><

• 繰り返し処理は分岐と同じくらい重要な操作!–何度も同じ処理を書く必要がない!

• 次は標準入出力

2015/12/14 24

Page 25: Python勉強会 2015 12-16

• Python2とPython3で方法が異なります–同じメソッドでも持ってくる値の型が違うというクソトンデモ仕様

• 今回はPython3を前提に話を進めます

• inputtest.pyというファイルを作ってください

2015/12/14 25

Page 26: Python勉強会 2015 12-16

word = input()print("入力された文字列は「%s」です" % word)

# 2行目が長すぎて折り返してますけど,# 実際は1行です><# 追記:フォントサイズ小さくしました

2015/12/14 26

Page 27: Python勉強会 2015 12-16

• Pythonには型がないと言ったが…–実際には内部的に存在してる

• input()で受け取った値は文字列型(String型)として処理される

• そのため,次のような事が起こる

2015/12/14 27

Page 28: Python勉強会 2015 12-16

i1 = input()i2 = input()print("i1+i2=%dです!" % (i1+i2))

2015/12/14 28

Page 29: Python勉強会 2015 12-16

2015/12/14 29

ダメみたいですね・・・

Page 30: Python勉強会 2015 12-16

i1 = input()i2 = input()print("i1+i2={0}です".format(i1+i2))

2015/12/14 30

Page 31: Python勉強会 2015 12-16

2015/12/14 31

やっぱりダメみたいですね・・・

Page 32: Python勉強会 2015 12-16

• キャストする– C言語やJava言語でも出てくるお話

i1 = int(input())i2 = int(input())print("i1+i2=%dです" % (i1+i2))

2015/12/14 32

Page 33: Python勉強会 2015 12-16

2015/12/14 33

Page 34: Python勉強会 2015 12-16

• 標準入力できるようになると,コンピュータに入力することで処理が変えられる(対話できる)

• 例えば,yes/noを入力することで操作を変更できる

• (競プロが始められる)2015/12/14 34

Page 35: Python勉強会 2015 12-16

• メソッド–普通の書き方–ラムダ式を使う書き方

• リスト(配列みたいなもの)–だいたいC言語などのものと使い方一緒–課題出すかも

2015/12/14 35

Page 36: Python勉強会 2015 12-16

• この辺の問題を試しに解いてください– ABC029 A - 複数形– http://abc029.contest.atcoder.jp/tasks/abc029_a

– ABC021 A - 足し算– http://abc021.contest.atcoder.jp/tasks/abc021_a

– ABC014 A -けんしょう先生のお菓子配り– http://abc014.contest.atcoder.jp/tasks/abc014_1

2015/12/14 36

Page 37: Python勉強会 2015 12-16

• http://practice.contest.atcoder.jp/

• 見てやれば問題ないかと

• 練習問題はまだ教えてないことが,あるので解かなくていいです

• (空白区切りの入力を受け取る方法を教えていない)–余談に書いておきます

2015/12/14 37

Page 38: Python勉強会 2015 12-16

• 実はpythonの数値処理には特殊な書き方がある

• if i3 >= 10 and i3 <= 20:• は• if 10 <= i3 <= 20:• のように書ける!(非常に直感的!)

2015/12/14 38

Page 39: Python勉強会 2015 12-16

• 任意のシーケンス型?–リストまたは文字列– dictionaryとかもできる– range(10)っていうのは実はrange型を渡しているだけに過ぎない

–あと,指定がなければrangeは0から始まるのでrange(0, 10)はrange(10)とかける

2015/12/14 39

Page 40: Python勉強会 2015 12-16

• 空白区切りの文字列の受け取り方• 入力例a b cだとすると• 数値ならば( 2通り)a, b, c = map(int, input().split())a, b, c = [int(i) for i in input().split()]

• 文字列ならばa, b, c = input().split()

2015/12/14 40

Page 41: Python勉強会 2015 12-16

• 配列で受け取りたい場合は• 入力a, b, c として• 数値ならば(2通り)inplist = list(map(int, input().split()))inplist = [int(i) for i in input().split()]

• 文字列ならばinplist = input().split()

2015/12/14 41

Page 42: Python勉強会 2015 12-16

• python2の標準入力の方法については時間があったら追記しときます

• input()だと数値でraw_input()だと文字列が返り値だったような–よく確認してないので,ドキュメント読んでください(すみません)

2015/12/14 42

Page 43: Python勉強会 2015 12-16

• Python2だとCoding指定がいる?• 理由:Python2の文字列処理は1バイト単位でやっているため…(アスキーコード処理)– これは本当にひどい

• そのため,ファイルの一番頭にどのエンコードなのか指定するために次の記述が必要

• # # -*- coding: utf-8 -*-• Python3はデフォルトはUTF-8解釈だと思う• (よく確認してません)

2015/12/14 43

Page 44: Python勉強会 2015 12-16

• Python入門 - 演算子– http://www.tohoho-web.com/python/operators.html

–前回の演算子も確認できます• 4. その他の制御フローツール —Python 3.4.3 ドキュメント (公式)– http://docs.python.jp/3.4/tutorial/controlflow.html

2015/12/14 44

Page 45: Python勉強会 2015 12-16

• AtCoder– http://atcoder.jp/– http://practice.contest.atcoder.jp/– http://abc029.contest.atcoder.jp/tasks/abc029_a

– http://abc021.contest.atcoder.jp/tasks/abc021_a

– http://abc014.contest.atcoder.jp/tasks/abc014_1

2015/12/14 45

Page 46: Python勉強会 2015 12-16

• Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法– http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html

2015/12/14 46

Page 47: Python勉強会 2015 12-16

• 全部ここ• https://gist.github.com/yumechi/ffc9b7005794f6fbaaac

2015/12/14 47