2017-02-17 15 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)が正しい-30.5を返しながら、これは、エラーを生成する関数coord_convert(W,30,30,0)を呼び出す場合。 card入力が文字列として正しく読み込まれるように、これをユーザーフレンドリーにする方法はありますか?

ところで、この関数はPython 2.7からPython 3.6に変換されているので、他のエラーやポインタ(特に整数や浮動小数点演算を扱う)に感謝します。

+0

Wは、彼らはあなたがパイソンWの文字を使用している場合はW.前後に引用符を追加する必要があるとしているユーザーによって定義されていない場合には、Wがあなたにその値を渡すという名前の変数を探しています関数。 TL; DRには引用符が必要です。 – Blakethepatton

+0

Pythonで何か経験がある人は、引用符を使って文字列入力を渡します。あなたはそれをあなたが提案したようにしてずっと混乱させるでしょう。 –

+0

これはユーザーからの入力を解釈することです。引用には入力する必要はありません。 '' 'for sys.stdin: print(line)' '' ユーザータイプ 'W'とWが応答として出力されます。印刷する代わりに、あなたのロジックはそのループの本体に入ります。 –

答えて

1

これを適切に文書化する限り、ユーザーが文字列を関数入力に渡すという要件は、懸念や問題を引き起こしてはいけません。これは、文字列入力を受け入れるすべてのPython関数で標準です。

もちろん、ユーザーが関数と直接的に(つまりコマンドライン引数を使用して)インタフェースする以外の方法で情報を入力する場合は、ユーザーが提供する文字列を引用符で囲む必要はありません。しかし、それはより多くのコードを必要とし、この機能を変更しません。あなたは(from __future__ import division付き)Pythonの2相性に構築し、機能のドキュメンテーション文字列を追加してください作っている私は何を推薦する

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

:ユーザーが変数に格納されている文字列を持っている場合

同じことが当てはまります。また、カーディナリティのチェックを簡素化することもできます。

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 
関連する問題