2017-01-03 29 views
-1

я столкнулся с любопытной проблемой, принимая запись целого числа в битах в Python (я работаю в Sage)Функция randint() не возвращает целое число

Я первый попытался запустить код

m=7 
m.bits() 

Все хорошо работает. Затем я хотел сделать это со случайным целым числом. Таким образом, я попытался запустить код

import random 
m=randint(2,10) 
m.bits() 

Вот где я получил ошибку «AttributeError:„INT“объект не имеет атрибута„бит“», как если бы функция randint не возвращается целое число. Мне удалось заставить его быть целым, делая

m=m+0 

Однако, я до сих пор удивляюсь, почему первое письмо не работал. Я должен сказать, что я кодирую онлайн-мудрец, даже если я не думаю, что это должно быть проблемой.

Заранее благодарен!

+0

Обычные целые числа Python не имеют метода '.bits', но Sage Integer делают: http://doc.sagemath.org/html/en/reference/rings_standard/ sage/rings/integer.html # sage.rings.integer.Integer.bits –

+0

@vaultah Я попробовал это в Sage, и это действительно сработало. Возможно, они реализовали такой метод в Sage –

+0

Результат randint() - это int: 'from random import randint; type (randint (2,10)) '->' ' – Rudi

ответ

1

Для случайного целого Sage (с использованием различных распределений) используйте ZZ.random_element (doc here). Попробуйте this example:

a = ZZ.random_element(2,10) 
a.bits() 

Я открыл Trac 22131 прояснить этот вопрос; не нужно делать что-то совершенно такое, может быть функция random_integer на верхнем уровне. (Например, есть random_prime.)