2017-02-17 98 views
0

我想創建一個簡單的緯度/經度轉換器(從度/分/秒到十進制度),但我有一個問題,如何函數請求和處理用戶輸入,即關於緯度(N/S)或經度(E/W)的基本方向。我希望函數能夠接受N/S/E/W的用戶輸入並應用條件語句以確保轉換輸出爲正(N或E)或負(S或W)。如何定義一個函數,以在Python中輸入一個字符串3

我試圖讓用戶界面儘可能地方便用戶,這樣外行人不必輸入帶引號的字符串。

這是迄今爲止代碼:

def coord_convert (card,deg,mins,sec): 
    if card == 'S' or card == 's' or card == 'W' or card == 'w': 
     deg=-deg 
     mins=-mins 
     sec=-sec 
    mins_decimal = mins + (float(sec)/60) 
    deg_decimal = deg + (mins_decimal/60) 
    return deg_decimal 

如果用戶調用函數coord_convert(W,30,30,0)這將產生一個錯誤,而coord_convert('W',30,30,0)返回正確-30.5。有沒有什麼辦法可以使這個用戶友好,使card輸入作爲字符串被正確讀入?

順便說一下,這個函數從Python 2.7轉換爲Python 3.6,所以任何其他錯誤或指針(特別是處理整數和浮點處理)將不勝感激。

+0

除非W由他們將不得不周圍添加W.引號當你用字母W蟒用戶定義正在尋找一個名爲W¯¯變量的該值傳遞到您的功能。 TL; DR你將需要報價。 – Blakethepatton

+0

任何有Python經驗的人都會使用引號來傳遞字符串輸入。按照你的建議,你會製造更多的混亂。 –

+0

這是關於解釋來自用戶的輸入,對吧?行情不應該是必要的輸入。澄清: '''在sys.stdin中輸入行: print(line)''' 用戶輸入'W'和W作爲響應打印。而不是打印,你的邏輯將進入該循環的主體。 –

回答

1

只要您正確記錄這一點,用戶將字符串傳遞給函數輸入的要求不應引起關注或問題。這在所有接受字符串輸入的Python函數中都是標準的。當然,如果你有其他方式讓用戶輸入信息,而不是直接與你的函數接口(即通過命令行參數),那麼你不應該在用戶提供的字符串周圍引用引號。但是這需要更多的代碼,並且不會改變這個功能。

同樣適用,如果用戶有存儲在一個變量的字符串:

cardinal = 'W' 
coord_convert(cardinal, 30, 20, 10) 

我會建議是確保你在Python建立2兼容性(與from __future__ import division),並添加一個功能文檔字符串。您還可以簡化您的基數檢查。

from __future__ import division 

def coord_convert(cardinal, deg, mins, sec): 
    ''' 
    This is your function docstring. 
    Put some examples here, along with expected inputs and output. 
    ''' 
    if cardinal.upper() in ['S', 'W']: 
     deg = -deg 
     mins = -mins 
     sec = -sec 
    mins_decimal = mins + (float(sec)/60) 
    deg_decimal = deg + (mins_decimal/60) 
    return deg_decimal 
相關問題