| 1 | initial version |
This is because randint returns a Python int and not a Sage Integer, and the division of two Python ints leads to an int:
sage: type(randint(2,10))
<type 'int'>
sage: int(5) / int(3)
1
When you write 1/a, since the 1 is a Sage integer, then the coercion makes the division happen in the set od Sage integers, this explains why you got a rational number:
sage: type(1)
<type 'sage.rings.integer.Integer'>
sage: get_coercion_model().common_parent(1,int(3))
Integer Ring
If you want to get random Sage integers, you can either convert the int into Sage integers:
sage: a = ZZ(randint(2,10))
sage: a
5
sage: type(a)
<type 'sage.rings.integer.Integer'>
Or, you can ask Sage to produce a random integer:
sage: a = ZZ.random_element(2,11)
sage: a
9
sage: type(a)
<type 'sage.rings.integer.Integer'>
Note that i replaced the 10 by 11, since in the random_element of Sage, the right bound is excluded, while it is not with the randint function.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.