Python基础:语法、数据类型和控制结构

你是想学习Python编程的新手吗?如果是,这个面向初学者的教程将帮助你熟悉这门语言的基础。

本教程将向你介绍Python的语法——相当接近于英语。你还将学习如何使用不同的数据类型、条件语句和循环。

如果你的开发环境中已经安装了Python,启动一个Python REPL并跟着代码一起练习。或者如果你想跳过安装——直接开始编码——我建议你前往Google Colab进行练习。

Hello, Python!

在用Python编写经典的“Hello, world!”程序之前,先来了解一下这门语言。Python是一种解释型语言。这是什么意思呢?

在任何编程语言中,你编写的所有源代码都需要被翻译成机器语言。像C和C++这样的编译型语言需要在程序运行之前准备好整个机器码,而解释器则会即时解析源代码并进行解释。

创建一个Python脚本,输入以下代码并运行:

print("Hello, World!")

为了打印出Hello, World!,我们使用了`print()`函数,这是Python中众多内置函数之一。

在这个超简单的例子中,请注意“Hello, World!”是一个序列——一个字符字符串。Python字符串由一对单引号或双引号界定。因此,要打印任何消息字符串,你可以使用`print(“<message_string>”)`。

读取用户输入

现在让我们更进一步,使用`input()`函数读取用户的输入。你应该总是提示用户以让他们知道应该输入什么

这是一个简单的程序,获取用户输入的名字并向其致意。

注释有助于通过向用户提供额外的上下文来提高代码的可读性。Python中的单行注释以#开头。

注意,代码片段中的字符串前面有一个`f`。这样的字符串被称为格式化字符串或f字符串。要在f字符串中替换变量的值,请在一对花括号中指定变量名,如下所示:

# 获取用户输入
user_name = input("Please enter your name: ")

# 向用户致意
print(f"Hello, {user_name}! Nice to meet you!")

运行程序时,首先会提示输入,然后打印出问候消息:

Please enter your name: Bala
Hello, Bala! Nice to meet you!

接下来让我们学习Python中的变量和数据类型。

Python中的变量和数据类型

在任何编程语言中,变量就像是容器,用于存储信息。在我们写的代码中,我们已经创建了一个变量`user_name`。当用户输入他们的名字(一个字符串)时,它会被存储在`user_name`变量中。

Python中的基本数据类型

让我们通过简单的例子了解Python中的基本数据类型:`int`、`float`、`str`和`bool`:

整数 (`int`):整数是没有小数点的整数。你可以这样创建整数并将其赋值给变量:

age = 25
discount= 10

这些是赋值语句,用于将值赋给变量。在像C这样的语言中,你需要在声明变量时指定数据类型,但Python是一种动态类型语言。它会根据值推断数据类型。因此你可以重新赋值给变量以持有完全不同数据类型的值:

number = 1
number = 'one'

你可以使用`type`函数检查Python中任何变量的数据类型:

number = 1
print(type(number))

`number`是整数:

Output >>> <class 'int'>

我们现在将一个字符串值赋给`number`:

number = 'one'
print(type(number))
Output >>> <class 'str'>

浮点数 (`float`):浮点数表示带有小数点的实数。你可以这样创建`float`数据类型的变量:

height = 5.8
pi = 3.14159

你可以对数值数据类型执行各种操作——加法、减法、整除、指数运算等等。以下是一些示例:

# 定义数值变量
x = 10
y = 5

# 加法
add_result = x + y
print("Addition:", add_result)  # 输出: 15

# 减法
sub_result = x - y
print("Subtraction:", sub_result)  # 输出: 5

# 乘法
mul_result = x * y
print("Multiplication:", mul_result)  # 输出: 50

# 除法(浮点结果)
div_result = x / y
print("Division:", div_result)  # 输出: 2.0

# 整数除法(地板除)
int_div_result = x // y
print("Integer Division:", int_div_result)  # 输出: 2

# 取模(除法余数)
mod_result = x % y
print("Modulo:", mod_result)  # 输出: 0

# 指数运算
exp_result = x ** y
print("Exponentiation:", exp_result)  # 输出: 100000

字符串 (`str`):字符串是字符序列,包含在单引号或双引号中。

name = "Alice"
quote = 'Hello, world!'

布尔值 (`bool`):布尔值表示`True`或`False`,用于表示条件的真值。

is_student = True
has_license = False

Python在处理不同数据类型时的灵活性允许你有效地存储、执行各种操作并操控数据。

以下是一个综合了我们所学数据类型的示例:

# 综合使用不同的数据类型
age = 30
score = 89.5
name = "Bob"
is_student = True

# 检查分数是否高于通过阈值
passing_threshold = 60.0
is_passing = score >= passing_threshold

print(f"{name=}")
print(f"{age=}")
print(f"{is_student=}")
print(f"{score=}")
print(f"{is_passing=}")

以下是输出:

Output >>>

name='Bob'
age=30
is_student=True
score=89.5
is_passing=True

超越基本数据类型

假设你正在管理一个班级学生的信息。创建一个集合来存储所有学生的信息会比为每个学生重复定义变量更有帮助。

列表

列表是有序的项目集合——用一对方括号括起来。列表中的项目可以是相同或不同的数据类型。列表是可变的,意味着你可以在创建后更改其内容。

这里,`student_names`包含学生的名字:

# 列表
student_names = ["Alice", "Bob", "Charlie", "David"]

元组

元组是类似于列表的有序集合,但它们是不可变的,即创建后不能改变其内容。

假设你希望`student_scores`成为一个不可变的集合,包含学生的考试分数。

# 元组
student_scores = (85, 92, 78, 88)

字典

字典是键值对的集合。字典的键应该是唯一的,它们与相应的值相对应。它们是可变的,允许你将信息与特定键关联。

这里,`student_info`包含每个学生的信息——名字和分数——作为键值对:

student_info = {'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88}

但是,Python中创建字典还有一种更优雅的方式。

我们接下来要学习一个新概念:字典推导式。如果你一时不太明白也不要担心。你可以稍后学习更多并进行练习。

但推导式相当直观易懂。如果你希望`student_info`字典以学生名字作为键且其对应的考试分数作为值,你可以这样创建字典:

# 使用字典推导式创建student_info字典
student_info = {name: score for name, score in zip(student_names, student_scores)}

print(student_info)

注意我们如何使用`zip()`函数同时迭代`student_names`列表和`student_scores`元组。

Output >>>

{'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88}

在这个例子中,字典推导式将`student_names`列表中的每个学生名字与`student_scores`元组中的对应考试分数直接配对,以创建以名字为键、分数为值的`student_info`字典。

现在你已经熟悉了原始数据类型和一些序列/可迭代对象,接下来让我们继续讨论的下一个部分:控制结构

Python中的控制结构

当你运行一个Python脚本时,代码的执行是按顺序进行的,按照它们在脚本中出现的顺序。

有时,你需要实现逻辑以根据某些条件控制执行流或遍历一个可迭代对象以处理其中的项目。

我们将学习if-else语句如何促进分支和条件执行。我们还将学习如何使用循环和循环控制语句break和continue迭代序列。

If语句

当你只需要在特定条件为真时执行一段代码时,可以使用`if`语句。如果条件为假,则不执行该代码块。Python Basics: Syntax, Data Types, and Control Structures
Image by Author

看看这个例子:

score = 75

if score >= 60:
    print("Congratulations! You passed the exam.")

在这个例子中,只有当`score`大于或等于60时,`if`块中的代码才会被执行。由于`score`是75,因此会打印出消息”Congratulations! You passed the exam.”。

Output >>> Congratulations! You passed the exam.

If-else条件语句

`if-else`语句允许你在条件为真时执行一个代码块,而在条件为假时执行一个代码块。
Image by Author

让我们基于测试分数的例子进行扩展:

score = 45

if score >= 60:
    print("Congratulations! You passed the exam.")
else:
    print("Sorry, you did not pass the exam.")

在这里,如果`score`小于60,则会执行`else`块中的代码:

Output >>> Sorry, you did not pass the exam.

If-elif-else阶梯

`if-elif-else`语句用于当你有多个条件需要检查时。它允许你测试多个条件并在遇到第一个为真的条件时执行相应的代码块。

如果`if`和所有`elif`语句中的条件都为假,则执行`else`块。
Image by Author

score = 82

if score >= 90:
    print("Excellent! You got an A.")
elif score >= 80:
    print("Good job! You got a B.")
elif score >= 70:
    print("Not bad! You got a C.")
else:
    print("You need to improve. You got an F.")

在这个例子中,程序会根据多个条件检查`score`。第一个为真的条件块中的代码将被执行。由于`score`是82,我们得到:

Output >>> Good job! You got a B.

嵌套If语句

嵌套`if`语句用于当你需要在另一个条件中检查多个条件时。

name = "Alice"
score = 78

if name == "Alice":
    if score >= 80:
        print("Great job, Alice! You got an A.")
    else:
        print("Good effort, Alice! Keep it up.")
else:
    print("You're doing well, but this message is for Alice.")

在这个例子中,有一个嵌套的`if`语句。首先,程序检查`name`是否为”Alice”。如果为真,则检查`score`。由于`score`是78,执行内部的`else`块,打印出”Good effort, Alice! Keep it up.”。

Output >>> Good effort, Alice! Keep it up.

Python提供了几种循环结构来遍历集合或执行重复任务。

For循环

在Python中,`for`循环提供了一种简洁的语法来让我们遍历现有的可迭代对象。我们可以这样遍历`student_names`列表:

student_names = ["Alice", "Bob", "Charlie", "David"]

for name in student_names:
    print("Student:", name)

上述代码输出:

Output >>>

Student: Alice
Student: Bob
Student: Charlie
Student: David

While循环

如果你想在一个条件为真时执行一段代码,可以使用`while`循环。

让我们使用相同的`student_names`列表:

# 使用一个现有可迭代对象的while循环

student_names = ["Alice", "Bob", "Charlie", "David"]
index = 0

while index < len(student_names):
    print("Student:", student_names[index])
    index += 1

在这个例子中,我们有一个包含学生名字的列表`student_names`。我们使用`while`循环通过跟踪`index`变量来遍历列表。

只要`index`小于列表长度,循环就会继续。在循环内部,我们打印每个学生的名字并增加`index`以移至下一个学生。注意使用`len()`函数来获取列表的长度。

这实现了与使用`for`循环遍历列表相同的结果:

Output >>>

Student: Alice
Student: Bob
Student: Charlie
Student: David

让我们使用一个`while`循环从列表中弹出元素,直到列表为空:

student_names = ["Alice", "Bob", "Charlie", "David"]

while student_names:
    current_student = student_names.pop()
    print("Current Student:", current_student)

print("All students have been processed.")

列表方法`pop`移除并返回列表中最后一个存在的元素。

在这个例子中,只要`student_names`列表中有元素,`while`循环就会继续。在循环内部,使用`pop()`方法移除并返回列表中的最后一个元素,并打印当前学生的名字。

循环会继续直到所有学生都已处理完毕,并且在循环外打印最终消息。

Output >>>

Current Student: David
Current Student: Charlie
Current Student: Bob
Current Student: Alice
All students have been processed.

`for`循环通常更简洁且更易于阅读,适用于遍历像列表这样的现有可迭代对象。但在循环条件更复杂时,`while`循环可以提供更多的控制。

循环控制语句

`break`提前退出循环,而`continue`跳过当前迭代的剩余部分并进入下一次迭代。

这是一个示例:

student_names = ["Alice", "Bob", "Charlie", "David"]

for name in student_names:
    if name == "Charlie":
        break
    print(name)

控制在`name`为Charlie时退出循环,给我们输出:

Output >>>
Alice
Bob

模拟Do-While循环行为

在Python中,没有像其他编程语言中那样的内置`do-while`循环。然而,你可以使用带有`break`语句的`while`循环实现相同的行为。以下是如何在Python中模拟`do-while`循环:

while True:
    user_input = input("Enter 'exit' to stop: ")
    if user_input == 'exit':
        break

在这个例子中,循环将持续运行,直到用户输入’exit’。由于条件最初被设置为`True`,因此循环至少执行一次,然后在循环中检查用户的输入。如果用户输入’exit’,则执行`break`语句,退出循环。

以下是一个示例输出:

Output >>>
Enter 'exit' to stop: hi
Enter 'exit' to stop: hello
Enter 'exit' to stop: bye
Enter 'exit' to stop: try harder!
Enter 'exit' to stop: exit

请注意,这种方法类似于其他语言中的`do-while`循环,其中循环体保证至少执行一次,然后再检查条件。

总结与下一步

希望你能够顺利跟着本教程进行编码。现在你已经了解了Python的基础知识,是时候开始编写一些超级简单的项目,应用你所学到的所有概念。

 

 

更多