3  Python 编程基础

3.1 学习目标

  1. 掌握如何在 Python 中编写和使用注释(单行和多行)。
  2. 了解如何将 Python 用作基本算术运算的计算器,并理解运算顺序。
  3. 在Python中使用数学库进行更复杂的数学运算。
  4. 理解如何在 Python 代码中使用适当的间距以提高可读性。
  5. 使用Python中创建、操作和重新赋值不同类型的变量(字符串、整数、浮点数)。
  6. 如何在Python中获取用户输入并进行计算。
  7. 理解在 Python 中命名变量的基本规则和最佳实践。
  8. 识别并修复与变量使用和命名相关的常见错误。

3.2 介绍

在本课程中,你将学习使用 Python 的基础知识。

要开始,请打开你喜欢的 Python 环境(例如 Jupyter Notebook、VS Code 或 PyCharm),并创建一个新的 Python 文件或笔记本。

接下来,根据你的环境,保存文件,文件名如“coding_basics.py”或“coding_basics.ipynb”。

你现在应该将本课程中的所有代码输入到该文件中。

3.3 注释

注释是 Python 不会进行运行的文本。它们用于解释代码在做什么。

使用符号 #,读作“井号”或“pound”,来开始注释。同一行中 # 之后的任何内容都会被忽略。例如:

# 加法
2 + 2
4

如果我们只是尝试在代码上方写 Addition,会导致错误:

Addition
2 + 2
NameError: name 'Addition' is not defined

我们可以将注释放在代码的同一行,但它需要放在代码之后。

2 + 2  # 加法
4

要编写多行注释,你可以添加更多的 # 符号:

# 加法
# 添加两个数字
2 + 2
4

或者你可以使用三引号 '''""":

'''
加法:
下面我们添加两个数字
'''
2 + 2
4

或者:

"""
加法:
下面我们添加两个数字
"""
2 + 2
4
词汇

注释:代码中被 Python 忽略的一段文本。注释用于解释代码在做什么,旨在供人类阅读。

练习

3.4 练习题:Python 中的注释

以下哪些代码块是有效的 Python 注释方式?

# 添加两个数字
2 + 2
2 + 2 # 添加两个数字
''' 添加两个数字
2 + 2
# 添加两个数字 2 + 2

通过尝试运行每个代码块来检查你的答案。

3.5 Python 作为计算器

如你所见,Python 可以按照标准方式作为计算器使用。

以下是一些其他基本算术运算的例子:

2 - 2 # 二减二
0
2 * 2  # 二乘二 
4
2 / 2  # 二除以二
1.0
2 ** 2  # 二的二次方
4

还有一些你可能会遇到的其他运算符。例如,在Python中,使用% 符号表示模数运算,它返回除法的余数。

10 % 3  # 十模三
1

// 是地板除运算符,它先除法然后向下取整到最接近的整数。

10 // 3  # 十地板除三
3
练习

3.6 练习题:取模与地板除

猜测以下代码块的结果,然后运行它们以检查你的答案:

5 % 4
5 // 4

3.7 运算顺序

Python 遵循标准的 PEMDAS 运算顺序(括号、指数、乘法、除法、加法、减法)。

例如,乘法在加法之前计算,所以下面的结果是 6

2 + 2 * 2   
6
练习

3.8 练习题:评估算术表达式

以下哪些代码块将计算为 10?

2 + 2 * 4
6 + 2 ** 2

3.9 使用数学库

我们还可以使用 math 库来进行更复杂的数学运算。例如,我们可以使用 math.sqrt 函数计算一个数的平方根。

import math
math.sqrt(100)  # 平方根
10.0

或者我们可以使用 math.log 函数计算一个数的自然对数。

import math
math.log(100)  # 对数
4.605170185988092

math.sqrtmath.log 是 Python 函数 的例子,其中一个 参数(例如 100)被传递给函数以进行计算。

我们将在后面学习更多关于函数的内容。

词汇

函数:执行特定任务的可重用代码块。函数通常接受输入(称为参数)并返回输出。

练习

3.10 练习题:使用数学库

使用 math 库,计算 81 的平方根。

在下方编写你的代码并运行以检查你的答案:

# 你的代码在这里

3.11 练习题:描述 Random 库的使用

考虑以下代码,它生成一个 1 到 10 之间的随机数:

import random
random.randint(1, 10)
10

在这段代码中,确定库、函数和函数的参数。

3.12 代码中的间距

良好的间距使你的代码更易读。在 Python 中,两个简单的间距实践可以大大提高代码的可读性:使用空行和在运算符周围添加空格。

3.13 缩进

Python 使用缩进来表示循环、函数和其他代码块的开始和结束。我们将在后面的课程中详细介绍这一点。

目前,需要注意的一件事是避免在代码前意外加入空格。

例如,考虑以下代码块:

import math
# 获取 100 的平方根
 math.sqrt(100)

尝试运行这段代码会导致错误:

IndentationError: unexpected indent

这是由于 math.sqrt 函数前的空格。我们可以通过删除空格来修复它。

import math
# 获取 100 的平方根
math.sqrt(100)

3.14 空行

使用空行来分隔代码的不同部分。

例如,考虑以下代码块:

# 设置数字
x = 5
y = 10
# 执行计算
result = x + y
# 显示结果
print(result)
15

我们可以添加空行来分隔代码的不同部分:

# 设置数字
x = 5
y = 10

# 执行计算
result = x + y

# 显示结果
print(result)
15

空行有助于将代码组织成逻辑部分,类似于书写中的段落。

3.15 运算符周围的空格

在数学运算符周围添加空格可以提高可读性:

# 难以阅读
x=5+3*2

# 容易阅读
x = 5 + 3 * 2

在列举项目时,在每个逗号后添加一个空格:

# 难以阅读
print(1,2,3)

# 容易阅读
print(1, 2, 3)

这一做法遵循书面英语的惯例,我们在逗号后加一个空格。它使代码中的项目列表更易读。

3.16 Python 中的变量

如你所见,为了在 Python 中存储一个值以供将来使用,我们使用 赋值运算符 = 将其赋值给一个 变量

my_var = 2 + 2  # 将 `2 + 2` 的结果赋值给名为 `my_var` 的变量
print(my_var)  # 打印 my_var
4

现在你已经创建了变量 my_var,Python 知道它并将在这个 Python 会话中跟踪它。

你可以打开你的环境查看你创建了哪些变量。这取决于你的 IDE 而有所不同。

那么,变量到底是什么?可以将其视为一个命名的容器,可以保存一个值。当你运行以下代码:

my_var = 20

你是在告诉 Python,“将数字 20 存储在名为 ‘my_var’ 的变量中”。

一旦代码运行,我们可以用 Python 术语说,“变量 my_var 的值是 20”。

尝试为以下代码块编写类似的句子:

first_name = "Joanna"

运行这段代码后,我们可以用 Python 术语说,“变量 first_name 的值是 Joanna”。

词汇

像 “Joanna” 这样的文本值称为 字符串,而像 20 这样的数字称为 整数。如果数字有小数点,则称为 浮点数,是“浮点数”(floating-point number)的简称。

以下是这三种变量类型的示例:

# 字符串变量
first_name = "Joanna"

# 整数变量
age = 5

# 浮点数变量
height = 1.4

你可以使用 type() 函数检查变量的类型。

print(type(first_name))
print(type(age))
print(type(height))
<class 'str'>
<class 'int'>
<class 'float'>
词汇

变量:一个可以保存值的命名容器。在 Python 中,变量可以存储不同类型的数据,包括数字、字符串和更复杂的对象。

3.17 重新赋值变量

重新赋值变量就像是更改容器的内容。

例如,之前我们运行了这段代码,将值 “Joanna” 存储在 first_name 变量中:

first_name = "Joanna"

要将其更改为不同的值,只需运行一个新的赋值语句并使用新值:

first_name = "Luigi"

你可以打印变量以观察变化:

first_name
'Luigi'

3.18 操作变量

大部分时间你将在 Python 中操作变量。让我们看一些快速的例子。

你可以对变量运行简单的命令。例如,下面我们将值 100 存储在变量中,然后对变量取平方根:

import math

my_number = 100
math.sqrt(my_number)
10.0

Python 将 my_number 视为数字 100,因此能够计算其平方根。


你还可以将现有变量组合起来创建新变量。例如,输入以下代码,将 my_number 加到自身,并将结果存储在名为 my_sum 的新变量中:

my_sum = my_number + my_number
my_sum
200

my_sum 的值应该是多少?先猜测,然后通过打印来检查。


Python 还允许我们使用 + 运算符连接字符串。例如,我们可以连接 first_namelast_name 变量来创建一个名为 full_name 的新变量:

first_name = "Joanna"
last_name = "Luigi"
full_name = first_name + " " + last_name
full_name
'Joanna Luigi'
练习

3.19 练习题:变量赋值与操作

考虑以下代码。变量 answer 的值是多少?想一想,然后运行代码检查你的答案。

eight = 9
answer = eight - 8
answer

3.20 获取用户输入

尽管在数据分析中不常用,但 Python 的 input() 函数是一个很酷的 Python 功能,你应该了解。它允许你获取用户输入。

这是一个简单的例子。我们可以请求用户输入并将其存储在名为 name 的变量中。

name = input()

然后我们可以向用户打印一个问候语。

print("Hello,", name)

我们还可以在输入提示中包含一个问题:

name = input('What is your name? ')
print("Hello,", name)

让我们看另一个例子。我们将告诉用户他们名字中有多少个字母。

name = input('What is your name? ')
print("There are", len(name), "letters in your name")

例如,如果你运行这段代码并输入 “Kene”,你可能会看到:

What is your name? Kene
There are 4 letters in your name
练习

3.21 练习题:使用 Input()

编写一个简短的程序,询问用户他们最喜欢的颜色,然后打印一条消息,说“xx 颜色也是我最喜欢的颜色!”,其中 xx 是他们输入的颜色。通过运行程序并输入一个颜色来测试你的程序。

3.22 与变量相关的常见错误

在 Python 中使用变量时,你会遇到的最常见错误之一是 NameError。当你尝试使用一个尚未定义的变量时,就会发生这种错误。例如:

my_number = 48  # 定义 `my_number`
My_number + 2  # 尝试将 2 加到 `my_number`

如果你运行这段代码,会得到如下错误信息:

NameError: name 'My_number' is not defined

在这里,Python 返回错误信息,因为我们尚未创建(或 定义)变量 My_number。记住,Python 是区分大小写的;我们定义了 my_number,但尝试使用 My_number

要修复此问题,确保你使用的是正确的变量名:

my_number = 48
my_number + 2  # 这将工作并返回 50
50

始终仔细检查你的变量名以避免此错误。记住,在 Python 中,my_numberMy_numberMY_NUMBER 都是不同的变量。


当你开始学习 Python 时,处理错误可能会令人沮丧。它们通常很难理解。

但习惯读取和理解错误很重要,因为你在编码职业生涯中会经常遇到错误。

稍后,我们将向你展示如何使用像 ChatGPT 这样的语言模型(LLMs)来调试错误。

但在此之前,最好尝试自己发现和修复错误。

练习

3.23 练习题:调试变量错误

下面的代码返回一个错误。为什么?(仔细看看)

my_1st_name = "Kene"
my_last_name = "Nwosu"

print(my_Ist_name, my_last_name)

提示:看看变量名。它们是否一致?

3.24 命名变量

计算机科学中只有 两件难事:缓存失效和 命名事物

— Phil Karlton.

因为你在 Python 中的很多工作涉及与你创建的变量互动,给这些变量选择智能的名字很重要。

命名变量很难,因为名字应该既 简短(这样你可以快速键入它们)又 信息丰富(这样你可以轻松记住变量包含的内容),而这两个目标往往相冲突。

因此,像下面这样太长的名字是不好的,因为它们需要很长时间来输入。

sample_of_the_ebola_outbreak_dataset_from_sierra_leone_in_2014

而像 data 这样的名字也是不好的,因为它不具有信息性;名字没有很好地说明变量包含什么。

随着你编写更多的 Python 代码,你将学会如何编写简短且信息丰富的名字。


对于由多个单词组成的名字,有几种约定用于分隔单词:

snake_case = "蛇形命名使用下划线"
camelCase = "骆驼命名法将新单词首字母大写(但不包括第一个单词)"
PascalCase = "帕斯卡命名法将所有单词包括第一个单词都首字母大写"

我们推荐 snake_case,它使用全小写单词,并用 _ 分隔单词。


还要注意,变量名有一些限制:

  • 名称必须以字母或下划线开头。因此 2014_data 不是一个有效的名字(因为它以数字开头)。尝试运行下面的代码块看看会得到什么错误。
2014_data = "This is not a valid name"
  • 名称只能包含字母、数字和下划线 (_)。因此 ebola-dataebola~data 或带空格的 ebola data 都不是有效的名字。
ebola-data = "This is not a valid name"
ebola~data = "This is not a valid name"
附注

虽然我们在 Python 中推荐使用 snake_case 作为变量名,但你可能会看到其他约定,如 camelCase 或 PascalCase,特别是在使用其他语言的代码或某些 Python 库时。在你自己的代码中要保持一致,并遵循你所工作的任何项目或团队的惯例。

练习

3.25 练习题:有效的变量命名约定

以下哪些变量名在 Python 中是有效的?尝试在不运行代码的情况下确定,然后通过尝试运行每行代码来检查你的答案。

然后修复无效的变量名。

1st_name = "John"
last_name = "Doe"
full-name = "John Doe"
age_in_years = 30
current@job = "Developer"
PhoneNumber = "555-1234"
_secret_code = 42

3.26 总结

在本课程中,我们涵盖了 Python 编程的基本构建块:

  1. 注释:使用 # 进行单行注释和三引号进行多行注释。
  2. 基本算术:将 Python 用作计算器,并理解运算顺序。
  3. 数学库:执行复杂的数学运算。
  4. 代码间距:通过适当的间距提高可读性。
  5. 变量:创建、操作和重新赋值不同类型的变量。
  6. 获取用户输入:使用 input() 函数获取用户输入。
  7. 变量命名:遵循命名变量的规则和最佳实践。
  8. 常见错误:识别并修复与变量相关的错误。

这些概念构成了 Python 编程的基础。随着你继续学习,你将以这些基础为基础,创建更复杂和强大的程序。记住,实践是掌握这些概念的关键!