おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

Python初心者のお勉強ノート(1) Hello world

仕事の関係で今まで一度も触ったことのないPython言語を勉強することになりました。 だいたい2週間くらいで、簡単なプログラムが書けるところまでもっていきたいのです。 このブログはその勉強のノートです。

今までRubyやMarkdownのような自分の良く知っていることについて解説やチュートリアルを書きましたが、今回は状況が全く違います。 しかし、初心者が勉強しながら書くノートも読者に役立つかもしれないと思い、公開します。 どうか、温かい目で見てください。 そして、間違いがあればご指摘いただければ幸いです。 ぜひよろしくお願いいたします。

インストール

OSがUbuntuの場合はaptコマンドでパッケージからインストールできます。

$ sudo apt install python3

Pythonにはバージョン2と3がありますが、現在ではPythonといえば、バージョン3のことです。 しかし、以前両方のバージョンが使われていた時期があり、それらに互換性がなかったために、区別する必要がありました。 Ubuntuではそれぞれをpythonとpython3としていました。 そのため、現在でもバージョン3のパッケージ名はpython3になっています。

Ubuntuの現在のPythonのバージョンは3.12です。 Pythonの最新版は3.13なので、それを使いたい場合は別にインストールする必要があります。

WindowsでPythonをインストールには、まずPythonのウェブサイトのダウンロードページにアクセスします。 「Download the latest version for WIndows」の下のボタンを押して最新版をダウンロードします。 現在(2024/10/17)の最新版はバージョン3.13.0です。 ダウンロードしたファイルはPythonのインストーラです。 インストーラを起動してPythonをインストールします。 インストール画面に現れるメッセージを注意深く読むことを忘れないでください。

インストールが完了すると、IDLE(Pythonの統合開発環境)、Python、ドキュメントが「スタート」=>「すべてのアプリ」=>「Python 3.13」と辿ることにより起動できるようになります。

Pythonの起動

Pythonを起動するには、Ubuntuでは、端末から「python3」または「python3.12」と入力します。 Windowsでは端末から「py」と入力します(インストールの完了画面にこの説明あり)。 また、スタートメニューから、「スタート」=>「すべてのアプリ」=>「Python 3.13(フォルダ)」=>「Python 3.13(コマンドライン)」と辿って起動することもできますし、同様の手順でIDLEを起動してもPythonを動かすことができます。

私は、現時点ではWindowsを使うことが多くなってきました。 そのため、このブログではWindowsで確認できたことを例示します。 Linuxでも同じことができるはずです。

PS C:\Users\(ユーザ名)> py
Python 3.13.0 (tags/v3.13.0:60403a5, Oct  7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> quit
PS C:\Users\(ユーザ名)>

このように、私のWindowsではpyとコマンドから入力してPythonが起動できます。 (ユーザ名)と書いてあるところには、実際には私のWindowsにおけるユーザ名が入ります。 なお、今後はいちいちそれを書くのは煩わしいので、コマンドのプロンプトは単にPS C:>と書くことにします。

Windowsで気をつけなければいけないのは、WIndowsターミナル(上記の端末のこと)の中でどのプログラムが動いているのかを確認することです。 上の例ではPowerShellのバージョン7が動いています。 他のプログラムとしては、cmd.exeやPowerShellのバージョン5があります。 これらは動作が異なるので、この記事の動作例が動かない可能性があります。 したがって、例をそのまま試したい場合はPowerShellのバージョン7をインストールしてください。

インストール後にWindowsターミナルのデフォルトのプログラムをPowerShellバージョン7にする手順は次の通りです。

  1. Windowsターミナルを起動する
  2. 上部のバーにあるv形のアイコンをクリックする
  3. 設定を選択する
  4. 「スタートアップ」の「既定のプロファイル」を「PowerShell」にする(注意:「Windows PowerShell」はバージョン5の方なので間違えないこと)

以上でWIndowsターミナルを起動したときのデフォルトがPowerShellバージョン7になります。

同じことをUbintuでやると次のようになります。

$ python3
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit
$

メッセージが2行、そのあとにプロンプト>>>が表示されます。 ここにPythonの命令を書くのですが、ここではquitとタイプしました。 これはpython3を終了するという命令です。

Hello World

定番の、文字列表示です。 printという組み込み関数(Built-in function)を使います。 関数の引数にはカッコが必要なことに注意が必要です。

PS C:> py
Python 3.13.0 (tags/v3.13.0:60403a5, Oct  7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello world.")
Hello world.
>>> quit
PS C:>

print関数に続くカッコの中のものを引数といいます。 ここでは、引数は"Hello world."です。 "をダブル・クォートといい、これで前後を囲んだものは文字列とみなされます。 Hello world.は空白とピリオドを含め、12文字の文字列となって、コンピュータ内部に保存されます。 print関数は引数をディスプレイに表示します。 quitはpythonを終了させます。 カッコつきのquit()やexitでも終了できました。

関数をpythonのコマンド引数にすることも可能です。 -cオプションで引数をプログラムと見て実行します。

PS C:> py -c 'print("Hello world.")'
Hello world.
PS C:> 

プログラムをファイルにして、そのファイルのプログラムをpythonが実行することもできます。

  • ファイルの拡張子は.pyにする。
  • py ファイル名(Ubuntuではpython3 ファイル名)と端末から入力することにより実行できる。

ファイルの内容は次のとおりです。

print("Hello world.")

ファイル名はHelloWorld.pyとします。 端末からプログラムを実行します。

PS C:> py HelloWorld.py
Hello World
PS C:>

文字列のリテラル

文字列をコンピュータでどのように実装(実現)しているかをまず説明します。

人間にとって、文字はそれがひらがな、カタカナ、漢字、アルファベットのいずれであっても、簡単に認識できますが、コンピュータでは結構複雑なことをしています。 人間は文字を紙などに書いて伝達しますが、コンピュータのメモリは紙とは大きく異なります。 メモリは電気的なもので、その最も小さい単位はビットといい、電圧が高いか低いかの2種類を保存しています(フリップ・フロップ回路を使うなど、他の方法のメモリもありますが、ビット単位であることは変わりません)。 元々は+5Vと0Vで区別していました。 +5V(高電圧)が1を表し、0V(低電圧)が0を表します。 ビット単位の処理よりも、いくつかのビットをまとめて処理する方が速いので、バイト単位(byte, 1byte=8bit)あるいはワード単位(CPUによって異なる。1word=64bitや1word=32bitなど)で処理を行います。

文字列の場合は、バイト単位が基本です。 1バイトは8ビットなので、0000 0000(全部つなげると見にくいので、4つごとにスペースを入れておきます)から1111 1111まで2の8乗の区別ができます。 我々が通常使う数は十進数ですが、コンピュータでは二進数を使う方が便利です。 というのは、二進数では2になると繰り上がりがおこるので、各桁には0と1しか現れないからです。 例えば、1から4までは2ビットで表せ、二進と十進を対応させると

ビット 二進 十進
00 0 0
01 1 1
10 10 2
11 11 3

8ビットのすべてのビットが1になる1111 1111は8桁の二進数とみることができ、それは十進数では255になります(2^8-1を計算すれば速い)。 二進数はすぐに桁が大きくなるので、人間にとってはわかりにくくなります。 かといって十進数と二進数は変換がやっかいなので十進数を採用するのも効率的ではありません。 そこで、8ビットを4ビットごとに分けて考えると、4ビットは0から15までを表せ、16になったときにそれは左隣の4ビットの方に繰り上がると考えます。 つまり16は0001 0000ですが、左の4ビットが1、右の4ビットが0のようになります。 これは16で繰り上がりがおこるので、十六進数です。 十六進数の場合、0から15までを区別できる記号が必要で、10から15までをアルファベットのaからfまたは大文字のAからFで表すことにします。 いくつかの数字を例にとってみます。

ビット 二進 十六進 十進
0000 1010 1010 A 10
0001 1100 1 1100 1C 28
1000 1111 1000 1111 8F 143
1111 1111 1111 1111 FF 255

十六進数だと各桁が4ビットに対応するので、非常に分かりやすいです。 ここでは、十進数と区別するために十六進数には0xまたは0Xをつけることにします。

文字列の話に戻します。 コンピュータでは文字そのものの形でメモリに入れることはできないので、文字に対応する数字を考えることになりました。 この数字をコードまたは文字コードといいます。 ASCIIという文字コードの規格では、アルファベットの文字aが十六進数の0x61になります。 大文字のAは0x41です。 ASCIIでは、日本語の文字は表せません。 PythonではUTF-8という文字コードを事実上デフォルトとして使っており、これで日本語を表すことができます。 また、UTF-8はASCIIのコードと互換性があります。

このようにコードを用いて文字をメモリに埋め込みます。 例えば"abc"は、メモリに0x61, 0x62, 0x63と埋め込み、全部で3バイト(24ビット)使います。 Pythonのprint文で"Hello world."を表示するとき、コンピュータ内部では十六進数のコードになっているものを、フォントを使って画面に表示します。 ですから、コードから画面上の文字に直すプログラムが背後で働いているのです。 このように、文字列に対する処理はかなり複雑なことをしているわけです。

文字としての数字もコードになります。 例えば文字としての0(ゼロ)のコードは0x30です。 1から9までは、順に0x31から0x39になります。 これに対して、コンピュータ内部で計算をするときには、数字をそのままビットにします。 例えば十進数の10は十六進ではA、二進では1010です。 メモリには0000 1010という形で納められます。 このように文字列の10は0x31, 0x30で、ビットでは0011 0001 0011 0000と2バイトですが、計算のための数値は0000 1010と全く異なります。 Pythonのプログラム上では文字列の10は"10"とダブルクォートで囲み、数値としての10はそのまま10と書きます。 この違いを明確に区別することは大事です。

さて、Pythonのプログラム上で文字列を表したものを文字列リテラルといいます。 文字列リテラルは、ダブルクォートで囲みます。

"Hello world."

これは12文字の文字列です。 メモリーには12バイトに各文字のコードが格納されます。 文字列はシングルクォートで囲むこともできます。

'Hello world.'

両者は基本的に同じですが、

  • ダブルクォートで囲まれた文字列内に「ダブルクォートという文字」をそのまま入れることはできない。なぜならダブルクォートは文字列の最後を表すからです。このときは、シングルクォートで文字列を囲めばダブルクォートを含めることができます。
  • 逆に、シングルクォートで囲まれた文字列内に「シングルクォートという文字」をそのまま入れることはできません。ダブルクォートで囲みましょう。