Avond
Ноя. 10, 2012 16:36:09
Я новичок в питоне, да и в программировании вообще. С дуру написал программку которая выводит все числа от 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)
odnochlen
Ноя. 10, 2012 16:52:07
input() -> int(raw_input())
И тип проверяется так: isinstance(n, int).
4kpt
Ноя. 10, 2012 16:54:03
Для сравнения типов нужно использовать модуль types. В этом у Вас ошибка…
Например:
import types
if type(a) == types.IntType:
odnochlen
Ноя. 10, 2012 16:56:41
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:
4kpt
Ноя. 10, 2012 17:01: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:
Буду знать. Осталась старая привычка…
4kpt
Ноя. 10, 2012 17:05:57
По вопросу:
У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.
Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
odnochlen
Ноя. 10, 2012 17:15:34
4kpt
Буду знать. Осталась старая привычка…
Ого! Олдфаг в треде.
Код вообще более чем странный. Если надо определить тип числа, я бы конвертировал в int и float и ловил исключения. input() == eval(raw_input()), а eval - это обычно плохо.
Avond
Ноя. 10, 2012 17:21:16
4kpt
По вопросу:У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
Блин… точняк

)
4kpt
Ноя. 10, 2012 17:23:22
odnochlen.
Не поддрачивай. Просто я училася по книгам, где указывалась необходимость использования модуля types…
Вот и осталась привычка…
Но это не решает проблему со строкой. Тут вы уже думайте сами… Можно использовать инструкции try - except…
4kpt
Ноя. 10, 2012 17:42:50
Вообще odnochlen прав. Прога корявенькая. Строка p = int(n) уже превращает любое данное, введенное в поле ввода в целое число (если только это не строка - тогда генерируется исключение). Я бы здесь перебрал все возможные варианты методами string.atof, string.atoi.