b站黑马程序员视频链接
记笔记懒的打字的用win+H语音转文字哦
#第一天
pycharm常用快捷键
ctrl / 注释快捷键
双引号包裹的叫字符串。
单行注释:#开头 和注释内容建议以一个空格隔开
多行注释:三对双引号
变量就是在程序运行时,记录数据用的
格式:变量名称=变量的值
变量的值可以变
print()里面输出多份内容用,隔开
三类数据类型:string、int、float
验证数据类型:语法 type(被查看类型的数据)
查看的是变量存储的数据类型,变量无类型它的存储数据有
name="哈哈哈" name_type=type(name) print(name_type)转换类型
num=str(11) print(type(num),num)任何类型都可以转换成字符串,字符串转成数字必须字符串内是数字,浮点数转整数会丢尾数缺失精度
标识符
只允许出现英文数字下划线中文,中文不推荐,数字不可以开头
英文大小写敏感,可以被区分
不可以使用关键字,大小写敏感,完全一样才报语法错误
运算符
算术运算符+-*/ // % **
//整除 %取余 **次方
赋值运算符=
复合型赋值运算符+= 表示的是将本身去进行运算 例子:c +=a等效于 c =c+a
单引号双引号三引号都可以定义字符串,三引号可以分行类似注释
字符串本身带有引号,则本身是有单引号我们就使用双引号定义,反之有双我们用单,或则使用\转义字符
name = '"哈哈哈"' print(name) name ="'刚刚'" print(name) name ='\'好坏\'' print(name) name ="\"积极\"" print(name)打印出来"哈哈哈" '刚刚' '好坏' "积极"
字符串拼接+
字符串与字符串进行拼接,不能和非字符串进行拼接
字符串格式化
%占位 s把变量放进来
name = "一一一" message = "我是:%s" %name print(message) class_num = 57 avg_salary =1234 message ="北京%s期,毕业平均工资:%s" %(class_num,avg_salary) print(message)我是:一一一 北京57期,毕业平均工资:1234数据类型占位
%s内容转字符串 %d 转整数 %f 转浮点型
数字精度控制
m.n形式控制,m为宽度,.n为精度会对小数部分进行四舍五入限制,m比数子本身宽度还小m不生效
#第二天
字符串格式化2
语法:f''内容{变量}''
不理会类型不做精度控制
name = '哈哈哈' set_up_year_ =2002 stock_price = 19.9 print(f"我是{name},成立于:{set_up_year_},今天股价为:{stock_price}")对表达式进行格式化
表达式:一条具有明确执行结果的代码语句
综合小练习(股票计算小程序)
name = "传智播客" stock_price = 19.99 stock_code = 1003032 stock_price_daily = 1.2 growth_days = 7 print(f"公司:{name},股票代码:{stock_code},当前股价:{stock_price}") print("每日增长系数是:%.1f,经过%d天增长股价达到了:%.2f" %(stock_price_daily,growth_days,stock_price*stock_price_daily**growth_days))公司:传智播客,股票代码:1003032,当前股价:19.99 每日增长系数是:1.2,经过7天增长股价达到了:71.63input语句
数据输入,默认输出字符串类型
print("请告诉我今天星期几") day = input() print("我知道了今天:%s" %day)请告诉我今天星期几 星期一 #我自己输入的 我知道了今天:星期一也可以等同于print
day = input("请告诉我今天星期几") print("我知道了今天:%s" %day)转类型
num = input("银行卡密码:") num = int(num) print("银行卡密码类型是:", type(num))判断语句
比较运算符,布尔类型
bool1 = True bool2 = False print(f"bool1变量内容是:{bool1},类型是:{type(bool1)}") print(f"bool2变量内容是:{bool2},类型是:{type(bool2)}") num1 = 10 num2 =10 print(num1==num2) name1 ="qqq" name2 ="www" print(name1!=name2)if判断语句
print("欢迎来到儿童乐园,儿童免费,成人收费") age = input("请输入你的年龄:") age = int(age) if age>=18: print("你已经成年,需要购票") print("祝你玩的愉快")if else用法
print("欢迎来到儿童乐园,儿童免费,成人收费") age = input("请输入你的年龄:") age = int(age) if age>=18: print("你已经成年,需要购票") else: print("你不需要购票") print("祝你玩的愉快")if elif else用法
判断是互斥且有顺序的,上一个满足后面就不会判断了,空格缩进不可省
if int(input("请输入身高(cm):"))<120: print("免费") elif int(input("请输入vip等级:"))>3: print("免费") elif int(input("今天几号:"))==1: print("免费") else: print("需要购票")判断语句的嵌套
if int(input("请输入身高(cm):")) >120: print("身高超出免费区间") print("如果vip等级大于3,可以免费") if int(input("vip等级:")) >3: print("免费") else: print("需要买票") else: print("免费")练习题
发礼物,限制年龄18-30,且工作时间两年以上或者等级3级以上
if 18<int(input("请输入年龄:"))<30: print("年龄满足") if int(input("请输入入职时间:"))>2: print("满足条件") elif int(input("请输入等级:"))>3: print("满足") else: print("不满足") else: print("不满足")猜数字游戏案例
三次机会,要有提示猜的数字对应的情况
import random num = random.randint(1,10) guess_num = int(input("请输入数字:")) if guess_num==num: print("第一次就猜对了") else: if guess_num>num: print("猜大了,你还有两次机会") else: print("猜小了,你还有两次机会") guess_num = int(input("再次输入数字:")) if guess_num == num: print("第二次猜对了") else: if guess_num > num: print("猜大了,你还有一次机会") else: print("猜小了,你还有一次机会") guess_num = int(input("请再次输入数字:")) if guess_num == num: print("第三次猜对了") else: print("猜错了,没有机会了")while循环语句
条件需提供布尔类型结果,True继续,False结束
空格缩进不能忘
规划好循环终止条件,否则无限循环
求1-100的和
i=1 sum=0 while i<=100: sum =sum+i i += 1 print("1-100的和为:",sum)猜数小游戏
无限次,并输出猜测次数
import random num = random.randint(1,100) #记录猜测次数 count = 0 #通过一个布尔类型的变量,做循环是否继续的标记 flag = True while flag: guess_num = int(input("请输入你猜的数字:")) count += 1 if guess_num == num: print("猜中了") flag = False else: if guess_num > num: print("猜大了,请重猜") else: print("猜小了,请重猜") print(f"你一共猜测了{count}次")#第三天
while嵌套循环
表白案例
i = 0 while i<=100: print(f"这是第{i}天进行表白") j = 1 while j<=10: print(f"送{j}枝玫瑰") j +=1 print("我爱你") i +=1 print(f"第{i-1}天表白成功")While循环打印九九乘法表案例
使用print语句输出不换行,在括号里加end=' '
\t 制表符,效果等同于键盘按下tab键 使多行字符串进行对齐
i = 1 while i<=9: j = 1 while j <= i: print(f"{j}*{i}={j*i}\t",end='') j +=1 i += 1 print()for循环
本质上是遍历
语法:从待处理数据集中逐个取出数据赋值给临时变量
for临时变量 in 待处理数据集:
循环满足条件时执行的代码
待处理数据集称之为序列类型,其内容可以一个个依次取出的一个类型
统计字母a的个数案例
name = "hduwdfuweiaaaadhudqwaa" count = 0 for x in name: if x=="a": count +=1 print(f"有{count}个a")range语句
获取一个简单的数据序列
语法:range(num)
获取一个从0开始到num结束的数字序列(不含num本身)
语法2:range(num1,num2)
获取一个从num1到num2的数字序列(不含num2本身)
语法3:range(num1,num2,step)
获取一个从num1到num2结束的序列(不含num2本身),数字步长以step为准,默认为1,假设为2则是隔一个取一个
表白案例
i =1 for i in range(1,101): print(f"表白第{i}天") for j in range(1,11): print(f"送的第{j}朵花") print("我喜欢你") print(f"第{i}天表白成功")for循环打印九九乘法表
i =1 for i in range(1,10): j = 1 for j in range(1,i+1): print(f"{j}*{i}={j*i}\t", end='') j += 1 i += 1 print()continue
中断本次循环,直接进入下一次循环,可用于for循环和while循环,效果一致
只对自己所在循环生效
break
直接终止所在的本次循环
发工资案例
自己写的不知道对不对
20个员工,公司有一万奖金,绩效大于5可领取
i = 1 sum = 10000 for i in range(1,21): import random num = random.randint(1, 10) while num>=5: if sum >= 1000: sum -= 1000 print(f"向员工{i}发放工资1000元,账户余额还剩{sum}元") else: print(f"员工{i},绩效合格,但工资发完了,下个月再来领取") break else: print(f"员工{i},绩效分:{num}分,低于5,不发工资,下一位") continue i +=1函数
定义语法
def 函数名(传入参数):
函数体
return 返回值
使用步骤:先定义函数,后调用函数
参数不需要可以省略
返回值不需要可以省略
#定义函数 def add(x,y): #形参 result = x+y print(f"{x}+{y}结果是{result}") #调用函数 add(1,2) #实参def add(a,b): result = a+b return result r=add(5,6) print(r)#第四天
None类型
空的,无实际意义,用于声明无内容的变量,使用在函数返回值、if判断、变量定义
函数说明文档
通过多行注释形式,对函数进行说明解释,鼠标悬停在调用函数上会显示说明文档
函数嵌套调用
一个函数里面调用了另一个函数
def funb(): print("2") def funa(): print("1") funb() print("3") funa()变量
变量作用域指的是变量的作用范围
分为局部变量和全局变量
局部变量是定义在函数体内部的变量,只在函数体内部生效
全局变量在函数外面定义变量
全局变量代码
num = 200 def test_a(): print(f"test_a:{num}") def test_b(): num = 500 print(f"test_b:{num}") test_a() test_b() print(num)test_a:200 test_b:500 200global关键字
将函数内定义的变量声明为qu'a
num = 200 def test_a(): print(f"test_a:{num}") def test_b(): global num #设置内部定义的变量为全局变量 num = 500 print(f"test_b:{num}") test_a() test_b() print(num)test_a:200 test_b:500 500取款机案例
money =5000000 name =input("请输入姓名") def query(show_header): if show_header: print("----------查询余额--------------") print(f"{name},你的余额剩余:{money}元") def saving(num): global money money +=num print("--------------存款----------------") print(f"{name},你存款{num}元成功") query(False) def get_money(num): global money money -= num print("--------------取款----------------") print(f"{name},你取款{num}元成功") query(False) def main(): print("--------------主菜单-------------------") print(f"{name},欢迎来到ATM,请选择操作:") print("查询余额/t[输出1]") print("存款/t[输出2]") print("取款/t[输出3]") print("退出/t[输出4]") return input("请输入你的选择:") #设置循环 while True: keyboard_input = main() if keyboard_input == "1": query(True) continue elif keyboard_input =="2": num=int(input("请输入存款金额:")) saving(num) continue elif keyboard_input =="3": num=int(input("请输入取款金额:")) get_money(num) continue else: print("程序退出") breakpython数据容器
一个容器可以容纳多份数据,每一份数据称之为1个元素,每一个元素可以是任意类型的数据,如字符串、数字、布尔
容器根据特点不同分为五类
列表、元组、字符串、集合、字典
下标索引
从前往后,从0开始递增
从后往前,从-1开始递减
下标索引取值范围超出范围无法取出,会报错
my_list = ["haha","jajaja","kakakka"] print(my_list[0]) print(my_list[1]) print(my_list[2]) print(my_list[-1]) print(my_list[-2]) print(my_list[-3]) my_list = [[1,2,3],[4,5,6]] print(my_list[1][1]) #第一个[]为0 第二个为1 取德第二个里面的第二个 print(my_list[-2][1]) #第一个[]为-2 第二个为-1 取德第一个里面的第二个haha jajaja kakakka kakakka jajaja haha 5 2列表的常用操作
插入、删除元素、清空列表、修改元素、统计元素个数这一系列功能称为列表的方法
查找下标
语法:列表.index(元素)
my_list = ["haha","jajaja","kakakka"] index =my_list.index("haha") print(f"haha下标索引是:{index}")修改下标索引的值
my_list[0]="hhhhh" print(f"修改后的值为:{my_list}")插入元素
语法:列表.insert(下标,元素)
在指定下标位置插入指定元素
my_list.insert(1,"best") print(f"插入后结果是:{my_list}")追加元素
语法:列表.append(元素)
指定元素追加到列表的尾部
my_list.append("babab") print(f"插入后结果是:{my_list}")语法:列表.extend(其他数据容器)
将其他数据容器的内容取出,依次追加到列表尾部
元素删除
语法1:del 列表[下标]
语法2:列表.pop(下标)
语法3:列表.remove(元素)
清空列表
语法:列表.clear()
统计某元素在列表的数量
语法:列表count(元素)
统计列表内有多少元素
语法:len(元素)
练习案例
mylist = [21,25,21,23,22,20] mylist.append(31) print(f"追加数字:{mylist}") mylist.extend([29,33,30]) print(f"追加数字:{mylist}") print(f"取出第一个元素:{mylist[0]}") print(f"取出最后元素:{mylist[-1]}") index = mylist.index(31) print(f"31下标为:{index}")追加数字:[21, 25, 21, 23, 22, 20, 31] 追加数字:[21, 25, 21, 23, 22, 20, 31, 29, 33, 30] 取出第一个元素:21 取出最后元素:30 31下标为:6#第五天
列表的遍历——while循环
my_list = ["hde","huidwq9","jioqhih"] index = 0 while index < len(my_list): element = my_list[index] print(f"列表元素:{element}") index +=1for循环
def list_for_func(): my_list=[1,2,3,4] for element in my_list: print(f"元素列表有:{element}") list_for_func()while和for循环对比:
while可以自定义循环条件,for不可以只可以一个个取出
while可以通过控制条件实现无限循环,for理论上不可以因为被遍历的容器容量不是无限的
while循环适用于任何想要的场景,for适用于遍历数据容器的场景或简单的固定次数循环场景
输出偶数列表案例
my_list=[1,2,3,4] even_for = [] for element in my_list: if element % 2 == 0: even_for.append(element) print(f"元素列表有:{even_for}") even_whlie = [] index=0 while index<len(my_list): current = my_list[index] if current%2==0: even_whlie.append(current) index +=1 print(f"元素列有有:{even_for}")元组
列表可以修改,传递信息不能修改列表就不合适了,元组一旦定义完成,就不可修改,元组也可以封装多个不同类型的元素在内,可以修改内部list的内部元素
使用小括号定义,使用逗号隔开数据,数据可以是不同的数据类型
操作方法:index() 、count() 、len(元组)
特点:支持for循环 、和list基本相同,唯一不同在于不可修改
小案例
t1 = ("周杰伦",11,["aaaa","bbbb"]) index=t1.index(11) print(f"{index}") name = t1[0] print(name) t1[2].remove('aaaa') print(t1) t1[2].append('ccc') print(t1)字符串
字符的容器,一个字符串可以存放任意数量的字符,长度任意,支持下标索引,允许重复字符串存在,不可以修改,支持for循环
字符串替换
语法:字符串.replace(字符串1,字符串2)
将字符串内全部字符串1,替换成字符串2,不是修改字符串本身,而是得到一个新字符串
字符串分割
语法:字符串.split(分隔符字符串)
按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中,字符串本身不变而是得到了一个列表对象
字符串的规整操作
语法:字符串.strip() #去前后首位空格
语法:字符串.strip(字符串) #去前后指定字符串
案例
t = "iiiiudwh iuhduiewq wduh" num = t.count('i') print(num) new = t.replace(" ","|") print(new) list = new.split("|") print(list)#第六天
序列切片
不省略下标结束那个不取,省略了取(从头到尾::)
案例
t = "asdhu shdiqwhd wuhd" result = t[::-1][5:13] print(result) result2 = t[6:14][::-1] print(result2)集合
去重,无序,下标索引不支持访问,可以用for循环进行变量,不可以用while
案例去重
my_list = ["aaa","bbb","ccc","aaa"] my_set = set() for i in my_list: my_set.add(i) print(my_list) print(my_set)['aaa', 'bbb', 'ccc', 'aaa'] {'bbb', 'ccc', 'aaa'}字典
提供基于key检索value的场景实现
可以是任意类型,key不可为字典
key不可以重复,重复添加等于覆盖原有数据
不可以用下标索引
常用操作
升职加薪案例
my_dict = { "A":{ "部门":"科技部", "工资":4000, "级别":1 },"B":{ "部门":"科技部", "工资":3000, "级别":2 },"C":{ "部门":"科技部", "工资":3000, "级别":1 },"D":{ "部门":"科技部", "工资":3000, "级别":2 } } for i in my_dict: if my_dict[i]["级别"]==1: my_my_dict = my_dict[i] my_my_dict["级别"] = 2 my_my_dict["工资"] += 1000 my_dict[i] = my_my_dict print(my_dict)数据容器分类
应用场景
容器通用功能
#第七天
字符串大小比较
从头到尾一位位比较,其中一位大后面就无需比较了
单个字符通过ASCII码表,确定字符对应的码值数字来确定大小
函数的多返回值
def test_return(): return 1,"aaa",True x,y,z = test_return() print(x,y,z)函数参数种类
def user_info(name,age,gender): print(f"姓名是:{name},年龄是:{age},性别是:{gender}") #位置参数 —— 默认使用形式 user_info('小明',20,'男') #关键字参数 user_info(name='小王',age=11,gender='女') user_info(age=10,gender='女',name='潇潇') #可以不按照参数的定义顺序传参 #缺省参数(默认值) def user_info(name,age,gender='男'): print(f"姓名是:{name},年龄是:{age},性别是:{gender}") user_info('小天',13) user_info('小天',13,gender='女') #不定长参数匿名函数
使用lambda关键字进行定义
语法:lambda 传入参数:函数体(一行代码)
用于临时构建一个函数,只用一次的场景
函数体只能写一行代码,多行要使用def定义带名函数
文件操作
文件编码
翻译规则,记录如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容
文件读取操作
f = open("C:/Users/佳美/Desktop/text.txt","r",encoding="UTF-8") #方式1,读取全部内容 # content = f.read() # count = content.count("aaa") # print(content) # print(count) #方式2,读取内容一行一行读 count = 0 for line in f: line = line.strip() #去除开头结尾的空格和换行 words = line.split(" ") for word in words: if word == "aaa": count += 1 print(count) f.close()文件写操作
文件追加操作
同上操作,把w换成a
f = open("C:/Users/佳美/Desktop/text.txt","a",encoding="UTF-8") f.write("dgwvuivuehahahha") f.close()