Як у Python, як я можу проаналізувати числовий рядок типу "545.2222" на відповідне значення з плаваючою здатністю 542.2222? Або проаналізуйте рядок "31" на ціле число, 31?
Мені просто хочеться знати, як проаналізувати поплавковий рядок до float та (окремо) рядок int до int.
Добре, що ви просите зробити це окремо. Якщо ви їх змішуєте, ви, можливо, пізніше налаштуєте себе на проблеми. Проста відповідь:
"545.2222"
плавати:
>>> float("545.2222")
545.2222
"31"
до цілого числа:
>>> int("31")
31
Інші перетворення, вставки до та з рядків і літералів:
Перетворення з різних баз, і ви повинні заздалегідь знати базу (за замовчуванням 10). Зауважте, ви можете додати їх до того, що очікує Python для своїх літералів (див. Нижче) або видалити префікс:
>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31
Якщо ви не знаєте бази заздалегідь, але ви знаєте, що вони матимуть правильний префікс, Python може зробити це для вас, якщо ви перейдете 0
як базу:
>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31
Недесятичні (тобто цілі) літерали з інших баз
Якщо ваша мотивація полягає в тому, щоб ваш власний код чітко відображав жорстко кодовані конкретні значення, однак, вам може не знадобитися перетворення з баз - ви можете дозволити Python робити це за вас автоматично з правильним синтаксисом.
Ви можете використовувати префікси apropos для автоматичного перетворення в цілі числа з наступними буквами . Вони дійсні для Python 2 та 3:
Двійковий, префікс 0b
>>> 0b11111
31
Октал, приставка 0o
>>> 0o37
31
Шістнадцятковий, префікс 0x
>>> 0x1f
31
Це може бути корисно при описі двійкових прапорів, дозволів на файли в коді або шістнадцяткових значень для кольорів - наприклад, відзначайте відсутні лапки:
>>> 0b10101 # binary flags
21
>>> 0o755 # read, write, execute perms for owner, read & ex for group & others
493
>>> 0xffffff # the color, white, max values for red, green, and blue
16777215
Зробити неоднозначні вісімки Python 2 сумісними з Python 3
Якщо ви бачите ціле число, яке починається з 0, у Python 2 це (застарілий) восьмеричний синтаксис.
>>> 037
31
Це погано, бо, схоже, значення має бути 37
. Отже, в Python 3 тепер він піднімає SyntaxError
:
>>> 037
File "<stdin>", line 1
037
^
SyntaxError: invalid token
Перетворіть ваші восьмери вісімки Python 2 у вісімки, які працюють як у 2, так і у 3 з 0o
префіксом:
>>> 0o37
31
type(my_object)
на нього. Результат, як правило, можна викликати як функцію для перетворення. Наприклад,type(100)
результати вint
, тому ви можете зателефонувати,int(my_object)
щоб спробувати перетворитиmy_object
на ціле число. Це не завжди працює, але є хорошим "першим здогадком" при кодуванні.