0

私はPythonを使い始めたばかりで、どこに問題があるのか​​ を学ぶのが得意ではありません. 私はゼロから作成しようとしているこの電卓コードを持っていますが、小さな問題に遭遇しました。

def Addition():
    print('Addition: What are your numbers?')
    a = int(input('First Number:'))
    b = int(input('Second Number:'))
    print('Your Answer is:', a + b)


def Subtraction():
    print('Subtraction: What are your numbers?')
    c = int(input('First Number:'))
    d = int(input('Second Number:'))
    print('Your Answer is:', c - d)


def Multiplication():
    print('Multiplication: What are your numbers?')
    e = int(input('First Number:'))
    f = int(input('Second Number:'))
    print('Your Answer is:', e * f)


def Division():
    print('Division: What are your numbers?')
    g = int(input('First Number:'))
    h = int(input('Second Number:'))
    print('Your Answer is:', g / h)

x = 'test'


def Question():
        x = input('What would you like to do? (Add, Subtract, Divide, Multiply or         Quit)')
        while x == 'Add' or 'add' or 'A' or 'a':
            x = 'test123'
            print(Addition())
            x = 'test'
        while x == 'Divide' or 'Div' or 'D' or 'divide' or 'div':
            x = 'test'
            print(Division())
            x = 'test'
        while x == 'Multiply' or 'Mul' or 'Mult' or 'multiply' or 'mult' or 'Times' or 'times':
            x = 'test'
            print(Multiplication())
            x = 'test'
        while x == 'Subtract' or 'Take Away' or 'Take away' or 'take Away' or 'take away':
            x = 'test'
            print(Subtraction())
            x = 'test'
        while x == 'Quit' or 'exit' or 'quit' or 'Exit':
            x = 'test'
            print(exit())
        while x == 'test':
            print(Question())


while x == 'test':
        print(Question())

コードを実行すると、入力に関係なく、質問をした後に実行したいのは Addition() であると判断されます。これは、最初に定義したためですか、それとも他の理由ですか? また、他の人のコードを使用したくありませんが、これを行う簡単な方法はありますか? どんな助けでも大歓迎です!

助けてくれてありがとう!

4

3 に答える 3

3

コードには複数の問題がありますが、Addition関数が常に実行される理由は、文字列の比較が思ったように機能しないためです。あなたが書くとき

while x == 'Add' or 'add' or 'A' or 'a':

これは次のように解釈されます

while (x == 'Add') or 'add' or 'A' or 'a':

したがって、x が 'Add' に等しいかどうか、または文字列リテラルのいずれかが 'True' に評価されるかどうかをチェックします。比較を記述するより良い方法は、in演算子を使用することです (そしてif、while ではなくステートメントを使用します)。

if x.lower() in ["add", "a"]:

Stringを呼び出すlowerと、すべて小文字に変換されるため、「add」と比較するだけで十分であり、大文字と小文字が異なるだけの他のスペルと比較する必要はありません。

もう 1 つ注意すべき点は、コードに大量の不要な繰り返しがあることです。コードを 4 回コピーペーストする代わりに、入力部分を別の関数にリファクタリングできます。

def getInput():
    a = int(input('First Number:'))
    b = int(input('Second Number:'))
    return a, b

次のように関数を記述できるようになりました。

def addition():
    print('Addition: What are your numbers?')
    a, b = getInput()
    print('Your Answer is:', a + b)

または、入力値に適用される引数として関数を取る一般化された評価関数を作成することで、これをさらに単純化できます。

def evaluate(name, function):
    print("%s: What are your numbers?" % name)
    a, b = getInput()
    print("Your Answer is:", function(a, b))

これにより、引数としてラムダを渡して、「評価」関数に関して加算、乗算などを定義できます。

evaluate("Addition", lambda x, y: x + y)
evaluate("Multiplication", lambda x, y: x * y)
evaluate("Two times a to the power of b", lambda x, y: 2 * (x ** y))
于 2013-04-23T11:16:13.703 に答える
3

問題は次の行です。

    while x == 'Add' or 'add' or 'A' or 'a':

おそらく次のようになります。

    if x in ['Add', 'add', 'A', 'a']:

そして、他の elif ステートメントを作成します。

于 2013-04-23T11:16:34.163 に答える
1

関数と関数のパラメーターについて読む必要があると思います。また、ループとその使用法も見てください。

これは、コードのリファクタリングされたバージョンです。完璧ではありませんが、どこに移動すればよいかがわかります。

def addition(a, b):
    return a + b


def subtraction(a, b):
    return a - b


def multiplication(a, b):
    return a * b


def division(a, b):
    if b != 0:
        return a / b
    else:
        print("Error: division by zero")


def question():
        x = input('What would you like to do? (Add, Subtract, Divide, Multiply or Quit)')
        while x != "Quit":
            a = int(input("Enter number a: "))
            b = int(input("Enter number b: "))

            if x == "Add":
                print(addition(a,b))
            elif x == "Subtract":
                print(subtraction(a,b))
            elif x == "Divide":
                print(division(a,b))
            elif x == "Multiply":
                print(multiplication(a,b))
            else:
                print("Wrong operation")

            x = input('What would you like to do? (Add, Subtract, Divide, Multiply or Quit)')

if __name__ == "__main__":
    question()

そして、実行後の使用方法は次のとおりです。

What would you like to do? (Add, Subtract, Divide, Multiply or Quit)"Add"
Enter number a: 4
Enter number b: 5
9
What would you like to do? (Add, Subtract, Divide, Multiply or Quit)"Subtract"
Enter number a: 6
Enter number b: 3
3
What would you like to do? (Add, Subtract, Divide, Multiply or Quit)"Quit"
于 2013-04-23T11:27:48.823 に答える