鱼C论坛

 找回密码
 立即注册
查看: 2972|回复: 7

29讲第二题

[复制链接]
发表于 2017-8-24 10:43:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def cc():
        a=input('请输入需要比较的头一个文件名:')
        b=input('请输入需要比较的另一个文件名:')
        a1=open(a)
        b1=open(b)
        a11=list(a1)
        b11=list(b1)
        i=0
        ii=0
        mm=[]
        lenth=len(a11)
        while i<=lenth:
                if a11[i]!=b11[i]:
                        ii+=1
                        mm.append(ii)
                else:
                        i+=1
        return mm
        print('两个文件共有【%d】处不一样'% ii)
        for each in mm:
                print('第%s行不一样'% each)
        a1.close()
        b1.close()
这个有错误吗,为啥运行起来没错误,输完两个文件名后就没有任何显示了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-24 11:31:22 | 显示全部楼层
是这样的.
def这个语句起的作用是定义一个函数,并不是执行一个函数。你def了一个cc()函数,得在后面,def的外部(即不在def的缩进中)调用cc()函数才可以。

另外,return这个语句的意思是说返回,也就是说,比如我调用一个cc()函数,程序就会进入到cc()的def定义中执行,当执行到return的时候,就返回cc(),调用下一行语句。
你这里return下面的语句都是在def()的缩进中的,看上去是函数内部的语句,其实执行到return的时候,函数已经返回跳出了,后面的自然就不会执行了。

最后还是必须建议你养成取简单易懂的变量名的习惯,比如文件名你就叫f_name,不要用这种i,a1,b2,这样很难明白这个变量具体代表什么意思,除非实在是非常短小的代码,随便叫个名字都能懂,因为这类变量名实在是能代表太多东西了。

我猜测你的意思应该是:
  1. def cc():
  2.         f1_name = input('请输入需要比较的头一个文件名:')
  3.         f2_name = input('请输入需要比较的另一个文件名:')
  4.         f1 = open(f1_name)
  5.         f2 = open(f2_name)

  6.         f1_list = list(f1)
  7.         f2_list = list(f2)

  8.         line=0
  9.         count=0
  10.         mm = []
  11.         
  12.         length = len(f1_list)

  13.         while line <= length:
  14.                 if f1_list[i] != f2_list[i]:
  15.                         count +=1
  16.                         mm.append(line)
  17.                 line += 1

  18.         a1.close()
  19.         b1.close()
  20.         print('两个文件共有【%d】处不一样'% count )
  21.         return mm



  22. differ_list = cc()
  23. for each in differ_list:
  24.     print('第%d行不一样' % each)
  25.    
复制代码


我没有运行,你可以试试看是不是这个意思,然后比较一下。
最好参考一下小甲鱼的答案代码,因为我发现有一些冗余的部分,但是为了方便你对比我就保留了你的思路。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 11:38:54 | 显示全部楼层
逄逄 发表于 2017-8-24 11:31
是这样的.
def这个语句起的作用是定义一个函数,并不是执行一个函数。你def了一个cc()函数,得在后面,def ...

谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 11:51:46 | 显示全部楼层
逄逄 发表于 2017-8-24 11:31
是这样的.
def这个语句起的作用是定义一个函数,并不是执行一个函数。你def了一个cc()函数,得在后面,def ...

我用你的代码试了下,请输入需要比较的头一个文件名:E:\\boy_1.txt
请输入需要比较的另一个文件名:E:\\boy_2.txt
Traceback (most recent call last):
  File "E:/练习/dfhyuyuy.py", line 29, in <module>
    differ_list = cc()
  File "E:/练习/dfhyuyuy.py", line 17, in cc
    if f1_list[line] != f2_list[line]:
IndexError: list index out of range
结果是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 11:56:46 | 显示全部楼层
逄逄 发表于 2017-8-24 11:31
是这样的.
def这个语句起的作用是定义一个函数,并不是执行一个函数。你def了一个cc()函数,得在后面,def ...

def cc():
        a=input('请输入需要比较的头一个文件名:')
        b=input('请输入需要比较的另一个文件名:')
        a1=open(a)
        b1=open(b)
        a11=list(a1)
        b11=list(b1)
        i=0
        ii=0
        mm=[]
        lenth=len(a11)
        while i<=lenth:
                if a11[i]!=b11[i]:
                        ii+=1
                        mm.append(ii)
                else:
                        i+=1
        print('两个文件共有【%d】处不一样'% ii)
        b1.close()
        a1.close()
        return mm
diff=cc()
for each in mm:
      print('第%s行不一样'% each)
我用这个代码运行,结果是
请输入需要比较的头一个文件名:E:\\boy_1.txt
请输入需要比较的另一个文件名:E:\\boy_2.txt
Traceback (most recent call last):
  File "E:/练习/dfhyuyuy.py", line 22, in <module>
    diff=cc()
  File "E:/练习/dfhyuyuy.py", line 15, in cc
    mm.append(ii)
MemoryError
这是怎么回事呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 14:52:50 | 显示全部楼层
灿君君 发表于 2017-8-24 11:51
我用你的代码试了下,请输入需要比较的头一个文件名:E:\\boy_1.txt
请输入需要比较的另一个文件名:E:\ ...

昂。。
不好意思啊,我下面有说我没有运行,就按照意思修改了给你发过来,所以不能保证对。
嗯。这个list index out of range的意思是说,列表超出了边界。
那么很显然,当第二个文件f2的行数比f1的行数少的时候,比如f1_list正在对比第10行,可是f2只有9行,那么f2_list[10]这个部分自然就越界了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 14:57:09 | 显示全部楼层
灿君君 发表于 2017-8-24 11:56
def cc():
        a=input('请输入需要比较的头一个文件名:')
        b=input('请输入需要比较的另 ...

MemoryError的意思是说,内存溢出。
一般内存溢出就是你反复循环,一个列表或者元组反复加元素,大得不得了了,内存装不住了。

你的while循环中,当判断到a11!= b11以后,你的循环并没有推进,反复跑那个if里面的三行,反复添加元素到mm列表中,最后列表就撑爆了。

建议你先想清楚自己的循环思路,尤其是循环如何终止,和如何推进。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 15:40:00 | 显示全部楼层
逄逄 发表于 2017-8-24 14:57
MemoryError的意思是说,内存溢出。
一般内存溢出就是你反复循环,一个列表或者元组反复加元素,大得不 ...

明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-27 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表