这是B站上的一个三小时快速入门Python的学习笔记,用于我对该视频中所涉及的知识点进行快速的回顾与复习

1.字符串

1.字符串连接

print()函数里的字符串可用加号+来连接
例如:print("hello"+" world")

2.单双引号转义

当输出print("hello "world"")时系统会报错,因为判定"hello "为一个字符串并将其输出,就不知道后面的world""是什么了,所以为了解决这个问题我们可以单双引号结合使用例如:

1
2
print("hello 'world'")
print('hello "world"')

又或者是直接使用转义字符\

1
print("He said \"Let\'s go!\"")

3.换行

换行的时候不能直接在代码里换行

1
2
print("hello
world")

这样运行会报错的,正确的换行因该是使用\n转义字符来换行

1
print("hello\nworld")

4.三引号跨行字符串

遇到要换多行的时候可以使用三引号来输出整段的内容
使用print()来换多行输出一首诗:

1
2
3
4
print("白日依山尽")
print("黄河入海流")
print("欲穷千里目")
print("更上一层楼")

或是使用多个\n来逐行输出,这些方法都太麻烦了,可以直接把内容放在 """里,来实现跨行的字符串输出:

1
2
3
4
5
print("""白日依山尽
黄河入海流
欲穷千里目
更上一层楼
""")

2.变量

1.变量的赋值

Python语句的执行是从上到下的,因此变量需要先定义后使用,例如

1
2
my_numb = "123"
print("我的手机号是"+my_numb)

必须先定义my_numb才能print输出,否则会报错
其次就是变量里的值是可变的:

1
2
3
4
5
6
7
my_numb = "123"
print("我的手机号是" + my_numb)
my_new_numb = my_numb
print("我的手机号是" + my_new_numb)
print("我的手机号是" + my_numb)
my_numb = "456"
print("我的手机号是" + my_numb)

运行这段代码可以发现,我们可以把变量的值赋给其他变量,也可以直接修改变量里的值

2.变量的命名

在Python中变量的命名一般使用下划线命名法如:
user_nameuser_age这些直观的命名,不要用拼音和abc来命名,且命名的时候只能用字母、数字和下划线来命名,且第一个字符不能是数字

3.数学运算

正常的加+-*/都可以在键盘上输入,

优先级为:( )> ** > */ > +-

其中**为乘方,2的三次方可以用2**3来表示
但是对于一些复杂的公式我们可以导入math库来使用数学公式:

1
2
import math #首先需要导入math库
math.函数名(...)

通过以上这样的方式来使用,例如:

1
2
3
4
5
6
import math
a=-1
b=-2
c=3
print((-b + math.sqrt(b ** 2 - 4 * a * c)) / (2 * a))
print((-b - math.sqrt(b ** 2 - 4 * a * c)) / (2 * a))

其中的sqrt()函数是开方函数

4.注释

良好的注释习惯可以帮助自己和他人理解代码

# 单行注释

"""
多行注释
"""

5.数据类型

数据类型 示例
字符串 str “Hello” “哟!”
整数 int 6 或 -3
浮点数 float 6.0 或 10.07
布尔类型 bool True 或 Fales
空值类型 NoneType None

之后会讲到列表、字典等

字符串str

可以用len()函数获取字符串的长度

len(‘6’)
=> 3
len(‘hi!!’)
=> 4
len(‘\n’)
=> 1 转义字符只算一个字符

也可以提取字符串中的单个字符

1
2
3
4
str = "hello"
print(str[1])

=> e

使用type()函数来返回该对象的类型

1
2
3
4
str = "hello"
print(type(str))

=> <class 'str'>

6.input()

1
2
3
4
5
age = input("你几岁了?\n")
print(age)

输入12
=>12

int()float()str()函数可以把内容转换为对应的数据类型,例如:

1
2
age = input("你几岁了?\n")
print("您10年后会是"+str(int(age)+10)+"岁")

先把输入的字符串装换为int类型进行计算,之后输出的时候再以str类型进行输出

7.条件语句if

1.条件语句的格式

1
2
3
4
5
6
if 条件:
执行语句
执行语句
else:
执行语句
执行语句

具体运用:

1
2
3
4
5
i = int(input("输入一个数来判断与60的大小关系"))
if i >= 60:
print("大与等于60")
else:
print("小于60")

2.嵌套条件语句

1
2
3
4
5
6
7
8
if 条件:
执行语句
if 条件:
执行语句
else:
执行语句
else:
执行语句

3.多条件判断

1
2
3
4
5
6
7
8
if 条件:
执行语句
elif 条件:
执行语句
elif 条件:
执行语句
else:
执行语句

综合循环和多条件实例:

1
2
3
4
5
6
7
8
9
10
11
a = int(input("输入你的成绩\n"))
if a >= 90:
print("优秀")
elif 60 <= a <= 90:
print("良好")
if 60 <= a <=70:
print("虽然良好但是还需要努力哟")
else:
print("加油特种兵争取到优秀")
else:
print("不及格")

8.逻辑运算

and 一假则假
or 一真则真
not 取bool的反值

实例:

1
2
3
4
5
6
7
8
a = input("输入你的性别\n")
b = input("年龄\n")
if a == "男" or a == "女":
print("你是人")
if a == "男" and int(b) >= 18:
print("是成年男人")
elif not a == "男":
print("是女人")

9.列表

1.列表的使用

name_list = [“张三”,”李四”,”王五”]
print(name_list)
name_list.append(“老六”)
name_list.remove(“张三”)
print(name_list[0])

其中append添加列表元素,remove移除列表元素

2.数字列表的使用

num_list = [25,22,33]
max_num = max(num_list)
min_num = min(num_list)
sorted_num = sorted(num_list)
print(max_num,min_num,sorted_num)

其中max函数输出列表中的最大值,sorted函数输出从小到大排好序的列表

10.字典

1.字典的使用

字典名 = {键 : 值 , 键 : 值}

其中,字典里的键必须是不可变的数据类型,不能使用变量来作为键

键和值用:冒号来对应

contacts = {“张三”:18,”李四”:15,”王五”:17}
print(“张三的岁数是”,contacts["张三"])

可以用contacts["老六"]=19来新建字典元素

当出现键的名称相同时,比如通讯录中有多个张三,可以用元组tuple=(张三,21)来作为字典里的键,例如:

contacts = {("张三",18):1111111111,
(“张三”,17):222222222,
(“张三”,16):3333333333}
print(contacts["张三",18])
=>11111111

2.字典的操作

in操作

“张三” in contacts

in可以判断键是否在字典里,然后返回一个bool值

del操作

del contacts[“张三”,18]

del可以删除字典中该键值的内容

字典名操作

字典名.values() #返回所有值
字典名.keys() #返回字典里所有的键
字典名.iteams() #返回所有的键值对

3.字典小练习

1
2
3
4
5
6
7
8
print("网络热门词汇查询")
words = {"yyds":"永远滴神","xswl":"笑死我了"}
words["老六"] = "狗"
w = input("清输入查询的词汇\n")
if w in words:
print(words[w])
else:
print("词库目前只有"+str(len(words))+"个词,你搜索的词还未收录")

11.for循环

for 变量名 in 可迭代的对象

输出0到5,示例:

1
2
for i in range(0,6):
print(i)

其中range(起始值,结束值,步长)函数是整数数列

range( 0 , 6 )

以上表示0到5的数列,其中起始值是0,结束值是6,步长默认为1,range()函数的元素里不包括结束值6

12.while循环

for循环需要有明确的循环对象或次数,但while循环可以在循环次数未知的情况下一直循环直至跳出循环

1
2
while 条件A:
行动B

当A为真时执行B,直至A为假时跳出循环

具体示例:

1
2
3
4
5
6
7
8
9
10
11
total = 0
count = 0
user_input = input("请输入几个数,来计算平均值,输入q退出\n")
while user_input != 'q':
total += float(user_input)
count += 1
user_input = input("请输入几个数,来计算平均值,输入q退出\n")
if count == 0:
print("已退出")
else:
print(total/count)

13.字符串格式化

format方法

语法:”{ }”.format
format函数对于字符串的格式化:

1
print("我叫{0},我今年{1}".format("小明",18))

保留两位小数的一般方法为:

1
2
a = 0.123456
print("%.2f"%a)

当然也可使用format方法,如下:

1
2
a = 0.123456
print("{:.2f}".format(a))

f-字符串

也可以在字符串前面加字母f来实现字符串的格式化

1
2
3
a = "小明"
b = 18
print(f"我叫{a},我今年{b}")

14.函数

语法格式:

1
2
def 函数名:
函数内容

例如:

1
2
3
4
def add(a1, a2):
print(a1 + a2)

add(1, 2)

函数的返回值

使用return可以返回值,并且可以用变量来接收函数的返回值

1
2
3
4
def add(a1, a2):
return a1+a2

print(add(1, 2))

15.模块的引入

方法1:使用import语句

1
2
import math
math.函数名(...)

方法2:使用from…import…语句

1
2
from math import sqrt
sqrt( )

这样就不用在前面加math.

方法3:使用from…import*

1
2
from math import*
sqrt( )

但第二种和第三种在使用的时候会出现和其他库里的函数产生命名冲突或是混淆的情况,比如不知道是哪个库的函数,同时在代码上也不直观

16.类和对象

1.类

格式:

1
2
3
class 类名:
def __init__(self,属性,属性) #构造函数
内容

类名一般首字母大写

对象的创建: 对象名=类名(属性,属性)
对象的属性: 对象名.属性

示例:

1
2
3
4
5
6
7
8
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age


cat1 = Cat("汤姆",12)
print(f"小猫的名字叫{cat1.name},今年{cat1.age}岁啦")

2.类方法

需要再类里进行定义

1
2
3
4
5
class 类名:
def __init__(self,属性,属性) #构造函数
内容
def 类方法名(self):
内容

使用时:

对象名.类方法(参数,参数)

3.类的综合应用

定义学生类有学生的姓名、学号和成绩,创建设置成绩和输出成绩的类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Student:
def __init__(self, s_name, s_id):
self.s_name = s_name
self.s_id = s_id
self.grades = {"语文": 0, "数学": 0, "英语": 0}

def set_grades(self, course, grade):
if course in self.grades:
self.grades[course] = grade

def print_grades(self):
print(f"姓名:{self.s_name} " + f"学号:{self.s_id}")
for i in self.grades:
print(f"{i} {self.grades[i]}分")

s1 = Student("张三", "1111111111")
s1.set_grades("语文", 80)
s1.set_grades("数学", 60)
s1.print_grades()

4.继承

子类会继承父类的属性和方法
格式:

1
2
3
4
class 子类名(父类名):
def __init__(self,属性,属性...)
super().__init__(属性,属性...)
内容

综合应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Employee: #员工类
def __init__(self,name,id):
self.name = name
self.id = id

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 pay(self):
return self.monthly_salary


class PartTimeEmployee(Employee): #实时员工子类
def __init__(self,name,id,daily,salary):
super().__init__(name,id)
self.daily = daily
self.salary = salary

def pay(self):
return self.salary * self.daily


zs = FullTimeEmployee("张三","111",5000)
lisi = PartTimeEmployee("李四","222",500,10)
zs.print_info()
lisi.print_info()
print(f"张三的工资:{zs.pay()}")
print(f"李四的工资:{lisi.pay()}")

17.文件的操作

1.文件的路径

绝对路径:在根目录下的路径
C:\user

相对路径:文件现对于当前文件的目录
父目录..\

2.文件的操作

打开文件

变量 = open(“路径”,”r”,encoding=”utf-8“)
r只读
w只写
encoding=”utf-8

读文件

1.read(字节数)函数,读取内容并打印
2.readline()读取一行返回一行

1
2
3
4
5
f = open("./data.txt","r",encoding="`utf-8`")
line = f.readline()
while line != "":
print(line)
line = f.readline()

3.readlines()读取全部文件内容,并返回行列表

1
2
3
4
f = open("./data.txt","r",encoding="`utf-8`")
lines = f.readlines()
for line in lines:
print(line)

关闭文件

1.文件变量名.close()

2.with open(“./data.txt”) as f:
        print(f.read)

使用withas语句在执行完里面的语句后子自动关闭文件

写文件

w写入模式(会覆盖原文件)
a附加模式(接着原来的文件写入)

write()函数不会换行

如果既要读取也要写入可以使用r+
r+打开一个文件用于读写。文件指针将会放在文件的开头

a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

更多文件操作模式在菜鸟教程里查看https://www.runoob.com/python3/python3-file-methods.html

18.异常处理

语法:

1
2
3
4
try:
执行代码
except:
发生异常时执行的代码

异常处理的应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try:
user_weight = float(input("请输入您的体重:"))
user_height = float(input("请输入您的身高:"))
user_BMI = user_weight / user_height ** 2
except ValueError: #输入值异常捕捉
print("输入了不合理的数字,请重新运行程序并输入正确的数字")
except ZeroDivisionError: #除数为零异常捕捉
print("输入了不合理的数字,请重新运行程序并输入正确的数字")
except:
print("发生了未知错误,请重新运行")
else:
print("您的BMI值为:" + str(user_BMI))
finally:
print("程序运行结束")

finally无论程序正常结束与否都执行,else是除提及到的异常以外的其他情况

19.测试

1.使用assert进行测试(不常用)

1
assert bool表达式

表达式为真继续运行,表达式为假提示AssertionError并终止程序

2.unittest库

1
2
3
4
5
import unittest
from 测试文件名 import 测试函数或类名
class 测试类名(unittest.TestCase) #继承自该类
def test_类方法名称(self):
测试内容

实例:
需要测试的my_calculator.py文件

1
2
def my_adder(x,y):
return x + y

测试文件

1
2
3
4
5
import unittest
from my_calculator import my_adder
class TestMyAdder(unittest.TestCase) #继承自该类
def test_positive_with_positive(self):
self.assertEqual(my_adder(5,3),8) #类中定义好的方法

在终端输入

python -m unittest
就可以看到测试结果,测试通过为·,不通过为F