Я работаю над очень простым преобразователем температуры в Python (только для практики), и я борюсь с некоторыми компонентами UX. Я хотел бы иметь проверки на месте, чтобы продолжить запрос на ввод переменных, когда сделаны недопустимые записи. Мой полный код ниже:Функция проверки входного сигнала на питоне не называется должным образом
o_temp = ''
def temp_input(o_temp):
o_temp = raw_input('Enter a temperature (round to nearest integer): ')
return o_temp
def temp_input_check(o_temp):
o_temp = list(o_temp)
for i in o_temp:
if i not in '1234567890':
print 'Invalid entry. Please enter only the numerical temperature measurement in integer format.'
temp_input(o_temp)
else:
break
def converter(o_temp):
unit = raw_input('Convert to (F)ahrenheit or (C)elsius? ')
unit = unit.upper()
if unit == 'F' or unit == 'f':
n_temp = (9.0/5.0) * int(o_temp) + 32
print '%d C = %d F' % (o_temp, n_temp)
quit()
elif unit == 'C' or unit == 'c':
n_temp = (5.0/9.0) * (int(o_temp) - 32)
print '%d F = %d C' % (o_temp, n_temp)
quit()
else: #check for valid entry
print 'Invalid entry. Please enter F for Fahrenheit or C for Celsius'
unit_input()
def temp_converter():
#title, call sub-functions
print ''
print 'Temperature Converter'
print ''
temp_input(o_temp)
temp_input_check(o_temp)
converter(o_temp)
temp_converter()
Однако, когда я ввожу неверный ввод (например, буква или сочетание букв и цифр) в o_temp строку кода, кажется, не признает, что это является недопустимым и продолжается с запросом модуля. Я неправильно возвращаю переменную? В чем проблема? Я попытался удалить первоначальное заявление o_temp, но потом я получил «NameError: глобальное имя„o_temp“не определен»
EDIT
Я пришел к этому решению, любые дополнительные предложения для уточнения кода на всех?
def converter():
print 'Temperature Converter'
while 1:
temp = raw_input('Starting temperature? ')
try:
temp = float(temp)
except ValueError:
print 'Invalid entry. Please enter only the numerical temperature measurement.'
else:
break
while 1:
unit = raw_input('Convert to Fahrenheit or Celsius? ')
if unit.upper().startswith('F') == True:
print "%f C = %f F" % (temp, temp*9./5+32)
return False
elif unit.upper().startswith('C') == True:
print "%f F = %f C" % (temp, (temp-32)*5./9)
return False
else:
print 'Invalid entry. Please enter F for Fahrenheit or C for Celsius'
converter()
Что вы собственно вопрос? Что происходит, когда вы запускаете этот код и как это отличается от ожидаемого? – kindall
Извините, не закончил писать вопрос и случайно представил преждевременно. Полный код и вопрос теперь подняты! – grrothman
Кроме того, причина, по которой вы получили «ошибку имени», заключается в том, что ваш o_temp никогда не назначается нигде в temp_converter. Вы передаете переменную, которая не имеет значения для ваших функций! –