乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

Python

さて
Pythonに関わらず制御構文は
プログラミングの基本になり
if文はその中でも最もよく使うものです

日本語で表すと
もし(ある条件に合致したら)
ああして
もし(ある条件に合致したら)
こうして
それではなかったら
  こうする

こんな感じです

if文の基本構文は以下になります

if  条件1:
結果1
elif 条件2:
結果2
else:
その他結果


結果の部分はインデントといって
行の始めをスペース4つやタブで後ろに下げておく
必要があり、ない場合はエラーになります

ifの条件に合致したら結果1を返し
elifの条件に合致したら結果2を
当てはまらなけらばその他結果を返します

elifは条件の数だけ増やすこともでき
無くても実行できます
else文の必要が無ければ省略できます

次のような使い方をします
JKmanager = 17
print("もし高校野球の女子マネージャーが%d歳だったら" % JKmanager)

if JKmanager < 20:
    print('未成年')
else:
    print('合法')
もし高校野球の女子マネージャーが17歳だったら
未成年

条件文は真偽値をとる文で指定することができます

例えば文字列の値の一致、不一致
数値の比較での大小や一致、不一致
関数の戻り値
ono = 'おのののか'
nono = 'の'
if nono in ono:
    print ('お' + nono * ono.count(nono) * 2 + 'か')
おののののののか

前述の文字列判定を使うと
文字の有無が真偽値で返ってくるので条件文に使えます


演算子について


if文に合わせて使われるのが
比較演算
論理演算

です

まずは比較演算子から

演算子記述例意味
==a == bbがaに等しい
!=a != bbがaに等しくない
>a > bbよりaが大きい
>=a >= bbよりaが大きいか等しい
<a < bbよりaが小さい
<=a <= bbよりaが小さいか等しい

値を比較してその結果を返す為に使います
この場合はオブジェクトが持っている値を比較しています
条件に合致した場合はTrue,そうでない場合はFalseを返します

オブジェクトが同一かどうかの比較は
左辺 is 右辺
同一でないことを調べる場合は
左辺 is not 右辺
とします

次に論理演算です

演算子記述例意味
anda and baとbが共に真の場合に真
ora or baかbの少なくとも1つが真の場合に真
notnot aaが真の時に偽、偽の時に真

この場合は条件の組み合わせによってもたらされた結果が
正しいかどうかを判定します

論理積

左辺と右辺の式を双方を評価して
掛け合わせたものが全体の評価になります
実際のパターンは4通りで全体の評価は以下の通りになります
左辺右辺全体の式

使い方としてはこのように
JKmanager = 18
if JKmanager > 17 and JKmanager < 20:
  print ("JKマネージャー%dはちょうど食べごろです" % JKmanager)
JKマネージャー18はちょうど食べごろです

左辺、右辺の式を満たしていれば共に真の値が返り
両辺の値も真になります


論理和


論理和はどちらかが真の場合に真になります
これも4パターンあり評価は以下の通り
左辺右辺全体の式

使い方としてはこのように
JKmanager = 18
JDmanager = 20
if JKmanager > 19 or JDmanager > 19:
  print ("JKマネージャー%d , JKマネージャー%dどっちも行けます" % (JKmanager,JDmanager) )
JKマネージャー18 , JKマネージャー20どっちも行けます

否定

not演算子をつけると式の評価が逆になります
左辺全体の式

以下のようになります
JKmanager = 18
if not JKmanager < 17:
  print ("JKマネージャー%dは17未満ではありません" % JKmanager)
JKマネージャー18は17未満ではありません


if文の条件を構成する際には
最適な演算子を使って
判定を行うようにします


演算子の優先度

演算子には優先度が有り


(優先順位が高い)
  符号を表す単項演算子の + と -  ~x
  **
  *  /  %  //
  +  -
  <<  >>
  &
  ^
  |
  <  <=  >  >=  ==  !=  <>  is  is not  in  not in
  not
  and
  or
(優先順位が低い)
足し算よりも掛け算の方が優先度が高いのは数式と一緒です

優先度を変更するには括弧 ( ) でくくります
真偽値の判定の際も括弧でくくることにより判定条件を
変えることができるのでうまく使いわけましょう



どんな言語でも
文字列操作はプログラミングの基本になります

文字列型の関数(メソッド)は
たくさんあるので見ていきましょう

基本的にPythonの文字列は
部分的な書き換えができません

文字を入れ替えたい場合は
新たなオブジェクトとして
生成しなければなりません

そんな場合はreplaceメソッドを使います
replace('検索文字列','変更後の文字列')
musuka1 = '3分間待ってやる'
musuka1.replace('3','30')
'30分間待ってやる'

リストなどを連結する際はjoinメソッドが使えます
'連結する際に使う文字列'.join(変数名)
musuka2 = ['見ろ!', '人が', 'ゴミのようだ!']
','.join(musuka2)  
'見ろ!人が!ゴミのようだ'

繰り返しは * 演算子で指定回数を加えます
balsu = 'バルス'
balsu * 10
'バルスバルスバルスバルスバルスバルスバルスバルスバルスバルス'

文字列の中の文字をを検索したい場合はfindを使います
該当文字があれば0番目から始まる番号を返し、無ければ-1を返します
find('文字')
第二引数で検索を開始する位置を指定できます
find('文字',index)
s = 'abcdeffcabc'
index = s.find('b')  # indexは1(2文字目)
print(index)
index = s.find('b', 2)  # indexは9(10文字目)
print(index)
1
9


値の埋め込み

文字列に % 演算子で文字列やlist/tupleを与えると以下のように展開できます
aa = 'Python'
bb = 'いいかんじの言語です'
print ('%s は %s' % (aa, bb)) 
Python は いいかんじの言語です

%sの部分ですが、使う値の型によって変わります
  • %s - 文字列として展開
  • %d - 整数として展開
  • %f - 小数点数として展開
またリストやタプルを文字列にして現したい際は「 , 」を後につけないと
エラーで怒られるので 注意しましょう
strList = [1,2,3]
print ('listの値は: %s' % (strList,))
listの値は: [1, 2, 3]

辞書型を埋めることもできます
%の後にキーと値を指定します
dictA = dict(first='カツオ', family='磯野')
print ('僕の名は ・ ・ ・  %(first)s,  %(family)s  %(first)s' % dictA)
僕の名は ・ ・ ・  カツオ,  磯野  カツオ



 
前述のformatメソッドでも埋め込みができます
print ('{0}{1}{2}'.format('乙', 'Py','大好き'))
乙Py大好き


両端の空白削除

空白削除に strip, lstrip, rstripが使えます

strip :両端からスペース・タブ文字・改行(\rおよび\n)を削除した文字列を返す
lstrip:stripと同等の処理を左端のみに適用したものを返す
rstrip:stripと同等の処理を右端のみに適用したものを返す

spaceX = ' SpaceX '
print ('A' + s.strip() + 'B') 
print ('A' + s.lstrip() + 'B' ) 
print ('A' + s.rstrip() + 'B' )
ASpaceXB
ASpaceX B
A SpaceXB

大文字、小文字

uppper()とlower()で行います
print ('small'.upper() )
print ('BIG'.lower() )
SMALL
big


検索文字の有る無し


文字列の中に特定の文字があるかを判定する方法になりますが
何通りかあります

文字列.find('検索文字列')
検索文字列あればそのインデックスを返す
無ければ-1を返す

文字列.index('検索文字列')
検索文字列あればそのインデックスを返す
無ければ例外を返す

文字列.count('検索文字列')
検索文字列あればその個数を返す
無ければ0を返す

 '検索文字列' in 文字列
検索文字列があればTrue返す
無ければFalseを返す

statesX = 'ぶったね、二度もぶった。ぶったね親父にも打たれたことないに!!'
innerX ='親父'
print(statesX.find(innerX))
print(statesX.index(innerX))
print(statesX.count(innerX))
print(innerX in statesX)
16
16
1
True

恐らく一番楽なのは in を使う方法でしょう
状況に応じて使い分けてください

文字列の変数に
数値型の変数を加えようとすると
エラーになってしまいます
   
age = 20
"i am " + age + " years old !"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 age = 20
----> 2 "i am " + age + " years old !"

TypeError: Can't convert 'int' object to str implicitly

なので一旦変換したりしないと
pythonでは扱えないです

数値型を文字列に変換するにはstr()メソッドを使います
age = 20
"i am " + str(age) + " years old !"
'i am 20 years old !'


フォーマット関数で
文字列に数値型の変数を渡してやることもできます
{ } の部分が変数の値に置き換わります
freezasama= 530000
"私の戦闘力は{}です".format(freezasama)
'私の戦闘力は530000です'

%を使った表記法は以下です
a = 10
b = 1.2345
c = "otu"
d = {"namu":300, "otupy":500}

print ("age: %d" % a )#整数
print ("age: %10d" % a )#10桁分
print ("age: %010d" % a )#10桁分0埋め
print ("price: %f" % b )#小数
print ("price: %.2f" % b )#小数第2位で切り捨て
print ("name: %s" % c) #文字列
print ("sales: %(otupy)d" % d) #数値変数を組み込む
print ("%d and %f" % (a,b)) #数値と小数点を組み込む

こんな感じで文字列として組み込みができるので
覚えておくと良いでしょう 

予約語とは
あらかじめプログラミング言語で登録されている単語で
コード中では特別な意味を持つので
変数名に使えない単語です 

これを実行してもらうと 、予約語一覧が出ます
__import__('keyword').kwlist
['False',
 'None',
 'True',
 'and',
 'as',
 'assert',
 'break',
 'class',
 'continue',
 'def',
 'del',
 'elif',
 'else',
 'except',
 'finally',
 'for',
 'from',
 'global',
 'if',
 'import',
 'in',
 'is',
 'lambda',
 'nonlocal',
 'not',
 'or',
 'pass',
 'raise',
 'return',
 'try',
 'while',
 'with',
 'yield']

これらの単語は意味を持つので
使えない単語として覚えておきましょう

その他にも気をつけたい単語があります

list は変数名としても使えますが
組み込み関数として使われているので
変数名にしてしまうと上書きしてしまい
list関数が使えなくなってしまいます

関数一覧はこれで見れます
dir(__builtins__)
'ArithmeticError',
 'AssertionError',
 'AttributeError',
 'BaseException',
 'BlockingIOError',
 'BrokenPipeError',
 'BufferError',
 'BytesWarning',
 'ChildProcessError',
 'ConnectionAbortedError',
 'ConnectionError',
 'ConnectionRefusedError',
 'ConnectionResetError',
 'DeprecationWarning',
 'EOFError',
 'Ellipsis',
 'EnvironmentError',
 'Exception',
 'False',
 'FileExistsError',
 'FileNotFoundError',
 'FloatingPointError',
 'FutureWarning',
 'GeneratorExit',
 'IOError',
 'ImportError',
 'ImportWarning',
 'IndentationError',
 'IndexError',
 'InterruptedError',
 'IsADirectoryError',
 'KeyError',
 'KeyboardInterrupt',
 'LookupError',
 'MemoryError',
 'NameError',
 'None',
 'NotADirectoryError',
 'NotImplemented',
 'NotImplementedError',
 'OSError',
 'OverflowError',
 'PendingDeprecationWarning',
 'PermissionError',
 'ProcessLookupError',
 'RecursionError',
 'ReferenceError',
 'ResourceWarning',
 'RuntimeError',
 'RuntimeWarning',
 'StopAsyncIteration',
 'StopIteration',
 'SyntaxError',
 'SyntaxWarning',
 'SystemError',
 'SystemExit',
 'TabError',
 'TimeoutError',
 'True',
 'TypeError',
 'UnboundLocalError',
 'UnicodeDecodeError',
 'UnicodeEncodeError',
 'UnicodeError',
 'UnicodeTranslateError',
 'UnicodeWarning',
 'UserWarning',
 'ValueError',
 'Warning',
 'ZeroDivisionError',
 '__IPYTHON__',
 '__IPYTHON__active',
 '__build_class__',
 '__debug__',
 '__doc__',
 '__import__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'abs',
 'all',
 'any',
 'ascii',
 'bin',
 'bool',
 'bytearray',
 'bytes',
 'callable',
 'chr',
 'classmethod',
 'compile',
 'complex',
 'copyright',
 'credits',
 'delattr',
 'dict',
 'dir',
 'divmod',
 'dreload',
 'enumerate',
 'eval',
 'exec',
 'filter',
 'float',
 'format',
 'frozenset',
 'get_ipython',
 'getattr',
 'globals',
 'hasattr',
 'hash',
 'help',
 'hex',
 'id',
 'input',
 'int',
 'isinstance',
 'issubclass',
 'iter',
 'len',
 'license',
 'list',
 'locals',
 'map',
 'max',
 'memoryview',
 'min',
 'next',
 'object',
 'oct',
 'open',
 'ord',
 'pow',
 'print',
 'property',
 'range',
 'repr',
 'reversed',
 'round',
 'set',
 'setattr',
 'slice',
 'sorted',
 'staticmethod',
 'str',
 'sum',
 'super',
 'tuple',
 'type',
 'vars',
 'zip']

これらの単語を変数名に使うと
思わぬところでエラーが発生し実行できなくなるので
使わないようにしましょう

もし使ってしまって
実行寺にエラーが発生した場合は
jupyter notebook を再起動しましょう

Pythonではdictionary型として
他の言語にもあるものが使えます

辞書型は
キー(key) : 値(value)
構造で出来ており
キーは一意でなければいけません

値をなんらかのキーで関連付けて保持するために使います

作り方は
変数名 = { 'key' : 'value'}
とします

変数に値を格納する際は
変数名[ 'key' ] = value
同じキーの場合は上書き、無ければ追加になります
>>> otu = {'ja': 409, 'sa': 413}
>>> otu['gu'] = 412
>>> otu
{'sa': 413, 'gu': 412, 'ja': 409}
 
リスト型から辞書型を作ることもできます
2つのリストをzip関数とdict関数で変換します
この場合はキーと値が同じ個数しか変換されません
>>> keys = ['cat', 'dog', 'mouse']
>>> values = ['nyan', 'wan', 'chu']
>>> dict(zip(keys, values))
{'cat': 'nyan', 'dog': 'wan', 'mouse': 'chu'}
リストでなくタプルからでも変換は可能です

辞書からリストにする場合は
keysメソッドを使います
>>> otu = {'ja': 409, 'ir': 412 ,'sa': 413}
>>> otu
{'ir': 412, 'ja': 409, 'sa': 413} >>> list(otu.keys()) ['sa', 'ir', 'ja'] >>> sorted(otu.keys()) ['ir', 'ja', 'sa']

要素から値を取り出す場合は
変数名[ 'key' ]
items()メソッドを使うことでキーと要素を同時に取り出せます
>>> otu = {'ja': 409, 'ir': 412 ,'sa': 413}
>>> for k, v in otu.items():
>>> 	print(k, v)
sa 413
ir 412
ja 409





 

このページのトップヘ