Python 实现将文档文件中的同一种字符交替替换成不同的字符(0.1 版)

图 1. 符号约定,使用 https://carbon.now.sh 生成

如果图 1 显示不正常(由于对 SVG 格式的兼容性问题,在有些浏览器中会出现这种情况),你可以点击这里查看本文符号约定的 PNG 格式版

需求分析

最近我开始在博客上分享一些考研数学题的解题过程,因此,自然少不了要输入数学公式。我写文章的习惯是,首先,使用 Markdown 把文章写好,然后再复制到博客里发布,由于包括 WordPress 在内的许多博客平台都是支持 Markdown 的,因此这么做一直没有什么问题。

不过,在 Markdown 中输入数学公式的语法是类似这样的:

$\sqrt{2}$

可是,我在 WordPress 中使用的显示数学公式的插件要求的语法是类似这样的:

【latex】\sqrt{2}【/latex】

这样一来,每当我要在我的个人网站发布一篇带有数学公式的文章时,我都需要把一个公式两边的 “$” 分别替换成 “【latex】” 和 “【/latex】”.

手动替换很慢,所以我写了一段 Python 代码实现自动替换。

代码实现

注:以下代码在 Windows 10 中文家庭版 64 位系统下的 Python 3.7.0 环境中测试成功。

编写该程序需要注意的一点是必须实现对文件内容的逐字符读取和替换,如果是逐行读取替换的话,那么一次遍历就会把整行的所有 “$” 都替换成 “【latex】”, 不符合要求。

无注释版代码:

a=2  
with open(('1.md'), 'r',encoding='UTF-8') as f:
    for line in f:
        for ch in line:
            if ch=='$':
                if a % 2 == 0:
                    ch='【latex】'
                    a = a + 1
                elif a % 2 != 0:
                    ch = '【/latex】'
                    a = a + 1
            print (ch,end='')

有注释版代码:

a=2  
with open(('1.md'), 'r',encoding='UTF-8') as f:
# 读取 1.md 文件中的内容,可以读取中文。
    for line in f:
    # 遍历一行
        for ch in line:
        # 遍历一行中的每一个字符
            if ch=='$':
                if a % 2 == 0:
                # 如果 a 为偶数,把 $ 换成 【latex】
                    ch='【latex】'
                    a = a + 1
                    # 操作完成,改变 a 的值
                elif a % 2 != 0:
                # 如果 a 为奇数,把 $ 换成 【/latex】
                    ch = '【/latex】'
                    a = a + 1
                    # 操作完成,改变 a 的值
            print (ch,end='')
            # 输出本行的操作结果(end='' 保证了输出完一整行后再换行)

EOF

McAfeeMagic.com Under Denial of Service Attack (June 12, 2019)

安全公司 McAfee 创始人 John McAfee 于 2019 年 06 月 12 日在 Twitter 上发推表示,McAfeeMagic.com 使用的亚马逊 AWS 服务器遭遇了 “cloaked hoic DOS” 攻击,并且自己发自内心地感谢黑客的免费宣传:

图 1. 截图来自 Twitter @officialmcafee

John McAfee 说,亚马逊的 AWS 正在学习攻击流量的行为,攻击流量越大,网站恢复得越快:

图 2. 截图来自 Twitter @officialmcafee

2019 年 06 月 12 日下午 4 点 18 分,John McAfee 在 Twitter 上宣布 McAfeeMagic.com 已经恢复访问,截至本文发出时,McAfeeMagic.com 仍可以正常访问:

图 3. 截图来自 Twitter @officialmcafee

2017 年研究生入学考试数学一填空题第 1 题解析(两种方法)

题目

已知函数 f(x)=\frac{1}{1+x^{2}}, 则 f^{(3)}(0)=

解析

方法一

本题可以借助函数奇偶性的相关性质解出。

由于:

f(x)=\frac{1}{1+x^{2}} f(-x)=\frac{1}{1+(-x)^{2}}=\frac{1}{1+x^{2}}

因此:

f(x)=f(-x)

于是,我们知道,函数 f(x) 是一个偶函数。

接下来,根据“偶函数的导数是奇函数,奇函数的导数是偶函数”的规律,我们知道,函数 f^{(3)}(x) 是一个奇函数。

又由于,如果一个奇函数 g(x) 在原点处(x=0)有定义,则 g(x)=0, 因此有:

f^{(3)}(0)=0

综上可知,本题的答案就是:0

方法二

本题也可以借助泰勒级数计算。

本题要求解的是在 x=0 时,f(x) 的三次导函数的函数值。我们知道,麦克劳林级数就是函数在 x=0 处的泰勒级数,是泰勒级数的一个特例。于是,这里我们可以使用麦克劳林级数对原式进行级数展开。

麦克劳林级数中有一个关于几何级数的公式,如下:

\frac{1}{1-x}=\sum_{0}^{\infty}x^{n}, |x|<1

当我们把上述公式中的 x 替换成 -x^{2} 后,f(x) 就可以使用上述几何级数的公式表达,如下:

f(x) = \frac{1}{1+x^{2}}=\frac{1}{1-(-x^{2})}=\sum_{0}^{\infty}(-x^{2})^{n}=\sum_{0}^{\infty}(-1)^{n}x^{2n}

之后,对 f(x) 求导:

f'(x)=\sum_{0}^{\infty}(-1)^{n} \cdot 2n \cdot x^{2n-1}
f''(x)=\sum_{0}^{\infty}(-1)^{n} \cdot 2n \cdot 2n-1 \cdot x^{2n-2}
f'''(x)=\sum_{0}^{\infty}(-1)^{n} \cdot 2n \cdot 2n-1 \cdot 2n-2 \cdot x^{2n-3}

于是,f'''(0)=0

综上可知,本题的答案就是: 0

EOF

2017 年研究生入学考试数学一选择题第 2 题解析

题目

若函数 f(x) 可导,且 f(x)f'(x)>0, 则()

( A ) f(1)>f(-1)

( B ) f(1)<f(-1)

( C ) |f(1)|>|f(-1)|

( D ) |f(1)|<|f(-1)|

解析

观察题目我们可以发现,f(x)f'(x) 和下面这个这个公式很像:

[f(x) \cdot g(x)]'=f'(x)g(x)+f(x)g'(x)

如果我们令 g(x)=f(x), 则有:

f'(x)g(x)+f(x)g'(x)=f'(x)f(x)+f(x)f'(x)=f(x)f'(x)+f(x)f'(x)=2f(x)f'(x)

进一步,我们可以令 F(x)=f^{2}(x), 则有:

F'(x)=2f(x)f'(x)

由题可知,f(x)f'(x)>0, 于是有 F'(x)>0, 即 F(x) 是一个单调递增的函数,由此可得:

F(1)-F(-1)>0

即:

f^{2}(1)-f^{2}(-1)>0 \Rightarrow f^{2}(1)>f^{2}(-1) \Rightarrow |f(1)|>|f(-1)|

综上可知,正确答案为:C

EOF

2017 年研究生入学考试数学一选择题第 1 题解析

题目

若函数

f(x)=\left\{\begin{matrix} \frac{1-\cos\sqrt{x}}{ax}, x > 0 \\ b, x\leqslant 0 \end{matrix}\right.

x=0 处连续,则()

( A ) ab = \frac{1}{2}

( B ) ab = - \frac{1}{2}

( C ) ab = 0

( D ) ab = 2

解析

这道题可以根据函数连续的定义解出。

函数 f(x) 在某一点 x_{0} 处连续的定义如下:

\lim_{x \rightarrow x_{0^{-}}} = \lim_{x \rightarrow x_{0^{+}}} = f(x_{0})

因此,若函数 f(x)x = 0 处连续,则根据定义的话,我们需要证明:

\lim_{x \rightarrow 0^{-}} = \lim_{x \rightarrow 0^{+}} = f(0)

观察题目可知,这是一个分段函数,且当 x \in (- \infty, 0] 时,f(x)=b. 于是,当 x 从左边趋近于 0 时,f(0^{-}) = b.

x 从右边趋近于 0 时,适用的取值范围为 x>0, 而对应的函数值为:

\lim_{x \rightarrow 0^{+}}f(x) = \lim_{x \rightarrow 0^{+}}\frac{1-\cos\sqrt{x}}{ax}

根据如下的等价无穷小原则:

1- \cos x \sim \frac{1}{2}x^{2}

于是有:

原式 =\lim_{x \rightarrow 0^{+}} \frac{\frac{1}{2}(\sqrt{x})^{2}}{ax} = \frac{1}{2a}

为了满足上面提到的函数在一点处连续的定义,需要有:

\frac{1}{2a} = b

化简形式得:

ab = \frac{1}{2}

由此可知,选 A.

EOF

在 Android Studio 3.4.1 中打开 Android Device Monitor (ADM)

操作环境

操作系统:Windows 10 家庭版 64 位

Android Studio 版本如图 1:

图 1

说明

Android Studio 的版本经历了几次更新,导致 ADM (Android Device Monitor) 的打开方式也发生了几次变化,因此,在网络上找怎么打开 ADM 的话可能会发现没法在自己的 Android Studio 上重现他们的方法,这主要是 Android Studio 的版本不同导致的,建议大家在参考本文的时候也查看一下自己的 Android Studio 的版本(我的文章基本都会注明“操作环境”). 但是,版本不同不表示操作方法一定不同,具体还需要根据实际情况确定。

Google 从 Android Studio 3.2 开始就完全弃用了 Android Device Monitor, 相关解释的原文地址如下:

https://developer.android.com/studio/profile/monitor

相关解释的原文摘抄如下:

Android Device Monitor was deprecated in Android Studio 3.1 and removed from Android Studio 3.2. The features that you could use through the Android Device Monitor have been replaced by new features. The table below helps you decide which features you should use instead of these deprecated and removed features.

来自:https://developer.android.com/studio/profile/monitor

参考中文译文如下:

Android Device Monitor (ADM) 从 Android Studio 3.1 开始不赞成使用,在 Android Studio 3.2 上已经移除了 Android Device Monitor. 你之前可以在 Android Device Monitor 上使用的功能都被新的功能代替了。下面的表格将帮助你判定哪些功能是被替换和移除了。

译自:https://developer.android.com/studio/profile/monitor

不过,ADM (Android Device Monitor) 在 Android Studio 3.4.1 版本中仍然存在。此外,目前网络上大部分介绍在 Android Studio 中打开 Android 虚拟机中的文件的方式仍然是使用 ADM 的 File Explorer. 所以,知道如何打开 ADM 仍然很有必要,接下来就是具体的操作步骤。

操作步骤

根据 Android Studio 官网的信息,下面的操作步骤适用于 Android Studio 3.1 及其之后的版本。

使用 Everything 搜索 “sdk\tools” 可以找到 Android SDK 的路径:

图 2

或者在 Android Studio 中依次打开 “File / Settings / Android SDK” 中查看 Android SDK 的路径:

图 3

在 CMD 中进入 Android SDK tools所在的路径并输入 monitor 指令,即可打开 Android Device Monitor:

图 4 进入 “C:\Users\Master\AppData\Local\Android\Sdk\tools” 目录并输入 ADM 启动指令

Android Device Monitor 的界面:

图 5

EOF