2017-02-17 28 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, поэтому были оценены любые другие ошибки или указатели (особенно с целым числом и обработкой float).

+0

Если W не определяется пользователем, они собираются, чтобы добавить кавычки вокруг W. Если вы используете букву W питона ищет переменную с именем W, чтобы передать значение, что в ваше функция. TL; DR вам понадобятся котировки. – Blakethepatton

+0

Любой, кто имеет опыт работы с Python, будет использовать кавычки для передачи строкового ввода. Вы создадите гораздо больше путаницы, делая это так, как вы предлагали. –

+0

Речь идет об интерпретации ввода от пользователя, правильно? Котировки вообще не нужны для ввода. Для уточнения: '' 'для строки в sys.stdin: print (строка)' '' Пользователь вводит «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