* 整形:int
* 浮点型:float
* 字符串:str
* 布尔型:bool
* 元组:tuple
* 集合:set
* 字典:dict
#变量名 = 值
num = 11
""" 解释 """
myName = "小灰灰"
print(myName)
myName = "小灰灰"
myAge = 18
myWeight = 49.9
myId = 9
print("姓名:%s" %myName)
print("年龄:%d" %myAge)
print("重量:%.2f" %myWeight) #两位小数.2f
print("学号:%06d" %myId) #学号:000009
print("姓名:%s, 年龄:%d" %(myName, myAge))
格式化字符串%s,还可以写为** f’{表达式}’**
myName = "小灰灰"
myAge = 18
print(f"姓名:{myName}, 明年年龄:{myAge + 1}")
print("my\tname") #输出:my name 再自动换行
print() #相当于 cout << endl;
print("my", end = "\t") #修改结尾默认的换行符为(\t)或者(...)
input("提示信息")
myName = input("请输入姓名:")
print(f"姓名是{myName}")
num = input("数字:")
print(f"num的类型是{type(num)}")
intNum = int(num)
print(f"intNum的类型是{type(intNum)}")
str1 = "1"
print(type(eval(str1))) #自动转换
算数运算符
赋值运算符
复合赋值运算符
a = 10
a += 1 + 2 #先算1+2, 再计算10+3
比较运算符
逻辑运算符
print((2 > 1) and (3 > 4)) #返回True
print(not (1 > 2)) #返回True
拓展:数字之间的逻辑运算
函数 | 解释 |
---|---|
id(a) | a的地址 |
type(a) | a的类型 |
随机数
import random #导入随机模块
rNum = random.randint(0, 2) #0-2的随机整数
num = int(input("请输入数字:")) #转换类型
if num > 5:
print(f"输入的数字大于5,为{num}", end = "...haha...")
else :
print(f"输入的数字小于5,为{num}", end = "...xixi...")
扩展 判断的化简
注意更新计数器和退出条件
i = 0
while i < 5:
i += 1
print("666")
使用continue之前,要更新循环计数器
按字符,进行遍历
# 单引号 'xhh'
# 双引号 "xhh"
# 三引号 """ xhh """ ->可以输出换行操作~
str = """ my
name is
xhh"""
str2 = 'I\'m TOM' # \' 转义字符
str = "abc" # str[0] 得到a ; str[2] 得到r
str = "abcde"
str[0:2:1] # ab 含左不含右
str[::-1] # 表示倒序
str[-5:-1] # -1表示最后一个
字串,不是字符,返回为索引值
- find() 查不到返回-1
- index() 查不到,程序错误
其他 str.xxx()
str3 = "a b c a"
s = str3.replace("a", "6666")
注意是分割字符
str = "a and b and c"
list = str.split("and", 1) # ['a ', ' b and c']
list = ["aa", "bb", "cc"]
newStr = "...".join(list) # aa...bb...cc
* capitalize() 第一个首字母大写
* title() 每个单词首字母大写
* lower() 转小写
* upper() 转大写
changeStr = str.capitalize()
* **ljust() 左对齐**
* **rjust() 右对齐**
* **center() 居中**
str = "hello"
str.ljust(10) # 左对齐
str.ljust(10, ".") # 左对齐 .填充
* **startswith()**
* **endswith()**
* **isalpha() 至少有一个字符,且全部字符都为字母返回True**
* **isdigit() 只包含数字,返回True**
* **isplace() 只包含空白,返回True**
nameLise = ["xhh", "zph"]
print(nameLise[0]) # xhh
函数与字符串操作方法一样
- index()
- count()
- len() # 公共函数
nameList = ["xhh", "zph"]
addList = ["aa", "bb"]
nameList.append(addList) # ['xhh', 'zph', ['aa', 'bb']]
nameList.extend(addList) # ['xhh', 'zph', 'aa', 'bb']
nameList.insert(0, addList) # [['aa', 'bb'], 'xhh', 'zph']
nameList = ["xhh", "zph"]
# 1.del()
del nameList # 删除列表 or del (nameList)
del nameList[0] # 删除 "xhh"
# 2.pop() 默认删除最后一个值,返回被删除的数据
nameList.pop() # 默认删除最后一个数据
nameList.pop(0) # 删除"xhh"
# 3.remove()
nameList.remove("xhh") # 删除"xhh"
# 4.clear()
nameList.clear() # 结果[]
nameList = ["xhh", "zph"]
# 1.指定下标修改
nameList[0] = "xhhChange"
# 2.reverse() 逆置
nameList.reverse()
# 3.sort(key = None, reverse = False) 排序 字典中的Key,reverse默认升序
nameList.sort() # 升序
nameList.sort(reverse = True) # 降序
数据很重要
nameList = ["xhh", "zph"]
copyList = nameList.copy()
【while循环】
nameList = ["xhh", "TOM", "zph"]
i = 0
while i < len(nameList):
print(nameList[i])
i += 1 # 更新循环因子
【for循环】
nameList = ["xhh", "TOM", "zph"]
for str in nameList:
print(str)
nameList = [["小明", "小红"], ["TOM", "XHH"]]
nameList[0] # ["小明", "小红"]
nameList[0][0] # 小明
**存储多个数据&&**不能修改数据
tuple_1 = (11, 22, 33) # 多个数据
tuple_2 = (11, ) # 单个数据
元组的常见操作(仅支持查找)
特殊:元组中的列表可以修改
tuple_1 = ("xhh", "zph", ["11", "22"])
# 元组中的列表[]是可以修改的
tuple_1[2][0] = "10"
dict_1 = {"name": "XHH", "age": "18"}
dict_2 = dict()
dict_3 = {}
* **dict[key] = value**
如果key存在,则修改key;如果key不存在,则新增key
dict_1 = {"name": "XHH", "age": "18"}
# 1.修改
dict_1["name"] = "zph"
# 2.新增
dict_1["class"] = "研究生"
* del() / del 删除字典或删除字典中指定的键值对
* clear() 清空字典
dict_1 = {"name": "XHH", "age": "18"}
del dict_1 # 删除 or del(dict_1)
del dict_1["name"] # 删除键值对
dict_1.clear() # 清空数据
* key值查找
* get(key, 默认值)
* keys()
* values()
* items()
dict_1 = {"name": "XHH", "age": "18"}
# 1.[key] 键值对
print(dict_1["name"]) # XHH
# 2 函数
# 2.1 get(key, 默认值)
print(dict_1.get("name"))
print(dict_1.get("names")) # 不存在,返回默认None
print(dict_1.get("names", "999")) # 不存在,返回修改默认999
# 2.2 keys() 查找字典中的所有key,返回可迭代的对象
print(dict_1.keys()) # ['name', 'age']
# 2.3 values() 查找字典中的所有value,返回可迭代的对象
print(dict_1.values()) # ['XHH', '18']
# 2.4 items() 查找字典中所有的键值对,返回可迭代的对象,里面的数据是元组
print(dict_1.items()) # [('name', 'XHH'), ('age', '18')]
* 遍历key
* 遍历value
* 遍历字典的元素(键值对)
* 遍历字典的键值对(拆包)
dict_1 = {"name": "XHH", "age": "18"}
# 1.遍历key
for key in dict_1.keys():
print(key)
# 2.遍历value
for value in dict_1.values():
print(value)
# 3.遍历元素
for item in dict_1.items():
print(item)
# 4.遍历字典的键值对(拆包)
for key, value in dict_1.items():
print(f"{key} = {value}")
创建集合使用{}或set()
⭐创建空集合只能用set()
⭐****集合去重
s1 = {11, 22}
s2 = set()
s3 = set("abc") # {'a', 'c', 'b'}
* **add() *****只能 *****增加单一数据**
* **update() *****只能 *****增加序列数据**
s1 = {11, 22}
# add() 可以增加在任意位置
s1.add(100)
# update()
s1.update([22, 33, 44])
* **remove() 删除指定数据,不存在报错**
* **discard() 删除指定数据,不存在不会报错**
* **pop() 随机删除某个数据,****并返回这个值**
s1 = {11, 22, 33}
s1.remove(11)
s1.discard(11)
s1.pop()
返回**True **和 False
- in 判断数据在集合序列里面
- not in 判断不在里面
s1 = {11, 22, 33}
print(11 in s1)
enumerate(可遍历对象, start = 0)
list_1 = [11, 33, 22]
maxNum = max(list_1)
minNum = min(list_1)
# 获取一组数据
for i in range(1, 10, 1):
print(i) # 1 2 3 ... 9 不包含10
for i in range(10):
print(i, end = " ") # 0 1 ... 9 不包含10
for i in enumerate(list_1):
print(i, end = " ") # (0, 11) (1, 33) (2, 22)
for i in enumerate(list_1, start = 1):
print(i, end = " ") # (1, 11) (2, 33) (3, 22) 下标从1开始
* **list() 转换成列表 -- list(tuple_1)**
* **tuple() 转换成元组**
* **set() 转换成集合**
简化代码
- 列表[ ]推导式
- 字典{ }推导式
- 集合{ }推导式
用一个表达式创建一个有规律的列表或控制一个有规律列表
【需求创建0 - 9 的列表】
for推导式实现
# 1.while实现
list1 = []
i = 0
while i < 10:
list1.append(i)
i += 1
# 2.for实现
list2 = []
for i in range(10):
list2.append(i)
# 3.推导式实现
list3 = [i for i in range(10)]
【创建】
if推导式实现
# 1.for
list2 = [i for i in range(0, 10, 2)]
# 2.for - if
list3 = [i for i in range(10) if i % 2 == 0]
多个for循环实现列表推导式
# 需要生成 [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
list4 = [(i, j) for i in range(1, 3) for j in range(3)]
快速合并列表为字典或提取字典中目标数据
【1. key:1-5, value:这个数字的平方】
dict1 = {i: i**2 for i in range(5)}
【2. 将两个列表合并为一个字典】
list1 = ["name", "age", "gender"]
list2 = [“Tom”, 18, “man”]
dict2 = {list1[i]: list2[i] for i in range(len(list1))}
【3. 提取字典中的目标数据】
counts = {"MBP": 268, "HP": 201, "Lenovo": 199}
# 提取数量 > 200 的字典数据
count1 = {key: value for key, value in counts.items() if value >= 200}
print(count1)
集合:去除功能
set1 = {i ** 2 for i in range(3)} # {0, 1, 4}
必须先定义后调用
- 定义函数
- 调用函数
# 定义函数
def 函数名(参数):
代码...
# 函数调用
函数名(参数)
# 1.定义函数 a,b 形参
def addNum2(a, b):
""" 函数的说明文档:求和函数 """
r return a + b # 退出当前函数,后面的代码不执行
# 2.调用函数 11,22 实参
print(addNum2(11, 22))
help(addNum2) # 查看函数的说明信息
多个返回值 默认:返回元组
def returnNums():
return 11, 22
#return后可以直接书写 元组/列表/字典 默认:元组
print(returnNums()) # (11, 22)
a = 100 # 定义全局变量
def test1():
print(a) # 全局变量
def test2():
a = 200 #局部变量
print(a) #局部变量
# 若要修改全局变量a
def test3():
global a = 22 # 全局变量
print(a)
def userInfo(name, age, gender):
print(f"姓名:{name}, 年龄:{age}, 性别:{gender}")
# 传入参数要对应位置和数量
userInfo("Xhh", 18, "男")
**通过 key = value 可以无序 && **位置参数必须在关键字参数前面
userInfo(name= "xhh", gender= "男", age= 19)
缺省参数必须放在末尾
def userInfo(name, age, gender = "男"):
print(f"姓名:{name}, 年龄:{age}, 性别:{gender}")
可以修改 *name **kwname
- args 包裹位置传递 ** 返回元组( )*
- **kwargs 包裹关键字传递 返回字典{ }
# 1.包括位置传递
def userInfo(*args):
print(args)
userInfo("Xhh", 18) # ('Xhh', 18) 返回元组
# 2.包裹关键字传递
def userInfo(**kwargs):
print(kwargs)
userInfo(name = "Xhh", age = 18) # {'name': 'Xhh', 'age': 18}
元组的拆包
def returnNum():
return 11, 22 # 返回了(11, 22)
num1, num2 = returnNum() # 拆包-> num1 = 11, num2 = 22
字典的拆包
dict1 = {'name': 'Xhh', 'age': 18}
a, b = dict1
# 字典拆包,取出对应的key
print(a) # name
print(b) # age
# 字典根据key,取出value
print(dict1[a]) # Xhh
print(dict1[b]) # 18
【方法一:借助临时变量c】
a, b = 11, 22
c = a
a = b
b = c
【方法二:化简写法】
a, b = 11, 22
a, b = b, a # 交换
python中,值是靠引用来传递的 **id( ) **可以判断地址
引用当作实参
def test1(a):
print(a)
print(id(a))
a += a
print(a)
print(id(a))
# 引用做实参传递
b = 100
test(b) # 可以的 100, 200 两次id不同,分别指向不变int类型的100 和 200
# 第二种数据类型
c = [11, 22]
test(c) #可以输出[11, 22]、[11, 22, 11, 22],两次id一样,指向可变类型list
快速遍历文件,人工智能算法
递归 计算3 + 2 + 1
def sumNums(num):
# 1.如果是1,直接返回1 -- 出口
if num == 1:
return 1
# 2.如果不是1,重复执行累加并返回结果
return num + sumNums(num - 1)
print(sumNums(3))
如果函数有一个返回值,并且只有一句代码,可以使用lambda简化
lambda 参数列表: 表达式
【示例:返回值】
# 需求:返回值100
# 1.函数
def func1():
return 100
# 2.lambda 匿名函数
func2 = lambda: 100
func2() # 函数调用,这个就是返回值
【示例:a+b】
# 1.函数
def addNums(a, b):
return a + b
result = addNums(11, 22)
# 2.匿名函数
func = lambda a, b: a + b
result = func(11, 22)
# 1.无参数
func = lambda: 100
# 2.一个参数
func = lambda a: a
print(func("XHH"))
# 3.默认参数
func = lambda a, b = 22: a + b
print(func(11))
# 4.可变参数*args 返回元组
func = lambda *args: args
print(func(11, 22))
# 5.可变参数**kwargs 返回字典
func = lambda **kwargs: kwargs
print(func(name = 'python', age = 18))
func = lambda a, b: a if a > b else b
print(func(11, 22))
students = [
{'name': 'Xhh', 'age': 11},
{'name': 'zph', 'age': 33},
{'name': 'Link', 'age': 22}
]
# 按照年龄降序排列
students.sort(key = lambda x: x['age'], reverse = True)
把函数作为参数传入,化简代码,增加代码的灵活性
【示例】
def sumNums(a, b, func):
return func(a) + func(b)
result = sumNums(-1, 22, abs) # 函数abs作为参数传进去
print(result) # 23
map(func, list) ,将函数作用与列表的每个元素,并返回迭代器
# 计算各个数组的二次方
list1 = [3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1) # 返回迭代器
print(result) #
reduce(func, list), 其中func必须有两个参数。
每次func计算的结果和序列的下一个元素做累计计算
注意:reduce() 传入的参数 func必须接受两个值
import functools
# 计算list1序列中各个数字的累加和
import functools
list1 = [3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result)
filter(func, list) 用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象
如果要转化为列表,可以使用list( )来转换
list1 = [3, 4, 5]
# 定义条件
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result) #
print(list(result)) # [4]
open(name, mode) # 文件名or地址 打开模式
f = open('test.cpp', 'w') # 创建文件对象
对象.write('内容')
对象.read(num) # num读取字节数
对象.readlines()
con = f.readlines()
print(con) # ['aaa\n, 'bbb\n', 'ccc'],
cont = f.readline()
print(f'第一行内容:{cont}')
cont = f.readline()
print(f'第二行内容:{cont}')
# 1.打开 open()
f = open('test.txt', 'w')
# 2.读写操作 write() read()
f.write('xhh')
# 3.关闭 close()
f.close()
改变文件指针位置
对象.seek(偏移量, 起始位置)
* 起始位置
* 0:文件开头
* 1:当前位置
* 2:文件结尾
需求:用户输入当前目录下任意文件名,完成备份(备份文件名为xx[备份]后缀)
oldName = input("请输入您要备份的文件名:")
print(oldName)
index = oldName.rfind('.')
# print(index)
newName = oldName[:index] + '[备份]' + oldName[index:]
oldF = open(oldName, 'rb')
newF = open(newName, 'wb')
# 不确定目标大小,循环读取
while True:
con = oldF.read(1024)
if len(con) == 0:
break
newF.write(con)
oldF.close()
newF.close()
import os # 导入模块
os.rename(原文件名, 新文件名)
os.rename('xhh.py', 'xhhNew.py')
os.remove(文件名)
os.mkdir('文件夹')
os.rmdir('文件夹')
os.getcwd() # 返回当前文件的路径
os.chdir('目录')
os.listdir() # 当前目录的文件名,返回为列表[ ]
os.rename('777', 'new777')
import os
fileList = os.listdir()
print(fileList)
for i in fileList:
newName = 'Python' + i
os.rename(i, newName)
a = ' vbn '
a.strip(" ") # 'vbn' 删除功能
b = "a,b,c"
b.split(",") # ["a", "b", "c"] 切片
import turtle
from random import *
turtle.circle(50, 90) # 90度圆
turtle.circle(50, steps= 3) # 变长50的3角形
from wordcloud import WordCloud
from wordcloud import WordCloud
txt = "i like Python, Python is good"
word = WordCloud().generate(txt) # 存储为词云
word.to_file("1.png") # 显示为图片