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的一些主要规范和建议:
缩进和空格: 使用4个空格进行缩进,不要使用制表符(Tab)。在二元运算符周围和逗号后面使用空格,但在括号、方括号和花括号内部不要有空格。
行的长度: 每行代码尽量不超过79个字符,对于长表达式或注释,可以适度延长到不超过72个字符。
命名规范: 使用全小写字母和下划线来命名变量、函数和模块。类名应该使用驼峰命名法,首字母大写。
空行: 使用空行来组织代码,例如在函数和类定义之间、函数内部的逻辑块之间使用空行。
导入规范: 在不同的行上导入不同的模块。避免使用通配符导入(
from module import *
),而是明确导入需要使用的函数、类或变量。注释: 使用注释来解释代码的意图和功能。注释应该清晰、简洁,并遵循特定的注释规范。
函数和类定义: 在函数和类定义之间使用两个空行。函数定义应该包含文档字符串(docstring),用于描述函数的功能和参数。
代码布局: 使用合适的空格和空行来组织代码,使其易于阅读和理解。
PEP 8并非强制性规范,但它是Python社区广泛接受的编码风格指南。遵循PEP 8可以提高代码的可读性,使不同开发者之间的代码更加一致,并促进Python项目的可维护性。
这个地方注意下Pyhon中导入包会立即加载,所以记得移除没有用到的引入。
2、变量
变量初识
在Python中,变量是一个标识符,用于引用存储在计算机内存中的数据。每个变量都有一个名称和一个关联的值,可以将值存储在变量中并在程序中多次使用。以下是有关Python变量的一些基本概念:
# 用等号(=)将一个值赋给一个变量
# 游戏场景
role = "刺客"
name = "李白"
attack = 500
healthy = 100
level = 3
experience = 1000
is_movable = False # 是否可以移动(冰冻效果)
在Python中,变量名(即标识符)是存储在命名空间中的。命名空间是一个变量名和对象之间的映射关系(一个字典结构),它将变量名与对象的引用关联起来。
全局命名空间是在程序运行时创建的,并在整个程序执行期间一直存在。
局部命名空间是在函数调用时创建的,并在函数执行期间存在。
可以理解成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的变量命名规范通常遵循以下规则:
变量名应该具有描述性,以便代码的可读性更高,例如在代码中使用的名称应该清晰、简洁、有意义,避免使用缩写或单个字符。
变量名应该遵循一定的命名约定,采用驼峰命名法或下划线命名法:驼峰命名法指的是将每个单词的首字母大写,单词之间不使用下划线,例如
myVariableName
;下划线命名法指的是使用小写字母和下划线来分隔单词,例如my_variable_name
。在Python中,推荐使用下划线命名法(也称为蛇形命名法)变量名只能包含字母、数字和下划线_,不能以数字开头。(Java中多个$可用)
变量名不能使用保留字(例如if、else、while等等),也不要与内置函数重名,这个地方又分成强关键字和弱关键字。
附:Python的关键字
3、基本数据类型
在编程中,基本数据类型指的是编程语言中提供的最基本、最原始的数据类型,通常是原生支持的数据类型,而不是通过其他数据类型组合而来的。
在Python中,常见的基本数据类型包括:
注意的是:Python中是不止这几种基本类型的,可以自己问下AI
整型和浮点型
整型(integer)和浮点型(float)是Python中常用的数字数据类型。它们用于表示不同种类的数值,并在数值计算和数据处理中发挥重要作用。
整型(integer):
整型用于表示整数(正整数、负整数和零)。
在Python中,整型是一种不可变(immutable)的数据类型,表示为整数字面值,例如
5
、-10
、0
等。
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)
布尔类型通常用于条件判断和逻辑运算,用于控制程序的流程和决策。
以下是一些常见的用法和特点:
布尔值:
True
和False
是布尔类型的两个取值。它们是Python中的关键字,不是字符串。条件判断:布尔类型常用于条件语句的判断条件,例如
if
语句中的条件表达式。根据条件表达式的真假,决定是否执行相应的代码块。关系运算符:关系运算符(如
==
、!=
、<
、>
、<=
、>=
)用于比较两个值,并返回布尔结果。例如x > y
将返回布尔值表示 x 是否大于 y。逻辑运算:布尔类型可以通过逻辑运算符(如
and
、or
、not
)进行组合和操作。逻辑运算可以用于组合多个布尔值,产生新的布尔结果。bool()
是一个内置函数,用于将给定的值转换为对应的布尔值。零值:每一个数据类型都有一个布尔值为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中,逻辑运算符包括三个:and
、or
和not
。
逻辑运算符通常与条件语句(如 if
语句)一起使用,用于控制程序的流程和进行逻辑判断。它们可以用于组合多个条件,并根据这些条件的结果生成新的布尔值。
成员运算符
成员运算符是用于检查一个值是否存在于某个序列(例如列表、元组、字符串等)中的运算符。Python 提供了两个成员运算符:in
和 not in
。
print("yuan" in "hello yuan")
print(100 in [1, 10, 100, 1000])
print("yuan" not in ["rain","eric","alvin","hello yuan"])
运算符优先级
在Python中,运算符优先级指定了在表达式中运算符的执行顺序。以下是Python中常见运算符的优先级从高到低的顺序(同一优先级的运算符从左到右结合):
括号:
()
,最高优先级,用于控制表达式的执行顺序。幂运算:
**
,次高优先级,用于进行指数运算。正负号:
+
(正号)和-
(负号),用于表示正负数。乘法、除法和取模运算:
*
、/
、//
(整除)和%
(取模)。加法和减法运算:
+
和-
。比较运算符:
<
、>
、<=
、>=
、==
(等于)、!=
(不等于)等。逻辑运算符:
and
、or
、not
,用于逻辑运算。赋值运算符:
=
,+=
,-=
,*=
,/=
,//=
,%=
,**=
等。
# 案例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}年不是闰年")