第5章 シーケンスの扱い
5.1 シーケンスとは
シーケンスとは、複数の値を順序に沿って並べた集合のことです。複数の値をまとめて扱えることで効率的なプログラムを作ることができます。
シーケンスの代表的なものにはリスト、タプルと文字列があります。固有の処理についてはそれぞれの章で解説しますが、まずはシーケンスで共通の処理について見ていきます。
5.2 要素へのアクセス
シーケンスを構成する1つ1つの値を要素といいます。
5.2(1) インデックスでのアクセス
シーケンスの要素のひとつを参照または代入するにはシーケンスに角カッコ([ ])を続け、中に順序を表す数値(インデックス)を書きます。インデックスは0から始まります。
# リスト型の変数x x = [10, -5, 12.3] y = x[1] print(y)
-5
5.2(2) スライス
シーケンスの一部を取り出すにはスライスという記法を用います。インデックスと同じようにシーケンスに角カッコを続けますが、中には「開始インデックス:終了インデックス」を書きます。終了インデックスにはその要素を含まないことに注意してください。
# 文字列型の変数s s = "abcdefgijk" t = s[3:6] # sの4番目から7番目の前まで print(t)
def
5.3 繰り返し処理
シーケンスを使う大きな理由のひとつに繰り返し処理があります。同じ処理を異なる値に適用したい場合、シーケンスによって効率的に記述できます。
繰り返し処理にはfor文を用います。
for 変数 in シーケンス: 繰り返す処理(ブロック)①
このように記述すると、シーケンスの要素をひとつずつ変数に代入しながら①の処理が要素の数だけ何度も実行されます。
例えば、購入した商品の税抜き額が与えられたとき、その税込み額を表示するプログラムを作るとします。
繰り返し処理を使わなければこのようになります。
price1 = 100 price2 = 150 price3 = 600 taxed1 = int(price1*1.08) print(taxed1) taxed2 = int(price2*1.08) print(taxed2) taxed3 = int(price3*1.08) print(taxed3)
108 162 648
計算と表示の部分は変数名が違うだけで、処理の形は同じですね。これを繰り返し処理で書き直すと次のようになります。
prices = [100, 150, 600] for price in prices: taxed = int(price*1.08) print(taxed)
108 162 648
繰り返しが排除されてすっきりしました。
第1回-2 おみくじに、名前を入れてみよう →ユーザが入力した文字を表示しよう!
1. はじめに
先ほどは、決められた文字を表示しました。
次は、おみくじの参加者が、自分の名前を入力し、その名前を付加して「○○さん、おめでとうございます!大吉です」と出すプログラムです。
■要件
・「あなたのお名前は?」と聞いて、名前を入力してもらいます。
・その後、先ほどのおみくじを実行します。(少し簡略化します)
■ソースコード
print('あなたのナイスなニックネームを入れてね!') name=input() print(name +"さん、おめでとうございます!大吉です")
◼️実行結果
あなたのナイスなニックネームを入れてね! ichi ichiさん、おめでとうございます!大吉です
◼️解説
input() にて、ユーザからの入力を受け付けます。
受け付けた文字がnameにセットされます。
以下のようにまとめることもできます。
name=input('あなたのナイスなニックネームを入れてね!')
第1回-2 おみくじに、名前を入れてみよう →ユーザが入力した文字を表示しよう!
1. はじめに
先ほどは、決められた文字を表示しました。
次は、おみくじの参加者が、自分の名前を入力し、その名前を付加して「○○さん、おめでとうございます!大吉です」と出すプログラムです。
■要件
・「あなたのお名前は?」と聞いて、名前を入力してもらいます。
・その後、先ほどのおみくじを実行します。
■ソースコード
print('あなたの今日の運勢は・・・') for i in range(10): print('・') print("おめでとうございます!大吉です")
※メモ 以下を見ると、もっときれいに記載ができそうだ。
https://kurokinomizuiwa.hatenablog.com/entry/2018/11/10/hatena-blog-source-code-paste
◼️実行結果
あなたの今日の運勢は・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ おめでとうございます!大吉です
◼️解説
0.このプログラムを理解するのに必要な知識
- プログラムは上から1行ずつ実行される
- print(文字列)で文字が表示できる
- 固定の文字列は「"」または「'」で囲む
- for i in range(10): で10回繰り返す
1. プログラムの実行
プログラムは基本的に1行ずつ上から実行されます。
この例では1行目の
print('あなたの今日の運勢は・・・')
が最初に実行されることになります。
それが終わると(文字が表示されると)、次の
for i in range(10): print('・')
が実行されるわけですが、この説明は少し後でします。1行ずつと言ったばかりなのにいきなり2行取り上げた理由も後で説明します。
最後に、
print("おめでとうございます!大吉です")
が実行されてプログラムは終了します。
■コラム Pythonは簡単!!
今回、文字列を表示するプログラムを紹介しました。
Pythonだと、1行ですよね。
でも、C言語だと違うんです。以下みたいに、たくさん書かなければいけないんです。しかも、stdio.hとか、わけのわからない文字もあります。
#include<stdio.h> int main() { printf("おめでとうございます!大吉です"); returun 0; }
Pythonは簡単でいいですね!!
2&3. 文字列の表示
print関数を利用します。
print(表示する文字列)
固定の文字列を表示するときには「"」(ダブルクォーテーション)または「'」(シングルクォーテーション)で囲みます。
javaでは、1文字は''、文字列は""と区別されていましたが、pythonでは区別されていません。
print("こんちくは")
こんちくは
print('こんちくは')
こんちくは
print(3)実行結果
3改行を含めて表示するにはダブルクォーテーション3つ「"""」で囲います。
print("""ab cde fg""")
ab cde fg特殊な文字、たとえば、「'」を表記する場合には「¥」を付けます。英語のキーボードでは「\」(バックスラッシュ)と表現されることでしょう。これを付けないと、プログラム的な意味なのか、単なる文字列なのかが分からないからです。
print ('こん\'ちくは')
こん'ちくは
それ以外にも、いろいろと試してみるといいですよ。
参考までに、いくつか試した結果が以下です。
print("12") →12
print(12) →12
print(こんにちは) →エラー
print("こんにちは') →エラー
4. 繰り返し処理
もったいつけて説明を保留したfor i in range(10)ですが、ここでは次の処理を10回繰り返すもの、としてください。この構文をfor文と言います。
(2行まとめて取り上げたのは「次の処理」と対になっているからです。)
どこまでを繰り返しの1セットとするかはpythonではインデント(字下げ)によって表現します。for文の次にあるprint('・')の先頭についている半角スペース(ここでは4つ入れています)がインデントです。今回はインデントがついているのがこの1行だけなのでここだけが10回繰り返されて次の処理に進みます。
なので、この2行で「・」を10回表示する、という動作をすることになります。
第3章 変数と代入
3.1 変数とは
変数とは値(計算結果などを含みます)を保存し変数名というラベルで参照する機能です。
リテラルでは、プログラムに直接値が記述されているのに対して、変数は「変数名」で記述することになります。
3.2 代入
変数には具体的な値を格納して使います。変数に値を格納する処理を代入といい、ほぼ数学的な代入と同じ意味です。
代入には「=」記号*1を使います。
x = 100
3.2(1) 通常の代入
通常は左辺に変数名を、右辺に代入する値を記述します。それによって指定された変数に値が格納されます。値はリテラルの他、後述する演算子で処理されたものや、関数の結果、他の変数の場合があります。
x = 100
3.2(2) 複数の変数への一括代入
代入の「=」は複数続けて書くことができます。以下のコードは
x = y = z = 200
は、
x = 200 y = 200 z = 200
とほぼ等価です。
3.2(3) 変数リストへの代入
複数の値を複数の変数にそれぞれ代入するには以下のように記述します。
x, y, z = 100, 200, 300
この記述では右辺はタプル(tuple)になります。
詳しくはシーケンス型の章で解説します。
3.2(4) 累積代入
後述する二項演算子で変数の値を更新する短い記述があります。
変数 = 変数 ○ 値
#○は二項演算子
を
変数 ○= 値
と記述できます。
例えば、以下のコード
x += 1
は、
x = x + 1
とほぼ等価*2です。
3.3 変数の参照
変数の中身(値)を取り出すには、変数名を記述します。通常のコードでは変数名を記述すると、実行時に中の値として読み替えられます。
つまり、xに100が入っているとして、
print(x)
は、実行時に
print(100)
と同じものとして扱われます。
ただし、代入文の左辺にかかれた変数名は値に読み替えられません。x = 200
が、100 = 200と扱われてしまったら、代入できないですからね。
第5章 数値データの扱い
5.1 数値リテラル
5.1(2) 真偽値リテラル
TrueとFalseで記述します。
print(True) print(False) print(int(True))
True False 1
5.2 数値を扱う演算子
5.3 条件分岐
それまでのプログラムの処理結果によって続く処理を変えたいケースは良くあります。(というか、それがないとプログラムは毎回同じ結果になってしまいます。)
if文を使うことで、このような条件分岐を実現することができます。
if 条件: 条件が成立する場合の処理(ブロック)① else: 条件が成立しない場合の処理(ブロック)②
「条件」の部分には真偽値として評価されるものを書きます。代表的なものは比較演算子を用いた式ですが、その他にも算術演算子の式や変数や関数の結果など真偽値に見なせるものはなんでも書けます。
条件が成立する場合(評価された真偽値がTrueになる場合)、①の処理ブロックが実行されます。(ブロックの説明は第1章 pythonプログラムの基本構造 - pythonで作ってみよう!!の1.5にて)その場合、②の処理ブロックはスキップされます。反対の場合も同様です。
*1:数学記号として正しいかは自信がありませんが…wikipedia:数学記号の表を参照しました
第4章 データ処理の基本
4.1 演算子
データを加工するための方法に演算子による演算があります。もっとも身近なものは四則演算のような算術二項演算子です。
print(1 + 2)
3
4.2 関数
関数とは、いくつかのパラメータを取り*1、関数ごとに決まった処理をするものです。パラメータを使って処理をするところは演算子と似ている部分がありますが、結果を返す他にさまざまな動作をするものがあります。
代表的な例に画面に文字を表示するprint関数があります。
print("Hello world!")
Hello world!
4.2(1) 関数の呼び出し
関数は関数名に続いて丸カッコ「( )」を書き、中にパラメータを記述します。パラメータ(引数ともいいます)が複数ある場合はカンマ「,」で区切ります。
関数が値を返すとき、演算子と同様に関数呼び出し部分がその結果に置き換わるものと考えることができます。
# xのy乗を返す関数pow z = pow(5, 3) # z ... 125
これらは評価される順に行われます。実行される順序(優先度)については別で解説します。
4.2(2) パラメータの指定
パラメータを指定する方法には2つあります。
a. 位置引数による指定
前述のpow関数では1つめのパラメータがべき乗の底、2つめの引数が指数となります。このようにパラメータを書いた順序で紐付ける方法を位置引数といいます。
print(pow(3, 4))
81
b. 名前付き引数による指定
関数のパラメータにはそれぞれ名前がつけられているものがあります。
print(3, 4, sep = "/")
3/4
パラメータには位置でしか指定できないもの、名前でしか指定できないもの、どちらでも指定できるものがあります。
4.2(3) 外部モジュールの利用
pythonでは外部モジュールを読み込むことで利用できる関数を拡張することができます(外部モジュールを読み込まないと使えない関数があるとも言えます)。
外部モジュールには、pythonと一緒にインストールされる標準ライブラリのものと、それ以外のものがあります。
標準ライブラリ以外のモジュールは別途pipコマンドなどでインストールが必要です。
(必要であればインストール手順を実行した後、)pythonで外部モジュールを有効にするにはimport文を実行します。
import モジュール名
これによって外部モジュールに含まれる関数が利用可能になり、次のように実行します。
モジュール名.関数名(...)
例えば、2つの値の最大公約数を求めるには以下のように記述します。
import math print(math.gcd(117, 208))
13
4.3 クラスメソッド/インスタンスメソッド
詳しくはクラスの項で説明しますが、クラスメソッド、インスタンスメソッドと呼ばれる形式の関数もあります。
クラス、オブジェクトが持つ関数のことを特にメソッドといいます(繰り返しますが詳細は別途)。
4.3(1) クラスメソッド
今の時点では、そういう名前の関数がある、程度の理解で構いません。
クラス名.メソッド名(...)
例えば、16進数形式の文字列を数値に変換するには以下のように記述します。
print(float.fromhex("0xff"))
255.0
*1:パラメータを取らないものもあります
第2章 値とリテラル
2-1. 値
値とは、プログラムで扱う具体的なデータのことです。例えば、以下のようなものがあります。
- 今日の日付「3/8」
- 日本人の平均身長「170.7」cm
- このブログのタイトル「pythonで作ってみよう!!」
ここでいう値は本来意味を持ちません。「170」という値は、誰かの身長で170cmかもしれませんし、何かの値段170円かもしれません。意味はプログラマーやユーザーが意図して決めるものだということです。*1
2.2 型
値にはさまざまな種類(型)があります。型ついてはプログラム言語によって異なりますが、pythonでは以下のような体系に分かれています。
2.3 リテラル
プログラムで値を扱うもっとも簡単な方法はソースコードに値を記述することです。このソースコードに書いた値をリテラル(即値、直値)といいます。
print(1) #「1」は数値リテラル x = "text" #「x」は変数、「text」は文字列リテラル
*1:意味を振るまいとして定義することはできますが、ここでは触れません