hexon
发布于 2025-07-15 / 9 阅读
0

三、Python基本语法

1、Python 代码结构与规范

Python中的注释

  • 单行注释

可以单独一行,也可以在代码的后面,在代码后面最好遵循良好的格式,即#与代码最后之间空两格,注释内容与#间空一格

# 这是一个单行注释
print("hello word")  # 在控制台打印hello world字符串

  • 多行注释

可以用三个引号('''),也可以用三个双引号("""),不过推荐用双引号(文档注释)。

PEP 257:模块级文档字符串可顶格。函数/类的文档字符串必须和定义体缩进一致。

"""
    这是一个多行注释的示例。
    它可以跨越多个行,并提供对代码的详细解释。
"""
print("hello world") # 在控制台打印hello world字符串

语句&语句分隔符

语句分隔符(Statement Separator)是用于在编程语言中分隔不同语句的符号或字符。它指示编译器或解释器在代码中的哪个位置结束一条语句,并开始解析下一条语句。

在Python中,语句之间的分隔符有两个:换行符分号,推荐换行符

print("hello yuan");print("hello world") # 分号作为分隔符
print(100) # 换行符作为分隔符,
print(200)

pep8规范

PEP 8是Python编程语言的官方编码风格指南(Python Enhancement Proposal 8),它提供了一套规范和建议,用于编写清晰、易读和一致的Python代码。PEP 8旨在促进Python代码的可读性,并为Python开发者提供一致的编码样式。

以下是PEP 8的一些主要规范和建议:

  1. 缩进和空格: 使用4个空格进行缩进,不要使用制表符(Tab)。在二元运算符周围和逗号后面使用空格,但在括号、方括号和花括号内部不要有空格。

  2. 行的长度: 每行代码尽量不超过79个字符,对于长表达式或注释,可以适度延长到不超过72个字符。

  3. 命名规范: 使用全小写字母和下划线来命名变量、函数和模块。类名应该使用驼峰命名法,首字母大写。

  4. 空行: 使用空行来组织代码,例如在函数和类定义之间、函数内部的逻辑块之间使用空行。

  5. 导入规范: 在不同的行上导入不同的模块。避免使用通配符导入(from module import *),而是明确导入需要使用的函数、类或变量。

  6. 注释: 使用注释来解释代码的意图和功能。注释应该清晰、简洁,并遵循特定的注释规范。

  7. 函数和类定义: 在函数和类定义之间使用两个空行。函数定义应该包含文档字符串(docstring),用于描述函数的功能和参数。

  8. 代码布局: 使用合适的空格和空行来组织代码,使其易于阅读和理解。

PEP 8并非强制性规范,但它是Python社区广泛接受的编码风格指南。遵循PEP 8可以提高代码的可读性,使不同开发者之间的代码更加一致,并促进Python项目的可维护性。

这个地方注意下Pyhon中导入包会立即加载,所以记得移除没有用到的引入。

2、变量

变量初识

在Python中,变量是一个标识符,用于引用存储在计算机内存中的数据。每个变量都有一个名称和一个关联的值,可以将值存储在变量中并在程序中多次使用。以下是有关Python变量的一些基本概念:

# 用等号(=)将一个值赋给一个变量
# 游戏场景
role = "刺客"
name = "李白"
attack = 500
healthy = 100
level = 3
experience = 1000
is_movable = False # 是否可以移动(冰冻效果)
  1. 在Python中,变量名(即标识符)是存储在命名空间中的。命名空间是一个变量名和对象之间的映射关系(一个字典结构),它将变量名与对象的引用关联起来。

  2. 全局命名空间是在程序运行时创建的,并在整个程序执行期间一直存在。

  3. 局部命名空间是在函数调用时创建的,并在函数执行期间存在。

可以理解成js中的作用域

变量的用法

  • 基本用法

变量的简单使用就是直接赋值。

# (1) 变量的多次使用
x = 10
y = 20  # 可以简写成 x,y = 10,20
​
print(x + y)
print(x - y)
print(x * y)
print(x / y)
​
# (2) 变量的重新赋值(修改变量值)
x = 1
x = 2  # 重新赋值
​
healthy = 100
healthy = 90
​
level = 1
level = 2

  • 变量传递

id(数据),是Python中的一个内置函数,返回某个数据对象的内存地址。

x = 1
print(id(x))
y = x  # 编程中十分重要的操作:变量传递,对于它的理解至关重要
x = 2
print(id(x))
print(y)

这个地方有一个非常要注意的点,就是Python与Java和JavaScript是不一样的,Python中以下代码并不会拷贝基本类型的副本作为新的值,而是直接指向同一个地址(也就是说Java中是值传递,而Python中是引用传递):

a = 1
print(id(a))
b = a
print(id(b))
b = 2
print(a)
# 这个代码的理解:一开始a指向了内存中的一个地址,这个地址存储的是1;后来声明b变量,它也是指向和a变量一样的地址(注意不是拷贝1这个值的副本!!!)
# 然后使用b指向一个新的内存地址,这个内存地址存储的是2这个值,但是a指向的内存地址是没有变化的,所以打印a,a依然是1

案例:交换两个变量的值

x = 1
y = 2
print(f'交换前:x = {x},y = {y}')
# 方式1
t = x
x = y
y = t
print(f'交换后:x = {x},y = {y}')

# 方式2 :Python 的 a, b = b, a 是语法糖,底层通过元组解包实现。
x, y = y, x
print(f'再次交换后:x = {x},y = {y}')
# 还有其他方法,比如位运算、算术运算(无需临时变量)自己AI搜索

  • 表达式赋值

x = 1 + 1
y = x + 1
y = y + 1
print(x, y)

案例1:

# 案例
print("游戏开始...")
player_exp = 500
player_level = 3
​
print("闯关成功")
player_exp = player_exp + 50
player_level = player_level + 1
​
print("当前级别:",player_level)
print("当前经验值:",player_exp)
# 生命值减少10怎么写?
player_hp = 100  # 新增生命值变量,假设初始为100
​
# 生命值减少10
player_hp = player_hp - 10  # 或者简写为 player_hp -= 10
print("当前生命值:", player_hp)

变量的命名规范

Python的变量命名规范通常遵循以下规则:

  1. 变量名应该具有描述性,以便代码的可读性更高,例如在代码中使用的名称应该清晰、简洁、有意义,避免使用缩写或单个字符。

  2. 变量名应该遵循一定的命名约定,采用驼峰命名法或下划线命名法:驼峰命名法指的是将每个单词的首字母大写,单词之间不使用下划线,例如myVariableName;下划线命名法指的是使用小写字母和下划线来分隔单词,例如my_variable_name。在Python中,推荐使用下划线命名法(也称为蛇形命名法)

  3. 变量名只能包含字母、数字和下划线_,不能以数字开头。(Java中多个$可用)

  4. 变量名不能使用保留字(例如if、else、while等等),也不要与内置函数重名,这个地方又分成强关键字和弱关键字。

附:Python的关键字

3、基本数据类型

在编程中,基本数据类型指的是编程语言中提供的最基本、最原始的数据类型,通常是原生支持的数据类型,而不是通过其他数据类型组合而来的。

在Python中,常见的基本数据类型包括:

注意的是:Python中是不止这几种基本类型的,可以自己问下AI

整型和浮点型

整型(integer)和浮点型(float)是Python中常用的数字数据类型。它们用于表示不同种类的数值,并在数值计算和数据处理中发挥重要作用。

整型(integer):

  • 整型用于表示整数(正整数、负整数和零)。

  • 在Python中,整型是一种不可变(immutable)的数据类型,表示为整数字面值,例如 5-100 等。

x = 1
y = -10
blood = 100

浮点型(float):

  • 浮点型用于表示带有小数部分的数值,也称为浮点数。

  • 在Python中,浮点型是一种不可变的数据类型,表示为浮点数字面值,例如 3.14-2.5 等。

pi = 3.14
temperature = -2.5
# 内置函数type(对象)可以获取某个数据对象的类型名称
pi_type = type(pi)
print(pi_type)
print(type(pi_type))

整型对象和浮点型对象可以用于科学运算:

print(1+1)
# 比如游戏的等级,血值,攻击力

浮点数据的精度问题:

a = 3.14
b = 1.11
print(a + b)
print(a - b)
print(round(a - b, 2))

# 4.25
# 2.0300000000000002
# 2.03

# 可以使用Decimal类处理
from decimal import Decimal
c = Decimal("3.14")
d = Decimal("1.11")
print(c - d)  # 2.03

字符串类型

字符串是一种在计算机程序中常用的数据类型,用于操作文本数据。字符串可以看作是由一系列字符组成的序列,每个字符可以是字母、数字、符号或其他字符。

在计算机程序中,字符串通常使用一对单引号(')或双引号(")括起来,例如:"hello world"'Python is fun!'。同时Python还支持使用三重引号('''""")来表示多行字符串。

以下是Python字符串的代码示例,输出"hello路飞学城":

s1 = "hello 路飞学城"
print(s1)
​
s2 = "hello yuan!"
s3 = "10"

这个例子中,我们使用了字符串类型,并将其赋值给一个变量,然后使用print函数输出该变量的值。

注意,在字符串中可以使用中文字符,Python默认使用UTF-8编码,可以支持多种语言的字符。

特别注意:python中的字符串不像Java一样,可以与任意类型相加(拼接),如:"a = " + 1会报错!!!

补充:如果单行字符串太长,超过120个字符,会警告,此时可以直接换行用()包裹后换行,或者使用\换行。

s = ("aaaa"
     "bbbb"
     )
print(type(s), s)

s = ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")

print(type(s), s)

布尔类型

布尔类型(boolean)是Python中的一种基本数据类型,用于表示逻辑值。布尔类型只有两个可能的取值:True(真)和 False(假)。

print(2 > 1)
print(3 == 2)

布尔类型通常用于条件判断和逻辑运算,用于控制程序的流程和决策。

以下是一些常见的用法和特点:

  1. 布尔值:TrueFalse 是布尔类型的两个取值。它们是Python中的关键字,不是字符串。

  2. 条件判断:布尔类型常用于条件语句的判断条件,例如 if 语句中的条件表达式。根据条件表达式的真假,决定是否执行相应的代码块。

  3. 关系运算符:关系运算符(如 ==!=<><=>=)用于比较两个值,并返回布尔结果。例如 x > y 将返回布尔值表示 x 是否大于 y。

  4. 逻辑运算:布尔类型可以通过逻辑运算符(如 andornot)进行组合和操作。逻辑运算可以用于组合多个布尔值,产生新的布尔结果。

  5. bool()是一个内置函数,用于将给定的值转换为对应的布尔值。

  6. 零值:每一个数据类型都有一个布尔值为False的值,我们称之为零值

    • 整型的零值是0,浮点型是0.0

    • 字符串的零值是""

    • 布尔类型的零值是False

    • NoneType的零值是None

    • 列表的零值是[]

    • 元组的零值是()

    • 字典的零值是{}

# 零值演练
print(bool(0))
print(bool(0.0))
print(bool(""))
print(bool([]))
print(bool(()))
print(bool({}))
print(bool(None))
​

# 空元组
print(())
print(type(()))

输入输出函数

在Python中,输入和输出函数用于与用户进行交互,并在程序的执行过程中获取输入值和显示输出结果。

  • input函数

input(prompt):用于从用户获取输入值。它会在控制台中显示一个提示信息(prompt),等待用户输入,并返回用户输入的内容作为字符串。

name = input('请输入你的姓名')
age = input('请输入你的年龄')
​
print(name, type(name))
print(age, type(age))

  • print函数

print(value1, value2, ...):用于将值打印到控制台。它可以接受一个或多个参数,并将它们打印为字符串。

name = "yuan"
age = 19
print("用户信息:", name, age)  # 默认是空格分隔并在打印完成后打印了个空行
print("用户信息:", name, age, sep="|", end="")  # 可以改变分隔符、末尾不换行
print("程序结束!")

常见类型转换

# (1)字符串到整数(int)转换
num_str = "123"
num_int = int(num_str)
print(num_int)  # 输出:123
# (2)整数(int)到字符串转换
num_int = 123
num_str = str(num_int)
print(num_str)  # 输出:"123"
# (3)字符串到浮点数(float)转换
float_str = "3.14"
float_num = float(float_str)
print(float_num)  # 输出:3.14
# (4)浮点数(float)到字符串转换
float_num = 3.14
float_str = str(float_num)
print(float_str)  # 输出:"3.14"

案例:

num01 = input("请输入一个数字:")
num02 = input("请再输入一个数字:")
print(float(num01) + float(num02))

NoneType类型

在 Python 中,None 是一个特殊的常量,表示缺少值或空值。它常用于表示函数没有返回值或变量尚未被赋值的情况。None 是 NoneType 数据类型的唯一值(其他编程语言可能称这个值为 null、nil 或 undefined)

应用1:函数返回值

# 函数返回值
ret = print("hello world")
print("ret:", ret)

我们一直使用 print() 函数的返回值就是 None。因为它的功能是在屏幕上显示文本,根本不需要返回任何值,所以 print() 就返回 None。

应用2:初始化赋值

# 模拟计算过程
num1 = int(input("请输入num1:"))
num2 = int(input("请输入num2:"))
operator = input("请输入运算符:")
result = None
if operator == '+':
    result = num1 + num2
elif operator == '-':
    result = num1 - num2
elif operator == '*':
    result = num1 * num2
elif operator == '/':
    result = num1 / num2
​
print(result)

4、运算符

  • 语句是一条完整的执行指令,语句通常会改变程序的状态、执行特定的操作或控制程序的流程。语句可以是赋值语句、无返回值函数调用,条件语句、循环语句等。语句没有返回值

  • 表达式是由值、变量、运算符和函数调用组成的代码片段,它可以计算出一个值。表达式可以包含字面值(如数字、字符串)、变量、运算符(如加法、乘法)、函数调用等。表达式的执行会返回一个结果值。表达式具有返回值,可以作为其他表达式的一部分使用。

举例来说:

  • x = 5 是一个赋值语句,将值 5 赋给变量 x,它没有返回值。

  • y = x + 3 > 4 是一个赋值语句,将变量 x 的值加上 3,并将结果赋给变量 y,它也没有返回值。

  • print(y) 是一个打印语句,用于将变量 y 的值输出到控制台,它仅用于执行操作,没有返回值。

  • type("hello")函数调用,但是一个表达式,因为计算出结果了。

说到语句,我自己想到这个:

a = b = 1 是否意味着,b = 1这个赋值语句有返回值呢?

DeepSeek:

  • a = b = 1 能正常工作是因为 Python 的 语法规则允许链式赋值,而不是因为 b = 1 有返回值。赋值语句本身在 Python 中不返回任何值。

  • 海象运算符(:=)有返回值,但用途不同(Python 3.8+)

Python提供了多种类型的运算符,用于数学运算、逻辑判断、赋值操作等。下面是一些常见的运算符。

计算运算符

比较运算符

赋值运算符

赋值运算符是用于将一个值或表达式赋给一个变量的运算符。它们用于在程序中给变量赋值,以便存储和操作数据。

print("游戏开始...")
player_exp = 100
player_level = 1
player_blood = 1000
​
print("闯关成功")
​
player_exp += 50  # player_exp = player_exp + 50
player_level += 1  # player_level = player_level + 1
​
print("当前级别:", player_level)
print("当前经验值:", player_exp)
​
print("受到攻击")
player_blood -= 20  # player_blood = player_blood - 20
print("当前生命值:", player_blood)

Python 没有像 C/C++/Java 那样的 ++-- 自增自减运算符

逻辑运算符

逻辑运算符是用于在逻辑表达式中进行组合和操作的运算符。它们用于组合和操作布尔值(True 或 False)来生成新的布尔值结果。在Python中,逻辑运算符包括三个:andornot

逻辑运算符通常与条件语句(如 if 语句)一起使用,用于控制程序的流程和进行逻辑判断。它们可以用于组合多个条件,并根据这些条件的结果生成新的布尔值。

成员运算符

成员运算符是用于检查一个值是否存在于某个序列(例如列表、元组、字符串等)中的运算符。Python 提供了两个成员运算符:innot in

print("yuan" in "hello yuan")
print(100 in [1, 10, 100, 1000])
print("yuan" not in ["rain","eric","alvin","hello yuan"])

运算符优先级

在Python中,运算符优先级指定了在表达式中运算符的执行顺序。以下是Python中常见运算符的优先级从高到低的顺序(同一优先级的运算符从左到右结合):

  1. 括号:(),最高优先级,用于控制表达式的执行顺序。

  2. 幂运算:**,次高优先级,用于进行指数运算。

  3. 正负号:+(正号)和 -(负号),用于表示正负数。

  4. 乘法、除法和取模运算:*///(整除)和 %(取模)。

  5. 加法和减法运算:+-

  6. 比较运算符:<><=>===(等于)、!=(不等于)等。

  7. 逻辑运算符:andornot,用于逻辑运算。

  8. 赋值运算符:=, +=, -=, *=, /=, //=, %=, **= 等。

# 案例1
a = 1 + 1  # 先计算1+1,再将得到的2赋值给a
# 案例2
x = 10
y = 5
z = 2
result = x + y * z ** 2 / (x - y) 
print(result)
result = x + y * z ** 2 // (x - y)  # 整除
print(result)

5、今日作业

1、以下哪个变量名是符合语法

A $a B. id C. 2a D. _name

选:D

2、解析x=1;x=x+1执行过程

# 先将变量x赋值为1,再用x的值加1赋值回x变量,因此x最后等于2。
x = 1
x = x + 1
print(x)

错题】3、1+"1"的结果是?

# 这个结果是报错!!!Python 的设计哲学强调显式优于隐式,因此要求手动处理类型。
print(1 + "1")

4、bool("2<1")的结果是

# 应该是True,因为实际上它是非空字符串调用bool内置函数转换类型后是True
print(bool("2<1"))

5、浅述目前学过的Python的内置函数以及功能

  • 有关基本类型的内置函数:int()、float()、bool()、str()

  • 输入输出函数:print()、input()

  • 类型和内存地址:type()、id()

  • 保留小数位:round()

【复习】6、分析下面程序的执行过程以及结果

a = 1
b = a  # b = 1
c = b  # c = 1
a, d = c + 1, b + 2  # a = 2, d = 3
a += 1 # a = a + 1 = 3
print(a,d)
# 这里有个享元模式
print(id(a))
print(id(d))

7、获取用户输入圆的半径。使用圆的周长和面积公式计算并打印出输入半径的圆的周长和面积。

import math
​
r = input("请输入圆的半径")
c = 2 * math.pi * int(r)
s = math.pi * int(r)**2
print("此圆的周长为:", c)
print("此圆的面积为:", s)

虽然实现了,但是不是很严谨,用户输入不是数字可能抛出异常,另外完全可以以图形化的形式交互,可以问下AI。

8、假设有一个变量count的初始值为0,将count增加5次,每次增加值分别为1,2,3,4,5,然后打印count的值。

count = 0
print(count)
count += 1
print(count)
count += 2
print(count)
count += 3
print(count)
count += 4
print(count)
count += 5
print(count)

错题】9、判断一个学生的考试成绩score是否在80到100之间(包括80和100)

score = input("请输入考试成绩")
# if int(score) >= 80 and int(score)<=100:  # 这么写也不合适,python没有java那么麻烦
if 80 <= int(score) <=100:
    print("是")
else:
    print("否")

Java写多了,开始我写成了if(){}而且还用了&&。

错题】10、输入一个数字,判断是否是三位数且能被13整除

num = input("请输入一个数字")
# 或者直接len(num) == 3
if 100 <= int(num) <= 999 and int(num) % 13 == 0:
    print("是")
else: 
    print("否")

还是没有习惯Python的语法,Python和Java不一样!!!Python支持链式比较

11、判断用户名密码是否正确

username = input("请输入用户名")
password = input("请输入密码")
if username == "hexon" and password == "123":
    print('登录成功')
else:
    print('账号或密码错误')

12、判断一个年份year是否是闰年,如果是,则打印"year是闰年",否则打印"year不是闰年"。闰年满足以下条件:能被4整除但不能被100整除,或者能被400整除。

year = input("请输入年份")
year = int(year)
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"{year}年是闰年")
else: 
    print(f"{year}年不是闰年")