我們被要求創建一個名為溫度轉換的函式,它接受一個稱為溫度的整數引數、一個稱為輸入單元的輔助字串引數和一個稱為輸出單元的第三個字串引數。輸入單位指定溫度值的單位。此函式應將溫度值轉換并回傳目標單位中指定的單位。兩個單位引數都應為“C”、“K”或“F”之一。
我想出了一堆if陳述句并且它有效,但我無法創建有效的函式。
input_unit, target_unit = input("Input the temperature and the unit to convert it to: [e.g. 45c f > valid Units: C,K,F: ").split()
degree = int(input_unit[:-1])
i_unit = input_unit[-1].upper()
o_unit = target_unit.upper()
if i_unit == "C" and o_unit == "F":
result = int((1.8 * degree) 32)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "C" and o_unit == "K":
result = int(degree 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "F" and o_unit == "K":
result = int(((degree * 1.8) 32) 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "F" and o_unit == "C":
result = int((degree - 32) / 1.8)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "K" and o_unit == "C":
result = int(degree - 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "K" and o_unit == "F":
result = int(((degree - 273.15) - 32) / 1.8)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
else:
while True:
input_unit, target_unit = input("Input the temperature and the unit to convert it to?: ").split()
if input_unit[-1].upper() != "C" or target_unit.upper() != "F":
print("You enterd an invalid unit. Please enter again: ")
uj5u.com熱心網友回復:
在這里,我建議您分幾個步驟分解程式,首先詢問溫度,然后使用函式進行轉換,然后顯示結果。
def temperatureConversions(degree, i_unit, o_unit):
if i_unit == "C" and o_unit == "F":
return int((1.8 * degree) 32)
elif i_unit == "C" and o_unit == "K":
return int(degree 273.15)
elif i_unit == "F" and o_unit == "K":
return int(((degree * 1.8) 32) 273.15)
elif i_unit == "F" and o_unit == "C":
return int((degree - 32) / 1.8)
elif i_unit == "K" and o_unit == "C":
return int(degree - 273.15)
elif i_unit == "K" and o_unit == "F":
return int(((degree - 273.15) - 32) / 1.8)
valueCorrect = False
while(not valueCorrect):
degree = input("Please enter a temperature (ex: 47C):\n")
o_unit = input("Please enter the output unit desired(ex: C, F, K):")
if(degree[:-1].isdigit()):
i_unit, degree = degree[-1], int(degree[:-1])
if(i_unit and o_unit in ['C', 'F', 'K']):
valueCorrect = True
else:
print("Please write correct values of unit !")
else:
print("Please write correct values of temperature !")
resultConversion = temperatureConversions(degree, i_unit, o_unit)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,resultConversion,o_unit))
向我確認它對你有用。
uj5u.com熱心網友回復:
你可以使用這個功能
def convert(degree, i_unit, o_unit):
if i_unit == "C" and o_unit == "F":
result = int((1.8 * degree) 32)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "C" and o_unit == "K":
result = int(degree 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "F" and o_unit == "K":
result = int(((degree * 1.8) 32) 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "F" and o_unit == "C":
result = int((degree - 32) / 1.8)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "K" and o_unit == "C":
result = int(degree - 273.15)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
elif i_unit == "K" and o_unit == "F":
result = int(((degree - 273.15) - 32) / 1.8)
print("{:0.2f}°{} ? {:0.2f}°{}".format(degree,i_unit,result,o_unit))
else:
while True:
input_unit, target_unit = input("Input the temperature and the unit to convert it to?: ").split()
if input_unit[-1].upper() != "C" or target_unit.upper() != "F":
print("You enterd an invalid unit. Please enter again: ")
uj5u.com熱心網友回復:
一種更簡單的方法是將輸入轉換為規范單位(例如,K),然后相應地轉換為所需的輸出單位。
def c_to_k(degrees: float) -> float:
return degrees 273.15
def k_to_c(degrees: float) -> float:
return degrees - 273.15
def f_to_k(degrees: float) -> float:
return degrees * 1.8 32 273.15
def k_to_f(degrees: float) -> float:
return (degrees - 273.15 - 32) / 1.8
iconv = {
"c": c_to_k,
"f": f_to_k
}
oconv = {
"c": k_to_c,
"f": k_to_f
}
def temperature_conversion(
temperature: float,
input_unit: str,
output_unit: str):
input_unit = input_unit.lower()
if input_unit != "k":
temperature = iconv[input_unit](temperature)
output_unit = output_unit.lower()
if output_unit != "k":
temperature = oconv[output_unit](temperature)
return temperature
簡而言之,iconv和oconv字典將您的if陳述句替換為簡單的字典查找,該查找回傳要呼叫的函式物件以執行規范轉換。
根據您的受眾,您可能希望添加錯誤檢查以引發比KeyError傳入無效單元時更詳細的例外。
如果這看起來太復雜了,一個更簡單的實作可能會避免字典查找,而只需使用if陳述句首先將輸入轉換為規范單位,然后再從該單位轉換為所需的輸出單位。在這種情況下,可以通過將規范單位更改為 C 來簡化代碼,但是:
if input_unit == "f":
temperature = (temperature - 32) / 1.8
elif input_unit == "k":
temperature -= 273.15
if output_unit == "k":
temperature = 273.15
elif output_unit == "f":
temperature = temperature * 1.8 32
如果您需要高精度的結果,您可能希望避免通過兩次單獨的計算來進行單位之間的轉換,因為浮點錯誤會加重并降低結果的準確性。在這種情況下,您的原始代碼的復雜性基本上無法避免。(也許另請參見 浮點數學是否損壞?將華氏轉換為華氏有點可能不會準確回傳輸入數字!)但是您的代碼將 s 強制float為ints顯然不必要地損失了更多的精度。
請注意函式本身沒有print任何作用,它只是回傳一個數字。一種常見的設計是將可重用功能與用戶界面設計分開,因此向用戶顯示結果(或做任何你想做的事情)的責任落在呼叫者身上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/474873.html
