python - 在 Python 3 和 Matplotlib 中使用带字符串格式的无效语法错误

标签 python python-3.x matplotlib

代码:

#/usr/bin/env python3
# -*- coding: utf-8 -*-


import numpy as np
import matplotlib.pyplot as plt
from sympy.solvers import *
from sympy import *
from matplotlib import rcParams


rcParams['text.latex.unicode'] = True
rcParams['text.usetex'] = True
rcParams['text.latex.preamble'] = '\usepackage{amsthm}', '\usepackage{amsmath}', '\usepackage{amssymb}',
'\usepackage{amsfonts}', '\usepackage[T1]{fontenc}', '\usepackage[utf8]{inputenc}'


f = lambda x: x ** 2 + 1
#f = lambda x: np.sin(x) / x

x = Symbol('x')
solucion = solve(x**2+1, x)

fig, ax = plt.subplots()
x = np.linspace(-6.0, 6.0, 1000)
ax.axis([x[0] - 0.5, x[-1] + 0.5, x[0] - 0.5, x[-1] + 0.5])
ax.spines['left'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('center')
ax.spines['top']
ax.spines['left']
ax.spines['bottom']
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.grid('on')
ticks = []
for i in range(int(x[0]), int(x[-1] + 1), 1):
    ticks.append(i)
ticks.remove(0)
ax.set_xticks(ticks)
ax.set_yticks(ticks)

ax.plot(x, f(x), 'b-', lw=1.5)
ax.legend([r'$f(x)=x^2-1$'], loc='lower right')

text_sol = ''
if solucion == []:
    text_sol = r'$No\; hay\; soluciones $'
else:
    for i, value in enumerate(solucion):
        text_sol += ur'$Solución \; {}\; :\; {}\\$'.format(i, value)

bbox_props = dict(boxstyle='round', fc='white', ec='black', lw=2)
t = ax.text(-5.5, -5, text_sol, ha='left', va='center', size=15,
            bbox=bbox_props)

plt.show()

此代码在 Python 2.7 上运行良好,但在 Python 3.3.2 上运行不佳:

python3 funcion_pol2.py
  File "funcion_pol2.py", line 51
    text_sol += ur'$Solución \; {}\; :\; {}\\$'.format(i, value)
                                               ^
SyntaxError: invalid syntax

谢谢!

最佳答案

Python 3.0 中删除了字符串文字的 u'...' 语法

来自 docs :

String literals no longer support a leading u or U.

因此,您可以简单地在 Python 3 中删除 u'...':

r'$Solución \; {}\; :\; {}\\$'.format(i, value)

注意 u'...' 语法已被 re-introduced in Python 3.3 (感谢@Bakuriu 指出这一点)。

并重新引入了新的string-prefix syntax看起来像这样:

stringprefix    ::=  "r" | "u" | "R" | "U"

python 2 string-prefix syntax :

stringprefix    ::=  "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR"
                     | "b" | "B" | "br" | "Br" | "bR" | "BR"

关于python - 在 Python 3 和 Matplotlib 中使用带字符串格式的无效语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21438717/

相关文章:

python - 如何在colab中解压图片文件夹

python - 在 Python 中实现快速排序

python - 使用电子邮件模块(PYTHON)解析来自 poplib 的电子邮件内容

python - 数据未出现在 python 绘图上

python - 如何使用 matplotlib 将 x 轴上的秒数转换为小时数?

python - 在 Python 中关闭 CSV 文件

python - Tornado celery 集成黑客

python - 在使用 pydantic 模型的 python 中,如何使用未知键访问嵌套字典?

python - 数据框中每行最大值的列名

python - 如何调整字符串x轴的 'tick frequency'