Python的数学模块与《思考Python》

0 投票
4 回答
658 浏览
提问于 2025-04-17 08:58

我在《Think Python》第3.3章“数学函数”这部分卡住了。

书里让我通过解释器导入math模块。然后打印出math,应该能看到类似这样的内容:<module 'math' from '/usr/lib/python2.5/lib-dynload/math.so'>

但我看到的是<module 'math' <built-in>>

不过这不是问题。其实我在我的Python文件夹里找不到'math.so'这个文件。最像的文件叫test_math。

问题是我应该写这个:
>>> ratio = signal_power / noise_power

>>> decibels = 10 * math.log10(ratio)

>>> radians = 0.7

>>> height = math.sin(radians)

当我写第一行的时候,它告诉我:
Traceback <most recent call last>:
File "<stdin>", line 1, in <module>
NameError: name 'signal_power' is not defined

书上说:“第一个例子使用log10来计算信噪比(假设signal_power和noise_power已经定义)。”

所以我猜问题可能是我没有定义'signal_power',但我不知道该怎么做,也不知道该给它赋什么值……

这是我第一次觉得这本书没有照顾到我,我已经迷失了。老实说,我对这一整章都不太理解。

顺便说一下,我使用的是Python2.7和Windows XP。如果有人觉得我应该把整章复制粘贴过来,我可以这样做。
Python是我学的第一门语言,我之前尝试用“Learn Python the hard way”学习,但在第16章卡住了。所以我决定先用“Think Python”,然后再回去学“Learn Python the hard way”。

4 个回答

1

你不能在使用一个变量之前不先定义它。当你说 ratio = signal_power / noise_power 时,你实际上是在尝试使用两个机器从未听说过的变量。

在告诉机器如何处理这些变量之前,你必须先把它们介绍给机器。

你可以通过声明它们来做到这一点:

signal_power = 123
noise_power = 321

你可以把它们定义为任何你想要的数字,不仅限于123和321,但一定要在使用之前先定义它们。

3

你已经明白了——在使用signal_power之前,你得先给它赋个值。至于你应该把它设置成什么值,这其实和Python没什么关系,不过1通常是个安全的选择 :) 另外,别忘了也要定义一下noise_power

1

你确实需要给 signal_powernoise_power 这两个变量赋值。作者可能没有写出来,因为这些值是可以随意选择的。即使文本中给出了具体的数值,你也应该尝试不同的值。毕竟,如果你输入的内容和屏幕上显示的结果一模一样,那就没什么意思了。

signal_power = 100
noise_power = 17

这个例子定义了变量之间的数学关系。如果直接这样呈现出来,为什么不提供具体数值就不会显得那么神秘,因为在使用这个公式时,具体的数值是可以由使用者来提供的。代码示例也是如此。

撰写回答