- Python人工智能
- 李晓东编著
- 1623字
- 2025-02-21 13:30:33
1.4 剖析程序
新程序在文本编辑器中打开后,逐一查看每行代码,看看它都用到了哪些Python代码。
1. 注释
下面这行称为“注释”:

Python会忽略注释,我们可以用注释对程序进行说明。“#”标志之后的所有文本都是注释。
程序员在测试代码时,会在一行代码前加上“#”,临时删除它。在我们想弄清楚为什么程序不工作时,这样做可能有用。如果准备还原代码,去掉“#”即可。
Python也会忽略注释之后的空行。在程序中,想加入空行时就可以加入,这会使代码更容易阅读,就像书中的段落一样。
2. print()
print()将括号内的字符串显示在屏幕上。如:

代码行print('Hello world!')表示打印出字符串“Hello world!”的文本。Python执行到此处时,会调用print(),并将字符串“传递”给函数。传递给函数的值称为“参数”。需要注意,引号没有打印到屏幕上。它们只用来表示字符串的起止,不是字符串的一部分。
也可以用这个函数在屏幕上打印出空行,只要调用print()就可以了,括号内没有任何内容。
在输入函数时,末尾的左右括号表明它是一个函数。这就是为什么在本书中会看到print(),而不是print。
3. input()
input()等待用户在键盘上输入一些文本,并按下“Enter”键。

这个函数的值为一个字符串,即用户输入的文本。前面的代码行将这个字符串赋给变量myName。
我们可以认为input()调用的是一个表达式,它的值为用户输入的任何字符串。
4. 打印用户的名字
调用print(),在括号间包含表达式'It is good to meet you, ' + myName。

需要记住,表达式总是可以求值的。如果值'A1'是上一行代码保存在myName中的值,那么这个表达式的值为'It is good to meet you,A1'。这个字符串传给print(),它将输出到屏幕上。
5. len()
我们可以向len()传递一个字符串(或包含字符串的变量),该函数的值为一个整型值,即字符串中字符的个数。

在交互式环境中输入以下内容。

就像这个例子,len(myName)的值为一个整数。然后它被传递给print(),在屏幕上显示。请注意,print()允许传入一个整型值或字符串。但如果在交互式环境中输入以下内容,就会报错。

导致错误的原因不在于print(),而在于我们试图传递给print()的表达式。如果在交互式环境中单独输入这个表达式,则会得到同样的错误提示。

报错是因为,只能用“+”操作符加两个整数,或者连接两个字符串。不能让一个整数和一个字符串相加,这不符合Python的语法。可以使用字符串版本的整数,修改这个错误。
6. str()、int()和float()
如果想要连接一个整数(如28)和一个字符串,再传递给print(),就需要获得值'28'。它是28的字符串形式。str()可以传入一个整型值,函数值为它的字符串形式。例如:

因为str(28)的值为'28',所以表达式"I am "+str(28)+" years old."的值为"I am "+'28'+" years old.",它又求值为'I am 28 years old. '。这就是传递给print()的值。
str()、int()和float()将传入值分别转换成字符串、整数和浮点数形式。下面我们尝试用这些函数在交互式环境中转换一些值,看看效果。

上面的例子调用了str()、int()和float(),向它们传入其他数据类型的值,得到了字符串、整型或浮点型的值。
如果想要将一个整数或浮点数与一个字符串连接起来,那么使用str()就很方便。如果有一些字符串值将用于数学运算,则int()也很有用。例如,input()总是返回一个字符串,即使用户输入的是一个数字。在交互式环境中输入sp=input(),并输入文本99。

保存在sp中的值不是整数99,而是字符串'99'。如果想要用sp中的值进行数学运算,就用int()取得sp的整数形式,然后将这个新值存在sp中。

现在就能将sp变量作为整数,而不是字符串使用了。

注意,如果我们将一个不能求值为整数的值传递给int(),则Python将显示出错信息:

如果需要对浮点数进行取整运算,也可以用int()。

在如图1-15所示的Python程序中,使用了int()和str(),以取得适当数据类型的值。

myAge变量包含了input()返回的值。因为input()总是返回一个字符串(即使用户输入的是数字),所以我们可以使用int(myAge)返回字符串的整型值。这个整型值随后在表达式int(myAge)+1中与1相加。
相加的结果传递给str():str(int(myAge)+1)。然后,返回的字符串与字符串'You will be'和'in a year.'连接,所得值为一个更长的字符串。这个更长的字符串最终传递给print(),并在屏幕上显示。
假定用户输入字符串'4',保存在myAge中。字符串'4'被转换为一个整型数据,所以我们可以对它加1。结果为5。str()将这个结果转化为字符串,这样我们就可以将它与第二个字符串'in a year.'连接,创建最终的消息了。