简介
本节将讨论如何创建你的第一个程序、运行解释器以及一些基本的调试方法。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
本节将讨论如何创建你的第一个程序、运行解释器以及一些基本的调试方法。
Python 程序总是在解释器中运行。
解释器是一个“基于控制台”的应用程序,通常从命令 shell 运行。
python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
专业程序员通常可以毫无问题地以这种方式使用解释器,但对于初学者来说,它并不是那么用户友好。你可能正在使用一个为 Python 提供不同界面的环境。这没关系,但学习如何运行 Python 终端仍然是一项有用的技能。
当你启动 Python 时,你会进入一个可以进行实验的交互模式。
如果你开始输入语句,它们会立即运行。不存在编辑/编译/运行/调试周期。
>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>>
这种所谓的读取-求值-输出循环(或 REPL)对于调试和探索非常有用。
注意:如果你不知道如何与 Python 进行交互,请停止你正在做的事情并弄清楚如何操作。如果你正在使用 IDE,它可能隐藏在菜单选项或其他窗口后面。本课程的许多部分都假设你可以与解释器进行交互。
让我们仔细看看 REPL 的各个元素:
>>>
是解释器提示符,用于开始新语句。...
是解释器提示符,用于继续语句。输入空白行以完成输入并运行你输入的内容。...
提示符可能会根据你的环境显示或不显示。在本课程中,它显示为空白,以便于剪切/粘贴代码示例。
下划线 _
保存上一个结果。
>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>
这仅在交互模式下成立。 你在程序中从不使用 _
。
程序被放在 .py
文件中。
## hello.py
print('hello world')
你可以使用你喜欢的文本编辑器在 /home/labex/project
目录中创建一个 hello.py
文件。
要执行一个程序,在终端中使用 python
命令运行它。例如,在 Unix 命令行中:
$ python hello.py
hello world
bash %
或者在 Windows 命令提示符中:
C:\SomeFolder>hello.py
hello world
C:\SomeFolder>c:\python36\python hello.py
hello world
注意:在 Windows 上,你可能需要指定 Python 解释器的完整路径,例如 c:\python36\python
。但是,如果 Python 是按照常规方式安装的,你可能只需输入程序的名称,如 hello.py
。
让我们解决以下问题:
一天早上,你出门并在芝加哥西尔斯大厦旁的人行道上放了一张一美元的钞票。此后的每一天,你出门时都会将钞票的数量翻倍。那么需要多长时间这堆钞票的高度才能超过这座大厦的高度?
以下是在 /home/labex/project
目录中创建一个 sears.py
文件的解决方案:
## sears.py
bill_thickness = 0.11 * 0.001 ## 米(0.11 毫米)
sears_height = 442 ## 高度(米)
num_bills = 1
day = 1
while num_bills * bill_thickness < sears_height:
print(day, num_bills, num_bills * bill_thickness)
day = day + 1
num_bills = num_bills * 2
print('天数', day)
print('钞票数量', num_bills)
print('最终高度', num_bills * bill_thickness)
当你运行它时,会得到以下输出:
$ python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
天数 23
钞票数量 4194304
最终高度 461.37344
以这个程序为指导,你可以学习到一些关于 Python 的重要核心概念。
一个 Python 程序是一系列语句的序列:
a = 3 + 4
b = a * 2
print(b)
每条语句都以换行符结束。语句会依次执行,直到控制流到达文件末尾。
注释是不会被执行的文本。
a = 3 + 4
## 这是一条注释
b = a * 2
print(b)
注释由 #
表示,并延伸到该行的末尾。
变量是一个值的名称。你可以使用从 a 到 z 的字母(大写和小写)。以及下划线字符 _
。数字也可以是变量名的一部分,但不能作为第一个字符。
height = 442 ## 有效
_height = 442 ## 有效
height2 = 442 ## 有效
2height = 442 ## 无效
变量不需要声明其值的类型。类型与右侧的值相关联,而不是变量的名称。
height = 442 ## 一个整数
height = 442.0 ## 浮点数
height = 'Really tall' ## 一个字符串
Python 是动态类型的。变量的“类型”在程序执行时可能会根据当前赋给它的值而改变。
Python 是大小写敏感的。大写字母和小写字母被视为不同的字母。这些都是不同的变量:
name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'
语言语句总是小写的。
while x < 0: ## 正确
WHILE x < 0: ## 错误
while
语句用于执行循环。
while num_bills * bill_thickness < sears_height:
print(day, num_bills, num_bills * bill_thickness)
day = day + 1
num_bills = num_bills * 2
print('Number of days', day)
只要 while
后面的表达式为 真
,缩进在 while
下面的语句就会执行。
缩进用于表示属于同一组的语句。看前面的例子:
while num_bills * bill_thickness < sears_height:
print(day, num_bills, num_bills * bill_thickness)
day = day + 1
num_bills = num_bills * 2
print('Number of days', day)
缩进将以下语句组合在一起,作为重复执行的操作:
print(day, num_bills, num_bills * bill_thickness)
day = day + 1
num_bills = num_bills * 2
因为末尾的 print()
语句没有缩进,所以它不属于循环。空行只是为了提高可读性,不影响执行。
Python唯一的要求是同一代码块内的缩进需保持一致。例如,这是一个错误示例:
while num_bills * bill_thickness < sears_height:
print(day, num_bills, num_bills * bill_thickness)
day = day + 1 ## 错误
num_bills = num_bills * 2
if
语句用于执行条件判断:
if a > b:
print('Computer says no')
else:
print('Computer says yes')
你可以使用 elif
添加额外的检查来判断多个条件。
if a > b:
print('Computer says no')
elif a == b:
print('Computer says yes')
else:
print('Computer says maybe')
print
函数会输出一行包含所传递值的文本。
print('Hello world!') ## 输出文本 'Hello world!'
你可以使用变量。打印的文本将是变量的值,而非变量名。
x = 100
print(x) ## 输出文本 '100'
如果你向 print
传递多个值,它们会用空格分隔。
name = 'Jake'
print('My name is', name) ## 输出文本 'My name is Jake'
print()
总是会在末尾添加一个换行符。
print('Hello')
print('My name is', 'Jake')
这将输出:
Hello
My name is Jake
可以抑制额外的换行符:
print('Hello', end=' ')
print('My name is', 'Jake')
这段代码现在将输出:
Hello My name is Jake
要读取用户输入的一行内容,可使用 input()
函数:
name = input('Enter your name:')
print('Your name is', name)
input
会向用户打印一个提示,并返回他们的响应。这对于小型程序、学习练习或简单调试很有用。在实际程序中它的使用并不广泛。
有时你需要指定一个空的代码块。为此可使用关键字 pass
。
if a > b:
pass
else:
print('Computer says false')
这也被称为“空操作”语句。它不执行任何操作。它用作语句的占位符,可能稍后会添加内容。
这是你需要创建 Python 文件并运行它们的第一组练习。从现在开始,假设你在 ~/project/
目录中编辑文件。为了帮助你找到合适的位置,已经创建了一些带有适当文件名的空起始文件。查找第一个练习中使用的文件 bounce.py
。
一个橡胶球从100米的高度落下,每次撞击地面时,它会反弹至下落高度的3/5。编写一个名为 bounce.py
的程序,打印出显示前10次弹跳高度的表格。
以下是一个解决方案:
## bounce.py
height = 100
bounce = 1
while bounce <= 10:
height = height * (3 / 5)
print(bounce, round(height, 4))
bounce += 1
你的程序应该生成一个类似这样的表格:
1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998
注意:如果你使用 round()
函数,可以稍微清理一下输出。尝试用它将输出四舍五入到4位数字。
1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047
以下代码片段包含了西尔斯大厦问题的代码。其中也存在一个错误。
## sears.py
bill_thickness = 0.11 * 0.001 ## 米(0.11毫米)
sears_height = 442 ## 高度(米)
num_bills = 1
day = 1
while num_bills * bill_thickness < sears_height:
print(day, num_bills, num_bills * bill_thickness)
day = days + 1
num_bills = num_bills * 2
print('天数', day)
print('纸张数', num_bills)
print('最终高度', num_bills * bill_thickness)
将上述代码复制并粘贴到一个名为 sears.py
的新程序中。当你运行这段代码时,将会得到一个错误消息,导致程序崩溃,如下所示:
Traceback (most recent call last):
File "sears.py", line 10, in <module>
day = days + 1
NameError: name 'days' is not defined
阅读错误消息是Python编程的一个重要部分。如果你的程序崩溃了,回溯消息的最后一行就是程序崩溃的实际原因。在这之上,你应该会看到一段源代码片段,然后是一个标识文件名和行号。
恭喜你!你已经完成了“第一个程序”实验。你可以在LabEx中练习更多实验来提升你的技能。