1.统计文件中的中文字数

描述
统计一个文本文件中字数,每个字母按一个汉字计算,不包括所有标点符号和空格。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

',。?!@#¥%……&*;(:; ) ——+|、·:“”’‘\n’‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入格式
输入要统计的文件名 ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式
输出字数

def read_file(file):
    with open(file, 'r', encoding='utf-8') as data:
        result = data.read()
        for i in result:
            if i in ',。?!@#¥%……&*;(:; ) ——+|、·:“”’‘\n':
                result = result.replace(i,"")
    return len(result)
        

if __name__ == '__main__':
    file = input()
    dic = read_file(file)
    print(dic)

2.文件中数据转列表

描述
现有一个文本文件,里面有两列数据,中间以制表符分隔(\t), 读取文本文件中的数据,将每一行的每个数据取整,以列表形式做为列表的一个元素,输出列表中的前n个元素。(当n大于元素个数时按实际元素个数输出)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

文件前5行数据格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

7 769.191
7.03 557.626
7.06 422.1
7.09 330.095
7.12 264.934
读取文件内容的语句如下所示:
inFile = open(flieName, ‘r’)
#以只读方式读取文件名为’filename’的文件,将文件全部内容读到inFile变量中。
输入格式
输入一个正整数,如:3‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式
[[7, 769], [7, 557], [7, 422]]

with open('xrdfile.txt', 'r', encoding='utf-8') as f:
    n=int(input())
    ls=[]
    for i in f.readlines():
        ls.append(i.strip().split())
    for i in range(len(ls)):
        ls[i][0] = int(float(ls[i][0]))
        ls[i][1] = int(float(ls[i][1]))
    print(ls[:n])

3.利用数据文件统计成绩

描述
利用附件中的成绩数据进行成绩统计,根据总分进行升序排序后,输出总分最低分和最高分,按总分升序输出前n名同学和后n名同学成绩信息(n为非负数,当n大于数据行数时,按实际行数输出),输出每题的平均成绩。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(注:数据文件中最后一列是总分,第4-9列每列为一道题的成绩,打开与关闭文件代码已经给出)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入格式
输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

data = open('成绩单.csv','r', encoding='utf-8')
score=[]
n=int(input())
for line in data:
    line=line.replace('\n','')
    score.append(line.split(','))
score.sort(key=lambda x:int(x[9]))
if n>len(score):
    n=len(score)

print("最低分{}分,最高分{}分".format(score[0][9],score[-1][9]))
print(score[:n])
print(score[-n:])

s=[0,0,0,0,0,0]
for i in range(len(score)):
    for j in range(len(s)):
        s[j]=s[j]+int(score[i][j+3])

for l in range(len(s)):
    s[l]=round(s[l]/len(score),2)
print(s)

data.close()

4.文本分析与加密

描述
读取文件中的内容为字符串可以用以下函数实现:

def read_file(file):
with open(file, ‘r’, encoding=‘utf-8’) as f:
return f.read() # 返回值为字符串
读取附件中的文件,完成以下操作:
1.分类统计文件中大写字母、小写字母、数字、空白字符(包括空格、\n、\t等,可用isspace()方法判断)和其他字符的数量
2.输出文件中单词的数量(将其中所有标点符号替换为空格,再根据空格对字符串进行切分可以得到元素为单词的列表。数字按单词统计,如“ 1994” 计算一个单词)
3.用恺撒加密方法对上述文件内容进行加密,为提高加密强度,约定输入一个秘密单词来产生偏移量,偏移量计算方法为先计算用户输入的字符串中每个字符的ASCII值的和,再对26取模,结果作为偏移量。为避免偏移量恰好为0,本题约定秘密单词为用于表示星期几的单词,即’Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’, 'Sunday’中的一个。
在密码学中,凯撒密码是一种最简单且最广为人知的加密技术。“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推,小写字母也一样处理,其他字符忽略,不作任何改变。
输入格式
一个代表星期几的单词,‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’, 'Sunday’中的一个
输出格式
依序输出:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.文件中大写字母、小写字母、数字、空白字符和其他字符的数量
2.文件中单词的数量
3.偏移量
4.用恺撒加密方法对上述文件内容进行加密的结果


def encrypating(character,n):
    if character.islower():temp = ord('a');character = chr(temp+(ord(character)-temp+n)%26)
    else:temp = ord('A');character = chr(temp+(ord(character)-temp+n)%26)
    return character

l = list(str(input()));secret = 0
for i in l:
    secret = (secret + ord(i))%26

f = open("mayun.txt","r")
content = f.readlines()
upperchr = lowerchr = num = space = others = 0
words = 1

for line in content:
    for i in line:
        if i.isupper():upperchr+=1
        elif i.islower():lowerchr+=1
        elif i.isspace():space+=1
        elif i.isdigit():num+=1
        else:others+=1
    str = line.replace('.', '')
    str = str.replace(',', '')
    str = str.replace("'", '')
    l = list(str.split(' '))
    words+=len(l)
print("%d %d %d %d %d"%(upperchr,lowerchr,num,space,others))
print("共有%d单词"% words)
print("%d"% secret)

for line in content:
    ret = ""
    for char in line:
        if char.isalpha():ret += encrypating(char,secret)
        elif char != '\n':ret += char
    print(ret)

5.身份证号批量升位

描述
我国自1999年10月1日身份证号码由15位改成18位,1999年以前出生的人持有的旧身份证号码均为15位,1999年10月1日以后出生的人获得的身份证号都是18位。
读取附件中文本文件id15.txt,用户输入一个正整数 n (n<=30),将其中的前 n 行中的15位身份证号升到18位并输出,身份证号升位规则如下:
第一步,在原十五位数身份证的第六位数后面插入19 (1905年1月1日以后出生),这样身份证号码即为十七位数;
第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。
校验码计算方法:将身份证前十七位数分别乘以不同系数并求和
S = Sum(Ai * Wi)
Ai:表示第i位置上的身份证号码数字值, i = 0, … , 16
Wi:表示第i位置上的加权因子,Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
S对11取模得到余数0-10,对应的校验码如下:
余数 Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2

下载附件中的文件,与本地创建的文件放在同一文件夹下测试使用,读取文件可以参考以下语句:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

n = int(input()) # 读入一个正整数
with open(‘id15.txt’,‘r’,encoding=‘utf-8’) as file: # 打开文件,创建文件对象
for i in range(n): # 循环读取 n 行
line = file.readline() # 每次读取文件中的一行,line为一个字符串
本题输出时,身份证与姓名数据间的间隔为中文全角空格,可以复制使用以下的sep参数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
sep=’ ’
输入格式
输入一个正整数 n (n<=30)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

n行18位的身份证号及姓名(保持与原文件格式一致)

def id15218(id15):
    a = id15
    id15 = a[ :6] + '19' + a[6:]
    Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    s = 0
    for i in range(17):
        s = s + int(id15[i]) * int(Wi[i])
    Y = str(s % 11)
    if int(Y) < 10:
        before = '0 1 2 3 4 5 6 7 8 9'
        after = '1 0 X 9 8 7 6 5 4 3'
        table = ''.maketrans(before,after)
        Y =Y.translate(table)
    else:
        Y = '2'
    id18 = id15[:17] + Y + id15[17:]
    id18 = id18.replace(id18[18],' '*1)
    return id18


n = int(input())
with open('id15.txt','r',encoding='utf-8') as file:
    for i in range(n):
        line = file.readline()   # line 的内容是文件中的一行,字符串类型
        print(id15218(line),end = '')

6.手机销售统计

描述
文件中包含有2018和2019手机销售榜单数据(市场份额百分数),请根据要求升序输出分析结果:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’1’时,以列表形式分别输出2019年和2018年上榜品牌‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’2’时,以列表形式输出2019年和2018年都上榜的品牌‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’3’时,以列表形式输出2019年和2018年上榜的所有品牌‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’4’时,以列表形式输出2019年新上榜品牌‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’5’时,以列表形式输出2019年新上榜和落榜品牌




sale2018=[]
sale2019=[]
with open('sale2018.csv', 'r', encoding='utf-8') as data2018:
    for line in data2018:
        temp1=line.split(',')
        sale2018.append(temp1)
with open('sale2019.csv', 'r', encoding='utf-8') as data2019:
    for line in data2019:
        temp2=line.split(',')
        sale2019.append(temp2)
n=int(input())
set2018={x[0] for x in sale2018}
set2019={x[0] for x in sale2019}
if n == 1:
    ls2019=list(set2019)
    ls2018=list(set2018)
    ls2019.sort()
    ls2018.sort()
    print(ls2019)
    print(ls2018)
elif n == 2:
    set2=set2019&set2018
    ls=list(set2)
    ls.sort()
    print(ls)
elif n == 3:
    set3=set2018|set2019
    ls=list(set3)
    ls.sort()
    print(ls)
elif n == 4:
    set4=set2019-set2018
    ls=list(set4)
    ls.sort()
    print(ls)
elif n == 5:
    set5=set2018^set2019
    ls=list(set5)
    ls.sort()
    print(ls)


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐