>>> from env_helper import info; info()
页面更新时间: 2024-01-06 09:00:24
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-16-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.10. 剖析 Python 程序中的一些概念

1.10.1. 算法是什么

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

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

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

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

1.10.2. 注释

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

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

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

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

1.10.3. 单引号( '

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

1.10.4. 双引号( "

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

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

1.10.5. 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() 就可以了,括号内没有任何东西。

在写函数名时,末尾的左右括号表明它是一个函数的名字。现在的Python 3 程序中会经常看到 print() ,而不是 print

print() 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="" , 通过实例查看一下执行结果:

>>> x="a"
>>> y="b"

换行输出:

>>> print( x )
>>> print( y )
a
b

不换行输出:

>>> print( x, end=" " )
>>> print( y, end=" " )
a b

1.10.6. input() 函数

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

>>> myName = input()
asdf

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

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

1.10.7. 打印用户的名字

接下来的 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.10.8. 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.10.9. 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
101
'101'

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

>>> spam = int(spam)
>>> spam
101

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

>>> spam * 10 / 5
202.0

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

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

ValueError                                Traceback (most recent call last)

Cell In [24], 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.10.10. 文本和数字相等判断

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

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

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