Найти - Пользователи
Полная версия: Почему интерпретатор путает типы данных?
Начало » Python для новичков » Почему интерпретатор путает типы данных?
1 2 3
Avond
Я новичок в питоне, да и в программировании вообще. С дуру написал программку которая выводит все числа от 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
input() -> int(raw_input())

И тип проверяется так: isinstance(n, int).
4kpt
Для сравнения типов нужно использовать модуль types. В этом у Вас ошибка…
Например:

import types

if type(a) == types.IntType:
odnochlen
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
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
По вопросу:

У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.
Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
odnochlen
4kpt
Буду знать. Осталась старая привычка…
Ого! Олдфаг в треде.

Код вообще более чем странный. Если надо определить тип числа, я бы конвертировал в int и float и ловил исключения. input() == eval(raw_input()), а eval - это обычно плохо.
Avond
4kpt
По вопросу:У Вас выполняются все ветви исключения. Цифра 14 может считаться как целым так и дробным числом, а цифра 14.0 считается только дробным.Чтобы этого избежать, можно вместо второго if поставить elif. Тогда, если число подходит под целый тип, то elif выполнятся не будет…
Блин… точняк)
4kpt
odnochlen.

Не поддрачивай. Просто я училася по книгам, где указывалась необходимость использования модуля types…

Вот и осталась привычка…

Но это не решает проблему со строкой. Тут вы уже думайте сами… Можно использовать инструкции try - except…
4kpt
Вообще odnochlen прав. Прога корявенькая. Строка p = int(n) уже превращает любое данное, введенное в поле ввода в целое число (если только это не строка - тогда генерируется исключение). Я бы здесь перебрал все возможные варианты методами string.atof, string.atoi.
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