--执行如下代码会报错,你知道什么错误吗?
a =1
b =2print(a == b)#返回的是true和falseprint(b == c)#因为c变量没有被定义,所以无法判断b==c,会抛错false
004.类型错误
"""
修复如下代码,让它的输出是数字1+2结果为3
不要修改前两行,只修改第3行
"""--源code
a ="1"#a此处定义的是字符串,无法进行整形的计算
b =2print(a + b)---修复后
a ="1"
b =2print(int(a)+ b)
005.缩进错误
"""
如下代码想要判断字符串中的字母是不是等于e,等于的话输出这个字母
但是报错了,你知道为什么吗,怎么修复?
"""for letter in"Hello":if letter =="e":print(letter)#可以看到当前这个打印不在if的缩进块内,if无效可以有俩种修改方式--修复代码(1)for letter in"Hello":if letter =="e":continue#continue在if块内,当letter等于e的时候,丢弃eprint(letter)#此处的print在for循环体制内,说明不满足if条件内容哦都会被打印--修复代码(2)for letter in"Hello":if letter =="e":print(letter)#将print进行缩进调整,放入if块中
#!/bin/evn python
my_range =range(1,21)
hh =[x*10for x in my_range]print(hh)
012 去重set、list
"""
set集合是不允许集合内出现重复字符的,当获取到常规数值后可以通过set进行去从
"""--方法1
a =["1",1,"1",2]
b =[]#定义空列表for i in a:if i notin b:
b.append(i)print(b)--方法2
a =["1",1,"1",2]
b =set()#定义空集合for i in a:if i notin b:#如果a的值不在b中
b.add(i)#给b进行添加新值print(b)--方法3
a =["1",1,"1",2]
a =set(a)#格式化a的列表内容为集合print(a)
019 列表排序
"""
完成代码,对列表排序,得到排序后的结果
"""
lista =[20,40,30,50,10]
new_list =sorted(lista,reverse=True)print(f"lista is {new_list}")
lista.sort(reverse=True)print(f"lista is {new_list}")
020 列表去从
#!/bin/env python
l =[['百度','BD'],['京东','JD'],['淘宝','TB'],['百度','BD']]
L =[]while(l):#根据l的元素个数进行循环
pop_l = l.pop()#pop为在列表l取值,取出后l列表中的pop内容不存在.#倒叙取值if pop_l in l:#如果列表中的内容取出后,还在源l列表中continue#那么就丢此此数据else:
L.insert(0, pop_l)#pop取出的只有一次的元素则在下标0中插入pop的数据print(L)#因为pop是倒叙取list中的值,所以列表顺序不变
1.4 字典
022 字典元素加和
"""
完成如下代码,计算key为a和b的值的加和
"""
d ={"a":1,"b":2,"c":3}print(d["a"]+ d["b"])
025 对字典使用函数
"""
计算如下字典的所有value的数字的和
"""
d ={"a":1,"b":2,"c":3}print(sum(d.values()))
026 字典过滤
"""
移除如下字典中所有value大于1的key:value对
"""
d ={"a":1,"b":2,"c":3}
new_d ={x:y for x,y in d.items()if y <=1}#字典推导式,items获取字典内容,如果value小于1,才会被征用写入新的字典print(new_d)
021 格式化输出
"""
创建一个字典
key是a、b、c,value分别是列表1~10、列表11~20、列表21~30
格式化输出字典
"""
d ={"a":list(range(1,11)),"b":list(range(11,21)),"c":list(range(21,31)),}print(d)
029 遍历字典
"""
遍历如下字典
"""
d ={"a":list(range(1,11)),"b":list(range(11,21)),"c":list(range(21,31))}
a = d["a"]
b = d["b"]
c = d["c"]print(f"a has value{a}")print(f"b has value{b}")print(f"c has value{c}")
1.5 循环LOOP
030 打印字母a到z
"""
打印字母a到z,每行一个字母
"""import string
a = string.ascii_letters
#a为str模块的a-Zfor i in a:#for循环遍历字符串获取内容print(i)
032 计算1到100数字的和
"""
编写代码,计算从1到100的和,包含1和100
即:1+2+3+4+.....+99+100
效果如下
"""
sum1 =0#定义初始数字用来存储每次的加和for i inrange(1,101):
sum1 += i
#每次循环sum的值增加iprint(sum1)
033 计算1到100偶数数字和
"""
编写代码,计算从1到100中偶数的数字和
即:2+4+6+2+.....+92+100
效果如下
"""
sum_value =0for i inrange(1,101):if i %2==0:#如果
sum_value += i
print(sum_value)
034 输出元素和下标
"""
完成如下脚本代码:
"""
a =[1,2,3]for index,item inenumerate(a):print(f"Item {item} has index {index}")
解释:
enumerate(a)函数产出数组的(下标index,数值item)数据对
用for index, item inenumerate(a)可以依次取出index和item
在字符串前面加个f符号,里面可以用{item}、{index}的方式访问变量,这叫f-string语法
035 同时遍历多个序列
"""
编写代码,输入如下两个数据:
"""
a =[1,2,3]
b =(4,5,6)for i,j inzip(a,b):print(f"{i+j} = {i}+{j}")#解释:
不同的序列(列表、元组都叫序列),可以用zip打包在一起
zip的返回是一各个的元组,里面包含各个序列的对应元素
import math
print(dir(math))print(help(math.cos))print(math.cos(1))"""
解释:
print(dir(math))可以查看这个模块的所有方法名
print(help(math.cos))可以看到这个方法的注释,看到是计算cosine的
如果在pycharm中,可以按住键盘的ctrl键同时鼠标左键点击math.cos方法名,可以看到这个方法的源代码的注释
"""
039 函数参数数目错误
"""
如下代码报错,你知道为什么吗,怎么修正它?
"""import math
print(math.pow(2))### pow() takes exactly 2 arguments (1 given)####Pow()接受2个参数(给定1个)--修正后
"""
如下代码报错,你知道为什么吗,怎么修正它?
"""import math
print(math.pow(2,2))#此方法是计算a值的b次方,可以通过查看math函数内置方法翻译的知用法
040 函数调用方式
"""
如下代码会报错,你知道为什么吗,怎么修复?
"""deffoo(a=1, b=2):return a + b
#函数体无错误
x = foo -1#可以看到调用函数时为加()--修正后
deffoo(a=1, b=2):return a + b
x = foo()-1print(x)
041 函数计算球的体积
"""
编写函数,计算球的体积
要求函数的参数半径r,有一个默认值10
然后用r=2为参数,调用函数得到结果
"""--方法1import math
defvolume(r=10):#定义带有默认属性的函数return(4* math.pi * math.pow(r,3))/3#返回内容为V=4πR³ /3(圆的体积)#math.pow为内置函数计算变量属性r的三次方
hh = volume(2)print(hh)--方法2import math
defvolume(r=10):return(4* math.pi * r **3)/3print(volume(2))#不用pow内置方法
043 全局变量
"""
如下代码会输出什么内容?为什么呢?
"""
c =1deffoo():#此处函数只是被定义return c
#只有函数被调用时,才会输出以及获取值
c =3#此时定义新的c的值print(foo())#此处调用函数,则会将最新的c的内容进行输出
044 函数局部变量
"""
如下代码会输出什么内容?为什么呢?
"""
c =1deffoo():
c =2#局部已经定义变量内容return c
#优先级最高的为局部变量,所以返回c=2
c =3print(foo())"""
解释:
python的函数,从上往下一行一行执行
函数内可以访问函数外的全局变量,但是局部变量的优先级更高
"""
045 局部变量和全局变量
"""
如下代码的最后一行,会报错说NameError: name 'c' is not defined
怎样修复代码,让代码不报错,并且输出数值1?
"""deffoo():
c =1return c
foo()print(c)##报错:name 'c' is not defined --变量c没有被定义--修订后
deffoo():global c
#global 全局,将c引入全局变量.方可调用
c =1return c
foo()#执行函数内容print(c)
1.1 字符串String
"""
如下代码让用户输入name和age,然后拼接字符串
但是代码会报错 TypeError
你知道为什么吗?怎么修复?有另一种办法吗?
"""
name =input("Enter name: ")
age =input("Enter age: ")print("Your name is %s and your age is %s"% name, age)--修改后
"""
如下代码让用户输入name和age,然后拼接字符串
但是代码会报错 TypeError
你知道为什么吗?怎么修复?有另一种办法吗?
"""
name =input("Enter name: ")
age =input("Enter age: ")print("Your name is %s and your age is %s"%(name,age))print(f"Your name is {name} and your age is {age}")#解释:#每个%占位符,在后面的%需要一个变量对应起来,如果多于一个%占位符,后面的%之后需要跟一个元组tuple包含多个变量,所以需要用(name, age)这个元组#f-string是第二种好用的格式化方式,形如f"Your name is {name}",在字符串中可以用{变量名}的方式格式化
042 字符串拆分
"""
创建一个函数,以任何一个英文字符串作为入参,返回英文单词的数目
"""--方法1
l1 =[]#定义空的列表用来接收单词defcount_words(string):for i in string:#for循环遍历传入的单词
l1.append(i)#每一个都塞入列表中
count_words("dsadasdasd")print(len(l1))#打印列表的元素长度--方法2defcountt_words(string):
string_list = string.split()#定义strlit为传入字符串的split(默认空格分隔)returnlen(string_list)#返回string——list的长度print(countt_words("i am good boy!!"))#返回4个,因为用空格进行了分隔.
#!/bin/evn python"""
051 生成字母文件
编写代码,生成一个文件p051.txt,每一行是一个英文字母,从a~z
"""import string
file="p051.txt"withopen(f"{file}","w",encoding="utf-2")as v:str= string.ascii_lowercase
for i instr:
v.write(i+"\n")##第二种file="p051.txt"withopen(f"{file}","w",encoding="utf-2")as v:for letter in string.ascii_lowercase:
v.write(letter+"\n")
students =[{'学号':1,'姓名':'乐乐','年龄':12,'性别':'男','成绩':11},{'学号':2,'姓名':'倩倩','年龄':11,'性别':'女','成绩':23},{'学号':3,'姓名':'苗苗','年龄':13,'性别':'女','成绩':92},{'学号':4,'姓名':'旭旭','年龄':12,'性别':'男','成绩':65},{'学号':5,'姓名':'花花','年龄':11,'性别':'男','成绩':66},]# 统计每个年龄的人数
age ={}#定义空字典用来收集value#字典的key是不能重复的,如果出现重复的后边的会替换到前边的”for i in students:#i进行字典内容的赋值if i["年龄"]notin age:#如果年龄(12)不在age空字典中#此时i获得的内容为12,11,13,12,11
age[i["年龄"]]=1#那么定义年龄数字key对应的value为1#12 = 1else:
age[i["年龄"]]+=1#否者年龄的value在基础上加1#12 = 1+1for i,x in age.items():print(f"年龄:{i},在大的字典中出现了:{x}次!")# 统计每个性别的人数
sex ={}for i in students:if i["性别"]notin sex:
sex[i["性别"]]=1else:
sex[i["性别"]]+=1print(sex)# 获取性别为女的学生信息for i in students:if i["性别"]=="女":print(i)print(" ")# 获取成绩优异的学生信息for i in students:if i["成绩"]>=20:print(i)print(" ")# 获取年龄是偶数的学生信息for i in students:if i["年龄"]%2==0:print(i)print(" ")# 获取成绩为偶数的学生信息for i in students:if i["成绩"]%2==0:print(i)
1.9 多级字典与JSON
051 多级字典
"""
如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问employees的第二个人,得到他的lastName,即 Smith
"""
d ={"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}],"owners":[{"firstName":"Jack","lastName":"Petter"},{"firstName":"Jessy","lastName":"Petter"}]}#访问第一个key对应的valueprint(d["employees"])#访问value list中的下标为1即中间的字典print(d["employees"][1])#访问字典中的key--lastName获取对应value--smithprint(d["employees"][1]["lastName"])
052 修改多级字典
"""
如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问 employees 的第二个人,修改他的 lastName
将值从 Smith 改成 Smooth
"""
d ={"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}],"owners":[{"firstName":"Jack","lastName":"Petter"},{"firstName":"Jessy","lastName":"Petter"}]}
d["employees"][1]["lastName"]="Smooth"#访问d['employees'][1]['lastName'],是Smith值的位置#直接加=号,就是给他赋新的值。和普通字典用法一致print(d["employees"])#打印字典d中的key为employess的值
"""
完成如下程序,让用户可以输入一个英文单词,程序给出中文翻译结果
"""
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}defhh(world):#定义函数和函数属性return d[world]#返回字典d[属性的value]
world =input("Enter World:")#world为交互式输入的因为单子print(hh(world))#返回英文对应的中文
010 英汉翻译异常处理
"""
如下程序实现功能,让用户可以输入一个英文单词,程序给出中文翻译结果
修改程序,如果输入的英文单词不在字典中,输出信息“单词不在词典中”
"""
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}deftranslate(word):return d[word]whileTrue:
word =input("Enter World:")if word notin d.keys():#如果输入的单词不在字典的key中print("word not such!!!")#那么就打印没有匹配的内容else:print(translate(word))#如果匹配成功那么返回函数体--方法2
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}deftranslate(word):try:# 代码交给try管理return d[word]except KeyError:# 错误类型为key错误returnf"no such key: {word}"# 返回错误信息
world =input("Enter World:")print(translate(world))# 不报错才会执行此条件
011 英汉翻译文件词典
"""
如下是英汉翻译词典文件,用python加载词典文件
当用户输入英语单词时,返回中文文字
增加:程序应该处理大小写情况,例如输入Apple也能返回apple的翻译
"""dict={}import os
file="p011.txt"if os.path.exists(f"{file}"):print("文件存在!")withopen(f"{file}",encoding="utf-2")as v:for lien in v:
en,cn = lien.strip().split(",")dict[en]=cn
deftranslate(world):try:returndict[world]except KeyError:return"no such wordl!!"print(translate(input("请输入要查询的单词:").lower()))#lower将输入内容转小写--方法2#!/bin/env pythondict={}#定义空字典,用来接收文件中的内容withopen("英汉词典.txt",encoding='utf-2')as fin:for i in fin:
i = i[:-1]#通过列表推导式去除换行符,读取文件默认生成的都为列表
fieds = i.strip().split(",")#格式化内容为fiedsiflen(fieds)==2:#fieds按照,号进行分割,那么读取每行文件,那么就会是俩个参数
en,cn = fieds
dict[en]= cn
else:continueprint(f"字典已生成:{dict}")#for循环读取文成后,循环次数为文件行数.打印生成的字典whileTrue:
key =input("输入你要查询的单词对应的英文:").lower()if key =="exit"or key =="quit"or key =="no":breakelif key notindict.keys():#如果要查询的key不在字典的key中则无法拆线呢print(f"没有找对{key}这个key!")else:print(f"你查询的{key}的中文为:{dict[key]}")
#!/bin/env python"""
编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
实现效果如下,如果不满足条件会一直循环:
"""whileTrue:print("*"*20);print("密码至少六位数,至少包含一个大写字母和一个数字")
pwd =input("请输入密码:")
have_number =any([i.isdigit()for i in pwd])
have_upper =any([i.isupper()for i in pwd])#isupper是否包含大写字母,isdigit是否包含数字#any后方元素命中一个则为trueif have_upper and have_number andlen(pwd)>=6:print("密码校验成功!")breakelse:print("密码校验失败!")continue#解释:#any这个方法,参数可以是一个list/set等序列,如果任何一个元素为True,那么any返回True#如果通过校验,则break退出循环;否则打印信息,继续下一次循环;
020 详细错误密码检测器
#!/bin/env python"""
编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
"""whileTrue:
msgs =[]
pwd =input("请输入密码:")ifnotany([i.isdigit()for i in pwd]):#如果遍历pwd中不存在数字,那么any返回false.
msgs.append("需要至少一个数字")#any为false则追加一个msgs至列表中.ifnotany([i.isupper()for i in pwd]):#如果pwd中不存在大写字母
msgs.append("需要至少一个大写字母")#any为fasle追加报错至列表中iflen(pwd)<6:
msgs.append("需要至少6个字符")iflen(msgs)==0:#列表为空.说明没有报错print("密码检测通过!")breakelse:#如果没有break退出,那么输出报错原因print("密码验证失败,原因如下:")for message in msgs:print("*",message)#输出报错原因后,重回循环,列表清空>>>>解释:
#msgs为出错信息列表,任何一个检测不通过,就放进msgs;#如果msgs为空,说明所有检测通过;如果不为空,则有多条检测不通过,会挨个输出
2.4 文件处理统计
021 文件内容乘数字
"""
新建文件p021.txt,将如下内容粘贴到文件中
编写代码,给每个数字乘以2,结果输出到p021_output.txt
"""withopen("p021.txt",encoding="utf-2")as read,open("p021_output.txt","w")as out:for line in read:#按行读取数据,即进行6次循环if"x,y"in line:#第一次循环会拿到第一行即x,y
out.write(line)#那么就写入到文件中else:#第二行开始没有x,y则执行else中的内容
x,y = line.strip().split(",")#strip将末尾的换行符去除
x =int(x)*2
y =int(y)*2
out.write(f"{x},{y}\n")
022 计算最大值最小值平均值
"""
输入一个成绩文件,计算成绩的最大值最小值平均值
文件名:p022.txt,自己复制如下内容进去即可:
"""defcompute_score():
scores =[]withopen("p022.txt",encoding="utf-2")as v:for line in v:#按行读取数据
fields = line.strip().split(",")#strip情况换行符,split按照,号进行内容的读取
scores.append(int(fields[2]))#列表追加fields列表中索引为2的内容
max_score =max(scores)
min_score =min(scores)
avg_score =sum(scores)/len(scores)return max_score,min_score,avg_score
#调用函数返回三个对应值的内容
max_score,min_score,avg_score = compute_score()#定义三个值来取函数返回的三个值,one by oneprint(f"最高分:{max_score}")print(f"最低分:{min_score}")print(f"平均分:{avg_score}")
023 文件合并
"""
用python编写代码,把这两个txt拼接在一个文件,存入p023.txt
"""withopen("po23.txt","w",encoding="utf-2")as out:#打开要写入的新的文件for name in["p023_xiaomei.txt","p023_xiaohua.txt"]:#for循环遍历读取的文件withopen(name,encoding="utf-2")as fin:#打开读取文件for line in fin:#line进行按行读取
out.write(line)#每一行写入新的文件中
024 文件交集
--方法1"""
用python编写代码,计算两个人的爱好的交集
提示:set集合,有方法叫做 intersection,可以直接计算交集
"""list=[]
new_data =[]for name in["p024_xiaomei.txt","p024_xiaohua.txt"]:#循环读取两个文件withopen(name,encoding="utf-2")as f:#打开循环的俩个文件for line in f:#按行读取文件内容
line = line.strip()#清楚换行符
fieds = line.split()#用空格分隔list.append(fieds[1])#因为读取出的数据是列表的形式,1为爱好.直接追加至列表中whilelist:#根据list的内容进行循环,list为两个文件的内容
pop_l =list.pop()#在list列表中进行popif pop_l notinlist:continue#如果取出的值不在列表中说明是差集则丢弃else:
new_data.insert(0,pop_l)##否则取出的值还存在与list为并集print(new_data)--方法2"""
用python编写代码,计算两个人的爱好的交集
提示:set集合,有方法叫做 intersection,可以直接计算交集
"""defget_aihao(fname):
aihao =[]withopen(fname,encoding="utf-2")as f:for line in f:
line = line.strip()
aihao.append(line.split()[1])#爱好为追加按行读取的文件内容列表索引为1的内容return aihao
xiaomei = get_aihao("p024_xiaomei.txt")#定义xiaomei为执行函数和文件路径
xiaohua = get_aihao("p024_xiaohua.txt")for i inset(xiaomei).intersection(set(xiaohua)):#直接将xiaomei获取的值转换为set集合可以去#intersection俩个集合进行比较,获取交集print(i)
025 每种爱好的喜欢人数
"""
输入一个(姓名,爱好)文件,计算每个爱好的人数
文件名:p025.txt,自己复制如下内容进去即可,姓名和爱好是空格分割的:
"""
like_count ={}#定义空字典,用来去重和统计withopen("p025.txt",encoding="utf-2")as f:for line in f:
fieds = line[:-1]#fieds为f的文件内容,即每一行的完整内容
sname ,likes = fieds.split()#名字和爱好进行拆包获取值
like_list = likes.split(",")#爱好为likes的,号拆包值for like in like_list:#爱好遍历每一个拆包的球类运动if like notin like_count:#如果这个球类没有在字典中,遍历字典获取的是单个字符串
like_count[like]=1#如果没有则为第一次else:
like_count[like]+=1#负责在计数的基础上+1for key,value in like_count.items():print(key,value)
026 实现文件的关联
"""
有两个文件:
文件1:成绩文件,列为(学号、成绩)
文件2:学生信息文件,列为(学号,姓名)
关联两个文件,得到(学号、姓名、成绩),结果存入 p026.txt
"""
grade_dict ={}withopen("p026_grade.txt",encoding="utf-2")as read:for line in read:
fieds = line[:-1]#格式化字符,去除换行符id,grade = fieds.strip().split(",")
grade_dict[id]= grade
print(grade_dict)file=open("p026.txt",'w',encoding="utf-2")withopen("p026_student.txt",encoding="utf-2")as st_read:for line in st_read:id,sname = line.strip().split(",")#id,name通过循环进行拆解
grade = grade_dict[id]#grade为通过上方gradetxt获取的字典,来获取此时grade的值,id对应的value#id为此时的student文件获取的idfile.write(f"{id},{sname},{grade}\n")#通过拆解的id,name和上方生成的gradde字典获取grade来生成新的文件file.close()#因为不是运用了with的方法,所以需要手动关闭文件"""
有两个文件:
文件1:成绩文件,列为(学号、成绩)
文件2:学生信息文件,列为(学号,姓名)
关联两个文件,得到(学号、姓名、成绩),结果存入 p026.txt
"""
grade_dict ={}withopen("p026_grade.txt",encoding="utf-2")as read_one:for line in read_one:
fieds = line.strip().split(",")iflen(fieds)==2:id,grade = fieds
grade_dict[id]= grade
else:print("文件内容有误!")
exit(11)
out =open("p026.txt",'w',encoding="utf-2")withopen("p026_student.txt",encoding="utf-2")as new_read:for line in new_read:
fieds = line.strip().split(",")iflen(fieds)==2:id,name = fieds
grade = grade_dict[id]#因为俩个表的id是一致的,通过上方输出的字典中的key--id获取对应的成绩,满足输出要求
out.write(f"{id},{name},{grade}\n")else:print("文件格式有误,无法拆出对应数字的包!")
exit(12)
out.close()
import re
text ="白日依19929221222山尽,黄河入45645546462192912海流。欲穷12345千里目,更上15619292345一层楼。"
pattern =r"1\d{10}"#匹配开头为1后方为数字且为10个数字。
results = re.findall(pattern,text)#结果为re.findall匹配字符中符合pattern条件的内容,读取为列表#findall全文匹配for i in results:#循环列表元素(2)print(i)#打印电话号码#!/bin/env pythonimport re
text ="白日依19929221222山尽,黄河入45645546462192912海流。欲穷12345千里目,更上15619292345一层楼。"
pattern = re.compile(r"1\d{10}")#re.compile定义正则匹配方式 --compile(编写)
result = pattern.findall(text)#findall匹配结果返回列表for i in result:print(i)
有的情况下,是需要自己编写一些模块的,这种就是自定义模块了。
some_mod.py --模块文件
x =10
li =['shark',12]deffoo():return30classPerson():def__init__(self, name, age):
self.name = name
self.age = age
#此时便自定义了一个py模块文件
--执行如下代码会报错,你知道什么错误吗?
a =1
b =2print(a == b)#返回的是true和falseprint(b == c)#因为c变量没有被定义,所以无法判断b==c,会抛错false
004.类型错误
"""
修复如下代码,让它的输出是数字1+2结果为3
不要修改前两行,只修改第3行
"""--源code
a ="1"#a此处定义的是字符串,无法进行整形的计算
b =2print(a + b)---修复后
a ="1"
b =2print(int(a)+ b)
005.缩进错误
"""
如下代码想要判断字符串中的字母是不是等于e,等于的话输出这个字母
但是报错了,你知道为什么吗,怎么修复?
"""for letter in"Hello":if letter =="e":print(letter)#可以看到当前这个打印不在if的缩进块内,if无效可以有俩种修改方式--修复代码(1)for letter in"Hello":if letter =="e":continue#continue在if块内,当letter等于e的时候,丢弃eprint(letter)#此处的print在for循环体制内,说明不满足if条件内容哦都会被打印--修复代码(2)for letter in"Hello":if letter =="e":print(letter)#将print进行缩进调整,放入if块中
#!/bin/evn python
my_range =range(1,21)
hh =[x*10for x in my_range]print(hh)
012 去重set、list
"""
set集合是不允许集合内出现重复字符的,当获取到常规数值后可以通过set进行去从
"""--方法1
a =["1",1,"1",2]
b =[]#定义空列表for i in a:if i notin b:
b.append(i)print(b)--方法2
a =["1",1,"1",2]
b =set()#定义空集合for i in a:if i notin b:#如果a的值不在b中
b.add(i)#给b进行添加新值print(b)--方法3
a =["1",1,"1",2]
a =set(a)#格式化a的列表内容为集合print(a)
019 列表排序
"""
完成代码,对列表排序,得到排序后的结果
"""
lista =[20,40,30,50,10]
new_list =sorted(lista,reverse=True)print(f"lista is {new_list}")
lista.sort(reverse=True)print(f"lista is {new_list}")
020 列表去从
#!/bin/env python
l =[['百度','BD'],['京东','JD'],['淘宝','TB'],['百度','BD']]
L =[]while(l):#根据l的元素个数进行循环
pop_l = l.pop()#pop为在列表l取值,取出后l列表中的pop内容不存在.#倒叙取值if pop_l in l:#如果列表中的内容取出后,还在源l列表中continue#那么就丢此此数据else:
L.insert(0, pop_l)#pop取出的只有一次的元素则在下标0中插入pop的数据print(L)#因为pop是倒叙取list中的值,所以列表顺序不变
1.4 字典
022 字典元素加和
"""
完成如下代码,计算key为a和b的值的加和
"""
d ={"a":1,"b":2,"c":3}print(d["a"]+ d["b"])
025 对字典使用函数
"""
计算如下字典的所有value的数字的和
"""
d ={"a":1,"b":2,"c":3}print(sum(d.values()))
026 字典过滤
"""
移除如下字典中所有value大于1的key:value对
"""
d ={"a":1,"b":2,"c":3}
new_d ={x:y for x,y in d.items()if y <=1}#字典推导式,items获取字典内容,如果value小于1,才会被征用写入新的字典print(new_d)
021 格式化输出
"""
创建一个字典
key是a、b、c,value分别是列表1~10、列表11~20、列表21~30
格式化输出字典
"""
d ={"a":list(range(1,11)),"b":list(range(11,21)),"c":list(range(21,31)),}print(d)
029 遍历字典
"""
遍历如下字典
"""
d ={"a":list(range(1,11)),"b":list(range(11,21)),"c":list(range(21,31))}
a = d["a"]
b = d["b"]
c = d["c"]print(f"a has value{a}")print(f"b has value{b}")print(f"c has value{c}")
1.5 循环LOOP
030 打印字母a到z
"""
打印字母a到z,每行一个字母
"""import string
a = string.ascii_letters
#a为str模块的a-Zfor i in a:#for循环遍历字符串获取内容print(i)
032 计算1到100数字的和
"""
编写代码,计算从1到100的和,包含1和100
即:1+2+3+4+.....+99+100
效果如下
"""
sum1 =0#定义初始数字用来存储每次的加和for i inrange(1,101):
sum1 += i
#每次循环sum的值增加iprint(sum1)
033 计算1到100偶数数字和
"""
编写代码,计算从1到100中偶数的数字和
即:2+4+6+2+.....+92+100
效果如下
"""
sum_value =0for i inrange(1,101):if i %2==0:#如果
sum_value += i
print(sum_value)
034 输出元素和下标
"""
完成如下脚本代码:
"""
a =[1,2,3]for index,item inenumerate(a):print(f"Item {item} has index {index}")
解释:
enumerate(a)函数产出数组的(下标index,数值item)数据对
用for index, item inenumerate(a)可以依次取出index和item
在字符串前面加个f符号,里面可以用{item}、{index}的方式访问变量,这叫f-string语法
035 同时遍历多个序列
"""
编写代码,输入如下两个数据:
"""
a =[1,2,3]
b =(4,5,6)for i,j inzip(a,b):print(f"{i+j} = {i}+{j}")#解释:
不同的序列(列表、元组都叫序列),可以用zip打包在一起
zip的返回是一各个的元组,里面包含各个序列的对应元素
import math
print(dir(math))print(help(math.cos))print(math.cos(1))"""
解释:
print(dir(math))可以查看这个模块的所有方法名
print(help(math.cos))可以看到这个方法的注释,看到是计算cosine的
如果在pycharm中,可以按住键盘的ctrl键同时鼠标左键点击math.cos方法名,可以看到这个方法的源代码的注释
"""
039 函数参数数目错误
"""
如下代码报错,你知道为什么吗,怎么修正它?
"""import math
print(math.pow(2))### pow() takes exactly 2 arguments (1 given)####Pow()接受2个参数(给定1个)--修正后
"""
如下代码报错,你知道为什么吗,怎么修正它?
"""import math
print(math.pow(2,2))#此方法是计算a值的b次方,可以通过查看math函数内置方法翻译的知用法
040 函数调用方式
"""
如下代码会报错,你知道为什么吗,怎么修复?
"""deffoo(a=1, b=2):return a + b
#函数体无错误
x = foo -1#可以看到调用函数时为加()--修正后
deffoo(a=1, b=2):return a + b
x = foo()-1print(x)
041 函数计算球的体积
"""
编写函数,计算球的体积
要求函数的参数半径r,有一个默认值10
然后用r=2为参数,调用函数得到结果
"""--方法1import math
defvolume(r=10):#定义带有默认属性的函数return(4* math.pi * math.pow(r,3))/3#返回内容为V=4πR³ /3(圆的体积)#math.pow为内置函数计算变量属性r的三次方
hh = volume(2)print(hh)--方法2import math
defvolume(r=10):return(4* math.pi * r **3)/3print(volume(2))#不用pow内置方法
043 全局变量
"""
如下代码会输出什么内容?为什么呢?
"""
c =1deffoo():#此处函数只是被定义return c
#只有函数被调用时,才会输出以及获取值
c =3#此时定义新的c的值print(foo())#此处调用函数,则会将最新的c的内容进行输出
044 函数局部变量
"""
如下代码会输出什么内容?为什么呢?
"""
c =1deffoo():
c =2#局部已经定义变量内容return c
#优先级最高的为局部变量,所以返回c=2
c =3print(foo())"""
解释:
python的函数,从上往下一行一行执行
函数内可以访问函数外的全局变量,但是局部变量的优先级更高
"""
045 局部变量和全局变量
"""
如下代码的最后一行,会报错说NameError: name 'c' is not defined
怎样修复代码,让代码不报错,并且输出数值1?
"""deffoo():
c =1return c
foo()print(c)##报错:name 'c' is not defined --变量c没有被定义--修订后
deffoo():global c
#global 全局,将c引入全局变量.方可调用
c =1return c
foo()#执行函数内容print(c)
1.1 字符串String
"""
如下代码让用户输入name和age,然后拼接字符串
但是代码会报错 TypeError
你知道为什么吗?怎么修复?有另一种办法吗?
"""
name =input("Enter name: ")
age =input("Enter age: ")print("Your name is %s and your age is %s"% name, age)--修改后
"""
如下代码让用户输入name和age,然后拼接字符串
但是代码会报错 TypeError
你知道为什么吗?怎么修复?有另一种办法吗?
"""
name =input("Enter name: ")
age =input("Enter age: ")print("Your name is %s and your age is %s"%(name,age))print(f"Your name is {name} and your age is {age}")#解释:#每个%占位符,在后面的%需要一个变量对应起来,如果多于一个%占位符,后面的%之后需要跟一个元组tuple包含多个变量,所以需要用(name, age)这个元组#f-string是第二种好用的格式化方式,形如f"Your name is {name}",在字符串中可以用{变量名}的方式格式化
042 字符串拆分
"""
创建一个函数,以任何一个英文字符串作为入参,返回英文单词的数目
"""--方法1
l1 =[]#定义空的列表用来接收单词defcount_words(string):for i in string:#for循环遍历传入的单词
l1.append(i)#每一个都塞入列表中
count_words("dsadasdasd")print(len(l1))#打印列表的元素长度--方法2defcountt_words(string):
string_list = string.split()#定义strlit为传入字符串的split(默认空格分隔)returnlen(string_list)#返回string——list的长度print(countt_words("i am good boy!!"))#返回4个,因为用空格进行了分隔.
#!/bin/evn python"""
051 生成字母文件
编写代码,生成一个文件p051.txt,每一行是一个英文字母,从a~z
"""import string
file="p051.txt"withopen(f"{file}","w",encoding="utf-2")as v:str= string.ascii_lowercase
for i instr:
v.write(i+"\n")##第二种file="p051.txt"withopen(f"{file}","w",encoding="utf-2")as v:for letter in string.ascii_lowercase:
v.write(letter+"\n")
students =[{'学号':1,'姓名':'乐乐','年龄':12,'性别':'男','成绩':11},{'学号':2,'姓名':'倩倩','年龄':11,'性别':'女','成绩':23},{'学号':3,'姓名':'苗苗','年龄':13,'性别':'女','成绩':92},{'学号':4,'姓名':'旭旭','年龄':12,'性别':'男','成绩':65},{'学号':5,'姓名':'花花','年龄':11,'性别':'男','成绩':66},]# 统计每个年龄的人数
age ={}#定义空字典用来收集value#字典的key是不能重复的,如果出现重复的后边的会替换到前边的”for i in students:#i进行字典内容的赋值if i["年龄"]notin age:#如果年龄(12)不在age空字典中#此时i获得的内容为12,11,13,12,11
age[i["年龄"]]=1#那么定义年龄数字key对应的value为1#12 = 1else:
age[i["年龄"]]+=1#否者年龄的value在基础上加1#12 = 1+1for i,x in age.items():print(f"年龄:{i},在大的字典中出现了:{x}次!")# 统计每个性别的人数
sex ={}for i in students:if i["性别"]notin sex:
sex[i["性别"]]=1else:
sex[i["性别"]]+=1print(sex)# 获取性别为女的学生信息for i in students:if i["性别"]=="女":print(i)print(" ")# 获取成绩优异的学生信息for i in students:if i["成绩"]>=20:print(i)print(" ")# 获取年龄是偶数的学生信息for i in students:if i["年龄"]%2==0:print(i)print(" ")# 获取成绩为偶数的学生信息for i in students:if i["成绩"]%2==0:print(i)
1.9 多级字典与JSON
051 多级字典
"""
如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问employees的第二个人,得到他的lastName,即 Smith
"""
d ={"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}],"owners":[{"firstName":"Jack","lastName":"Petter"},{"firstName":"Jessy","lastName":"Petter"}]}#访问第一个key对应的valueprint(d["employees"])#访问value list中的下标为1即中间的字典print(d["employees"][1])#访问字典中的key--lastName获取对应value--smithprint(d["employees"][1]["lastName"])
052 修改多级字典
"""
如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问 employees 的第二个人,修改他的 lastName
将值从 Smith 改成 Smooth
"""
d ={"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}],"owners":[{"firstName":"Jack","lastName":"Petter"},{"firstName":"Jessy","lastName":"Petter"}]}
d["employees"][1]["lastName"]="Smooth"#访问d['employees'][1]['lastName'],是Smith值的位置#直接加=号,就是给他赋新的值。和普通字典用法一致print(d["employees"])#打印字典d中的key为employess的值
"""
完成如下程序,让用户可以输入一个英文单词,程序给出中文翻译结果
"""
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}defhh(world):#定义函数和函数属性return d[world]#返回字典d[属性的value]
world =input("Enter World:")#world为交互式输入的因为单子print(hh(world))#返回英文对应的中文
010 英汉翻译异常处理
"""
如下程序实现功能,让用户可以输入一个英文单词,程序给出中文翻译结果
修改程序,如果输入的英文单词不在字典中,输出信息“单词不在词典中”
"""
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}deftranslate(word):return d[word]whileTrue:
word =input("Enter World:")if word notin d.keys():#如果输入的单词不在字典的key中print("word not such!!!")#那么就打印没有匹配的内容else:print(translate(word))#如果匹配成功那么返回函数体--方法2
d ={"apple":"苹果","orange":"桔子","banana":"香蕉"}deftranslate(word):try:# 代码交给try管理return d[word]except KeyError:# 错误类型为key错误returnf"no such key: {word}"# 返回错误信息
world =input("Enter World:")print(translate(world))# 不报错才会执行此条件
011 英汉翻译文件词典
"""
如下是英汉翻译词典文件,用python加载词典文件
当用户输入英语单词时,返回中文文字
增加:程序应该处理大小写情况,例如输入Apple也能返回apple的翻译
"""dict={}import os
file="p011.txt"if os.path.exists(f"{file}"):print("文件存在!")withopen(f"{file}",encoding="utf-2")as v:for lien in v:
en,cn = lien.strip().split(",")dict[en]=cn
deftranslate(world):try:returndict[world]except KeyError:return"no such wordl!!"print(translate(input("请输入要查询的单词:").lower()))#lower将输入内容转小写--方法2#!/bin/env pythondict={}#定义空字典,用来接收文件中的内容withopen("英汉词典.txt",encoding='utf-2')as fin:for i in fin:
i = i[:-1]#通过列表推导式去除换行符,读取文件默认生成的都为列表
fieds = i.strip().split(",")#格式化内容为fiedsiflen(fieds)==2:#fieds按照,号进行分割,那么读取每行文件,那么就会是俩个参数
en,cn = fieds
dict[en]= cn
else:continueprint(f"字典已生成:{dict}")#for循环读取文成后,循环次数为文件行数.打印生成的字典whileTrue:
key =input("输入你要查询的单词对应的英文:").lower()if key =="exit"or key =="quit"or key =="no":breakelif key notindict.keys():#如果要查询的key不在字典的key中则无法拆线呢print(f"没有找对{key}这个key!")else:print(f"你查询的{key}的中文为:{dict[key]}")
#!/bin/env python"""
编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
实现效果如下,如果不满足条件会一直循环:
"""whileTrue:print("*"*20);print("密码至少六位数,至少包含一个大写字母和一个数字")
pwd =input("请输入密码:")
have_number =any([i.isdigit()for i in pwd])
have_upper =any([i.isupper()for i in pwd])#isupper是否包含大写字母,isdigit是否包含数字#any后方元素命中一个则为trueif have_upper and have_number andlen(pwd)>=6:print("密码校验成功!")breakelse:print("密码校验失败!")continue#解释:#any这个方法,参数可以是一个list/set等序列,如果任何一个元素为True,那么any返回True#如果通过校验,则break退出循环;否则打印信息,继续下一次循环;
020 详细错误密码检测器
#!/bin/env python"""
编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
"""whileTrue:
msgs =[]
pwd =input("请输入密码:")ifnotany([i.isdigit()for i in pwd]):#如果遍历pwd中不存在数字,那么any返回false.
msgs.append("需要至少一个数字")#any为false则追加一个msgs至列表中.ifnotany([i.isupper()for i in pwd]):#如果pwd中不存在大写字母
msgs.append("需要至少一个大写字母")#any为fasle追加报错至列表中iflen(pwd)<6:
msgs.append("需要至少6个字符")iflen(msgs)==0:#列表为空.说明没有报错print("密码检测通过!")breakelse:#如果没有break退出,那么输出报错原因print("密码验证失败,原因如下:")for message in msgs:print("*",message)#输出报错原因后,重回循环,列表清空>>>>解释:
#msgs为出错信息列表,任何一个检测不通过,就放进msgs;#如果msgs为空,说明所有检测通过;如果不为空,则有多条检测不通过,会挨个输出
2.4 文件处理统计
021 文件内容乘数字
"""
新建文件p021.txt,将如下内容粘贴到文件中
编写代码,给每个数字乘以2,结果输出到p021_output.txt
"""withopen("p021.txt",encoding="utf-2")as read,open("p021_output.txt","w")as out:for line in read:#按行读取数据,即进行6次循环if"x,y"in line:#第一次循环会拿到第一行即x,y
out.write(line)#那么就写入到文件中else:#第二行开始没有x,y则执行else中的内容
x,y = line.strip().split(",")#strip将末尾的换行符去除
x =int(x)*2
y =int(y)*2
out.write(f"{x},{y}\n")
022 计算最大值最小值平均值
"""
输入一个成绩文件,计算成绩的最大值最小值平均值
文件名:p022.txt,自己复制如下内容进去即可:
"""defcompute_score():
scores =[]withopen("p022.txt",encoding="utf-2")as v:for line in v:#按行读取数据
fields = line.strip().split(",")#strip情况换行符,split按照,号进行内容的读取
scores.append(int(fields[2]))#列表追加fields列表中索引为2的内容
max_score =max(scores)
min_score =min(scores)
avg_score =sum(scores)/len(scores)return max_score,min_score,avg_score
#调用函数返回三个对应值的内容
max_score,min_score,avg_score = compute_score()#定义三个值来取函数返回的三个值,one by oneprint(f"最高分:{max_score}")print(f"最低分:{min_score}")print(f"平均分:{avg_score}")
023 文件合并
"""
用python编写代码,把这两个txt拼接在一个文件,存入p023.txt
"""withopen("po23.txt","w",encoding="utf-2")as out:#打开要写入的新的文件for name in["p023_xiaomei.txt","p023_xiaohua.txt"]:#for循环遍历读取的文件withopen(name,encoding="utf-2")as fin:#打开读取文件for line in fin:#line进行按行读取
out.write(line)#每一行写入新的文件中
024 文件交集
--方法1"""
用python编写代码,计算两个人的爱好的交集
提示:set集合,有方法叫做 intersection,可以直接计算交集
"""list=[]
new_data =[]for name in["p024_xiaomei.txt","p024_xiaohua.txt"]:#循环读取两个文件withopen(name,encoding="utf-2")as f:#打开循环的俩个文件for line in f:#按行读取文件内容
line = line.strip()#清楚换行符
fieds = line.split()#用空格分隔list.append(fieds[1])#因为读取出的数据是列表的形式,1为爱好.直接追加至列表中whilelist:#根据list的内容进行循环,list为两个文件的内容
pop_l =list.pop()#在list列表中进行popif pop_l notinlist:continue#如果取出的值不在列表中说明是差集则丢弃else:
new_data.insert(0,pop_l)##否则取出的值还存在与list为并集print(new_data)--方法2"""
用python编写代码,计算两个人的爱好的交集
提示:set集合,有方法叫做 intersection,可以直接计算交集
"""defget_aihao(fname):
aihao =[]withopen(fname,encoding="utf-2")as f:for line in f:
line = line.strip()
aihao.append(line.split()[1])#爱好为追加按行读取的文件内容列表索引为1的内容return aihao
xiaomei = get_aihao("p024_xiaomei.txt")#定义xiaomei为执行函数和文件路径
xiaohua = get_aihao("p024_xiaohua.txt")for i inset(xiaomei).intersection(set(xiaohua)):#直接将xiaomei获取的值转换为set集合可以去#intersection俩个集合进行比较,获取交集print(i)
025 每种爱好的喜欢人数
"""
输入一个(姓名,爱好)文件,计算每个爱好的人数
文件名:p025.txt,自己复制如下内容进去即可,姓名和爱好是空格分割的:
"""
like_count ={}#定义空字典,用来去重和统计withopen("p025.txt",encoding="utf-2")as f:for line in f:
fieds = line[:-1]#fieds为f的文件内容,即每一行的完整内容
sname ,likes = fieds.split()#名字和爱好进行拆包获取值
like_list = likes.split(",")#爱好为likes的,号拆包值for like in like_list:#爱好遍历每一个拆包的球类运动if like notin like_count:#如果这个球类没有在字典中,遍历字典获取的是单个字符串
like_count[like]=1#如果没有则为第一次else:
like_count[like]+=1#负责在计数的基础上+1for key,value in like_count.items():print(key,value)
026 实现文件的关联
"""
有两个文件:
文件1:成绩文件,列为(学号、成绩)
文件2:学生信息文件,列为(学号,姓名)
关联两个文件,得到(学号、姓名、成绩),结果存入 p026.txt
"""
grade_dict ={}withopen("p026_grade.txt",encoding="utf-2")as read:for line in read:
fieds = line[:-1]#格式化字符,去除换行符id,grade = fieds.strip().split(",")
grade_dict[id]= grade
print(grade_dict)file=open("p026.txt",'w',encoding="utf-2")withopen("p026_student.txt",encoding="utf-2")as st_read:for line in st_read:id,sname = line.strip().split(",")#id,name通过循环进行拆解
grade = grade_dict[id]#grade为通过上方gradetxt获取的字典,来获取此时grade的值,id对应的value#id为此时的student文件获取的idfile.write(f"{id},{sname},{grade}\n")#通过拆解的id,name和上方生成的gradde字典获取grade来生成新的文件file.close()#因为不是运用了with的方法,所以需要手动关闭文件"""
有两个文件:
文件1:成绩文件,列为(学号、成绩)
文件2:学生信息文件,列为(学号,姓名)
关联两个文件,得到(学号、姓名、成绩),结果存入 p026.txt
"""
grade_dict ={}withopen("p026_grade.txt",encoding="utf-2")as read_one:for line in read_one:
fieds = line.strip().split(",")iflen(fieds)==2:id,grade = fieds
grade_dict[id]= grade
else:print("文件内容有误!")
exit(11)
out =open("p026.txt",'w',encoding="utf-2")withopen("p026_student.txt",encoding="utf-2")as new_read:for line in new_read:
fieds = line.strip().split(",")iflen(fieds)==2:id,name = fieds
grade = grade_dict[id]#因为俩个表的id是一致的,通过上方输出的字典中的key--id获取对应的成绩,满足输出要求
out.write(f"{id},{name},{grade}\n")else:print("文件格式有误,无法拆出对应数字的包!")
exit(12)
out.close()
import re
text ="白日依19929221222山尽,黄河入45645546462192912海流。欲穷12345千里目,更上15619292345一层楼。"
pattern =r"1\d{10}"#匹配开头为1后方为数字且为10个数字。
results = re.findall(pattern,text)#结果为re.findall匹配字符中符合pattern条件的内容,读取为列表#findall全文匹配for i in results:#循环列表元素(2)print(i)#打印电话号码#!/bin/env pythonimport re
text ="白日依19929221222山尽,黄河入45645546462192912海流。欲穷12345千里目,更上15619292345一层楼。"
pattern = re.compile(r"1\d{10}")#re.compile定义正则匹配方式 --compile(编写)
result = pattern.findall(text)#findall匹配结果返回列表for i in result:print(i)
有的情况下,是需要自己编写一些模块的,这种就是自定义模块了。
some_mod.py --模块文件
x =10
li =['shark',12]deffoo():return30classPerson():def__init__(self, name, age):
self.name = name
self.age = age
#此时便自定义了一个py模块文件