2012-11-01 22 views
0

我正在編寫一個程序,可以讓你鍵入三角形的三個角或兩側,它告訴它是否等邊,等腰等我不擔心現在休息,但我卡在它的等邊部分。這裏是我的代碼:我正在做一個三角形班級查找器,我卡住了

def idtri(): 
    print("\nDo you have all three sides, or al three angles?") 
    print("(1) Sides") 
    print("(2) Angles") 
    choice = input() 
    if choice == 1: 
     print("\nType in the lengths of all of the sides.") 
     t1 = input("1: ") 
     t2 = input("2: ") 
     t3 = input("3: ") 
     print("Your triangle is an equalateral triangle.") 
     menu() 
    elif choice == 2: 
     pass 

idtri() 
+1

我會想你如何定義每個三角形。如果你有全部三面,那麼所有三面都相等意味着等邊,兩個等腰等。你已經使用了==和'if',那麼如何編寫一個包含這些函數以返回三角形類型的函數呢? – RocketDonkey

+0

那麼,我有點新的python,所以我不能想到任何。我試圖做,如果t1,t2,t3 == t2,t3,t1:然後做所有的休息,但沒有奏效。 –

+0

你非常接近:)所以關注等邊,你在測試它們是否相等。如果你比較兩個元素,它是't1 == t2'。遵循這個邏輯,你可以檢查三個元素是否相等的一種方法? – RocketDonkey

回答

1

要注意的第一件事是,用於識別三角形斜角肌,isoceles,或等邊,這不要緊,你有三個值是否是角度或邊長,過程如下:

如果所有三個值都相同,則三角形是等邊的;否則,如果有任何兩個值相同,則三角形是等邊的;否則,三角形是斜角。

所以,你可以寫一個簡單的函數返回基於提供相等值的數目類型:

id_triangle = lambda a, b, c: {0: 'scalene', 1: 'isoceles', 3: 'equilateral'}\ 
           [(a == b) + (a == c) + (b == c)] 

,然後調用從交互式腳本,如:

print('Your triangle is %s.' % id_triangle(t1, t2, t3)) 
+1

我剛剛開始大約一週前的python,那麼lambda,然後[(a == b)+(a == c)+(b == c)]部分是什麼意思? –

+0

Python中的lambda(大致)只是一種定義簡單單線程函數的方法,無需爲其命名。在這種情況下,您可以等效地執行'def id_triangle(a,b,c):',然後'返回冒號後面的部分。 '(a == b)+(a == c)+(b == c)'是將每個成對比較值(即等邊數/角度數)的布爾值相加, 0,1或3,'[]'使用該結果索引字典中的一個字符串(即適當的三角形類型名稱)。 – ezod

+0

-1用於爲三個bools總和的字典下標。這太可怕了(特別是當它在下一行時)。如果我不知道這些代碼是幹什麼的,我可以盯着它20分鐘。改爲使用if/elif/else塊。 –