目录
1. 数据类型
1.1 字符串
- 1. 数据类型
- 1.1 字符串
- 1.2 数值操作
- 1.3 列表操作
- 1.4 元组操作
- 1.5 字典操作
- 1.6 set操作
- 2. 输入input
- 3. if语句
- 4. 函数def
- 4.1 变长元组参数
- 4.2 变长字典参数
- 5. 随机数
- 6. 类Class
- 7. try-catch-else-finally异常处理
- 8. unittest单元测试
- 字符串格式化
name = 'zhang_san'
age = 18
str = f'name: {name}, age: {age}'
print(str)
输出如下
name: zhang_san, age: 18
- 字符串大小写转换
str = 'my name'
print(str.title())
print(str.lower())
print(str.upper())
输出如下:
My Name
my name
MY NAME
-
去除左右空白字符: lstrip()、rstrip()、strip()
-
判断字符串是否存在于某个字符串
if __name__ == '__main__':
str = 'i love china'
if 'china' in str:
print('love') # love
- 字符串替换replace
if __name__ == '__main__':
str = '1 2 3 1 2 3'
new_str = str.replace('3', '6')
print(new_str) # 1 2 6 1 2 6
- 计算字符串在某个字符串中出现的次数
if __name__ == '__main__':
str = 'AAAAA'
num = str.count('AA')
print(num) # 2
1.2 数值操作
if __name__ == '__main__':
# 乘方
print(3 ** 2) # 9
# 小数精度问题
print(0.1 + 0.2) # 0.30000000000000004
# 两数相乘结果总是浮点数
print(6 / 3) # 2.0
# 数值较大, 加下划线使结构更清晰
print(12_34_567_89.12_3) # 123456789.123
1.3 列表操作
生成数值列表
if __name__ == '__main__':
# 从1开始, 到10结束(不包含), 步长为2的列表
list1 = list(range(1, 10, 2))
print(list1) # [1, 3, 5, 7, 9]
列表索引
if __name__ == '__main__':
list2 = [1, 2, 3, 4, 5]
print(list2[-1]) # 5
print(list2[-2]) # 4
列表切片
if __name__ == '__main__':
# 从1开始, 到6结束(不包含), 步长为2的切片
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list3[1:6:2]) # [2, 4, 6]
列表元素删除
if __name__ == '__main__':
# 使用del删除指定索引元素
list4 = [1, 2, 3, 4, 5]
del list4[0]
print(list4) # [2, 3, 4, 5]
# 使用pop删除指定索引元素, 不传索引值默认删除列表最后一个元素
list5 = [1, 2, 3, 4, 5]
pop_value = list5.pop(2)
print(pop_value) # 3
print(list5) # [1, 2, 4, 5]
# 删除指定值的元素, 只删除第一个遇到的值
list6 = [1, 2, 3, 4, 5, 3]
list6.remove(3)
print(list6) # [1, 2, 4, 5, 3]
列表排序
if __name__ == '__main__':
# 改变原列表顺序
list7 = [1, 3, 5, 8, 6, 2]
list7.sort(reverse=True)
print(list7) # [8, 6, 5, 3, 2, 1]
# 不改变原列表顺序
list8 = [1, 3, 5, 8, 6, 2]
sorted_list = sorted(list8, reverse=True)
print(list8) # [1, 3, 5, 8, 6, 2]
print(sorted_list) # [8, 6, 5, 3, 2, 1]
列表元素翻转
if __name__ == '__main__':
list9 = [1, 3, 5, 8, 6, 2]
list9.reverse()
print(list9) # [2, 6, 8, 5, 3, 1]
列表复制
if __name__ == '__main__':
list10 = [1, 3, 5, 8, 6, 2]
copy_list = list10[:]
print(copy_list) # [1, 3, 5, 8, 6, 2]
求列表的最小值、最大值、求和
if __name__ == '__main__':
list11 = [1, 3, 5, 8, 6, 2]
print(min(list11)) # 1
print(max(list11)) # 8
print(sum(list11)) # 25
1.4 元组操作
元组的值不可修改
定义元组
if __name__ == '__main__':
tuple1 = (1, )
print(tuple1) # (1,)
用元组给多个变量赋值
if __name__ == '__main__':
a, b, c = 1, 2, 3
print(a) # 1
print(b) # 2
print(c) # 3
1.5 字典操作
删除key
if __name__ == '__main__':
person_dict = {"name":"zhang_san", "age":18}
del person_dict["age"]
print(person_dict) # {'name': 'zhang_san'}
通过get获取key的值
if __name__ == '__main__':
person_dict = {"name":"zhang_san", "age":18}
print(person_dict.get("age")) # 18
print(person_dict.get("age", 3)) # 18
print(person_dict.get("score")) # None
print(person_dict.get("score", 100)) # 100
获取key和value的列表
if __name__ == '__main__':
person_dict = {"name":"zhang_san", "age":18}
print(person_dict.values()) # dict_values(['zhang_san', 18])
print(person_dict.items()) # dict_items([('name', 'zhang_san'), ('age', 18)])
1.6 set操作
set集合中的数据不重复,但是无序的
if __name__ == '__main__':
names = ["zhang_san", "li_si"]
set_names = set(names)
print(set_names) # {'li_si', 'zhang_san'}, 再次执行可能是{'zhang_san', 'li_si'}
2. 输入input
if __name__ == '__main__':
promt = "我们来玩个游戏\n请输入您喜欢的水果, 然后按回车确认: "
fruit = input(promt)
print(f"\n您喜欢的水果是{fruit}")
我们来玩个游戏
请输入您喜欢的水果, 然后按回车确认: 榴莲
您喜欢的水果是榴莲
3. if语句
列表不为空,则为True
if __name__ == '__main__':
names = ['zhang_san']
if names:
print('hello world')
输出结果如下:
hello world
变量为None或空字符串,则为False
if __name__ == '__main__':
value1 = None
value2 = ""
if value1:
print('hello')
if value2:
print('world')
print('end')
输出如下
end
4. 函数def
函数中可以对传入的列表进行修改
def change_list_value(test_list):
for index, value in enumerate(test_list):
test_list[index] = value + 10
if __name__ == '__main__':
test_list = [1, 2, 3, 4, 5]
change_list_value(test_list)
print(test_list) # [11, 12, 13, 14, 15]
4.1 变长元组参数
变长元组参数需放在函数参数的末尾,将接收到的值封装到这个空元组
def print_fruit(*fruit):
print(fruit)
if __name__ == '__main__':
print_fruit() # ()
print_fruit("apple") # ('apple',)
print_fruit("apple", "banana", "orange") # ('apple', 'banana', 'orange')
4.2 变长字典参数
变长字典参数初始化是一个空字典,接收多个键值对然后存入到该字典
def print_dict(**test_dict):
print(test_dict)
if __name__ == '__main__':
print_dict() # {}
print_dict(name = "zhang_san") # {'name': 'zhang_san'}
print_dict(name = "zhang_san", age = 10) # {'name': 'zhang_san', 'age': 10}
5. 随机数
返回两个数之间的整数,随机数可能是这两个数
import random
if __name__ == '__main__':
print(random.randint(1, 10)) # 3
从集合中随机选择一个元素
import random
if __name__ == '__main__':
nums = [1, 2, 3, 4, 5]
print(random.choice(nums)) # 5
6. 类Class
# 父类
class Car:
"""我是类中的注释"""
def __init__(self, brand = "捷达"):
self.brand = brand
self.price = 100
def get_car_info(self):
car_info = f"{self.brand} {self.price}"
return car_info
def modify_price(self, new_price):
if new_price > self.price:
self.price = new_price
# 属性类
class Battery:
def __init__(self, battery_size):
self.battery_size = battery_size
def get_battery_size(self):
return self.battery_size
# 子类继承父类
class ElectricCar(Car):
def __init__(self, brand, model, battery_size):
super().__init__(brand)
self.model = model
"""将实例用作属性"""
self.battery = Battery(battery_size)
"""覆盖父类的方法"""
def modify_price(self, new_price):
self.price = new_price
if __name__ == '__main__':
my_car = Car('宝马')
my_car.brand = '奔驰'
my_car.modify_price(90)
print(my_car.get_car_info())
my_electric_car = ElectricCar('特斯拉', 'Model 3', 500)
my_electric_car.modify_price(90)
print(my_electric_car.get_car_info())
print(my_electric_car.battery.get_battery_size())
执行的输出如下:
奔驰 100
特斯拉 90
500
7. try-catch-else-finally异常处理
if __name__ == '__main__':
try:
# 此处定义的变量, 在try部分共享
share_value = 'share_value'
10 / 0
except(ZeroDivisionError,FileNotFoundError,ValueError) as e:
print("出现异常时, 执行此部分")
print(e)
except Exception as all_e:
print(all_e)
else:
print("没有异常, 执行此部分")
finally:
print(share_value)
print("不管有没有异常, 我都会被执行")
输出如下:
出现异常时, 执行此部分
division by zero
share_value
不管有没有异常, 我都会被执行
8. unittest单元测试
常用的测试方法如下:
方法用途assertEqual(a, b)a等于b,则测试通过,否则测试失败assertNotEqual(a, b)a不等于b,则测试通过,否则测试失败assertTrue(x)x为True,则测试通过,否则测试失败assertFalse(x)x为False,则测试通过,否则测试失败assertIn(item, list)item在list中,则测试通过,否则测试失败assertNotIn(item, list)item不在list中,则测试通过,否则测试失败my.app.py内容如下:
def get_double_money(money):
return money * 2
class Fruits:
def __init__(self):
self.fruit_names = []
def add_fruit_name(self, new_fruit_name):
self.fruit_names.append(new_fruit_name)
unit_test.py内容如下:
import unittest
from my_app import get_double_money, Fruits
class GetDoubleMoneyTest(unittest.TestCase):
"""相当于__init__方法"""
def setUp(self):
self.test_money = 200
self.test_fruit_name = 'apple'
def test_get_double_money(self):
result_money = get_double_money(100)
"""相等则测试通过, 不相等则测试失败"""
self.assertEqual(result_money, self.test_money)
def test_add_fruit(self):
fruits = Fruits()
fruits.add_fruit_name(self.test_fruit_name)
"""值在列表中则测试通过, 值不在列表中则测试失败"""
self.assertIn(self.test_fruit_name, fruits.fruit_names)
if __name__ == '__main__':
"""以test_开头的方法, 将自动运行"""
unittest.main()
该测试示例中的测试,全部通过,测试结果如下: