>>> 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进行这种区分,因为字符串是文本,而整型值和浮点型都是数字。