最初のプログラム

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このセクションでは、最初のプログラムの作成、インタプリタの実行、および基本的なデバッグについて説明します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/BasicConceptsGroup -.-> python/comments("Comments") python/BasicConceptsGroup -.-> python/python_shell("Python Shell") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ControlFlowGroup -.-> python/while_loops("While Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") subgraph Lab Skills python/comments -.-> lab-132701{{"最初のプログラム"}} python/python_shell -.-> lab-132701{{"最初のプログラム"}} python/conditional_statements -.-> lab-132701{{"最初のプログラム"}} python/for_loops -.-> lab-132701{{"最初のプログラム"}} python/while_loops -.-> lab-132701{{"最初のプログラム"}} python/lists -.-> lab-132701{{"最初のプログラム"}} python/tuples -.-> lab-132701{{"最初のプログラム"}} python/build_in_functions -.-> lab-132701{{"最初のプログラム"}} python/standard_libraries -.-> lab-132701{{"最初のプログラム"}} end

Python の実行

Python プログラムは常にインタプリタ内で実行されます。

インタプリタは、通常、コマンド シェルから実行される「コンソール ベース」のアプリケーションです。

python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

熟練したプログラマは、通常、このようにインタプリタを使用する問題はありませんが、初心者にとってはそれほど使いやすくありません。あなたは、Python に対して異なるインターフェイスを提供する環境を使用しているかもしれません。それは大丈夫ですが、Python ターミナルをどのように実行するかを学ぶことは、依然として知っておくのに役立つスキルです。

対話型モード

Python を起動すると、実験できる「対話型」モードが得られます。

文を入力し始めると、それらが直ちに実行されます。編集/コンパイル/実行/デバッグのサイクルはありません。

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

このいわゆる「読み込み−評価−表示ループ」(または REPL)は、デバッグと探索に非常に役立ちます。

停止:Python と対話する方法がわからない場合は、今やっていることをやめて、その方法を理解するようにしてください。IDE を使用している場合、それはメニュー オプションや他のウィンドウの後ろに隠されている場合があります。このコースの多くの部分は、インタプリタと対話できることを前提としています。

REPL の要素をもう少し詳しく見てみましょう。

  • >>> は、新しい文を開始するためのインタプリタのプロンプトです。
  • ... は、文を続けるためのインタプリタのプロンプトです。入力を終了して、入力した内容を実行するには、空行を入力します。

... プロンプトは、環境によって表示される場合もあれば表示されない場合もあります。このコースでは、コード サンプルをコピー/貼り付けしやすくするために、空白として表示されます。

アンダースコア _ には、最後の結果が格納されます。

>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>

これは対話型モードでのみ当てはまります。 プログラムでは決して _ を使用しません。

プログラムの作成

プログラムは .py ファイルに格納されます。

## hello.py
print('hello world')

好きなテキスト エディタを使って、/home/labex/project ディレクトリに hello.py ファイルを作成することができます。

プログラムの実行

プログラムを実行するには、ターミナルで python コマンドを使って実行します。たとえば、コマンド ライン Unix では:

$ python hello.py
hello world
bash %

または Windows シェルから:

C:\SomeFolder>hello.py
hello world

C:\SomeFolder>c:\python36\python hello.py
hello world

注:Windows では、c:\python36\python のように Python インタプリタの完全パスを指定する必要がある場合があります。ただし、通常の方法で Python をインストールしている場合は、hello.py のようにプログラム名のみを入力することができるかもしれません。

サンプル プログラム

次の問題を解いてみましょう。

ある朝、あなたは外出して、シカゴのシアーズタワーの近くの歩道に1ドル札を置きます。その後、毎日、札の数を2倍にして外出します。札の山がタワーの高さを超えるまでにどれくらいの時間がかかりますか?

これは、/home/labex/project ディレクトリに sears.py ファイルを作成する解決策です。

## sears.py
bill_thickness = 0.11 * 0.001 ## Meters (0.11 mm)
sears_height = 442 ## Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

実行すると、次の出力が得られます。

$ python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
Number of days 23
Number of bills 4194304
Final height 461.37344

このプログラムを参考にして、Python に関する多くの重要なコア コンセプトを学ぶことができます。

Python プログラムは文のシーケンスです。

a = 3 + 4
b = a * 2
print(b)

各文は改行で終了します。文は、制御がファイルの末尾に到達するまで、1つの後に1つずつ実行されます。

コメント

コメントは実行されないテキストです。

a = 3 + 4
## これはコメントです
b = a * 2
print(b)

コメントは # で表され、行の終わりまで続きます。

変数

変数は値の名前です。a から z までの英字(大文字と小文字)を使うことができます。また、アンダースコア _ 文字も使えます。数字も変数名の一部となることができますが、最初の文字としては使えません。

height = 442 ## 有効
_height = 442 ## 有効
height2 = 442 ## 有効
2height = 442 ## 無効

変数には値の型を宣言する必要はありません。型は、右辺の値に関連付けられており、変数名には関連付けられていません。

height = 442           ## 整数
height = 442.0         ## 浮動小数点数
height = 'Really tall' ## 文字列

Python は動的型付け言語です。プログラムが実行されるにつれて、変数に割り当てられる現在の値に応じて、変数の見かけ上の「型」が変化する場合があります。

大文字小文字の区別

Python は大文字小文字を区別します。大文字と小文字は異なる文字として扱われます。これらはすべて異なる変数です。

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

言語の文は常に小文字です。

while x < 0:   ## 正しい
WHILE x < 0:   ## エラー

ループ

while 文はループを実行します。

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

while の下にインデントされた文は、while の後の式が true の間実行されます。

インデント

インデントは、一緒になる文のグループを表すために使用されます。前の例を見てみましょう。

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

インデントにより、次の文が反復する操作としてグループ化されます。

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

最後の print() 文はインデントされていないため、ループに属しません。空行は読みやすさのためだけのもので、実行には影響しません。

インデントのベストプラクティス

  • タブではなく半角スペースを使用します。
  • 1段階あたり4つの半角スペースを使用します。
  • Pythonに対応したエディタを使用します。

Pythonの唯一の要件は、同じブロック内のインデントが一貫していることです。たとえば、これはエラーです。

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
        day = day + 1 ## エラー
    num_bills = num_bills * 2

条件分岐

if 文は条件分岐を実行するために使用されます。

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

elif を使って追加のチェックを行うことで、複数の条件をチェックすることができます。

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

出力

print 関数は、渡された値とともに1行の文字列を生成します。

print('Hello world!') ## 文字列'Hello world!' を出力します

変数を使用することができます。出力される文字列は、変数の値であり、名前ではありません。

x = 100
print(x) ## 文字列'100' を出力します

print に複数の値を渡す場合、それらはスペースで区切られます。

name = 'Jake'
print('My name is', name) ## 文字列'My name is Jake' を出力します

print() は常に末尾に改行を挿入します。

print('Hello')
print('My name is', 'Jake')

これは以下のように出力されます。

Hello
My name is Jake

余分な改行を抑制することができます。

print('Hello', end=' ')
print('My name is', 'Jake')

このコードは以下のように出力されます。

Hello My name is Jake

ユーザ入力

ユーザが入力した1行の文字列を読み取るには、input() 関数を使用します。

name = input('Enter your name:')
print('Your name is', name)

input はユーザにプロンプトを表示し、その応答を返します。これは、小規模なプログラム、学習用の演習、または単純なデバッグに便利です。実際のプログラムでは広く使用されていません。

pass文

時々、空のコードブロックを指定する必要があります。そのためにはキーワード pass を使用します。

if a > b:
    pass
else:
    print('Computer says false')

これは「ダミー文」とも呼ばれます。何もしません。後で追加する可能性のある文のための置き換え要素として機能します。

これが最初のセットの演習です。ここから先は、Pythonファイルを作成して実行する必要があります。この時点以降、~/project/ ディレクトリ内のファイルを編集しているものと仮定します。適切な場所を見つけるのを助けるために、適切なファイル名でいくつかの空のスターターファイルが作成されています。最初の演習で使用される bounce.py ファイルを探してください。

演習1.5:跳ねるボール

ゴムのボールを100メートルの高さから落とし、地面に当たるたびに落下した高さの3/5まで跳ね返ります。最初の10回の跳ねの高さを表示するテーブルを出力する bounce.py というプログラムを作成してください。

以下は解決策です。

## bounce.py

height = 100
bounce = 1
while bounce <= 10:
    height = height * (3 / 5)
    print(bounce, round(height, 4))
    bounce += 1

あなたのプログラムはこのようなテーブルを作成する必要があります。

1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998

注:round() 関数を使用すると、出力を少しきれいにすることができます。出力を4桁に丸めるように試してみてください。

1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047

演習1.6:デバッグ

次のコードフラグメントには、シアーズタワーの問題のコードが含まれています。また、その中にはバグもあります。

## sears.py

bill_thickness = 0.11 * 0.001    ## メートル (0.11 mm)
sears_height   = 442             ## 高さ (メートル)
num_bills      = 1
day            = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = days + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

上記のコードを、sears.py という新しいプログラムにコピーして貼り付けてください。コードを実行すると、次のようにエラーメッセージが表示され、プログラムがクラッシュします。

Traceback (most recent call last):
  File "sears.py", line 10, in <module>
    day = days + 1
NameError: name 'days' is not defined

エラーメッセージの読み取りは、Pythonコードの重要な部分です。プログラムがクラッシュした場合、トレースバックメッセージの最後の行が、プログラムがクラッシュした実際の理由です。その上には、ソースコードの断片と、識別用のファイル名と行番号が表示されます。

  • エラーのある行はどれですか?
  • エラー内容は何ですか?
  • エラーを修正してください。
  • プログラムを正常に実行してください。

まとめ

おめでとうございます!あなたは「最初のプログラム」の実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を練習することができます。