-1

すべての数学関数を Python で記述しましたが、ユーザーからプロンプトが表示されたときに、プログラムを正しいオプションに移動させることができません。

print ("""Calculations Menu:
    1) Area (Square)
    2) Area (Rectangle)
    3) Area (Circle)
    4) Perimeter (Square)
    5) Perimeter (Rectangle)
    6) Perimeter (Circle)
    7) Exit
""")

choice = input("Input Menu Choice (1,2,3,4,5,6 or 7)?\n")

if choice == "1":
    print ("You have chosen Area (Square)")

    def area_square (width, height):
        return width * height

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    w = positive_input ("Width: ")
    h = positive_input ("Height: ")

    print ("Width = ", w, "Height = ", h, "So Area =", area_square(w, h))

if choice == "2":
    print ("You have chosen Area (Rectangle)")

    def area_rectangle (width, height):
        return width * height

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    w = positive_input ("Width: ")
    h = positive_input ("Height: ")

    print ("Width = ", w, "Height = ", h, "So Area =", area_rectangle(w, h))

if choice == "3":
    print ("You have chosen Area (Circle)")

    def area_circle (radius, pi):
        return radius**2 * pi

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    radius = positive_input ("radius: ")
    pi = 3.14159265

    print ("Radius = ", radius, "Pi = ", pi, "So Area =", area_circle(radius, pi))

if choice == "4":
    print ("You have chosen Perimeter (Square)")

    def perimeter_square (side, ):
        return side * 4

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    side = positive_input ("side: ")

    print ("side = ", "So Perimeter =", perimeter_square(side,))

if choice == "5":
    print ("You have chosen Perimeter (Rectangle)")

    def perimeter_rectangle (sideA, sideB,):
        return (sideA + sideB) * 2

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    sideA = positive_input ("Length: ")
    sideB = positive_input ("Width: ")

    print ("Length = ", sideA, "Width =  ", sideB, "So Perimeter =", perimeter_rectangle(sideA, sideB))

if choice == "6":
    print ("You have chosen Perimeter (Circle)")

    def perimeter_circle (diameter, pi):
        return diameter * pi

    def positive_input (prompt):
        number = float(input(prompt))
        while number <=0:
            print ("Must be a positive number.")
            number = float(input(prompt))
        return number

    diameter = positive_input ("Diameter: ")
    pi = 3.14159265

    print ("Diameter = ", diameter, "Pi =  ", pi, "So Perimeter =", perimeter_circle(diameter, pi))
4

2 に答える 2

4

コードを実行すると、問題なく動作しますが、もちろん、選択した 1 つだけではなく、7 つの可能性すべてを通過します。

(このコードを 3.x ではなく Python 2.x インタープリターで実行すると、動作しているように見えますが、何も実行されないことに注意してください。これは、2.x では がそのinput入力を評価するためです。 string の代わりにchoiceintを使用します。ただし、意図したとおりに Python 3 インタープリターで実行する場合、それは問題ではありません。)3"3"

これを行う理由は単なるインデントです。特定の選択に対してのみ実行されるはずのコードがありますが、正しいifブロックの下にインデントされていません。それを修正したら、すべて問題ありません。

まったく同じpositive_input関数を 6 回定義するのはばかげているので、その部分を一番上に移動しました。それ以外の場合、私が行った唯一の変更はインデントでした:

def positive_input (prompt):
    number = float(input(prompt))
    while number <=0:
        print ("Must be a positive number.")
        number = float(input(prompt))
    return number

print ("""Calculations Menu:
    1) Area (Square)
    2) Area (Rectangle)
    3) Area (Circle)
    4) Perimeter (Square)
    5) Perimeter (Rectangle)
    6) Perimeter (Circle)
    7) Exit
    """)

choice = input("Input Menu Choice (1,2,3,4,5,6 or 7)?\n")

if choice == "1":
    print ("You have chosen Area (Square)")

    def area_square (width, height):
        return width * height

    w = positive_input ("Width: ")
    h = positive_input ("Height: ")

    print ("Width = ", w, "Height = ", h, "So Area =", area_square(w, h))

if choice == "2":
    print ("You have chosen Area (Rectangle)")

    def area_rectangle (width, height):
        return width * height

    w = positive_input ("Width: ")
    h = positive_input ("Height: ")

    print ("Width = ", w, "Height = ", h, "So Area =", area_rectangle(w, h))

if choice == "3":
    print ("You have chosen Area (Circle)")

    def area_circle (radius, pi):
        return radius**2 * pi

    radius = positive_input ("radius: ")
    pi = 3.14159265

    print ("Radius = ", radius, "Pi = ", pi, "So Area =", area_circle(radius, pi))

if choice == "4":
    print ("You have chosen Perimeter (Square)")

    def perimeter_square (side, ):
        return side * 4

    side = positive_input ("side: ")

    print ("side = ", "So Perimeter =", perimeter_square(side,))

if choice == "5":
    print ("You have chosen Perimeter (Rectangle)")

    def perimeter_rectangle (sideA, sideB,):
        return (sideA + sideB) * 2

    sideA = positive_input ("Length: ")
    sideB = positive_input ("Width: ")

    print ("Length = ", sideA, "Width =  ", sideB, "So Perimeter =", perimeter_rectangle(sideA, sideB))

if choice == "6":
    print ("You have chosen Perimeter (Circle)")

    def perimeter_circle (diameter, pi):
        return diameter * pi

    diameter = positive_input ("Diameter: ")
    pi = 3.14159265

    print ("Diameter = ", diameter, "Pi =  ", pi, "So Perimeter =", perimeter_circle(diameter, pi))

私たちがそれに取り組んでいる間、私がおそらく加えるいくつかの他の変更 (ほとんどはマイナー):

まず、Python スタイルでは、関数呼び出しの括弧の前にスペースを入れることは強く推奨されていません。

次に、 を使用して、独自の概算を入力して精度を推測する代わりに、Python ビルドの型に適した精度math.piを得ることができます。pifloat

相互に排他的なifステートメントを連鎖させている場合、使用elifすると、それらが相互に排他的であることを読者に明確に示します。

さらに進んで各選択肢を関数に移動することを検討したい場合があるため、次のようにするだけです。

if choice == "1":
    do_area_square()
elif choice == "2":
    do_area_rectangle()
# ...

… あるいは:

functions = {"1": do_area_square, "2": do_area_rectangle, # ...
functions[choice]()

… また:

functions = [do_area_square, do_area_rectangle, ...]
functions[int(choice)-1]()
于 2013-04-29T18:45:52.230 に答える
1

おそらく、これはあなたの問題に光を当てるでしょう:

In [6]: choice = input("Input Menu Choice (1,2,3,4,5,6 or 7)?\n")
Input Menu Choice (1,2,3,4,5,6 or 7)?
1

In [7]: type(choice)
Out[7]: int

In [9]: choice == "1"
Out[9]: False

In [10]: choice == 1
Out[10]: True
于 2013-04-29T18:38:35.183 に答える