Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2015 15:49:05

shakog
От: Спб
Зарегистрирован: 2015-06-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Тип переменной в условиях

Друзья, есть ли возможность в python проверить тип переменной следующим образом:
Есть задача, в которой нужно вводить числа и выяснить в конечном итоге, которое из них было наибольшим, какое наименьшим. Как только пользователь вводит done, цикл заканчивается, выглядит это все примерно так:

largest = None
smallest = None
while True: 
        num = raw_input("Enter a number: ")
        if num == "done" : break
        if largest is None:
            largest = num
        if smallest is None:
            smallest = num
        if num > largest:
            largest = num
        elif num < smallest:
            smallest = num
        else:
            print "Invalid input"
print "Maximum is", largest
print "Minimum is", smallest

Можно ли после строки:
 
  num = raw_input("Enter a number: ")
        if num == "done" : break
Задать условие вроде:
if num is str():
    break
    #или
    print "Invalid input"
# или
if num = str()
     break
    #или
    print "Invalid input"
Чтобы можно было изначально не задавать условие, что вводить можно только численные переменные (иначе нельзя будет ввести ‘done’), но происходила проверка: Если вводится ‘done’, то заканчиваем цикл, а если строковая переменная с другим значением, то выходило сообщение: ‘Invalid Input’ и можно было бы вводить заново.
(Понимаю, что if num is str() неправильная форма, изучаю не так давно, всех тонкостей не знаю)

Спасибо!

Офлайн

#2 Июнь 24, 2015 20:24:37

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Тип переменной в условиях

shakog
Задать условие вроде
raw_input это всегда строка
и ваш код не правильно работает!
>>> a = raw_input()
2
>>> b = raw_input()
10
>>> a > b
True

вот, разбирайтесь



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Июнь 25, 2015 02:54:31

shakog
От: Спб
Зарегистрирован: 2015-06-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Тип переменной в условиях

Разве? Ведь если задать таким образом:

float(raw_input())
Получается ввод только числовых значений…

А в том примере мы можем вводить только значения с плавающей точкой, если будем вводить буквы, появится заданное нами сообщение об ошибке, а нужно, чтобы ‘done’ была возможность ввести… Вот как это сделать, не очень понятно, ведь в одном случае мы можем задать возможность вводить только числа (float(raw_input()) или int(raw_input())), но лишаемся возможности ввести ‘done’. Либо просто raw_input, но так, как я понял, он сравнивает числа, как строковые переменные и получается опять лажа. Как поступить, не подскажете? Воспользоваться другим исключением для except (если конечно я правильно их называю)

Офлайн

#4 Июнь 25, 2015 03:40:51

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Тип переменной в условиях

import sys
def f(s):
    while True:
        try:
            n = raw_input(s)
            return float(n)
        except ValueError:
            if n == "done":
                sys.exit()
            print "Error, enter numeric input"



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Июнь 25, 2015 03:42:23

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

Тип переменной в условиях

>>> while True: 
...     s = raw_input("Enter a number: ")
...     if s == "done":
...         break
...     try:
...         num = int(s)
...     except ValueError:
...         print 'incorrect'
...         continue
...     print 'see', num
... 
Enter a number: a
incorrect
Enter a number: a
incorrect
Enter a number: 123
see 123
Enter a number: done
>>>



Офлайн

#6 Июль 26, 2015 19:02:09

shakog
От: Спб
Зарегистрирован: 2015-06-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Тип переменной в условиях

Вот скорее, как у py.user.next, но всем спасибо тем не менее
Примерно вот что получилось в результате:

largest = None
smallest = None
while True:
     s = raw_input("Enter a number: ")
     if s == "done":
         break
     try:
         num = int(s)
     except ValueError:
         print 'Invalid input'
         continue
     if largest == None and smallest == None:
         largest = s
         smallest = s
     elif s < smallest:
          smallest = s
     elif s > largest:
          largest = s
    
print "Maximum is", largest
print "Minimum is", smallest

Если кому не трудно, можете подсказать обучающемуся, есть ли тут Грубейшие ошибки или все более менее?
Ох и непростая же штука - дисциплина в обучении

Офлайн

#7 Июль 26, 2015 19:14:55

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Тип переменной в условиях

тут уже разбирали эту задачу

Офлайн

#8 Июль 26, 2015 23:58:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2759
Репутация: +  185  -
Профиль   Отправить e-mail  

Тип переменной в условиях

try:
    num = int(s)
except ValueError:
    print 'Invalid input'
    continue
Если числа целые, то вместо ловли ValueError лучше воспользоваться методом isdigit()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 26, 2015 23:59:05)

Офлайн

#9 Июль 27, 2015 00:49:08

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

Тип переменной в условиях

Rodegast
Если числа целые, то вместо ловли ValueError лучше воспользоваться методом isdigit()
>>> '-5'.isdigit()
False
>>>



Офлайн

#10 Июль 29, 2015 10:24:05

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2759
Репутация: +  185  -
Профиль   Отправить e-mail  

Тип переменной в условиях

>>> '-5'.replace("-", "").isdigit()
True
>>> 



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version