Форум сайта python.su
-1
Я новичок в питоне, да и в программировании вообще. С дуру написал программку которая выводит все числа от 0 до заданого пользователем числа. Если тип int то следуещее значение в цикле увеличивается на 1, если же float - на 0.1, с str, пока еще не разобрался но вот какая проблема появилась. Интерпретатор почему-то “допустим 10” воспринимает как float, а “3.14” как int. Почему так? Очень не хотелось бы быдлокодить и менять увеличиваемое значение в ветках местами
. Подскажите пожалуйста где я накосячил?
def number(n): n = input ("Please, enter value!\n") p = int(n) if p == int(n): #Если int print ("OK! Your value is variable!") s = 0 print "0" while s < n: #Выполняем пока результат не будет равен введенному числу i = 1 s = s + i print s if p == float(n): #Если float print ("OK! Your value is variable! But it's a float data!") s = 0 print "0" while s < n: i = 0.1 s = s + i print s if p == str(n): # Если str print ("Your value don't variable! Please enter the number!") return number(0) print number(0)
Офлайн
14
input() -> int(raw_input())
И тип проверяется так: isinstance(n, int).
Офлайн
63
Для сравнения типов нужно использовать модуль types. В этом у Вас ошибка…
Например:
import types
if type(a) == types.IntType:
Отредактировано 4kpt (Ноя. 10, 2012 16:54:39)
Офлайн
14
Starting in Python 2.2, built-in factory functions such as int() and str() are also names for the corresponding types. This is now the preferred way to access the type instead of using the types module. Accordingly, the example above should be written as follows:
Офлайн
63
Starting in Python 2.2, built-in factory functions such as int() and str() are also names for the corresponding types. This is now the preferred way to access the type instead of using the types module. Accordingly, the example above should be written as follows:
Буду знать. Осталась старая привычка…
Офлайн
63
По вопросу:
У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.
Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
Отредактировано 4kpt (Ноя. 10, 2012 17:10:19)
Офлайн
14
4kptОго! Олдфаг в треде.
Буду знать. Осталась старая привычка…
Офлайн
-1
4kptБлин… точняк
По вопросу:У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
)
Офлайн
63
odnochlen.
Не поддрачивай. Просто я училася по книгам, где указывалась необходимость использования модуля types…
Вот и осталась привычка…
Но это не решает проблему со строкой. Тут вы уже думайте сами… Можно использовать инструкции try - except…
Отредактировано 4kpt (Ноя. 10, 2012 17:24:31)
Офлайн
63
Вообще odnochlen прав. Прога корявенькая. Строка p = int(n) уже превращает любое данное, введенное в поле ввода в целое число (если только это не строка - тогда генерируется исключение). Я бы здесь перебрал все возможные варианты методами string.atof, string.atoi.
Отредактировано 4kpt (Ноя. 10, 2012 17:46:11)
Офлайн