Найти - Пользователи
Полная версия: Определить целое число или нет
Начало » Python для новичков » Определить целое число или нет
1 2
python_new
Здравствуйте. С Python познакомился только вчера, возникло много вопросов, большинство нахожу на форумах, а вот с этим не смог справиться сам.

Пример: выводятся подобные большие числа:
5263157894736.632
52631578947368.21
526315789473684.0
5263157894736842.0
5.2631578947368424e+16
5.263157894736842e+17
Задача: вывести только целое число (из примера это 5263157894736842.0). Как организовать такую проверку?
Tort
> вывести только целое число
>>> s = 1.5
>>> int(s)
1
smoke853
lst = [5263157894736.632, 52631578947368.21, 526315789473684.0, 5263157894736842.0,
       5.2631578947368424e+16, 5.263157894736842e+17]
for i in lst:
    if i.is_integer():
        print(i)
sergeek
define “целое число”
из примера последние четыре можно назвать целыми
python_new
Tort
> вывести только целое число>>> s = 1.5>>> int(s)1
Это преобразование в целое ведь? Мне нужно именно отобрать целое число

smoke853
Спасибо, похоже это то, что я и искал

sergeek
Да, вы правы. Мне другие не нужны, так что после вывода первого такого числа сделаю break
Tort
python_new
Tort
> вывести только целое число>>> s = 1.5>>> int(s)1
Это преобразование в целое ведь? Мне нужно именно отобрать целое число

Да. Сорь. Я вопрос невнимательно прочитал.
bw
Влезу я и сюда, со своей функциональщиной, может пригодится:
>>> filter(float.is_integer, map(float, [1., 2, '3.33', 4.5, 5.67, '6.']))
[1.0, 2.0, 6.0]
`map` здесь не нужен, если есть уверенность, что все элементы списка, это <float>.

..bw
Budulianin
bw
Влезу я и сюда, со своей функциональщиной

filter(lambda x: not O.itemgetter(0)(math.modf(x)), [5.23e+5, 2, 3, 2.5])
bw
`O.itemgetter` здесь совершенно лишний, можно и просто `math.modf(x)[0]`. По мотивам предыдущего, но сохраняя нелюбовь к `lambda` можно сделать так:
>>> import math
>>> import itertools as I
>>> import operator as O
>>> I.imap(O.itemgetter(1), I.ifilterfalse(O.itemgetter(0), I.imap(math.modf, [5.23e+5, 2, 3, 2.5])))
<itertools.imap object at ...>
>>> list(_)
[523000.0, 2.0, 3.0]

..bw
py.user.next
bw
>>> import itertools as I
>>> import operator as O
это нарушает pep8 (пиши модули маленькими буквами)
вообще, большие буквы используются либо для классов, либо для констант

bw
O.itemgetter(0)
поэтому вот это читается как “какой-то класс O имеет метод itemgetter”
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