实验四 文件读取等
实验四 文件等的处理
任务六
with open('data6_1.txt','r',encoding='utf-8') as f:
ls=sorted([line.replace('\n','').split('\t') for line in f.readlines()],key=lambda k:int(k[2]),reverse=True)
with open('data6_2.txt','w+',encoding='utf-8') as nf:
for i in ls: nf.write(' '.join(i)+'\n')
# 既然不是大工程,我直接压行
结果截图

任务七
7-1
import random
def get_lucky_boy(lis:list,trys:int):
result=[]
for i in range(trys):
boy=random.choice(lis)
lis.remove(boy)
result.append(boy)
t=[]
for i in result:
t.append(' '.join(i)+'\n')
return ''.join(t)
with open('data7.txt','r',encoding='utf-8') as f:
ls=[line.replace('\n','').split('\t') for line in f.readlines()]
n=int(input('How many boyz would U like to get'))
boys=get_lucky_boy(lis=ls,trys=n)
print(boys)
with open('lucky.txt','w',encoding='utf-8') as nf:
nf.write(boys)
这是改过的代码。下面7-2其实是最开始写的。做7-3的时候发现了一些不太好的地方,所以改了个东西
获得随机的过程被封装有很多好处,虽然这里面看不出来。所以我就封装了。
= 结果截图

7-2
import datetime
import random
def get_lucky_boy(lis:list,trys:int):
result=[]
for i in range(trys):
boy=random.choice(lis)
lis.remove(boy)
result.append(boy)
return result
def ls2str(ls:list):
t=[]
for i in ls:
t.append(' '.join(i)+'\n')
return ''.join(t)
with open('data7.txt','r',encoding='utf-8') as f:
ls=[line.replace('\n','').split('\t') for line in f.readlines()]
n=int(input('How many boyz would U like to get'))
boys=get_lucky_boy(lis=ls,trys=n)
result=ls2str(boys)
print(result)
filename=datetime.datetime.now().strftime('%Y%m%d')
with open(filename,'w',encoding='utf-8') as nf:
nf.write(result)
这个其实是我最初的代码,获得随机的函数返回的还是列表,然后又写了一个函数在列表里面格式出字符串
7-3发现了那层转换是没必要的,然后做成了一个
这个不是很大的项目被做在很多类和namespaces里面。例如如果我调的是别的namespace里面那个转换函数,那我把函数做在里面,不再依赖那个模块的过程被称作解耦合
虽然现在还不太需要知道知道这个东西
结果截图

7-3
import random
def get_lucky_boy(lis:list,n:int=-1) -> str:
result=[]
while n!=0:
n=int(input('How many boyz would U like to get'))
for i in range(n):
boy=random.choice(lis)
lis.remove(boy)
result.append(boy)
print(' '.join(boy))
t=[]
for i in result:
t.append(' '.join(i)+'\n')
return ''.join(t)
with open('data7.txt','r',encoding='utf-8') as f:
ls=[line.replace('\n','').split('\t') for line in f.readlines()]
boys=get_lucky_boy(lis=ls)
with open('lucky.txt','w',encoding='utf-8') as nf:
nf.write(boys)
做这个的时候修改了获得取随机次数的逻辑。原来是在函数外面传进来,这里面是在函数内询问用户得到
结果截图

总结
别人大量遇到的文件路径的各种问题我都没有遇到,关于计算机路径的一些基础知识我也教别人教烂掉了,很累。另外,很多人遇到的编码问题我也遇到了,但是测试了若干编码(甚至自己改了几个文件的编码)之后就好了。
不要乱封装,封装之前确实应该更好地考虑怎么用
我感觉这作业总算有点Python的感觉了,前面有些重复造轮子的我个人不太喜欢(强调:只是个人不喜欢,我知道可以提高技巧,但是我个人不喜欢做轮子)
一些总结也写在了代码区,那些总结更加实际

浙公网安备 33010602011771号