文字列の扱い
Pythonでの文字列は、strクラスのインスタンスになります。
以下で、文字列内の文字を扱う方法を説明します。
文字列に対してはインデックスを指定することで取り出すことが可能です。
文字列[インデックス]
インデックスは「0」を指定すると、一番最初の文字にアクセスできます。
例で見てみましょう。
str1 = "あいうえおかきくけこ"
print(str1[1])
上記を実行すると、
い
と表示されます。
インデックスが 1 なので、2番目の文字ということになります。
また、最後尾からも指定することができます。
str1 = "あいうえおかきくけこ"
print(str1[-1])
print(str1[-5])
上記を実行すると、
こ
か
と表示されます。
後ろから文字を指定する場合は、マイナス「-」を使います。
-1 で最後尾です。
-5 で最後から5番目の文字です。
変数の有効範囲
変数はいろんな箇所に宣言できますが、どこに宣言するかで扱いが異なってきます。
基本的に関数の内部で宣言した変数は、ローカル変数と言います。
関数の外部(外側)で宣言した変数は、グローバル変数と言います。
以下のサンプルで確認しましょう。
def func1(number):
print("ローカル変数number:", number) ・・・(a)
print("関数の中でのggg:", ggg) ・・・(b)
ggg = "12345" ・・・①
func1(100) ・・・②
print("関数の外でのggg:", ggg) ・・・③
print("関数の外でのnumber", number) ・・・④
これを実行すると、以下のように表示されます。
---------------------------------------------------------------------
ローカル変数number: 100
関数の中でのggg: 12345
関数の外でのggg: 12345
Traceback (most recent call last):
File "C:\Users\taka\Desktop\python\sample10.py", line 8, in <module>
print("関数の外でのnumber", number)
NameError: name 'number' is not defined
---------------------------------------------------------------------
解説します。
まず、defでfunc1という関数を定義しています。
このfunc1関数内で、ローカル変数であるnumberを表示されています。
続いてグローバル変数であるgggを表示させています。
次に関数の外部(外側)です。
①でグローバル変数gggに、12345 を代入しています。
②でfunc1関数に引数100を渡しています。
⇒100が渡ってきたので、(a)で100が表示され、(b)で12345が表示されます。
③ではグローバル変数を表示させているので、12345が表示されます。
最後の④は、関数内部で宣言したnumberを表示させようとしているため、
有効範囲ではない、ということでエラーになります。
次に、関数の中でグローバル変数に値を代入したい場合の例を説明します。
関数の中で値を代入すると、その代入された変数はローカル変数の扱いになります。
明示的にグローバル変数であることを表すなら、global と付けます。
def 関数名():
global 変数名1, 変数名2 ...
以下のサンプルで確認しましょう。
def func2(number):
global ggg ・・・③
ggg = "ABCDE" ・・・④
print("ローカル変数number:", number)
print("関数の中でのggg:", ggg) ・・・⑤
ggg = "12345" ・・・①
func1(100) ・・・②
print("関数の外でのggg:", ggg) ・・・⑥
これを実行すると、以下のように表示されます。
---------------------------------------------------------------------
ローカル変数number: 100
関数の中でのggg: ABCDE
関数の外でのggg: ABCDE
---------------------------------------------------------------------
実行の順序で解説します。
①でグローバル変数が宣言されて、そこに、12345が代入されます。
②でfunc2関数を呼び出します。
③でグローバル変数を関数の中で定義しています。
④で、そのグローバル変数に、ABCDEが代入されます。
⑤で、そのグローバル変数を表示させています。 ABCDE と表示されます。
⑥でも、グローバル変数gggを表示させていますが、④でgggがABCDEに置き換わっているため、ここでもABCDEと表示されるわけです。
Pythonでの関数 その3
今回は、任意の数の引数を受け取る場合の関数について説明します。
この、「任意の数の引数を受け取る」仕組みは、「可変長引数」と言います。
引数を可変長引数にするには、関数定義の引数名の前に「*」(アスタリクス)を付けます。
定義としては以下のようにします。
def funcExam(*number):
この関数を呼び出すには、
funcExam(4, 5, 6)
funcExam(7, 8, 9, 10)
と記述します。
ひとつ例をみてみましょう。
def func_print(*number):
for n in number:
print(n)
func_print(1, 2, 3, 4)
可変長引数のnumberから順番に値を取り出してnに格納して、print文で表示させています。
結果は、
1
2
3
4
となります。
もうひとつ例を見ましょう。
def allSum(*number):
sum = 0
for n in number:
sum += n
return sum
num = allSum(1, 2, 3, 4, 5)
print(num)
これは引数の総和を求める関数です。
numberからひとつずつ取り出してnに入れ、sumという変数に加算していってます。
最後にreturn で sum を返しています。
これを実行すると、
15
と表示されます。
Pythonでの関数 その2
前回の続きです。
③戻り値がない関数
戻り値のない関数をみてみます。
def GM():
print('Good Morning!')
GM()
これを実行すると、 Good Morning! と表示されます。
④戻り値がある関数
次は戻り値のある関数をみてみます。
def tashizan(a, b):
c = a + b
print(tashizan(8, 7))
これを実行するとどうなるでしょうか?
15 と表示されると思った方もいるでしょう。
けど、違います。
結果は、
None
と表示されます。
これは、a+bという計算をしたにも関わらず、returnを使って値を戻してないためです。
returnを使って値を戻さないと、この関数からは何も戻ってきてませんよ、ということを示す
Noneが戻ってしまいます。
では、returnを使ってみましょう。
def tashizan(a, b):
c = a + b
return c
print(tashizan(8, 7))
これを実行すれば、10 と表示されますね。
Pythonでの関数
関数って何? という方もいるでしょう。
今までの中で説明してきた、print() は関数です。
これはPythonの標準ライブラリに用意されている関数です。
今回は、自分で定義できる関数、というものを説明します。
関数とは、、、
ある特定の処理をひとまとまりにしたもののことです。
Pythonではdefに続いて関数を宣言します。
基本構文は以下の通りです。
def 関数名():
処理
引数と戻り値を使用した構文は以下の通りです。
def 関数名(引数1, 引数2...):
処理
return 戻り値
引数とは、このデータを使って処理してください、と関数に受けわたす値のことです。
戻り値とは、関数から結果として返される値のことです。
関数のタイプを大きく分けると、以下になります。
①引数のない関数
②引数のある関数
③戻り値がない関数
④戻り値がある関数
---
①引数のない関数
まず、引数のない関数をみてみます。
def helloWorld():
print('HelloWorld')
helloWorld()
これを実行すると、 HelloWorld と表示されます。
②引数のある関数
次は、引数のある関数をみてみます。
def add(a, b):
print(a + b)
add(5, 2)
引数に、aとbがあります。
add(5, 2)では、aに5が、bに2が引き渡れて、print文の中で、加算されて表示します。
つまり、これを実行すると、7 と表示されます。
Pythonのwhile文によるループ処理
繰り返しの制御構文には、for文の他にwhile文というものがあります。
while文は、指定した条件式が成り立っている間、処理を繰り返します。
構文は以下の通りです。
while 条件式:
処理
for文の回で説明した、「あいうえお」を順に表示するプログラムをwhile文で記述すると以下のようになります。
hiragana = ("あ", "い", "う", "え", "お")
i = 0
while i < len(hiragana):
print(hiragana[i])
i += 1
while文では、ループの回数を管理するような変数を用意しましょう。
上記の例では、i がそれにあたります。
iは、「制御変数」と呼ばれます。
最初に、iに0を代入しています。(初期化)
次にwhile文ですが、条件式が「i < len(hiragana)」となっています。
この意味は、変数iが、要素数(len(hiragana)」より小さい間は、処理が繰り返される、
という意味になります。
次が、print文でhiraganaのインデックスがiの中身を表示し、最後に、変数iをカウントアップ(1プラス)しています。
○break文
ループの途中で処理を中断させたい場合に用いられるのがbreak文です。
一般的に以下のように使用されます。
while True:
処理
処理
if 条件式:
break
例文で見ましょう。
k = 5
i = 0
while True:
i+=1
print(i)
if i == k:
print("while文から抜けます!")
break
上記を解説すると、iが制御変数となっています。
iがカウントアップされていき、iが5になったら、if文の条件式を満たすので、breakが実行されて、処理が終わります。
Pythonのfor文によるループ処理(その2)
いくつか for文のサンプルを見ていきましょう。
hiragana = ("あ", "い", "う", "え", "お")
for i in hiragana:
print(i)
これはどのように、表示されるでしょうか?
ひとつひとつの要素が、iに代入され、print()関数で表示させています。
つまり、
あ
い
う
え
お
と表示されます。
上記サンプルは、配列で表現しましたが、単なる文字列として、同じようなプログラムを書くことができます。
それが以下です。
hiragana = "あいうえお"
for i in hiragana:
print(i)
文字列 "あいうえお" から、1文字ずつ取り出してiに代入され、print()関数で表示させています。
つまり、
あ
い
う
え
お
と表示されます。