pycharm 是基于Python的第三方开发工具,其处理效果更加优良
P001_add_two_number
Print(f””,)
P002_number_jiecheng
定义def函数(返回值return)
Print(“你想显示出来的话”,)
P003__area_of_circle
Math模块——math.pi
Round函数(计算式,保留小数的位数)
P004_print_primes 打印素数列表
Range函数(a,b)——返回a,b-1的范围列表
Range不包含结尾数字
冒号+return:相当于C语言中{ }的作用
从结果一步步向前倒退,从解决问题的角度出发,层层递进
True不能是true
P006_sum_of_list
List本身是Python中的一个变量类型
编程错误:
If、for在C语言中都有{ },但是在Python中,:和空格是编译的标准
P007_get_even_numbers
Append v.附加
result.append(item)
item表示元素
列表推导式
[item for item in range() if]
[item元素+for循环+条件]
data = [item for item in range(begin,end) if item % 2 == 0]
#列表推导式 形式:列表元素+for循环+判断
print(f"begin ={begin},end ={end},even numbers:", data )
p009_get_unique_list
好神奇,不能输入01,但1就可以
set是集合的数据类型,而list是矩阵、列表的数据类型,两者的区别
因为set是集合的数据类型,所以可以用来去重,即达到我们的get_unique_list 函数的功能
p010对简单列表元素排序
concept:
1、简单列表 :item不为列表、元组、字典
2、原地排序、改变排序后生成一个新的list
3、如何piont升序or降序
我的一些想法:
lista = [20,40,30,50,10]
listb = lista.sort()
print(f"lista is {listb}")
得到结果:
lista = [20,40,30,50,10]
#lista.sort()
listb = sorted(lista)
#listb是升序排列,即我们的reverse默认=False
listc = sorted(lista, reverse=True)
#sorted是Python中自带的函数,会在保存原有list的基础上,创造一个新的list
print(f"lista is {lista}")
print(f"listb is {listb}")
print(f"listc is {listc}")
p011_sort_students_list
关键点:key的参数:传了一个函数进来
哈哈哈,按名字排序,不知道他是怎么排的
students = [
{"sno":101, "sname":"小张", "sgrade":88},
{"sno":102, "sname":"小马", "sgrade":99},
{"sno":103, "sname":"小宋", "sgrade":80},
{"sno":104, "sname":"小红", "sgrade":100},
]
students_sort = sorted(students,
key=lambda x: x["sname"],
reverse=True)
#key是指定怎样比较两两之间的元素,因为我们的list students不是数字or字符串列表
#print(f"sort {students},sort result: {students_sort} ")
print(f"sort {students}")
print(f"sort result: {students_sort} ")
#也可以这样打印
print(students)
print(students_sort)
主动学习与Input
绝对路径和相对路径
1、绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。
2、相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。
3、以下是常用的表示当前目录和当前目录的父级目录的标识符
…/ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
/ 表示当前站点的根目录(域名映射的硬盘目录)
————————————————
版权声明:本文为CSDN博主「镹黎同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40913890/article/details/106993433
亲身实践才能发现错误多多:
啊啊啊,我是刚刚还在摆烂之焦头烂额,然后胡乱实验,居然真的试出来了,我真的很激动。
这是文本的内容,我发现我的粗心大意的错误,Sname与sgrade之间的逗号是中文字符的逗号,而snumber与sname之间的逗号是英文逗号导致下图结果
103,小例,99
104,小求,55
105,小哈,66
106,小被,22
我们读取到的复杂结构的list是识别的是英文逗号,毕竟他的发明者是外国人,哈哈哈
常用编码之间的关系如下:
·GBK
全称为 Chinese Internal Code Specification,即汉字内码扩展规范,于 1995 年制定。它主要是扩展了 GB2312,在它的基础上又加了更多的汉字,它一共收录了 21003 个汉字
def read_file():
result = []
with open(r"student_grade_input.txt",encoding="utf-8") as fin:
for line in fin:
line = line[:-1]#去掉每行末尾的换行符,而除去换行符的其他都复制给line
result.append(line.split(","))
return result
def sort_grades(datas):
return sorted(datas,key=lambda x : int(x[2]),
reverse = True)
def write_file(datas):
with open("./student_grade_output.txt","w") as fout: #"w"代表写出
for data in datas:
fout.write(",".join(data) + "\n")
#读取文件
datas = read_file()
print("read_file datas:", datas)
#排序数据
#我们现在读取的sgrade是字符串的形式,我们先要将其转为数字
datas = sort_grades(datas)#把读取的文件datas传进去,返回一个排序后的数据
print("sort_grades datas:", datas)
#写出文件
write_file(datas)#不需要返回值
p013_compye_max_min_avg
啊啊啊,老眼昏花的我,score一直打错,程序调了老半天,但是过程还是很有趣,解决了问题所以更加有趣了
def compute_score():
scores = []
with open(r"student_grade_input.txt",encoding="utf-8") as fin:
for line in fin:
line = line[:-1]
fields = line.split(",")
scores.append(int(fields[-1]))
max_score = max(scores) #max()min()都是python中现成的函数
min_score = min(scores)
mean_score = round(sum(scores) / len(scores), 2)
return max_score, min_score, mean_score
max_score, min_score, mean_score = compute_score()
print(f"max_score={max_score}, min_socre={min_score}, mean_score={mean_score}")
p014_count_word_in_article
1.对文章中单词个数进行计数
2.得到文章中出现次数最多的单词
重点:欺骗语法
word_count = {} #建立一个字典
with open(r"p014_article.txt") as fin:
for line in fin:
line = line[:-1]
words = line.split()
for word in words:
if word not in word_count:
word_count[word] = 0
word_count[word] += 1
print(
sorted(
word_count.items(),
key = lambda x: x[1], #比较的是出现的次数
reverse = True
)[:10] #我只想看排序次数多的前十个元素——欺骗语法
)
我想用此方法统计新闻中出现的字数,不可行
p015_size_of_file
关键词:os.path.getsize os.listdir os.path.isfile
import os
print(os.path.getsize("student_grade_input.txt")) #getsize默认返回的是字节
#os.path.getsize可以得到文件的大小
#计算出此文件下所有目录的大小
#step1 列出文件夹下所有文件
sum_size = 0 #初始化变量=0
for file in os.listdir("."):
#os.listdir 可以列出目录下所有文件,但是返回的可能也有目录
if os.path.isfile(file): #isfile 函数判断此文件是一个普通文件还是目录,我们的venv就是目录
#os.path.isfile
sum_size += os.path.getsize(file) #将其sum的结果传入file
print("all size of dir:",sum_size / 1000,"KB")
p016_arrange_file_by_ext
关键词:os shutil
os.listdir 列出文件 os.path.splitext()
os.mkdir
shutil.move
一、os模块概述
Python os模块包含普遍的操作系统功能。
二、os模块的作用
可以处理文件和目录这些我们日常手动需要做的操作。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。
三、什么是shutil
shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
import os
import shutil #sh+util shell工具模块
dir = "./arrange"
for file in os.listdir(dir): #os.listdir 列出文件——列出当前目录下的文件
ext = os.path.splitext(file)[1] #os.path.splitext()返回的是一个元组,可以得到文件后缀
#ext 表示后缀名
ext = ext[1:] #去掉点号.
if not os.path.isdir(f"{dir}/{ext}"):
os.mkdir( f"{dir}/{ext}") #创建目录
source_path = f"{dir}/{file}" #需要自己拼接一下目录
target_path = f"{dir}/{ext}/{file}"
shutil.move(source_path,target_path)
p017_search_of_dict
关键词:
os.walk递归搜索目录
#可以用来清理磁盘的文件
import os
search_dir = "D:/plc实训设计"
result_files = []
for roots, dirs, files in os.walk(search_dir): #os.walk递归搜索目录
# root 代表当前目录
# dirs 代表当前目录下的子目录
# files 代表当前目录下普通文件
for file in files:
if file.endswith(".txt"):
file_path = f"{root}/{file}" #绝对路径
result_files.append((file_path,
os.path.getsize(file_path) / 1000))
print(
sorted(result_files,
key=lambda x : x[1],
reverse=True)[:10] #降序排列
)
数据结构——字典{}
Python中常见的数据结构可以统称为容器。
序列(如列表list[]和元组)、映射(如字典{})以及集合(set)是三类主要的容器。
一、序列(列表、元组和字符串),序列中的每个元素都有自己的编号。Python中有6种内建的序列。其中列表和元组是最常见的类型。其他包括字符串、Unicode字符串、buffer对象和xrange对象。
二、映射(字典),映射中的每个元素都有一个名字,如你所知,这个名字专业的名称叫键。字典(也叫散列表)是Python中唯一内建的映射类型。
字典的键可以是数字、字符串或者是元组,键必须唯一。在Python中,数字、字符串和元组都被设计成不可变类型,而常见的列表以及集合(set)都是可变的,所以列表和集合不能作为字典的键。
三、集合,集合(Set)在Python 2.3引入,通常使用较新版Python可直接创建,如下所示:
strs=set(['jeff','wong','cnblogs'])
nums=set(range(10))
且set具有不重复性
Python自带的数据结构可分为可变和不可变的。
可变的有:数组、集合、字典;
不可变的有:字符串、元组、数。
#借助数字结构——字典来解决
course_grades = {}
# key: course, value: grade list
course_grades = {}
#读取文件
with open(r"course_student_grade_input.txt",encoding="utf-8") as fin:
for line in fin:
line=line[:-1]
course, sno, sname, sgrade = line.split(",")
#fields可以拆成单个变量
if course not in course_grades:
course_grades[course] = []
course_grades[course].append(int(sgrade))
#fields得到的是一个元组,我们要先将sgrade的字符串类型的变量transfer数字类型
#scores.append(int(fields x[2]))
#现在我们得到的scores是数字类型的sgrade列表list
print(course_grades)
with open(r"course_student_grade_input.txt",encoding="utf-8") as fin:
for line in fin:
line=line[:-1]
course, sno, sname, sgrade = line.split(",")
#fields可以拆成单个变量
if course not in course_grades:
course_grades[course] = []
course_grades[course].append(int(sgrade))
关于对比两个输出结果,可清楚得知并且理解Python中的《空格编译原则》
现在我们一个字典{}三个键
以这样的一个键为例,解读:
会自动加上“ :”, [88, 23, 45, 78, 67, 75]是一个元组