Python3で電卓プログラムを作成する方法

提供:Dev Guides
移動先:案内検索

序章

Pythonプログラミング言語は、数値を操作したり数式を評価したりするときに使用する優れたツールです。 この品質は、有用なプログラムを作成するために利用できます。

このチュートリアルでは、Python3でコマンドライン計算プログラムを作成する方法の概要を説明する学習演習を紹介します。 この計算機は基本的な計算しか実行できませんが、このガイドの最後のステップは、コードを改善してより堅牢な計算機を作成する方法の開始点として機能します。

数学演算子変数条件文関数を使用し、ユーザー入力を処理して電卓を作成します。

前提条件

このチュートリアルでは、Python 3をローカルコンピューターにインストールし、プログラミング環境をマシンにセットアップする必要があります。 Pythonをインストールしたり、環境をセットアップしたりする必要がある場合は、オペレーティングシステムに適したガイドに従ってください。

ステップ1—ユーザーに入力を促す

電卓は、人間がコンピューターに解く方程式を提供するときに最もよく機能します。 人間がコンピューターで使用したい番号を入力した時点から、プログラムの作成を開始します。

まず、プログラム用のファイルを作成します。 この例では、テキストエディタnanoを使用して、ファイルにcalculator.pyという名前を付けます。

nano calculator.py

次に、このファイルにコンテンツを追加してプログラムを実行します。 このプログラムでは、ユーザーに2つの数字を入力させるので、ユーザーに2つの数字の入力を求めるようにプログラムに指示します。 これを行うには、Pythonの組み込みinput()関数を使用して、キーボードからのユーザー生成入力を受け入れます。 input()関数の括弧内に、 string を渡してユーザーにプロンプトを表示し、ユーザーの入力を変数に割り当てることができます。 入力を要求するときは、文字列の最後にスペースを含めて、ユーザーの入力とプロンプト文字列の間にスペースを空けると便利な場合があることに注意してください。

電卓.py

number_1 = input('Enter your first number: ')
number_2 = input('Enter your second number: ')

2行を書き込んだ後、実行する前にプログラムを保存する必要があります。 nanoを使用している場合は、CTRL + XYENTERの順に押すと終了できます。

次のコマンドを使用してプログラムを実行します。

python calculator.py

これにより、プログラムのプロンプトが開始され、ターミナルウィンドウで応答できます。

OutputEnter your first number: 5
Enter your second number: 7

このプログラムを数回実行して入力を変えると、プロンプトが表示されたら、単語、記号、空白、Enterキーなど、好きなものを入力できることに気付くでしょう。 これは、input()文字列としてデータを取り込み、数値を探していることを認識していないためです。

このプログラムでは、次の2つの理由で数字を使用する必要があります。

  1. プログラムが数学計算を実行できるようにする
  2. ユーザーの入力が数値文字列であることを検証します

電卓のニーズに応じて、input()関数からの文字列を整数または浮動小数点数に変換することをお勧めします。 このチュートリアルでは、整数が目的に合っているため、input()関数をint()関数でラップして、入力を整数データ型変換します。 :

電卓.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

ここで、プログラムを実行して2つの整数を入力しても、エラーは発生しません。

OutputEnter your first number: 23
Enter your second number: 674

ただし、文字、記号、またはその他の非整数を入力すると、次のエラーが発生します。

OutputEnter your first number: sammy
Traceback (most recent call last):
  File "testing.py", line 1, in <module>
    number_1 = int(input('Enter your first number: '))
ValueError: invalid literal for int() with base 10: 'sammy'

これまで、整数データ型の形式でユーザー入力を格納するために2つの変数を設定しました。 入力をfloatに変換して実験することもできます。

ステップ2—演算子を追加する

プログラムが完了する前に、合計4つの数学演算子を追加します。加算には+、減算には-、乗算には*、除算は/

プログラムを作成するときは、各部分が正しく機能していることを確認する必要があるため、追加の設定から始めます。 電卓を使用している人が内容を確認できるように、印刷関数内に2つの数値を追加します。

電卓.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

print(number_1 + number_2)

プログラムを実行し、プロンプトが表示されたら2つの数字を入力して、期待どおりに機能していることを確認します。

OutputEnter your first number: 8
Enter your second number: 3
11

出力は、プログラムが正しく機能していることを示しています。 ここで、プログラムの実行時にユーザーに完全に通知するためのコンテキストを追加します。 これを行うには、文字列フォーマッターを使用して、テキストを適切にフォーマットし、フィードバックを提供します。 入力している数値と、生成された結果と一緒に使用されている演算子についての確認をユーザーが受け取るようにします。

電卓.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

これで、プログラムを実行すると、プログラムによって実行されている数式をユーザーが確認できるようにする追加の出力が得られます。

OutputEnter your first number: 90
Enter your second number: 717
90 + 717 = 
807

文字列フォーマッタを使用すると、ユーザーはより多くのフィードバックを得ることができます。

この時点で、追加に使用したのと同じ形式で残りの演算子をプログラムに追加できます。

電卓.py

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

# Addition
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

# Subtraction
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)

# Multiplication
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)

# Division
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

ここでは、残りの演算子-*、および/を上記のプログラムに追加しています。 この時点でプログラムを実行すると、プログラムは上記のすべての操作を実行します。 ただし、一度に1つの操作を実行するようにプログラムを制限する必要があります。 これを行うには、条件付きステートメントを使用します。

ステップ3—条件文を追加する

calculator.pyプログラムの目的は、ユーザーがさまざまなオペレーターから選択できるようにすることです。 プログラムの上部にいくつかの情報を追加し、選択内容を追加して、その人が何をすべきかを理解できるようにすることから始めます。

三重引用符を使用して、いくつかの異なる行に文字列を記述します。

'''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
'''

このプログラムは、ユーザーが選択するために各演算子記号を使用するため、ユーザーが除算を実行したい場合は、/と入力します。 ただし、1 for additionb for subtractionなど、任意の記号を選択できます。

ユーザーに入力を求めているので、input()関数を使用します。 文字列をinput()関数内に配置し、その入力の値をoperationという名前の変数に渡します。

電卓.py

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)

print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)

print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

この時点で、プログラムを実行すると、最初のプロンプトで何を入力しても、何も起こりません。 これを修正するには、プログラムにいくつかの条件ステートメントを追加します。 プログラムの構成方法により、ifステートメントは加算が実行される場所になり、他の各演算子には3つのelse-ifまたはelifステートメントがあり、[ X202X] ステートメントは、ユーザーが演算子記号を入力しなかった場合のエラーを処理するために配置されます。

電卓.py

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

if operation == '+':
    print('{} + {} = '.format(number_1, number_2))
    print(number_1 + number_2)

elif operation == '-':
    print('{} - {} = '.format(number_1, number_2))
    print(number_1 - number_2)

elif operation == '*':
    print('{} * {} = '.format(number_1, number_2))
    print(number_1 * number_2)

elif operation == '/':
    print('{} / {} = '.format(number_1, number_2))
    print(number_1 / number_2)

else:
    print('You have not typed a valid operator, please run the program again.')

このプログラムをウォークスルーするには、最初にユーザーに操作記号を入力するように求めます。 たとえば、ユーザーが*を入力して乗算するとします。 次に、プログラムは2つの数値を要求し、ユーザーは5840を入力します。 この時点で、プログラムは実行された方程式と積を表示します。

OutputPlease type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
* 
Please enter the first number: 58
Please enter the second number: 40
58 * 40 = 
2320

プログラムの構成により、ユーザーが最初のプロンプトで操作を求められたときに%と入力すると、数字を入力するまで再試行するためのフィードバックを受け取りません。 さまざまな状況を処理するための他の可能なオプションを検討することをお勧めします。

この時点で、完全に機能するプログラムがありますが、プログラムを再度実行せずに2番目または3番目の操作を実行することはできません。 次のステップでは、この機能をプログラムに追加するためのいくつかの機能を定義します。

ステップ4—関数を定義する

ユーザーが望む回数だけプログラムを実行する機能を処理するために、いくつかの関数を定義します。 まず、既存のコードブロックを関数に入れます。 関数にcalculate()という名前を付け、関数自体の中にインデントのレイヤーを追加します。 プログラムを確実に実行するには、ファイルの下部にある関数も呼び出します。

電卓.py

# Define our function
def calculate():
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

    number_1 = int(input('Please enter the first number: '))
    number_2 = int(input('Please enter the second number: '))

    if operation == '+':
        print('{} + {} = '.format(number_1, number_2))
        print(number_1 + number_2)

    elif operation == '-':
        print('{} - {} = '.format(number_1, number_2))
        print(number_1 - number_2)

    elif operation == '*':
        print('{} * {} = '.format(number_1, number_2))
        print(number_1 * number_2)

    elif operation == '/':
        print('{} / {} = '.format(number_1, number_2))
        print(number_1 / number_2)

    else:
        print('You have not typed a valid operator, please run the program again.')

# Call calculate() outside of the function
calculate()

次に、より多くの条件ステートメントで構成される2番目の関数を作成します。 このコードブロックでは、ユーザーが再度計算するかどうかを選択できるようにします。 これは電卓の条件文に基づいて行うことができますが、この場合、エラーを処理するためのifelif、およびelseは1つだけです。

この関数にagain()という名前を付け、def calculate():コードブロックの後に追加します。

電卓.py

... 
# Define again() function to ask user if they want to use the calculator again
def again():

    # Take input from user
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    # If user types Y, run the calculate() function
    if calc_again == 'Y':
        calculate()

    # If user types N, say good-bye to the user and end the program
    elif calc_again == 'N':
        print('See you later.')

    # If user types another key, run the function again
    else:
        again()

# Call calculate() outside of the function
calculate()

上記のelseステートメントにはエラー処理がいくつかありますが、たとえば、大文字のYおよびN。 これを行うには、文字列関数str.upper()を追加します。

電卓.py

...
def again():
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    # Accept 'y' or 'Y' by adding str.upper()
    if calc_again.upper() == 'Y':
        calculate()

    # Accept 'n' or 'N' by adding str.upper()
    elif calc_again.upper() == 'N':
        print('See you later.')

    else:
        again()
...

この時点で、again()関数をcalculate()関数の最後に追加して、ユーザーに続行するかどうかを尋ねるコードをトリガーする必要があります。

電卓.py

def calculate():
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')

    number_1 = int(input('Please enter the first number: '))
    number_2 = int(input('Please enter the second number: '))

    if operation == '+':
        print('{} + {} = '.format(number_1, number_2))
        print(number_1 + number_2)

    elif operation == '-':
        print('{} - {} = '.format(number_1, number_2))
        print(number_1 - number_2)

    elif operation == '*':
        print('{} * {} = '.format(number_1, number_2))
        print(number_1 * number_2)

    elif operation == '/':
        print('{} / {} = '.format(number_1, number_2))
        print(number_1 / number_2)

    else:
        print('You have not typed a valid operator, please run the program again.')

    # Add again() function to calculate() function
    again()

def again():
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    if calc_again.upper() == 'Y':
        calculate()
    elif calc_again.upper() == 'N':
        print('See you later.')
    else:
        again()

calculate()

これで、ターミナルウィンドウでpython calculator.pyを使用してプログラムを実行でき、何度でも計算できるようになります。

ステップ5—コードの改善

これで、完全に機能する優れたプログラムができました。 ただし、このコードを改善するためにできることは他にもたくさんあります。 たとえば、次のように、プログラムのコードの先頭に、プログラムにユーザーを歓迎するウェルカム関数を追加できます。

def welcome():
    print('''
Welcome to Calculator
''')
...
# Don’t forget to call the function
welcome()
calculate()

プログラム全体でより多くのエラー処理を導入する機会があります。 手始めに、ユーザーが番号を求められたときにplanktonと入力しても、プログラムが引き続き実行されるようにすることができます。 プログラムは現在のところ、number_1number_2が整数でない場合、ユーザーはエラーを受け取り、プログラムの実行を停止します。 また、ユーザーが除算演算子(/)を選択し、2番目の数値(number_2)に0と入力した場合、ユーザーは[を受け取ります。 X160X]エラー。 このために、try ... exceptステートメントで例外処理を使用することをお勧めします。

この演習では、演算子を4つに制限しましたが、次のように演算子を追加できます。

...
    operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
** for power
% for modulo
''')
...
# Don’t forget to add more conditional statements to solve for power and modulo

さらに、ループステートメントを使用してプログラムの一部を書き直したい場合があります。

エラーを処理し、すべてのコーディングプロジェクトを変更および改善する方法はたくさんあります。 提示された問題を解決するための単一の正しい方法はないことを覚えておくことが重要です。

結論

このチュートリアルでは、コマンドラインで電卓を作成するための1つの可能なアプローチについて説明しました。 このチュートリアルを完了すると、コードを変更および改善し、コマンドラインでのユーザー入力を必要とする他のプロジェクトで作業できるようになります。

この基本的なコマンドライン計算機プロジェクトのソリューションに興味があります。 コメント欄に電卓プロジェクトを投稿してください。

次に、三目並べやじゃんけんのようなテキストベースのゲームを作成することをお勧めします。