Python 在Symphy中使用其他基本系统

Python 在Symphy中使用其他基本系统,python,sympy,base,Python,Sympy,Base,如何在Symphy中使用另一个基本系统?我想做一些类似于Rational(string)的事情,但不是在base 10中。您需要的大部分内容都可以在Python中获得: def sdigits(s, b, tuple=False): p = len(s.split('.')[1]) n, d = (int(s.replace('.', ''), base=b), b**p) if tuple: return n, d return '%s/%s'

如何在Symphy中使用另一个基本系统?我想做一些类似于
Rational(string)
的事情,但不是在base 10中。

您需要的大部分内容都可以在Python中获得:

def sdigits(s, b, tuple=False):
    p = len(s.split('.')[1])
    n, d = (int(s.replace('.', ''), base=b), b**p)
    if tuple:
        return n, d
    return '%s/%s' % (n, d)
这将产生以下结果:

sdigits('1.1', 3) -> '4/3'
sdigits('1.01', 3) -> '10/9'
sdigits('-1.12', 3) -> '-14/9'
sdigits('-1.12', 3, tuple=True) -> (-14, 9)
sdigits('1.2', 4) -> '6/4'
为了从Symphy提供简化比率的能力中获益,您可以将任一输出传递给Rational:

Rational(sdigits('1.2', 4)) -> 3/2
Rational(*sdigits('1.2', 4, tuple=True)) -> 3/2

我对symphy知道的不多,但是有理数是有理的,不管你用什么基来表示它们。这仅仅是对您需要的另一个基的解析,还是您确实需要结果成为
Rational
对象?你能举一个你需要转换的字符串类型的例子吗?@Blckknght举个例子,我可能想把字符串1.1转换成4/3,使用基数3。我对你的术语有点困惑。您的字符串“1.1”是否已在基数3中?那么它将对应于基数10中的4/3,等于基数3中的11/10。或者您的字符串是以10为基数的,并且希望转换为以3为基数的?基数10中的1.1是1.0020022。。。在base 3中,它是base 3中的102/101。@Hannebambel字符串表示base 3;也就是说,正如您在前面的解释中所说,在基数3中的
1.1
变成了基数3中的
4/3
11/10
。我的问题是如何从中获得一个
Rational
对象。我没有找到直接在sympy中实现它的方法。也许你可以在有限域上的多项式的sympy函数的基础上构造一些东西?