2011-12-24 52 views
0

我被“Think Python”的3.3章节“数学函数”所困扰。Python的数学模块和“Think Python”

它告诉我导入数学(通过解释器)。 然后打印数学,我应该得到的东西是这样的: <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

在书上说“第一个例子使用日志10来计算分贝信噪比(假设signal_power和noise_power定义)”。

所以我认为这个问题可能是,我没有定义“signal_power”,但我不知道该怎么做,什么分配给它...

这是第一次我觉得这本书没有牵着我的手,我已经迷失了。说实话,我不明白这整个章节。

顺便说一下,我使用Python2.7和Windows XP。如果有人认为我应该这样做,我可以复制并粘贴整个章节。
Python是我的第一语言,我已经尝试使用“Learn Python hard way”学习它,但在第16章中遇到困难。于是我决定使用“Think Python”,然后返回到“Learn Python hard way” 。

回答

1

你确实需要分配一个值都signal_powernoise_power。作者可能会将它们排除在外,因为这些值是任意的。即使在文本中提供精确值时,也应该使用值。毕竟,如果屏幕上的结果与页面上的结果相同,则不需要输入任何内容。

signal_power = 100 
noise_power = 17 

这个特殊的例子定义了变量之间的数学关系。如果它是这样呈现的,那么确切的数值就不会被遗漏,因为它们在使用公式时会由某人提供。代码示例同样适用。

+0

谢谢你和其他人的帮助。现在我懂了。这是非常明显的,但我看不到它......我按照步骤,可以得到结果,但我仍然无法得到章节本身。我认为这是我缺乏数学知识。我将对出现的术语(如弧度)做一些研究,并可能会回过头来问一些问题(我可以在这里问另一个问题,还是应该开始另一个话题?)另外,我应该开始学习一些数学让这个编程学习更容易? – 2011-12-25 00:26:06

+0

除了研究级别的数学问题外,还有[math.stackexchange.com](http://math.stackexchange.com/),虽然其他网站已经涵盖了基本的(如弧度vs度)。从[mathforum.org](http://mathforum.org)开始,尤其是通过搜索[Ask Dr Math](http://mathforum.org/dr.math/)档案。 – outis 2011-12-25 02:22:28

+0

学习数学的主要收获是心理学科,而不是你对任何特定主题的了解;你学会了如何严谨思考。至于提出多个问题,SO使用Q&A而不是论坛格式。每个问题应该是不同的,不应该涉及讨论。阅读更多FAQ。 – outis 2011-12-25 02:23:32

1

这本书是针对Python的老版本显然。但这与你的实际问题无关。

尝试定义signal_power。例如

signal_power = 0 
+1

这不是一个好主意,将它设置为'0'是因为它后面的'log10'被计算出来并且'log10(0)'是-infinity,这对于这个例子并不是特别有用。 – exfizik 2011-12-24 23:30:43

+1

Pssst!这是下一个问题的答案... – 2011-12-24 23:39:23

3

你已经想通了 - 在使用它之前,你必须设置signal_power的值。至于你必须设置它 - 它不是一个真正的Python相关的问题,但1总是一个安全的选择:)当你在这里,不要忘记定义noise_power

1

如果不先定义/声明变量,则不能使用变量。当你说ratio = signal_power/noise_power, 你试图访问解释器从未听说过的两个变量。

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

通过声明他们做到这一点:

signal_power = 123 
noise_power = 321 

您可以将它们定义为任何你想要的数量,而不是只有123和321,但你必须在使用之前定义它们。