原文:
www.kdnuggets.com/python-basics-syntax-data-types-and-control-structures
作者提供的图片
你是一个初学者,想学习 Python 编程吗?如果是的话,这个适合初学者的教程将帮助你熟悉语言的基础知识。
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT 需求
本教程将介绍 Python 的——相当于英语友好的——语法。你还将学习如何处理不同的数据类型、条件语句和循环。
如果你已经在开发环境中安装了 Python,请启动一个 Python REPL 并开始编写代码。或者如果你想跳过安装——立即开始编码——我建议你前往Google Colab并开始编写代码。
在我们用 Python 编写经典的“Hello, world!”程序之前,先了解一下这门语言。Python 是解释型语言。这是什么意思?
在任何编程语言中,你编写的所有源代码都应该被翻译成机器语言。虽然像 C 和 C++这样的编译语言需要在程序运行之前获得整个机器代码,但解释器会解析源代码并即时解释。
创建一个 Python 脚本,输入以下代码并运行:
print("Hello, World!")
为了打印出Hello, World!,我们使用了print()
函数,它是 Python 中的众多内置函数之一。
在这个超简单的例子中,请注意“Hello, World!”是一个序列——一串字符。Python 字符串由一对单引号或双引号界定。因此,要打印任何消息字符串,你可以使用print("<message_string>")
。
现在让我们更进一步,使用input()
函数从用户那里读取一些输入。你应该始终提示用户,让他们知道应该输入什么。
这是一个简单的程序,它接收用户的名字作为输入,并向他们问好。
注释通过提供额外的上下文来帮助提高代码的可读性。Python 中的单行注释以#开头。
请注意,代码片段中的字符串前面有一个f
。这样的字符串称为格式化字符串或 f-strings。要在 f-string 中替换变量的值,请在一对大括号中指定变量的名称,如下所示:
# Get user input
user_name = input("Please enter your name: ")
# Greet the user
print(f"Hello, {user_name}! Nice to meet you!")
当你运行程序时,系统会首先提示你输入,然后打印出问候信息:
Please enter your name: Bala
Hello, Bala! Nice to meet you!
让我们继续学习 Python 中的变量和数据类型。
变量在任何编程语言中都像容器,用于存储信息。在我们编写的代码中,我们已经创建了一个变量user_name
。当用户输入他们的名字(一个字符串)时,它会存储在user_name
变量中。
让我们通过基本的数据类型在 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
你可以对数值数据类型进行各种操作——加法、减法、整数除法、指数运算等。以下是一些示例:
# Define numeric variables
x = 10
y = 5
# Addition
add_result = x + y
print("Addition:", add_result) # Output: 15
# Subtraction
sub_result = x - y
print("Subtraction:", sub_result) # Output: 5
# Multiplication
mul_result = x * y
print("Multiplication:", mul_result) # Output: 50
# Division (floating-point result)
div_result = x / y
print("Division:", div_result) # Output: 2.0
# Integer Division (floor division)
int_div_result = x // y
print("Integer Division:", int_div_result) # Output: 2
# Modulo (remainder of division)
mod_result = x % y
print("Modulo:", mod_result) # Output: 0
# Exponentiation
exp_result = x ** y
print("Exponentiation:", exp_result) # Output: 100000
字符串(str
):字符串是字符的序列,封装在单引号或双引号中。
name = "Alice"
quote = 'Hello, world!'
布尔值(bool
):布尔值表示True
或False
,指示条件的真实性。
is_student = True
has_license = False
Python 在处理不同数据类型方面的灵活性使你能够有效地存储、执行各种操作和操控数据。
这是一个将我们迄今为止学到的所有数据类型结合在一起的示例:
# Using different data types together
age = 30
score = 89.5
name = "Bob"
is_student = True
# Checking if score is above passing threshold
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
包含学生的名字:
# List
student_names = ["Alice", "Bob", "Charlie", "David"]
元组是类似于列表的有序集合,但它们是不可变的,这意味着你不能在创建后更改其内容。
假设你希望student_scores
成为一个不可变的集合,包含学生的考试成绩。
# Tuple
student_scores = (85, 92, 78, 88)
字典是键值对的集合。字典的键应该是唯一的,它们映射到对应的值。字典是可变的,允许你将信息与特定键关联起来。
在这里,student_info
包含关于每个学生的姓名和分数作为键值对:
student_info = {'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88}
但请稍等,还有一种更优雅的方法来创建 Python 中的字典。
我们即将学习一个新概念:字典推导式。如果一开始不清楚没关系。你可以随时学习更多并在以后继续研究。
但推导式相当直观。如果你想让student_info
字典的键是学生姓名,对应的值是他们的考试分数,你可以这样创建字典:
# Using a dictionary comprehension to create the student_info dictionary
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 脚本时,代码按脚本中的顺序依次执行。
有时,你需要实现逻辑来根据特定条件控制执行流程,或遍历可迭代对象以处理其中的项目。
我们将学习如何通过 if-else 语句实现分支和条件执行。我们还将学习如何使用循环遍历序列,以及循环控制语句 break 和 continue。
当你需要仅在特定条件为真时执行一块代码时,你可以使用if
语句。如果条件为假,这块代码将不会被执行。
图片由作者提供
考虑这个例子:
score = 75
if score >= 60:
print("Congratulations! You passed the exam.")
在这个例子中,只有当score
大于或等于 60 时,if
块中的代码才会被执行。由于score
是 75,因此将打印出“恭喜!你通过了考试。”
Output >>> Congratulations! You passed the exam.
if-else
语句允许你在条件为真时执行一块代码,而在条件为假时执行另一块代码。
图片由作者提供
让我们基于测试分数的例子进行扩展:
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
块。
图片来源:作者
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
语句用于在另一个条件内检查多个条件。
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 提供了几种循环结构来迭代集合或执行重复任务。
在 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
循环。
让我们使用相同的student_names
列表:
# Using a while loop with an existing iterable
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
移除并返回列表中的最后一个元素。
在这个例子中,while
循环只要student_names
列表中还有元素就会继续进行。在循环内部,使用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
在 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 的基础知识,是时候开始编码一些超级简单的项目,以应用你所学到的所有概念了。
Bala Priya C 是来自印度的开发者和技术作家。她喜欢在数学、编程、数据科学和内容创作的交汇点上工作。她的兴趣和专长领域包括 DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编码和咖啡!目前,她正在通过撰写教程、使用指南、观点文章等,与开发者社区分享她的知识。