一、基础语法
1、输出语句
print ("你好!!!")
// 字符串连接
print("神说" + "要有" + "光" + "!")
// 单双引号转义,注意引号配对,还可以使用以下语句进行转义
// \为转义符
print("He said \"Let\'s go!\"")
// 换行,换行符“\n”
print("神说:\n没有人一生下来就会的!")
// 三引号跨行字符串
print('''接受神的指引,
去往有光的地方!''')
2、变量
变量:用来储存值的(先定义,再使用),可变的量
my_love = "123456789"
print(my_love)
变量的命名规则:
由文字、数字、下划线( _ )组成
不能有空格,不能由数字开头
(尽量用英文,不要用拼音)
大小写敏感,不能占用关键字
下划线命名法
字母全部小写
不同单词用下划线分割(user_age)
驼峰命名法
单词用首字母大写分隔(UserAge)
3、数学运算
加(+)、减(-)、乘(*)、除(/)、地板除(//)只得整数结果、求余(%)
其他运算的实现——使用 math 库
// 平方的实现 math.pow(x,2) x ** 2
// 导入 math 库 import math // 导入math库,并更名为mt import math as mt
4、注释
// 单行注释
# 这是Python中的单行注释
// 多行注释(三引号)
"""
这是
多行
注释
"""
5、数据类型
字符串类型(str)
"字符串"
len("123")——求串长
整形(int)
布尔类型(bool)
值只有"True"、"False"两种
空值类型(NoneType)
其值是none,完全没有值
type(),返回数据的类型
6、输入
input() —— 输入语句
user_age = input("请输入你的名字:")
// 计算 BMI = 体重 / ( 身高 ** 2)
user_weight = float(input("请输入您的体重(单位:kg):"))
user_height = float(input("请输入您的身高(单位:m):"))
user_bmi = float(user_weight / (user_height ** 2))
print("经过计算,您的BMI为:" + str(user_bmi))
7、条件语句
// 等于
==
// 大于等于
>=
// 小于等于
<=
// 不等于
!=
// if语句
if [条件]:
语句
else:
语句
// if-elif
if [条件]:
语句
elif [条件]
语句
else:
语句
8、逻辑运算
与 and
或 or
非 not
// x 大于 5 且 x 小于 10
x > 5 and x < 10
// x 大于 5 或 x 小于 3
x > 5 or x < 3
// 优先级
not > and > or
9、列表
// 列表名 = [参数]
my_list = ["熊大","熊二","光头强"]
// 向列表中加入一个元素
my_list.append("黑大帅")
// 列表删除元素
my_list.remove("熊大")
// 列表可以存放不同类型的元素
// 打印列表中的最大值
print(max(my_list))
// 打印列表中的最小值
print(min(my_list))
// 打印排序好的列表
print(sorted(my_list))
10、字典
字典存储键值对的数据结构 key:value (键 : 值)
'''
做一个简单的电话本,记录每一个人的电话
'''
contacts = {"小明":"123456789",
"小花":"123456456",
"小石":"123123123"}
print(contacts)
contacts["小花"] = "147258369"
print(contacts)
# len() ——函数可以查看字典中有多少键值对
# 字典名.keys() 返回所有键
# 字典名.values() 返回所有值
# 字典名.items() 返回所有键值对
dict_list = {"1":"1"}
dict_list["2"] = "2"
dict_list["3"] = "3"
dict_list["4"] = "4"
dict_list["5"] = "5"
dict_list["6"] = "6"
dict_list["7"] = "7"
dict_list["8"] = "8"
number = input("请您输入您想检索的词条:")
if number in dict_list:
print("您想检查的词条在字典里!")
print(dict_list[number])
else:
print("您想检索的词条不在字典里!")
print("当前字典中共有" + str(len(dict_list)) + "条数据。")
11、循环结构
// for循环进行迭代
for 变量名 in 可迭代对象:
# 语句
# ...
// while() 循环
while 条件:
# 语句
for循环:有明确循环对象或次数
while循环:循环次数未知
# 根据用户输入,计算平均值,用户输入q,表示输入结束
user_in= input("请输入一个数(输入q,结束输入):")
total = 0
fre = 0
while user_in != "q":
num = float(user_in)
total = total + num
fre += 1
user_in = input("请输入一个数(输入q,结束输入):")
if fre == 0:
avl = 0
else:
avl = total/fre
print("平均值为:" + str(avl))
12、格式化字符串
# format方法
message_content = """
律回春渐,新元肇启。
新岁甫至,福气东来。
金{current_year}贺岁,欢乐祥瑞。
金{current_year}敲门,五福临门。
给{receiver_name}及家人拜年啦!
新春快乐,{current_year}年大吉!
""".format(current_year = year,
receiver_name = name)
# f-字符串
name = "龙"
year = "2024"
message_content = f"""
律回春渐,新元肇启。
新岁甫至,福气东来。
金{year}贺岁,欢乐祥瑞。
金{year}敲门,五福临门。
给{name}及家人拜年啦!
新春快乐,{year}年大吉!
"""
13、函数
函数定义时,不会执行函数中的内容,在调用函数时,才会执行函数中的代码
# 函数定义 def [函数名]: # 函数体
"""
写一个函数,输入扇形的圆心角和半径,输出扇形的面积
"""
def calculate_sector(central_angle, radius):
sector_area = central_angle / 360 * 3.14 * radius ** 2
print(f"此扇形的面积为:{sector_area:.2f}")
central_angle = float(input("请输入扇形的圆心角:"))
radius = float(input("请输入扇形半径:"))
calculate_sector(central_angle, radius)
"""
写一个计算BMI的函数,函数名为 calculate_BMI
1、可以计算任意体重和身高的BMI值
2、执行过程中打印一句话:”您的BMI分类为:xx“
3、返回计算出的BMI值
BMI = 体重 / (身高 ** 2)
BMI分类:
偏瘦:BMI <= 18.5
正常:18.5 < BMI <= 25
偏胖:25 < BMI <= 30
肥胖:30 < BMI
"""
def calculate_BMI(weight, height):
BMI = weight / height ** 2
if BMI < 18.5:
print("您的BMI分类为:偏瘦!")
elif BMI < 25:
print("您的BMI分类为:正常!")
elif BMI < 30:
print("您的BMI分类为:偏胖")
else:
print("您的BMI分类为:肥胖")
return BMI
height = float(input("请输入您的身高(单位:m):"))
weight = float(input("请输入您的体重(单位:kg):"))
BMI = calculate_BMI(weight, height)
print("您的BMI指数为:" + str(BMI))
14、引入模块
# 全部引用
import statistics
# 引入部分函数
from statistics import median, mean
# 全部引用
from statistics import *
15、面向对象编程
面向过程编程:
将程序按步骤分解编程
面向对象编程:
考虑对象的性质,定义类,再创建对象实例
属性(attribute)、方法(method)
属性:类里面的性质
方法:类里面的函数
面向对象编程的特点:封装 继承 多态
16、类
创建对象
class [对象名]:
对象属性
Pascal命名法:
用首字母大写来分隔单词
构造方法:
类有特殊的方法:构造方法
如:
class A:
def __init__(self, 参数):
# 构造函数的代码
'''
创建一个学生类
要求:
1、属性包含学生姓名、学号,以及学生的语数英三门的成绩
2、能够设置学生某科的成绩
3、能够打印出该学生的所有科目的成绩
'''
# 定义类
class Student:
# 构造方法,第一个参数为 self 用于绑定参数和对象
def __init__(self, name, student_id):
self.name = name
self.student_id = student_id
self.grades = {"语文":0, "数学":0, "英语":0}
def set_grade(self, course, grade):
if course in self.grades:
self.grades[course] = grade
def print_grades(self):
print(f"学生{self.name}(学号:{self.student_id})的成绩为:")
for course in self.grades:
print(f"{course}: {self.grades[course]}分")
hao = Student("hao", "202012190106")
hao.set_grade("语文", 100)
hao.set_grade("数学", 100)
hao.print_grades()
17、继承
子类会继承父类的属性和方法(共享的属性和方法)
'''
类的继承练习:
人力系统
员工分为两类:全职员工:FullTimeEmployee、兼职员工:PartTimeEmployee
全职员工和兼职员工都有”姓名 name“、”工号 id“属性
都具备”打印信息 print_info“(打印姓名、工号)方法
全职有”月薪 monthly_salary“属性
兼职有”日薪 daily_salary“属性,”每月工作天数 work_days“属性
全职和兼职都有”计算月薪 calculate_monthly_pay“的方法,但具体过程不一样
'''
# 员工类
class Employee:
def __init__(self, id, name):
self.id = id
self.name = name
def print_info(self):
print(f"员工姓名:{self.name},工号为:{self.id}")
# 全职员工类,全职员工类继承自员工类
class FullTimeEmployee(Employee):
def __init__(self, name , id, monthly_salary):
# 继承自父类的姓名、工号属性
super().__init__(name, id)
self.monthly_salary = monthly_salary
def calculate_monthly_pay(self):
return self.monthly_salary
# 兼职员工类
class PartTimeEmployee(Employee):
def __init__(self, name , id, daily_salary, work_days):
super().__init__(name, id)
self.daily_salary = daily_salary
self.work_days = work_days
def calculate_monthly_pay(self):
return self.daily_salary * self.work_days
zhangsan = FullTimeEmployee('zhangsan', '123123', 12000)
lisi = PartTimeEmployee('lisi', '123456', 666, 30)
zhangsan.print_info()
print("员工的工资为:" + str(lisi.calculate_monthly_pay()))
17、对文件操作
分清文件的绝对路径和相对路径
open()——打开文件操作,可用绝对路径,也能用相对路径
模式:
r——可读
w——可写
a——附加内容
r+ ——支持读写文件
a 和 w 模式——如果文件名不存在,会直接创建一个该文件
encoding——编码方式,一般为”utf-8“
read()——读文件函数
readline()——读一行,打印一行
readlines()——读取全部文件内容,并把每一行作为列表元素返回
close()——关闭文件,释放资源
使用with
# 缩进结束,文件自动关闭 with open("./data.txt")as f: print(f.read())
写入文件:
with open("./data.txt", "w", encoding="utf-8") as f:
f.write("内容")
18、异常处理
try语句捕捉异常,符合逻辑的第一个分支会执行
try:
# 可能异常的代码
except ValueError:
# 出现异常,你想执行的操作
finally:
# 该语句一定会执行
19、测试
assert —— 断言
一般会用测试库,如:unittest
创建测试文件夹:测试的每个方法,都要以 test_ 开头
20、高阶函数和匿名函数
高阶函数
高阶函数的参数是函数,作为参数的函数,以其名为参数,不用加括号
匿名函数
以lambda为匿名函数的函数名
calculate_and_print(7, lambda num:num * 5, print_with_vertical_bar) # lambda num1, num2: num1 + num2 # 关键字 函数参数 函数返回形式 # 只适用于简单的问题