Існує ряд проблем.
user_input = raw_input("Enter an integer, string or float:")
input_type = type(user_input)
Оскільки raw_input
завжди повертає рядок, тут
input_type
завжди буде str
.
if input_type == "str":
print "Your string was %s." % user_input
input_type
will be str
—that is, the
actual object representing the string type—not "str"
,
which is just a string. So, this will never be true, and neither
will any of your other tests.
Змінити це на:
if "str" in input_type:
… Не може допомогти нічого, якщо ви не очікуєте, що
input_type
буде або колекцією рядків, або довшим
рядком із "str"
посеред нього . Та я не можу уявити
чому ви очікуєте також.
Ці рядки:
input_type = int(input_type)
… Намагаються перетворити код input_type
- який,
пам'ятайте, тип , наприклад str
або
int
, а не значення - до цілого числа. Це не може бути
те, що ви хочете.
Ці рядки:
print "Your integer was %d." % user_input
Друкує оригінальний рядок, отриманий від користувача, а не те,
що ви перетворили на int
. Це буде працювати, якщо ви
використовуєте % s
, а не % d
, але це,
ймовірно, не те, що ви намагалися зробити.
print "Your float was %d." % user_input
Навіть якщо ви вирішили попередню проблему, ви не можете
використовувати % d
для друку плаваючих елементів.
Далі, майже завжди погана ідея перевірити речі за допомогою
порівняння типів.
Якщо вам потрібно дійсно , це майже завжди краще
використовувати isinstance (user_input, str)
, а не
тип (user_input) == str
.
Але вам не потрібно це робити.
Насправді, краще «просити прощення, ніж дозвіл». Правильний
спосіб дізнатися, чи можна перетворити щось на ціле число, - це
просто спробувати перетворити його на ціле число, а виключити, якщо
він не може:
try:
int_value = int(user_input)
print "Your integer was %d." % int_value
except ValueError:
# it's not an int