>>> from env_helper import info; info()
页面更新时间: 2023-04-15 21:16:54
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-7-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.9. 程序剖析

1.9.1. 算法是什么

真刀真枪地编写程序前,先来说说何为计算机编程。简而言之,计算机编程就是告诉计算机 如何做。计算机多才多艺,但不太善于独立思考,我们必须提供详尽的细节,使用它们能够明白 的语言将算法提供给它们。算法只不过是流程或菜谱的时髦说法,详尽地描述了如何完成某项任 务。请看下面的菜谱:

鸡蛋火腿肠:先取一些火腿肠。
再加些火腿肠和鸡蛋。
如果喜欢吃辣,加些辣味火腿肠。
煮熟为止。记得每隔10分钟检查一次。

这个菜谱并不神奇,但其结构很有启发性。它由一系列必须按顺序执行的操作说明组成,其中有些可直接完成(取些火腿肠),有些需要特别注意(如果喜欢吃辣),还有一些需要重复多次每隔10分钟检查一次)。 菜谱和算法都由原料(对象)和操作说明(语句)组成。在这个示例中,火腿肠和鸡蛋是原料,而操作说明包括添加火腿肠、烹饪指定的时间等。

  • 新程序在文件编辑器中打开后,让我们快速看一看它用到的Python指令,逐一查看每行代码。

1.9.2. 注释

Python中的注释有单行注释和多行注释,确保对模块, 函数, 方法和行内注释使用正确的风格。

Python中单行注释以 #开头,例如::

>>> # 这是一个注释
>>> print("Hello, World!")
Hello, World!

多行注释用三个单引号'''或者三个双引号"""将注释括起来,例如:

单引号( '

>>> '''
>>> 这是多行注释,用三个单引号
>>> 这是多行注释,用三个单引号
>>> 这是多行注释,用三个单引号
>>> '''
>>> print("Hello, World!")
Hello, World!

双引号( "

>>> """
>>> 这是多行注释,用三个单引号
>>> 这是多行注释,用三个单引号
>>> 这是多行注释,用三个单引号
>>> """
>>> print("Hello, World!")
Hello, World!

Python会忽略注释,你可以用它们来写程序注解,或提醒自己代码试图完成的 事。这一行中,#标志之后的所有文本都是注释。

1.9.3. print()函数

print() 函数将括号内的字符串显示在屏幕上。

>>> print('Hello world!')
>>> print('What is your name?') # ask for their name
Hello world!
What is your name?

代码行 print('Hello world!') 表示“打印出字符串 'Hello world!’ 的文本”。Python 执行到这行时,你告诉Python调用 print() 函数,并将字符串“传递”给函数。传递 给函数的值称为“参数”。请注意,引号没有打印在屏幕上。它们只是表示字符串 的起止,不是字符串的一部分。

也可以用这个函数在屏幕上打印出空行,只要调用 print() 就可以了,括号内没 有任何东西。

在写函数名时,末尾的左右括号表明它是一个函数的名字。这就是为什么在本 书中你会看到 print() ,而不是print。第2章更详细地探讨了函数。

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

>>> x="a"
>>> y="b"
>>> # 换行输出
>>> print( x )
>>> print( y )
>>>
>>> print('---------')
>>> # 不换行输出
>>> print( x, end=" " )
>>> print( y, end=" " )
>>> print()
>>> # 以上实例执行结果为:
a
b
---------
a b

1.9.4. input() 函数

函数等待用户在键盘上输入一些文本,并按下回车键。

>>> myName = input()
Cat

这个函数求值为一个字符串,即用户输入的文本。前面的代码行将这个字符串赋给变量 myName

你可以认为 input() 函数调用是一个表达式,它求值为用户输入的任何字符串。 如果用户输入 'A1’ ,那么该表达式就求值为myName = A1’

1.9.5. 打印用户的名字

接下来的 print() 调用,在括号间包含表达式 'It is good to meet you,' +myName

print('It is good to meet you, ' + myName)

要记住,表达式总是可以求值为一个值。 如果 Al 是上一行代码保存在 myName 中的值,那么这个表达式就求值为'It is good to meet you,A1’。 这个字符串传给 print()

它将输出到屏幕上。

1.9.6. len()函数

你可以向 len() 函数传递一个字符串(或包含字符串的变量),然后该函数求值 为一个整型值,即字符串中字符的个数。

print('The length of your name is:')
print(len(myName))
len('')

在交互式环境中输入以下内容试一试:

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

print('I am ' + 29 + ' years old.')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print('I am ' + 29 + ' years old.')
TypeError: Can't convert 'int' object to str implicitly

导致错误的原因不是 print() 函数,而是你试图传递给 print() 的表达式。如果在 交互式环境中单独输入这个表达式,也会得到同样的错误。

'I am ' + 29 + ' years old.'
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
'I am ' + 29 + ' years old.'
TypeError: Can't convert 'int' object to str implicitly

报错是因为,只能用 + 操作符加两个整数,或连接两个字符串。不能让一个整 数和一个字符串相加,因为这不符合Python的语法。可以使用字符串版本的整数, 修复这个错误。这在下一节中解释。

1.9.7. str()int()float() 函数

如果想要连接一个整数(如29)和一个字符串,再传递给 print() ,就需要获得 值 '29' 。它是29的字符串形式。str() 函数可以传入一个整型值,并求值为它的字符 串形式,像下面这样:

>>> str(29)
'29'
>>> print('I am ' + str(29) + ' years old.')
I am 29 years old.

因为 str(29)求值为 ’29’ , 所以表达式'I am ' + str(29) + ' years old.' 求值为'I am ' + '29' + ' years old.', 它又求值为’I am 29 years old.’ 。 这就是传递给 print() 函数的值。

str()int()float() 函数 将分别求值为传入值的字符串、整数和浮点数形式。请 尝试用这些函数在交互式环境中转换一些值,看看会发生什么。

>>> str(0)
>>> str(-3.14)
>>> int('42')
>>> int('-99')
>>> int(1.25)
>>> int(1.99)
>>> float('3.14')
>>> float(10)
10.0

前面的例子调用了 str()int()float() 函数, 向它们传入其他数据类型的值,得到了字符串、整型或浮点型的值。

如果想要将一个整数或浮点数与一个字符串连接, str() 函数就很方便。如果你 有一些字符串值,希望将它们用于数学运算, int() 函数也很有用。例如, input() 函 数总是返回一个字符串,即便用户输入的是一个数字。 在交互式环境中输入 spam = input() ,在它等待文本时输入 101

>>> spam = input()
>>> spam
45
'45'

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

>>> spam = int(spam)
>>> spam
45

现在你应该能将 spam 变量作为整数,而不是字符串使用。

>>> spam * 10 / 5
90.0

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

>>> int('99.99')
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

Cell In [14], line 1
----> 1 int('99.99')


ValueError: invalid literal for int() with base 10: '99.99'

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

>>> int(7.7)
>>> int(7.7)+ 1
8

在你的程序中,最后3行使用了函数 int()str() ,取得适当数据类型的值。

print('What is your age?') # ask for their age
myAge = input()
print('You will be ' + str(int(myAge) + 1) + ' in a year.')

myAge 变量包含了 input() 函数返回的值。因为 input() 函数总是返回一个字符串 (即使用户输入的是数字),所以你可以使用int(myAge)返回字符串的整型值。这个 整型值随后在表达式int(myAge)+ 1中与1相加。

相加的结果传递给 str() 函数:str(int(myAge)+l) 。然后,返回的字符串与字符 串 'You will be ''in a year.' 连接, 求值为一个更长的字符串。这个更长的字符串最 终传递给print(),在屏幕上显示。

假定用户输入字符串 ’4’ ,保存在 myAge 中。字符串 ’4’ 被转换为一个整型,所以 你可以对它加1。结果是5。str() 函数将这个结果转化为字符串,这样你就可以将它 与第二个字符串 ’inayear.’ 连接,创建最终的消息。

1.9.8. 文本和数字相等判断

虽然数字的字符串值被认为与整型值和浮点型值完全不同,但整型值可以与 浮点值相等。

>>> 42 == '42'
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True

Python进行这种区分,因为字符串是文本,而整型值和浮点型都是数字。