从0开始的python学习:编译原理实验1:程序语言的重复率检查

一开始想用C写,结果字符串处理太麻烦放弃了。听了老师的话说可以用一门新语言写写,那就顺便试试。

实验一:程序语言的重复率检查

实验目的: 通过编写一个重复率检查程序,掌握编译器的预处理方法。

实验要求:

(1)打开两个C或C++或其它程序语言文件,并显示两个文件内容;
(2)对比两个程序语言源文件,进行重复率检查,给出重复率;注:重复率:连续有n个词相同则计一次重复,n可以通过界面设置进行调整,给出程序设计过程中重复率的设定及计数公式。
(3)两个文件中重复之处用红色标出或者摘录出来。

实验代码:

# encoding: utf-8
list1 = []
list2 = []
n = 0                    # 控制重复
k = 0                    # 控制循环
m = input("重复字数:")   # 要求的长度
p = 0                    # 控制输出
r = 0                    # 控制输出次数
flag = 0                 # 标志位
counts = 0               # 出现的最大公共序列
i = 0
sum = 0
# 打开文件写入
fo = open("C:\Users\Launcher-Z\Desktop\words 1.txt", "r")
str1 = fo.read()
print str1
fo = open("C:\Users\Launcher-Z\Desktop\words 2.txt", "r")
str2 = fo.read()
print str2
# str1 = "Engraved a the signs so He can feel just right When I'm losing yourself, I'l come to found We can finally "
# str2 = "Engraved all the signs so I can feel just right When I'm losing myself, I'll come to find We can finally"
list1 = str1.split()
list2 = str2.split()
while i < len(list1):
    k = i
    for j in range(len(list2)):
        if list1[k] == list2[j]:
            if k == (len(list1) - 1):
                continue
            else:
                k = k + 1
                n = n + 1
                continue
        else:   # 如果长度大于等于要求则输出i到n的字符,否则不干事;并重置k=i,n=0
            if n >= m:
                # 改进:如果在集合中,跳过不管;不在集合中,加入集合,执行标志置1,目前不想写了
                flag = 1   # 标志位置1
                counts = n
                sum = sum + n
                print '有', n, '个重复单词'
                p = i
                while r < n:
                    print list1[p]
                    p = p + 1
                    r = r + 1
            r = 0
            k = i
            n = 0
    if flag == 1:
        i = i + counts - 1
        counts = 0
        flag = 0   # 重置标志
    i = i + 1
print '重复率:', sum*100/len(list1), '%'

实验结果
实验结果

问题及讨论:

这个代码适用的条件应该是当n值比较大的时候,如果n值过小,那么就会造成输出第一段中后方存在与第二段中前方相同的字段,即第一段中的与自己重复的部分会被计算进去,造成结果错误——改进方法:可以设置一个集合,如代码中的注释所说,但如果集合中存放单独的单词不行,重复的会被抛弃,只能以短语为单位存放。
第一段文字从头到尾之遍历了一遍,而的第二段遍历了许多许多次性能上是否还可以优化有待商榷。

单纯地先把实验报告上的东西搬上来了,第一次接触python,肯定还有很多要去学习的。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值