Найти - Пользователи
Полная версия: Помогите с функцией проверки типа данных
Начало » Python для новичков » Помогите с функцией проверки типа данных
1
StainlessCat
Всем здравствуйте. Я только начинаю изучать программирование и выбрал для себя пайтон. Решил написать небольшую программку
print('''========================= ОКРАСКА =========================
\nДобро пожаловать в программу по расчету площади окраски!
 Вы можете выбрать один из вариантов расчета: ''')
def var(): #Выбор варианта расчета
    print('''  \nНажмите 1, если знаете наружный диаметр и длину.
    \nНажмите 2, если знаете наружный диаметр, толщину стенки и общий вес.
    \nНажмите 3, если передумали считать и хотите выйти из программы.''')
    variant=input('\n  Введите номер варианта расчета: ')
    print('='*60)
    if variant=='1':
        po_dline()
    elif variant=='2':
        po_vesu()
    elif variant=='3':
        print('До Свидания!')
        exit
    else:
        print('Только 1, 2 или 3')
        var()
def po_dline():
    print('''\n  Расчитаем площадь окрашиваемой поверхности зная наружный диаметр и длину.''')
    print('\nВнимание!! Диаметр вводим в миллиметрах, а длину трубы - в метрах.')
    print('='*60)
    while 1:   #Проверка введенных данных. 
        try:
            dim=float(input('Введите наружный диаметр трубы:  '))
            break
        except ValueError:
                print('Введите число!!')
    print('='*60)
    while 1:   #Проверка введенных данных. 
            try:
                dlina=float(input('Введите длину трубы:  '))
                break
            except ValueError:
                print('Введите число!!')
    sq=3.14159*dim*dlina*0.001
    print('='*60)
    print('Площадь окрашиваемой поверхности %s м2' % round(float(sq), 2))
    print('='*60)
    vihod()
def vihod():
    ex=input('\nЕще будем считать? Д/Н ')
    if ex=='l' or ex=='д':
        var()
    elif ex=='y' or ex=='н':
        print('Пока!!')
        exit()
    else:
        print('\nТолько Д (Да, будем считать) или Н (Нет, не будем).')
        vihod()
  
def po_vesu():
    print('''\n  Расчитаем площадь окрашиваемой поверхности зная наружный диаметр, толщину стенки и вес.''')
    print('\nВнимание!! Диаметр и толщину стенки вводим в миллиметрах, вес - в килограммах.')
    print('='*60)
    while 1:    #Проверка введенных данных.
        try:
            dim=float(input('\n  Введите наружный диаметр трубы:  '))
            break
        except ValueError:
                print('='*60)
                print('\n  Введите число!!')
    while 1:    #Проверка введенных данных.
            try:
                s=float(input('\n  Введите толщину стенки:  '))
                break
            except ValueError:
                print('\n  Введите число!!')
    while 1:    #Проверка введенных данных.
            try:
                ves=float(input('\n  Введите общий вес трубы:  '))
                break
            except ValueError:
                print('\n  Введите число!!')
    dim_vn=dim-2*s
    s_sec1=(3.14*dim**2)/4
    s_sec2=(3.14*dim_vn**2)/4
    s_sec=s_sec1-s_sec2
    dlina=ves/(s_sec*7.85)
    s_pov=3.14159*dim*dlina
    print('\n  Площадь окрашиваемой поверхности %s м2' % round(float(s_pov), 2))
    vihod()
    
    
var()
и у меня возник такой вопрос… В коде несколько раз повторяется проверка введенных данных - для каждого запроса. Подскажите, как описать функцию, которая бы проводила такую проверку и возвращала значение в программу.
Пробовал такой вариант
x='Введите наружный диаметр трубы:  '
def proverka(x):
    dim=input(x)
    while 1:
        try:
            dim1=float(dim)
            break
        except ValueError:
            print('Введите число!!')
        print('='*40)
    return dim
print (proverka(1200))   # здесь - только для проверки работы функции
- безрезультатно… Заранее спасибо))
ajib6ept
isinstance() - проверка типов

В пример с input'ом наверно только ловить исключения

def proverka():
    try:
        print input('Введите число:')
    except:
        proverka()
proverka()
StainlessCat
Вот мне и не понятно как получить значение
x='Введите наружный диаметр трубы:  ' # задана переменная - заведомо str
def proverka(x):
    while 1:
        try:
            float(input(x)) #преобразую строку в дробь, но как мне вернуть эту дробь?
            break
        except ValueError: # Эта часть вроде работает...
            print('Введите число!!')
        print('='*40)
a=proverka(x)
print(a)
ajib6ept
как получить значение

return

x='Введите наружный диаметр трубы:  ' # задана переменная - заведомо str
def proverka(x):
    while 1:
        try:
            return float(input(x)) #преобразую строку в дробь, но как мне вернуть эту дробь?
            break
        except: # Эта часть вроде работает...
            print('Введите число!!')
        print('='*40)
a=proverka(x)
print(a)
ajib6ept
У меня тоже вопрос, в этом примере, почему если я сперва введу букву, а затем число мне возвращает None?

def proverka():
    try:
        return input('Введите число:')
    except:
        proverka()
print proverka()
StainlessCat
В твоем примере у меня всё работает… Мне не ясно только откуда там возникнуть исключению и что обрабатывать? А за return спасибо!! Теперь всё ясно!!
py.user.next
ajib6ept
почему если я сперва введу букву, а затем число мне возвращает None?
потому там нет второго return

StainlessCat
Пробовал такой вариант
>>> def proverka(x):
...     print(x)
...     dim = None
...     while True:
...         try:
...             dim = float(input('-> '))
...             break
...         except ValueError:
...             print('Введите число!!')
...         print('=' * 40)
...     return dim
... 
>>> x = 'Введите наружный диаметр трубы:  '
>>> print(proverka(x))
Введите наружный диаметр трубы:  
-> abc
Введите число!!
========================================
-> abc
Введите число!!
========================================
-> 123
123.0
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB