4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プログラミング未経験者がpythonを学んでみる Part2 ~基本文法編2~

Last updated at Posted at 2018-05-20

プログラミング未経験者がpythonを学んでみる Part2 ~基本文法編2~

概要

プログラミング未経験者がpythonを学ぶ第2弾
前回はこちら
https://qiita.com/n_oshima/items/1153329469e0c3bda943

基本的な文法2

ユーザーから入力を得る方法

ユーザに値を入力してもらう

ユーザーから入力を得たい場合は、input()関数を使用する

簡単な例
$ cat 001.py
name = input("名前は?")
print(name+"さん、こんにちわ")

$ python 001.py
名前は?マルフォイ ⬅️(キーボードで入力後、Enter)
マルフォイさん、こんにちわ

型を合わせる

pythonでは、計算を行う場合は数値と数値
文字を結合する場合は文字列と文字列ではなくてはならない
もし、数値と文字列といった型の違うデータを処理する場合は
どちらかの型に変換する必要がある。

関数 説明
str(v) vを文字列型に変換
float(s) sを浮動小数点数型に変換
int(s) sを整数型に変換

変数の型を調べる

変数の型を調べるためのtype()関数が用意されている

>>> v = 1234.567
>>> type(v)
<class 'float'>
>>> 
>>> s = "test"
>>> type(s)
<class 'str'>

カラットをグラムに変換するスクリプトを作ってみる

$ cat 002.py
per_ct = 0.2
user = input("何カラットですか?")
ct = float(user)
g = ct * per_ct
print(f"{ct}カラット =  {g}グラムです")

$ python 002.py
何カラットですか?5  ⬅️(キーボードで入力後、Enter)
5.0カラット =  1.0グラムです

テキストでは最後の行はformatメソッドを使用していますが
前回の記事のコメントで教えていただいた
f-strings(書式化済み文字列リテラル)を使ってみました。便利!

時給計算スクリプトを作ってみる

$ cat 003.py
user = input("時給はいくらですか?")
jikyu = int(user)

user = input("何時間働きましたか?")
jikan = int(user)

kyuryo = jikyu * jikan

print(f"時給{jikyu}円で{jikan}時間働いたので、給料は{kyuryo}円です")

$ python 003.py
時給はいくらですか?800   ⬅️(キーボードで入力後、Enter)
何時間働きましたか?5   ⬅️(キーボードで入力後、Enter)
時給800円で5時間働いたので、給料は4000円です

制御構文(1) 分岐条件について

分岐条件とは

制御構文の中でも条件分岐 は最も基本的な構文である
日本語で例えるなら

もし***であれば***する
そうでなければ***する

と言うことができる。

分岐条件if構文の使い方

Pythonで分岐条件を使う時はif構文を使う
ある条件を元にして、その条件が正しい時(真の時)と
正しくない時(偽の時)で、プログラムの動作を変更することができます。
この時else:以下の部分については、省略することも可能
そして、if構文の比較式の部分には、条件を比較するための式を書く

比較式に使用できる比較演算子は以下の通り

関数 説明
a == b aとbが等しい
a != b aとbが等しくない
a > b aがbより大きい
a >= b aがb以上
a < b aがbより小さい
a <= b aがb以下

比較演算子を使うと、数値の大小を比較する事ができる

>>> 5 == 5
True
>>> 5 != 5
False
>>> 
>>> 5 > 1
True
>>> 
>>> 5 < 1
False
>>> 
>>> 5 >= 6
False
>>> 
>>> 5 >= 4
True

また、文字列を比較することも可能

>>> s = "test"
>>> 
>>> s == "tesy"
False
>>> 
>>> s == "test"
True

インデントについて

pythonでは、インデント(文字下げ)が重要な意味を持ち
同じスペース数でインデントされている部分は同じブロックと見なされる
インデントはスペース4文字を使う事が推奨されている

$ cat 004.py

num = int(input("数字を入力"))
if num % 2 == 0: # 入力された数値を2で割って余りが0ならば
	print("偶数です")
else: #それ以外(余りが1)であれば
	print("奇数です")

$ python 004.py
数字を入力2 ⬅️(キーボードで数値を入力後、Enter)
偶数です

真偽型(bool型)について

真(True)と偽(False)の2つだけの値をもつ真偽型(bool型)がある
真偽型(bool型)は、他の文字列型や整数型と同じようにデータ型の一種である

そして、if構文の条件式には、この真偽型の値か比較式を指定することになっている
言い換えると、比較式の返す値は真偽型になっていると言う事

>>> a = 100
>>> a >=10
True

真偽型同士の演算に使う論理演算について

複数の真偽型の組み合わせに関する演算を論理演算と言う
真偽型は2つある時、それが真と偽のどちらであるかを求める演算

関数 説明
a or b a あるいは b のどちらかであれば真、それ外であれば偽
a and b a と b の両方が真ならば真、それ以外であれば偽
not a aが真ならば偽、偽ならば真

and演算は、2つの値が共にTrueである時のみTrueを返し
それ以外はFalseを返す

and演算の例
>>> True and True
True
>>> 
>>> True and False
False
>>> 
>>> False and Flse
False
>>> 
>>> a = 100
>>> (30 <= a) and (a < 50) # 30以上50未満か
False
>>> 
>>> a = 40
>>> (30 <= a) and (a < 50) # 30以上50未満か
True

or演算は、2つの値のどちらかが真であればTrueを返す

or演算の例
>>> True or True
True
>>> 
>>> True or False
True
>>> 
>>> False or False
False
>>> 
>>> a = 100
>>> (a <= 30) or (a >= 50) # 30以下か50k以上か
True
>>> 
>>> a = 40
>>> (a <= 30) or (a >= 50) # 30以下か50k以上か
False

not演算は、TrueであればFalse、FalseであればTrueを返す

not演算の例
>>> not True
False
>>> 
>>> not False
True
>>> 
>>> not (10 > 1)
False
>>> 
>>> not (10 < 1)
True
>>> 

if構文を入れ子にする

pythonでは、インデントの深さによって、ブロックを区別している
以下のプログラムでは2つのif構文を入れ子状態にしており
インデントレベルのあっているifとelseがそれぞれに対応している

$ cat 005.py

num = int(input("数値を入力"))

if num % 2 == 0:
    if num >= 30:
        print(str(num) + "は偶数で30以上")
    else:
        print(str(num) + "は偶数で30より小さい")
else:
    print(str(num) + "は奇数。")

$ python 005.py
数値を入力50
50は偶数で30以上です。

順に条件を判定していくelifについて

ifelを使用する事で、条件を直列的に判定できるようになる

$ cat 006.py

num = int(input("数値を入力"))

if num < 10: # 10より小さければ
    print(str(num) + "は10より小さい数字")
elif 10 <= num and num <50: # 50より大きければ
    print(str(num) + "は10以上、50より下の数字")
else: # それ以外であれば
    print(str(num) + "は50以上の数字")
    
$ python 006.py
数値を入力30
30は10以上、50より下の数字

何もしないpass文

if構文で真だった場合は何もせず、偽の場合のみ処理を行いたい場合は
passをしようする事ができる

num = int(input("数値を入力"))

if num == 10:
	pass
else:
	print("10ではありません")

短文のif構文について

条件が真のみ、かつ処理が単文の場合は、
インデントを使わず、: で繋げて1行で表現することも可能

num = int(input("数値を入力"))

if num == 10: print("10です")

制御構文(2) 繰り返しについて

条件つき繰り返しwhile構文について

pythonにはいくつかの繰り返し構文があるが
whileはその中でも単純な繰り返しの構文である
ある条件式を与えると、その条件が真の間処理を繰り返す

if構文でelseを省略できたように、while構文でもelseを省略可能
以下プログラムは、ガソリンがある間は車が走ると言うプログラム

$ cat 007.py
gas = 3
while gas > 0:
    print("+ 走る")
    print("| ガソリン =", gas)
    gas -= 1
else:
    print("ガソリンが切れました")

$ python 007.py
+ 走る
| ガソリン = 3
+ 走る
| ガソリン = 2
+ 走る
| ガソリン = 1
ガソリンが切れました

プログラム5行目のgas -= 1は、変数gasの値を1つ減らして
gasに代入するろいった意味になり、gas = gas - 1 と同義となる

説明
変数 += 1 変数の値を1つ増やす
変数 -= 1 変数の値を1つ減らす

何度も繰り返したい場合

while構文に与えた値が条件式において常に真であれば、プログラムは繰り返される
そのため、繰り返し実行したい場合は、while構文を使うことで繰り返し実行する事できる

$ cat 008.py
while True:
    m = int(input("メートルは?"))
    yd = m * 1.0936
    print(f"{m}メートルは、{yd}ヤードです")

$ python 008.py
メートルは?10
10メートルは、10.936ヤードです
メートルは?20
20メートルは、21.872ヤードです
メートルは?30
30メートルは、32.808ヤードです
メートルは?

無限ループに注意

上記プログラムの場合、終了させる為にはCtrl+cで強制終了させる必要がある
その為、ユーザがコマンド入力によって終了できるよう改良する

$ cat 009.py

while True:
    m = (input("メートルは?"))
    if m == "" or m == "q": break
    m = int(m)
    yd = m * 1.0936
    print(f"{m}メートルは、{yd}ヤードです")

$ python 009.py
メートルは?2
2メートルは、2.1872ヤードです
メートルは?3
3メートルは、3.2807999999999997ヤードです
メートルは?q

braekを挿入する事で、whileの繰り返しから脱出する事ができる

範囲つき繰り返しのfor構文について

for構文は以下の書式で利用ができる
こちらもelseは省略可能

for ループ変数 in 範囲:
	# 繰り返す処理
else:
	# 繰り返し後の処理

for構文の範囲には色々な値を指定できるが、ここでは数値で範囲を指定するrange()関数を使用してみる

以下はrange(5)と指定し、5回処理を繰り返す方法
特に指定がなければ、処理は0からスタートする

$ cat 010.py
for i in range(5):
	print(i)

$ python 010.py
0
1
2
3
4

1から10までを足す

ここでは、for構文を利用して1から10までを順番に足していくプログラムについて説明する
先ほど利用したrange関数では、開始値を終了値を指定する事ができる

range関数の使い方
① range(回数)
② range(開始値, 終了値)
③ range(開始値,終了値, ステップ値)

②③のように、②つ以上の値を指定している場合は、実際には終了値+1を指定する必要がある
例えば、1から10であれば range(1, 11) と指定する
③のステップ値を指定すると、2ずつ増やしたり、-1などを指定して値を減らすことも可能

$ cat 011.py
v = 0
for i in range(1, 11):
    v = v + i
    print(i, "を足すと", v)
print("1から10を足すと", v)

$ python 011.py
1 を足すと 1
2 を足すと 3
3 を足すと 6
4 を足すと 10
5 を足すと 15
6 を足すと 21
7 を足すと 28
8 を足すと 36
9 を足すと 45
10 を足すと 55
1から10を足すと 55

画面に繰り返し描写してみる

ここでは、for構文とtkinterというモジュールを使用して
画像に線を300本引く処理を説明する

以下は、3ピクセル毎に縦線を300本引くプログラム

# グラフィックライブラリを取り込む
from tkinter import *

# 画像の初期化
w = Canvas(Tk(), width=900, height=400)
w.pack()

# 線を引く
for i in range(300):
    x = i * 3
    w.create_line(x, 0, x, 400, fill="#FF0000")

# 画面を表示して待機
mainloop()

実行結果

スクリーンショット 2018-05-20 1.25.12.png

tkinterモジュールはpythonからGUIを構築・操作すすための標準ライブラリ
Canvas()Tk()を使うと、グラフィカルな画面を表示する事ができ、
create_line()メソッドで線を描写する事が可能

以下は、赤と青の線を交互に引くプログラム

# グラフィックライブラリを取り込む
from tkinter import *

# 画像の初期化
w = Canvas(Tk(), width=900, height=400)
w.pack()

# 線を引く
for i in range(100):
    x = i * 9
    if i % 2 == 0:
        c = "#ff0000"
    else:
        c = "#0000FF"
    w.create_line(x, 0, x, 400, fill=c)

# 画面を表示して待機
mainloop()

実行結果

スクリーンショット 2018-05-20 1.36.23.png

繰り返し中止のbreakと継続のcontinue

繰り返し処理を実行している途中で、何かしらの理由で処理を中断したい場合は、breakを利用する

以下は、10回繰り返し処理の中で3回目の繰り返しで処理を中断するプログラム

$ cat 012.py
for i in range(10):
    print(i)
    if i == 2 : break

$ python 012.py
0
1
2

continuについて

繰り返し処理の中で、ある部分だけを繰り返したい場合に使うのがcontinue

continuを使う事で、1つ目の処理を終えた時点でそれ以降の処理を実行せず、スキップして次の繰り返し処理を始める事ができる

以下は、iが2の時のみhelloを出力しないプログラム

$ cat 013.py
for i in range(5):
    print("i =", i)
    if i == 2 : continue
    print("hello")

$ python 013.py
i = 0
hello
i = 1
hello
i = 2
i = 3
hello
i = 4
hello

FizzBazzゲームを書いてみる

Qiitaでも度々目にするが、FizzBuzzとは英語圏でパーティなどで行われるゲームである

ルールは、何人かが順々に1,2,3,4...と数字をカウント指定き、3で割り切れる場合はFizz、5で割り切れる場合はBuzz、3でも5でも割り切れる場合はFizzBazzと発言するゲーム

以下は、FizzBazzの答えを表示するプログラム

$ cat 014.py
for i in range(1, 21):
    if i % 15 == 0:
        print("Fizz Bazz")
        continue
    if i % 3 == 0:
        print("Fizz")
        continue
    if i % 5 == 0:
        print("Buzz")
        continue
    print(i)

$ python 014.py
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Bazz
16
17
Fizz
19
Buzz
4
3
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?