用Python實作“已知三角形兩個直角邊,求斜邊”
要求:使用者輸入兩個直角邊(數值為浮點類型),若非浮點類型,則提示使用者,繼續輸入。
思路:僞代碼描述下步驟
1、-input a value for the base as a float(輸入某浮點數作為底邊值)
2、-input a value for the height as a float(輸入某浮點數作為高的值)
3、-square root--b squared plus h squared(求平方和和開根号)
4、-save that as a float in hype,for hypotenuse(把結果存為hyp,表示斜邊)
5、-print something out,using the value in hyp.(列印出結果)
分析以上思路(僞代碼),可以得出:
0、使用者的輸入結果是各種情況,要小心使用者的輸入
1、代碼的抽象化(開方的計算用math子產品的sqrt内置函數)
2、流程控制
代碼一:
#! /usr/bin/env python
# encoding:utf-8
import math
# 取底
inputOK = False
while not inputOK:
base = input('輸入底:')
if type(base) == type(1.0):
inputOK = True
else:
print('錯誤,底必須為浮點數')
# 取高
inputOK = False
while not inputOK:
height = input('輸入高:')
if type(height) == type(1.0):
inputOK = True
else:
print('錯誤,高必須為浮點數')
#斜邊
hyp = math.sqrt(base*base + height*height)
print '底' + str(base) + ',高' + str(height) + ',斜邊' + str(hyp)
分析代碼一,會發現取底,取高的代碼非常相似,這就會讓人想到抽象成方法,實作子產品化。
是以,就有了代碼二:
#!/usr/bin/env python
#coding:utf-8
import math
"""
使用者輸入兩個直角邊(數值為浮點類型),若非浮點類型,則提示使用者,繼續輸入。
"""
def getFloat(requestMsg, errorMsg):
inputOK = False
while not inputOK:
val = input(requestMsg)
if type(val) == type(1.0):
inputOK = True
else:
print(errorMsg)
return val
base = getFloat('輸入底:','錯誤,底必須為浮點數')
height = getFloat('輸入高:','錯誤,高必須為浮點數')
hyp = math.sqrt(base*base + height*height)
print '底' + str(base) + ',高' + str(height) + ',斜邊' + str(hyp)
本文有@易枭寒([email protected])根據MIT公開課整理。轉載請注明出處和作者資訊。