我的代码适用于onlinegdb.com,但不适用于CoCalc.com。
import datetime
slowduration = datetime.timedelta(0,1)
print(slowduration)
返回
TypeError: unsupported type for timedelta seconds component: sage.rings.integer.Integer
我不清楚这是一个功能还是一个bug。
补充@ kcrisman的答案和“int(0), int(1)
”技巧......
如果想要坚持使用Sage内核,还有两个其他选择
preparser(False)
禁用预分析器,r
(对于“raw”)附加到整数,例如datetime.timedelta(0r, 1r)
。另请参阅Sage编制浮点数和整数的类似问题和答案:
最后,请注意,可以使用以下任一方法从外部文件将代码加载到Sage中:
load('/path/to/filename.py')
load('/path/to/filename.sage')
其中.sage
文件将获得“Sage-preparsed”,而.py
文件则不会。
这提供了绕过预分析器的第三个选项:从.py
file加载代码。
如果其他人有这样的问题 - 事实证明我使用的是Sage数学内核而不是Python数学内核。这个网站提供了15种不同的内核。
雅各布的自我回答是正确的;这里有一些细节。
在SageMath中有一种称为预分析器的东西可以解释事物,因此整数是数学整数,而不是Python整数。所以for example:
sage: preparse('1+1')
'Integer(1)+Integer(1)'
还有更多涉及 - 尝试preparse('f(x)=x^2')
一些真正的乐趣。但是,是的,这是一个功能。
但是,要解决您在Sage内核中的问题,您可以只执行this:
import datetime
slowduration = datetime.timedelta(int(0),int(1))
print(slowduration)
把0:00:01
作为你的答案。