Найти - Пользователи
Полная версия: Тип переменной в условиях
Начало » Центр помощи » Тип переменной в условиях
1 2
shakog
Друзья, есть ли возможность в 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() неправильная форма, изучаю не так давно, всех тонкостей не знаю)

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

вот, разбирайтесь
shakog
Разве? Ведь если задать таким образом:
float(raw_input())
Получается ввод только числовых значений…

А в том примере мы можем вводить только значения с плавающей точкой, если будем вводить буквы, появится заданное нами сообщение об ошибке, а нужно, чтобы ‘done’ была возможность ввести… Вот как это сделать, не очень понятно, ведь в одном случае мы можем задать возможность вводить только числа (float(raw_input()) или int(raw_input())), но лишаемся возможности ввести ‘done’. Либо просто raw_input, но так, как я понял, он сравнивает числа, как строковые переменные и получается опять лажа. Как поступить, не подскажете? Воспользоваться другим исключением для except (если конечно я правильно их называю)
terabayt
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"
py.user.next
>>> 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
>>>
shakog
Вот скорее, как у 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

Если кому не трудно, можете подсказать обучающемуся, есть ли тут Грубейшие ошибки или все более менее?
Ох и непростая же штука - дисциплина в обучении
0x420
тут уже разбирали эту задачу
Rodegast
try:
    num = int(s)
except ValueError:
    print 'Invalid input'
    continue
Если числа целые, то вместо ловли ValueError лучше воспользоваться методом isdigit()
py.user.next
Rodegast
Если числа целые, то вместо ловли ValueError лучше воспользоваться методом isdigit()
>>> '-5'.isdigit()
False
>>>
Rodegast
>>> '-5'.replace("-", "").isdigit()
True
>>> 
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