1. | 文件-加减法 【问题描述】 从文件jisuan.txt读入任意多行。每一行写有一个两个操作数参加的加法运算式或减法运算式。程序分析每一行的运算式,完成运算,把运算结果写入jieguo.txt,一行一个结果。 文件內的每一行 是一个两个操作数参加的加法运算式或减法运算式。算式中不含空格 文件,一行一个结果。结果保留两位小数。 输入文件内容: 1+2 5-2.3 6+0.8 【样例输出】 输出文件内容: 3.00 2.70 6.80 |
---|
fp1 = open("jisuan.txt",'r')
fp2 = open("jieguo.txt",'w+')
a = (fp1.readline()).strip()
while len(a)!=0:
temp = eval(a)
a = (fp1.readline()).strip()
fp2.write("%.2f\n"%temp)
fp1.close()
fp2.close()
2. | 查找复制特定字符串 【问题描述】 编写程序实现:从键盘输入整数n。从文件"in.txt"中读入n行,将其中以字母A开头的行打印到标准输出(这里指的是屏幕)中。 从键盘输入整数n; 标准输出的每一行是字母A开头的行。若未找到符合条件的字符串,则输出"not found";若输入数据不合法(指n为小数或负数)则输出"illegal input"。 键盘输入: 5 文件输入: An apple |
---|
'''# 方法一
n = eval(input())
if int(n)==n:
cout = 0
fp1 = open("in.txt")
for i in range(1,n+1):
a = (fp1.readline()).strip()
if a[0:1]=='A':
cout = cout+1
print(a)
fp1.close()
if cout == 0 :
print("not found")
else:
print("illegal input")
'''
# 方法二
n = eval(input())
f1 = open('in.txt', 'r')
flag = 1
for i in range(0, n):
a = f1.readline().strip()
if a[0:1]=="A":
flag = 0
print(a)
if flag==1:
print("not found")
f1.close()
3. | 电影选看 【问题描述】 鼠标右击以下文件,选择“另存为”把文件保存至本地硬盘中。
【样例输入】 无 【样例输出】 6 7 8 9 后面还有很多就不列出来了 |
---|
'''
# 方法一
fp1 = open("movie.txt",encoding="utf-8")
a = fp1.readline()
line = (fp1.readline()).strip()
num = []
while len(line)!=0:
L = line.split()
del L[1]
if int(L[4])<=90:
num.append(L[0])
line = (fp1.readline()).strip()
fp1.close()
fp2 = open("out.txt",'w+',encoding='utf-8')
for i in num:
fp2.write(i+'\n')
fp2.close()
'''
# 方法二
f1 = open('movie.txt', 'r', encoding="utf-8")
f2 = open('out.txt', 'w+')
a = f1.readline()
line1 = f1.readline().strip()
while len(line1) != 0:
ll = line1.split()
del ll[1]
if int(ll[4]) <= 90:
print(ll[0])
f2.write(ll[0]+'\n')
line1 = f1.readline().strip() # !!!!!!
f1.close()
f2.close()
4. | 学生成绩转换 【问题描述】读入文件d1.txt d1.txt,每行数据包含两个信息:学号和成绩,将成绩转换成5级制并按照学号递减排序,在屏幕上输出学号和成绩中间有一个空格的间隔,将不及格学生人数写到文件d2.txt中。 【样例输出】 2 D 3 B 4 D 5 A 7 E 8 A 10 C 11 C 14 B |
---|
'''
# 方法一
fp1 = open("d1.txt")
dict1 = {}
for i in fp1:
(a,b) = i.split()
if eval(b)>=90:
dict1[a]='A'
if 80<= eval(b) <90:
dict1[a]="B"
if 70<=eval(b)<80:
dict1[a]='C'
if 60<=eval(b)<70:
dict1[a]='D'
if eval(b)<60:
dict1[a]='E'
list1 = list(dict1.items())
list1.sort(key=lambda x:(eval(x[0]),x[1]))
fp2 = open('d2.txt','w')
cout = 0
for i in list1:
print(i[0]+' '+i[1])
if i[1]=='E':
cout = cout+1
fp2.writelines(str(cout))
fp1.close()
fp2.close()
'''
# 方法二
f1 = open('d1.txt', 'r')
f2 = open('d2.txt', 'w+')
dict1 = {}
for i in f1:
(a, b) = i.split()
if eval(b) >= 90:
dict1[a] = 'A'
if 80 <= eval(b) < 90:
dict1[a] = "B"
if 70 <= eval(b) < 80:
dict1[a] = 'C'
if 60 <= eval(b) < 70:
dict1[a] = 'D'
if eval(b) < 60:
dict1[a] = 'E'
list1 = list(dict1.items())
list1.sort(key=lambda x: (eval(x[0]), x[1]))
for i in list1:
temp = i[0]+" "+i[1]
print(temp)
f2.write(temp+'\n')
f1.close()
f2.close()
5. | 文件排版22 【问题描述】 英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号':'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中: 1.从标准输入读取一整数,作为排版后所有各行冒号':'在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号':'前的字符个数,位置从1开始计数; 2.冒号':'左边的单词串以冒号为基准右对齐,左边的第一个单词之前如果有多余的位置,则以空格填充;冒号':'右边的单词串以冒号':'为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符; 3.冒号':'左右两边的单词间都只有一个空格分隔,并且要求冒号两边各有一个空格与单词分隔。 假设输入文件中每行字符个数不超过100。 【输入形式】 待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号':'位置的整数从标准输入读入。 【输出形式】 排版后的参演人员名单输出到当前目录下的listout.txt中。 【输入样例】 假设文件listin.txt内容为: Digital Intermediate by : EFILM Supervising Digital Colorist : STEVEN J. SCOTT Second Colorist :ANDREW FRANCIS Digital Intermediate Producer:LOAN PHAN Digital Intermediate Editor: DEVON MILLER 表示冒号固定位置的整数为: 40 【输出样例】 文件listout.txt中的内容应为: 【样例说明】 输入的文件listin.txt中有五行参演人员名单,要求排版后冒号':'位于第40个字符的位置,按照上述排版规则输出到文件listout.txt中。 |
---|
'''
# 方法一
fp2 = open("listout.txt","w")
fp2.write("")
loca = int(input())
fp1 = open(r"listin.txt", "r")
data = fp1.readlines()
a = []
str_lens = []
for line in data:
# print(list(line))
flag = False
for i in line:
if i == " " or i == "\t":
if flag == False:
if i == " ":
a.append(i)
flag = True
if i == "\t":
a.append(" ")
flag = True
else:
continue
else:
flag = False
a.append(i)
# print(a)
cache_str = "".join(a)
# print(cache_str)
cache_list = cache_str.split(":")
#print(cache_list)
for i in range(len(cache_list)):
cache_list[i] = cache_list[i].strip()
str_lens.append(len(cache_list[0]))
# print(len(cache_list))
fp2.write(" "*(loca-len(cache_list[0])-1)+cache_list[0]+' '+": "+cache_list[1]+"\n")
'''
# 方法二
f = open('listin.txt', 'r')
ff = open('listout.txt', 'w')
n = eval(input())
for lines in f:
k = lines.find(':')
l1 = ' '.join(lines[:k].split())
l2 = ' '.join(lines[k + 1:].split())
temp = l1.rjust(n, ' ') + ' : ' + l2 + '\n'
print(temp)
ff.write(temp)
f.close()
ff.close()
6. | 文件-注释比例 【问题描述】 一个好的程序要有一定比例的注释。编写一个程序统计一个C源文件中注释所占的百分比。百分比计算公式为:程序注释中字符总数(/*和*/除外的所有字符)除以程序文件中总字符数(程序文件中的所有字符)。 注:只考虑/* */内的注释,而且要考虑注释跨行的情况。不要考虑其它情况,比如//打头的行注释,比如/*或*/作为字符串的子串的情况。 【输入形式】 从当前目录下的filein.c源程序文件获得输入。 【输出形式】 向控制台输出注释所占百分比,百分数无小数(小数部分直接截掉,不要四舍五入),后跟百分号%。 【样例输入】 假设filein.c的内容为: void main() { FILE * in; /*Open the file*/ if((in=fopen("in.txt","r"))==NULL) { printf("Can’t open in.txt!"); return; } /*Close the file, and return.*/ fclose(in); } 【样例输出】 22% 【样例说明】 filein.c文件的总字符数为179,注释中的字符数为41,则注释所占百分比为22%。 |
---|
'''
# 方法一
fp1 = open('filein.c','r')
lines = fp1.read()
cout1,c,sum = 0,0,0
list1 = [0,0,0,0,0,0,0,0,0,0]
len1 = len(lines)+8
for i in lines:
if i=='/':
list1[c] = cout1
c += 1
cout1 += 1
#print(list1)
for i in range(0,10,2):
sum = sum+int(list1[i+1])-int(list1[i])-1
#print(len1)
#print(sum)
zhan = int(((sum)/len1)*100)
#(a,b) = str(zhan).split('.')
if list1==[0,0,0,0,0,0,0,0,0,0]:
print('0%')
else:
print("{0}%".format(zhan))
fp1.close()
'''
# 方法二
files = open('filein.c', 'r')
content = files.read()
content_split = content.split('/*')
# print(content_split)
n = 0
for string in content_split:
if string.count('*/') == 1:
n = n + string.index('*/')
# print(string.index('*/'))
per = (n / len(content)) * 100
per = str(per).split('.')[0] + '%'
print(per)
files.close()