Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2014 16:50:48

StainlessCat
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

Всем здравствуйте. Я только начинаю изучать программирование и выбрал для себя пайтон. Решил написать небольшую программку

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))   # здесь - только для проверки работы функции
- безрезультатно… Заранее спасибо))

Офлайн

#2 Апрель 23, 2014 17:23:54

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

isinstance() - проверка типов

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

def proverka():
    try:
        print input('Введите число:')
    except:
        proverka()
proverka()



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Апрель 23, 2014 17:47:40)

Офлайн

#3 Апрель 23, 2014 18:34:39

StainlessCat
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

Вот мне и не понятно как получить значение

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

Офлайн

#4 Апрель 23, 2014 18:50:16

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

как получить значение

return

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



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#5 Апрель 23, 2014 18:51:37

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

У меня тоже вопрос, в этом примере, почему если я сперва введу букву, а затем число мне возвращает None?

def proverka():
    try:
        return input('Введите число:')
    except:
        proverka()
print proverka()



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Апрель 23, 2014 18:51:58)

Офлайн

#6 Апрель 23, 2014 19:15:41

StainlessCat
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

В твоем примере у меня всё работает… Мне не ясно только откуда там возникнуть исключению и что обрабатывать? А за return спасибо!! Теперь всё ясно!!

Офлайн

#7 Апрель 23, 2014 22:33:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите с функцией проверки типа данных

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
>>>



Отредактировано py.user.next (Апрель 23, 2014 22:34:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version