ymLogs

プログラミング、PC周りのガジェットなど

【Python】【解説】初心者のための備忘録 #2 【リスト】【if,elif,else】【for】【while】

前回#1に引き続き、Python備忘録。初心者向けです。

今回は第二弾 #2。

f:id:ymLogs:20200827182655p:plain

#2では

 について扱っていきます。

 

↓ 前回の記事(printとか、str・float・intとか、√とか)ymlogs.hateblo.jp

 

 

 

 

コメントアウト

簡単にいうと、プログラム内にメモできます。

プログラム内にメモをしたい場合、

以下のように

・メモしたい部分全体を「""" """」で囲む

・メモしたい行の先頭に「#」をつける

とその(それらの)行は実行されません。

 

メモをする以外にも、

プログラムがうまく動かなくてどの行に問題があるか調べたいときにコードを消さずにコメントアウトして残しておく使い方もできるので便利です。

 

"""

ここに

書かれている

コードは

実行されません

"""

 

#ここに書かれているコードは実行されません

 

 

リスト

 

li = [1,2,3,4,5,6]

 のように記述することで、データを格納したリストを作ることができます

 

リストの名前はliである必要はなく、任意の名前を付けることができます

リストの中身(要素)は文字列でも数列でも大丈夫です。

リストの要素をリストにすることもできます。

 [[1,2,3],[2,3],[2,5,7,8]] みたいな感じ。

 

 

リスト「li」の左からx番目のデータを取り出すには、li[x] のように記述します。

リストの一番左端がリストの0番目であることに注意してください。

 

右から数えたいこともあるでしょう。そんなときのための方法もあります。

リスト「li」の右からx番目のデータを取り出すには、li[-x] のように記述します。

リストの一番右端がリストの-1番目であることに注意してください。

f:id:ymLogs:20200819234901p:plain

「リストのx番目」のイメージ

(一応書き出してみると...)

li = [1,2,3,4,5,6] の

0番目(-6番目)の要素:1  

※「print(li[0])」 または「 print(li[-6])」 を実行すると「1」が出力される。

1番目(=-5番目)の要素 :  2

2番目(=-4番目)の要素:3

3番目(=-3番目)の要素 :  4

4番目(=-2番目)の要素:5

5番目(=-1番目)の要素 : 6

 

また、print(li)のように入力すると、リスト全体を出力することができます。

 

以上のことをふまえた例を以下に示します。

 

入力例

a = [1,2,3,4]

print(a[1])

print(a[-2])

print(a)

 

実行結果

2

4

 [1,2,3,4]
 
li.append(9) のように記述すると、リストliの最後尾に9という要素を追加することができます。
 
入力例
b = [2,4,6,8]
print(b)
b.append(10)
print(b)
 
実行結果
[2,4,6,8]
[2,4,6,8,10]
 
li.pop()  のように記述すると、リストliの最後尾の要素を削除することができます。
li.pop(3) のように記述すると、左端を0番目としたときの3番目の要素を削除することができます。
 
入力例
c=[3,6,9,12]
print(c)
c.pop(2)
print(c)
c.pop()
print(c)
 
実行結果
[3, 6, 9, 12]
[3, 6, 12]
[3, 6]
 
 
リストliを空にしたい場合、または空のリストを新しく用意したい場合は、
li = [ ]のように記述してください。
 
リストliの要素数を知りたい場合、len(li) を使用します。
(出力された要素数の属性はint)
 
入力例
d=[1,4,6,3]
print(len(d))
type(len(d))
 
実行結果
4
<class 'int'>

 

アルゴリズム

問題解決のための計算の手順のことをアルゴリズムと呼びます。

だいたいのアルゴリズム

・順次構造

・分岐構造

・反復構造

の三種類の基本制御構造によって表現できます

フローチャートをイメージしてもらうとわかりやすいです。

 

順次構造は、上から順番に実行するだけの単純なものです。

 

分岐構造は、以下のフローチャートのように条件によって枝分かれし異なる処理を行うものです。ひし形の条件1で分岐していることがわかると思います。

f:id:ymLogs:20200821160719p:plain

フローチャート(分岐構造)


 

反復構造は、指定した回数や条件に応じて命令を繰り返すものです。

 繰り返す前に条件を確認する前判定繰り返し(1回も処理Aを行わない場合もある)

 繰り返し処理をした後に条件を確認する後判定繰り返し(必ず一度は処理Aを行う)

f:id:ymLogs:20200821161111p:plain

フローチャート(前判定繰り返し)

f:id:ymLogs:20200821161432p:plain

フローチャート(後判定繰り返し)


 

ちなみにフローチャート作成に使用したのは下のDraw.ioっていうサイト。便利。

app.diagrams.net

 

 

順次・分岐・反復構造

の3つの基本制御構造の書き方を覚えればだいたいのプログラムが書けちゃうわけですね。

 

Python分岐構造や反復構造について表す方法について、次の章以降に記していきます。

 

真偽(True,False)

「=」の記号は「代入」の意味で使うので、等式を表したいときには「=」を2つ重ねて使います(俺的Python書き忘れるランキングNo.2)

左辺と右辺が等しいことを示したい場合は代わりに「==」と表現します。

左辺と右辺が等しくないことを示したい場合は「!=」と表現します。

 

aとbが等しい場合、(例: a=2, b=2)

print(a==b) と入力すると True

print(a!=b)     と入力するとFalseが 出力されます。 

(aとbは等しいですか?という問いを判定し真(True)を、

aとbは異なる値ですか?という問いを判定し偽(False)を、

それぞれ返している)

 

aとbが等しくない場合、(例:a=1, b=2)

print(a==b) と入力すると False

print(a!=b)     と入力するとTrueが出力されます。

 

また、「<」や「>」を不等号として使うことができます。

 ≧や≦は「>=」「<=」と表わすと使うことができます。

不等式も等式のときと同じようにpythonくんが真偽判定してTrueかFalseか教えてくれます

 

次の章では、この真偽判定使って条件分岐させていくよ。

 

ちなみに、

TrueかFalseかのいずれかとなる(不)等式、および True、Falseそれ自体 

の属性を bool型と呼びます。

 

条件分岐(if、elif、else)

if 条件A:

    命令1

elif 条件B:

    命令2

    命令3

else:

     命令4

 

↑のコードは、以下のような意味です。

条件Aが満たされているとき、命令1を実行

そうでない(条件Aが満たされていないとき)、命令2→命令3を実行

どれにも当てはまらないとき(条件Aも条件Bも満たしていないとき)、命令4を実行

 

注意点としては、

・「:」を忘れるな!(俺的Python書き忘れるランキングNo.1)

・命令の前にスペース(インデント)を!(「:」は次の行にインデントがくる合図)

(スペースの大きさは1文字空いてればokだけど、Tabキーを押すと半角スペース4文字分下げてくれるので基本は半角スペース4文字分かな)

2つ以上の命令をif文内に入れるときは、青枠内の命令2→命令3を表す部分みたいに左端をそろえてね

 

フローチャートに示すとこんな感じ。

f:id:ymLogs:20200821173451p:plain

フローチャート(if,elif,else)

 

これを用いた例として、

整数値nが以下のどれに分類されるかを確認するプログラムを示します。

・2の倍数

・3の倍数

・2,3,6の倍数

・2の倍数でも3の倍数でもない

この例では、ifの下の命令の中にもif文組み込んであります。

 

f:id:ymLogs:20200821172608p:plain

フローチャート(2,3,6の倍数のどれであるか確認)

 

入力例

n =int( input("整数値を入力>>>>>"))
if n%2 == 0:
    if n%3 == 0:
        print("nは2,3,6の倍数です")
    else:
        print("nは2の倍数ですが3の倍数ではありません")
elif n%3 == 0:
    print("nは3の倍数ですが2の倍数ではありません")
else:
    print("nは2の倍数でも3の倍数でもありません")

 

実行結果

(入力したnに応じて実行結果が変わります)

 

ブログの仕様上、スペースとかがおかしくなってコピペするとうまく動かないかと思います。ブログにプログラムのコードを表示させるうまい方法探しておいたほうが良かったですね。ごめんなさい。やり方わかったら差し替えてみます。

 

shellに「整数値を入力>>>>>」と表示されるので、そこにキーボードで入力した数字がnに代入され、それ以下のプログラムを実行してくれます。

input()を用いると、input()直前までの処理を終えるとshell上でキーボード入力を待機する状態となります。 キーボードで入力した値が代入され、処理が再開されます。

 

繰り返し(for)

 

繰り返しの回数指定

for x in range(n):

    命令

のように書くと命令をn回繰り返しますnはint型にしておいてね。

 

以下の例を見てもらうのが一番わかりやすい。たぶん。

 

それではお聞きください。

ゴールデンボンバーで「女々しくて」。

(既出ネタだったらすみません)

 

入力例

for x in range(3):
    print("女々しくて")
print("辛いよ")

 

出力例

女々しくて

女々しくて

女々しくて

辛いよ

 

range()の()内の回数分繰り返し、それが終わったら次の段落に行くイメージをつかんでもらえたかと思います。

 

しかし、xの意味が分からないと思うので次の例を

(上の例では、xが機能していません)

 

入力例
a=[ ]

for x in range(5):

    a.append(2*x)

print(a)

 

実行結果

[0, 2, 4, 6, 8]

 

繰り返し一回目にはx=0、二回目にはx=1、...、n回目にはx=n-1が代入されていることが分かるかと思います。

もちろん、x以外の別の変数を使うこともできます。

 

 

リストの要素に対する繰り返し

 for x in リスト: のように書くと、xにリストの要素を一つ目から順番に代入してくれます。リストの要素全部終わるまで帰れま10して繰り返してくれます。

以下に例を。

 

入力例

b=[1,5,6,21]

c=[ ]

for x in b:

    c.append(x*3)

print(c)

 

実行例

[3, 15, 18, 63]  

 

bのリストの中身を3倍したものを集めたリストcができました。

 

(rangeを使って同じものを以下のようにも書けるけどめんどくさいから上の書き方覚えといたほうがいい)

b=[1,5,6,21]

c=[ ]

for x in range(len(b)):

    c.append(b[x]*3)

print(c)

 

文字列に対する繰り返し

forを用いて、文字列を一文字ずつ切り取ることもできます。

以下に例を。

 

入力例

for x in "文字列":

    print(x)

 

実行結果

  

繰り返し(while)

while 条件:

    命令

のように書くと、条件が満たされている(True)の間、命令を繰り返し行います。

 

以下に例を。

なんと1から10まで数えることができちゃうプログラムです。すごい!

 

入力例

n=1
while n<=10:
    print(n)
    n=n+1

 

実行結果

1
2
3
4
5
6
7
8
9
10

 

n<=10が満たされている間、

print(n)  → n=n+1 という作業を繰り返し行います。

nが10を超えると、この繰り返しのループから抜け出します。

 

n<=10の部分はTrueかFalseかどっちかなわけで、そこをTrueって置き換えてしまって

while True:

    命令

 のように書くと、無限ループを作ることができます。

命令を一生繰り返します。止まるんじゃねえぞ。

while True:を使う場合は、どこかにbreakという「繰り返しのループから抜け出す呪文」を入れておくといいでしょう。一生止まれないマンになっちゃうからね。

 

 役割がブレーキっぽいので私はたまにbrakeって間違えそうになります......けど

break(中断、休憩)の意味でイメージしておきましょう

 

 

 

 

まあ今回はこの辺にしておきますかね。

間違ってる部分とか読みにくい部分があったらごめんなさい。

#1と#2だけでだいたいのアルゴリズム書けちゃうはず。

 

#3もアップロードしました。良ければどうぞ。

ymlogs.hateblo.jp

 

ここまで読んでくれてる人がもしいらっしゃるなら読者になるとか☆つけるとか誰かにお勧めするとかなんかしといてほしい。

それではまた。