Python、Math和Latex:Display+;计算?

Python、Math和Latex:Display+;计算?,python,latex,ipython-notebook,Python,Latex,Ipython Notebook,假设我有一个依赖于变量n的方程组。我想做的是编写一个简单的代码,这样只要选择一个特定的n,它就会为这个特定的n值生成方程 下面是我在ipython上编写的代码示例。它将显示我选择的任意n个谐波序列的部分和(不计算) 从IPython.display导入显示、数学、乳胶 txt=“$1” n=100000 长=0 对于范围(n)中的i: 如果(i n-3): str=“+\dfrac{{1}}” temp=“{0}”。格式(i+2) str+=“{”+temp+“}” txt+=str 其他: 如

假设我有一个依赖于变量n的方程组。我想做的是编写一个简单的代码,这样只要选择一个特定的n,它就会为这个特定的n值生成方程

下面是我在ipython上编写的代码示例。它将显示我选择的任意n个谐波序列的部分和(不计算)

从IPython.display导入显示、数学、乳胶
txt=“$1”
n=100000
长=0
对于范围(n)中的i:
如果(i n-3):
str=“+\dfrac{{1}}”
temp=“{0}”。格式(i+2)
str+=“{”+temp+“}”
txt+=str
其他:
如果long==0:
txt++=“+…”
长+=1
txt+=“$”
显示(数学(txt))
这将生成以下输出:

当然,我可以把n调整到我想要的任何值

这段代码的编写方式并不适合其他类型的表达式。我还想得到“=::无论值是否达到我想要的精度:”


在ipython或latex上有没有一种聪明的方法可以做到这一点?

从Python生成latex方程没有什么特别困难的。只有这样一个事实,即您必须在字符串中转义
\
,在
str.format
中转义
{}
,这使它有点乏味

您可以对字符串使用列表理解、列表连接和
join
方法,将示例简化为三行代码

In [1]: tmp = ['\dfrac{{1}}{{{:.1f}}}'.format(float(n)) for n in range(2, 12)]

In [2]: sl = ['$s'] + tmp[:3] + ['...'] + tmp[-3:]

In [3]: sl
Out[3]: 
['$s',
 '\\dfrac{1}{2.0}',
 '\\dfrac{1}{3.0}',
 '\\dfrac{1}{4.0}',
 '...',
 '\\dfrac{1}{9.0}',
 '\\dfrac{1}{10.0}',
 '\\dfrac{1}{11.0}']

In [4]: ' + '.join(sl) + '$'
Out[4]: '$s + \\dfrac{1}{2.0} + \\dfrac{1}{3.0} + \\dfrac{1}{4.0} + ... + \\dfrac{1}{9.0} + \\dfrac{1}{10.0} + \\dfrac{1}{11.0}$'
为了计算表达式的结果并对其进行格式化,我编写了一个名为的模块。从Python表达式开始,它使用
eval
计算结果,并使用
ast
模块将结果格式化为LaTeX。请记住,
eval
的使用使其不适合用于不受信任的输入

更新

使用+/-的字符串格式可以这样做

In [1]: '{:+d}'.format(1)
Out[1]: '+1'

In [2]: '{:+d}'.format(-1)
Out[2]: '-1'

谢谢您知道是否可以使用“join”命令进行交替序列吗?@Braindead在这种情况下,您需要使用空格作为连接字符,并使符号成为列表生成的列表的一部分。制作交替符号的一种方法是乘以
(-1)**n
。这不会真正起作用,因为“+”符号不会由(-1)**n生成,对吗?我最终使用了类似[“+”、“-”](n%2)的东西,并导入浮点除法,这样我就可以只使用“1/2”而不是“1/2.0”@Braindead您可以使用字符串格式添加+/-。请参阅更新的答案。
In [1]: '{:+d}'.format(1)
Out[1]: '+1'

In [2]: '{:+d}'.format(-1)
Out[2]: '-1'