某农业学校python(五)

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;
    文件输入的第1至n行的每一行构成一个字符串。
【输出形式】

    标准输出的每一行是字母A开头的行。若未找到符合条件的字符串,则输出"not found";若输入数据不合法(指n为小数或负数)则输出"illegal input"。
【样例输入】

      键盘输入:      5

      文件输入:
            hello world
            An apple
            hello C++
            A man
            a program
【样例输出】

            An apple
            A man

'''# 方法一
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.电影选看

【问题描述】
    在当前目录下有一个文件名为movie.txt,文件中有6列数据,包括No Name Year Country Score Lasting,分别表示序号、电影名、上映年份、国家、评分和电影时长。李华只想观看时长在90分钟以下(包括90分钟)的电影。请你编写程序帮他挑选出符合条件的电影序号。一行打印一个序号写到文件out.txt中。

    鼠标右击以下文件,选择“另存为”把文件保存至本地硬盘中。        

        

movie.txt

【样例输入】

【样例输出】

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&rsquo;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()
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值