2013-04-29 36 views
-1

我寫的所有的Python中的數學函數,但是當用戶我的Python 3.x程序有什麼問題?

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)) 
+1

請格式化您的代碼並澄清您的問題。 – tyteen4a03 2013-04-29 18:32:33

+0

我們在這裏有點困惑;你能告訴我們你如何執行腳本嗎?你打算使用Python 2.x或3.x? – 2013-04-29 18:50:20

+0

@Fred:這個問題從一開始就被標記爲「python-3.x」。 – martineau 2013-04-29 20:21:18

回答

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 
+4

等待,如果他在Python 3.x中,則整個答案是錯誤,因爲'input'將返回一個字符串,而不是一個int。如果他在2.x中,實際的問題是......他正在編寫3.x代碼並在2.x中運行它。 – abarnert 2013-04-29 18:41:00

+0

哦,哎呀,他是在python 3.x所以輸入== raw_input(2.x),他也得到一個字符串在3倍:/ – 2013-04-29 18:41:18

+0

@abarnert - 你是對的!考慮刪除這個答案。我會再等一等,看看OP的其他信息是否顯示出來 – 2013-04-29 18:46:10

4

當我運行你的代碼時,它工作得很好,當然除了它通過所有7種可能性,而不僅僅是你選擇的。 (請注意,如果您使用Python 2.x解釋器而不是3.x來運行此代碼,它將顯示工作,但從不執行任何操作。這是因爲在2.x中,input將評估其輸入,因此choice將是,例如,int 3,而不是字符串"3"。但是,如果您按照預期使用Python 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 style強烈反對在函數調用的括號之前放置空格。

接下來,你可以使用math.pi獲得pi向右精度爲您的Python構建的float類型,而不必輸入自己逼近,並在精密猜測。

如果您將一串互斥的語句鏈接在一起,則使用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]() 
+0

[+1](http://stackoverflow.com/a/16285960/297323) – 2013-04-29 18:47:28