实验四 文件读取等

实验四 文件等的处理

任务六

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')

# 既然不是大工程,我直接压行

结果截图

image

任务七

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的时候发现了一些不太好的地方,所以改了个东西

获得随机的过程被封装有很多好处,虽然这里面看不出来。所以我就封装了。

= 结果截图

image

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里面那个转换函数,那我把函数做在里面,不再依赖那个模块的过程被称作解耦合

虽然现在还不太需要知道知道这个东西

结果截图

image

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)

做这个的时候修改了获得取随机次数的逻辑。原来是在函数外面传进来,这里面是在函数内询问用户得到

结果截图

image

总结

别人大量遇到的文件路径的各种问题我都没有遇到,关于计算机路径的一些基础知识我也教别人教烂掉了,很累。另外,很多人遇到的编码问题我也遇到了,但是测试了若干编码(甚至自己改了几个文件的编码)之后就好了。

不要乱封装,封装之前确实应该更好地考虑怎么用

我感觉这作业总算有点Python的感觉了,前面有些重复造轮子的我个人不太喜欢(强调:只是个人不喜欢,我知道可以提高技巧,但是我个人不喜欢做轮子)

一些总结也写在了代码区,那些总结更加实际

posted @ 2021-05-11 16:14  Dustella  阅读(83)  评论(2)    收藏  举报