Python3 超入門(1):文字の扱い方の超基礎

タイトル通りです.Python の基本的な使い方を全くの初心者向けにまとめてみました.この投稿のシリーズは次のような方のために作りました.

  • 初めてプログラムを習う人で,Python を選択した人
  • Hellow World まではマネできたけど,その次に何をすればいいかわからない
  • 入門書を買ってみてもいいけど,ネットでなるべくただで済ませたい
  • 基本的な使い方を再確認したい
  • 「言語処理100本ノック 2015」を答えを見たくないが,ヒントがほしい

サブタイトルを付けるとするならば「言語処理100本ノック 2015で学ぶPython入門」といったところでしょう.







なお,筆者は初めての Python の勉強を「言語処理100本ノック 2015」を用いて行い,その際に学んだ知識をメモしたものになります.なので,文字列処理の知識がほとんどで,数値計算的な知識は少ないことを理解していただきたいです(matplotlib についての投稿もあるので,数値計算についてはそちらがより参考になるのではないかと思います).「言語処理100本ノック 2015」の解答例を調べてみるとたくさんヒットしますが,これは直接解答を明示しないヒントとなるかもしれないです.

環境は Windows10 に Anaconda4.1.1(64bit) で Python3.5.2 をインストールした状態です.IDE として PyCharm を用いております.

文字列を(標準出力に)出力(Hello, World)

print('Hello, World!')

これでコマンドラインに “Hello, World!” と表示されます.「print」は「標準出力に文字を表示する」という機能です.

自動改行させない標準出力

例えば次のようなコードを考えてみます.

print('最初の文')
print('2つ目の文')

これを実行すると2行で出力されることがわかります.つまりprintは一回全部出力すると自動的に改行します.print文を複数回使っても一行に文字をつなげていきたい場合は次のように書きます.

print('最初の文', end='')
print('2つ目の文')

このようにすると「最初の文2つ目の文」とつなげて表示されます.printのかっこのなかにカンマ(,)で区切ったのちに「end=…」と記述を続けていますが,これはprintの機能のデフォルトの設定を用いずに機能の一部を変更して使いたいときに使うもので,「オプション」と呼ばれます.「end=’hogee’」というオプションは「出力する文字列の語尾に’hogee’という文字を付けろ」という指示になります.「end=”」とすることで「文字の終わりには何もつけるな」という指示になります(「end=”」の”の中身はないので).

改行コード(\n)

実は,printを使う際はデフォルトで「改行しましょう」という指示を文の後ろに付け加えています.オプションできちんと書くと「end=’\n‘」のようになります.この「\n」のことを改行コードといいます.使っていらっしゃる環境によっては「\」が「¥」に見えてるかもしれないですが,どちらも同じなので問題ないです.詳しいことは文字コードという話になってしまうので,この投稿では省きたいと思います.

コメントアウト

次のコードを実行してみてください

#print('最初の文')

すると何も表示されないことがわかります.先ほどのコードとの違いは#があるかどうかですが,実は行頭に「#」があると,その行は実行する際は無視されるようになります.つまり実行はしないが編集するときは見えるため,コメントを付け加えたりすることができます.この行頭に「#」を付けることを「コメントアウト」といいます.

文字列を変数に代入

プログラミングで一番基本になる文字の代入についてみていきましょう.次のコードを見てください.

s = 'first string'
print(s)

これを実行すると「first string」と文字を出力してくれます.最初の一行目を日本語に翻訳すると「sという変数に文字列 ‘first string’ を代入する」という指示になります.二行目は確認のための出力です.

「=」の意味

初めてプログラムを習う方には,この「=」の意味が数学で用いているものとは少し性質が異なるため混乱されるかと思います.多くのプログラム言語において「=」は「右に書いてあるものを,左の書いてあるものに代入する」という意味になっています.次の例を見てください.

x = 2
x = 4

数学的に上の式は何かおかしいですが,プログラムとしては全く異常とは言えないのです.このコードを段階的に日本語に翻訳すると次のようになります.

  1. まず「x」という名前を付けた箱を,パソコンの中(メモリ上)に作成する.
  2. 作成した「x」という箱の中に,「2」という数字を入れておく
  3. 次の行に進み,今度は「x」という箱の中に,「4」という数字を入れておく(「2」という数字は上書きされる).

変数に代入するの意味をわかっていただけたでしょうか?

文字列の長さ

s = 'first string'
print( len(s) )

これを実行すると「12」と表示されます.
二行目の len(s) は「s という文字列の長さ」という意味になっています.それが print の中にあるので,2行目の意味は「sという文字列の長さを出力してください」という指示になっています.

文字列の3番目の文字を確認する

s = 'first string'
print(s[2])

これを実行すると「r」と表示されます.s[0] と書くと「s という文字列の 1 番目の文字」ということになる.文字列の頭の文字が 0 番目でカウントされていることに注意しましょう.一般に,「s という文字列の i 番目の文字」は「s[i]」と書けます.ちなみに,sが10文字なのに s[15] のようなことを書くとエラーが出てしまいます.

文字の連結

s = 'first string'
s = s + ', second string'
print(s)

これを実行すると「first string, second string」と表示されます.文字列を連結する際には,二つの文字列を「+」でつなげてあげればよいです.念のため次の例を見てみましょう.

s = 'abc' + '123'
print(s)

この実行結果は「abc123」という文字が出力されます.

プログラムにおける「=」の意味をもう一度考慮して「s = s + ‘, second string’」を日本語に直すと

  1. まず = の左を見て,s(の箱の中身) + ‘, second string’ という文字列を作る.
  2. それを新たに s という箱に入れなおす

ということをしています.

二行目は「s という文字列の終わりに’, second string’という文字を足す」ということを意味している.そのとき s という文字が「first string, second string」という文字列に更新されている.最後の行で確認している.

ちょっとレベルアップ:「自分自身に」文字列を追加

上のプログラムはもう少しシンプルに書くことができます.

s = 'first string'
s += ', second string'
print(s)

「a+=‘hoge’」と書いたとき,それは「a = a + ‘hoge’」と同じ意味になります.

発展:文字列を逆順に表示

最初はあまり用いないと思いますが,「言語処理100本ノック 2015」をやる際に必要になったものなので,このパートは必要な方だけ理解していただければ大丈夫です.

s = 'first string'
print( s[::-1] )

二行目の s[::-1]について,例えば s[0:6:2] とすると「frt」と表示されます.[0:6:2]は「s[0]から初めて,6番目のs[5]までを,2こ飛ばし」という意味になります.ちなみに公式の文章には

s[i,j,k] = slice of s from i to j with step k”

と書いていあります.もし[:6:1]のように最初を指定しないと,s[0]から始めてくれます.うまく合うように自動的に調整してくれるみたいです.さらに最後の「何飛ばし(刻み幅)」かを省略すると 1 に自動的になります.刻み幅をマイナスにすると逆にたどってくれれます.


ここまでがPythonでの文字の扱い方に関する超基礎的な内容になります.まだここまでだと Python らしさがあまり表に出ていないですが,投稿を重ねていくうちに Python チックなものが出てくるでしょう.ちなみに,ここまでの知識だけで言語処理100本ノック 2015 を解いてみることはまだ難しいかと思われます.次の投稿も見てから100本ノックに挑戦してみるとスラスラ解けるのではと思います.

シリーズとして基本的なことをわかりやすいように書き連ねていきたいと思っているので,順に読んでいただくと python の学習がスムーズになるのではないかと思います.長くなりましたが,読んでいただいて本当にありがとうございます.


入門 Python 3

このブログについて

IAtLeX です.ブログをはじめてさほど時間がたっていないので,未熟な内容が多々あるかと思いますが,それも時間が解決してくれるはず...Python系の記事を着々と充実させていきたいです.投稿主についてはこちらを参照してください.

このブログについて - http://iatlex.com/about_blog/

コメントを残す

*