YouCam 发表于 2022-1-19 10:15:32

Index out of range 求助

def filename():
    global name1,name2
    name1 = input("Please enter the first file name.\n")
    name2 = input("Please enter the other file name.\n")
   
    return name1, name2

def check():
    if name1.split(".") and name2.split(".") == "txt":
      return True

    else:
      print("Two files are not in the same format.")
      return False

def compare():
    if check == True:
      file1 = open(name1,'r')
      file2 = open(name2,'r')

      content1 = file1.read().strip()
      print(content1)

      content2 = file2.read().strip()
      print(content2)

      if content1 == content2:
            print("The contents are the same.")
      else:
            print("The contents are not the same.")

    else:
      return

if __name__ == "__main__":
    filename()
    check()
    compare()



我的本意是想用这个小程序来检测两个txt文件的内容是否完全相同,突然出来这个错误,我使劲想也想不通啊!能请大家帮帮忙嘛?

z5560636 发表于 2022-1-19 10:23:36

if name1.split(".") and name2.split(".") == "txt":


改成:

if name1.split(".")[-1] and name2.split(".")[-1] == "txt":

python爱好者. 发表于 2022-1-19 10:57:19

应将第 9 行改为:
if name1.split(".") == "txt" and name2.split(".") == "txt":
这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1,
还有前面 name1.split(".") 这条语句后面也应该加上 == "txt",因为python目前还并不支持:
x and y = 4
这类操作,必须要写成这样:
x = 4 and y = 4

懂了吗?不懂可以再问!懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}

YouCam 发表于 2022-1-19 11:01:38

z5560636 发表于 2022-1-19 10:23
改成:

我懂了,刚才也请教了微信群里的小伙伴。
Split()是将一个字符串从一个特定字符那里分开。所以第一份字符串,在这里就等于是文件名,应该用 来代表;而第二份,也就是文件类型名,应该用 或者 [-1] 来代表!
谢谢大佬!
但是我这里改了之后又遇到一个问题了,不知大佬是否还有兴趣来帮我一下。

YouCam 发表于 2022-1-19 11:03:12

python爱好者. 发表于 2022-1-19 10:57
应将第 9 行改为:

这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1, ...

懂了,大佬!
改完又遇到一个错误了,呜呜呜!

python爱好者. 发表于 2022-1-19 11:15:07

谢谢好评!兄弟!

python爱好者. 发表于 2022-1-19 11:16:08

还有什么问题?

python爱好者. 发表于 2022-1-19 11:16:42

乐意帮助您!兄弟!
尽管说出来!!!

YouCam 发表于 2022-1-19 13:02:54

python爱好者. 发表于 2022-1-19 11:16
乐意帮助您!兄弟!
尽管说出来!!!

大佬,我改进了一下我的代码,但现在出了个死循环,能否请你帮我看下代码?

def filename():
    global name1,name2
    name1 = input("Please enter the first file name.\n")
    name2 = input("Please enter the other file name.\n")
   
    return name1, name2

def check():
    if name1.split(".") == "txt" and name2.split(".") == "txt":
      return True

    else:
      print("Two files are not in the same format.")
      return False

def compare():
    if check() == True:

      file1 = open("E:\Code\Python" + "\\" + name1,'r',encoding = 'utf-8')
      file2 = open("E:\Code\Python" + "\\" + name2,'r',encoding = 'utf-8')

      content1 = file1.readlines()
      aftercontent1 = []
      for line in content1:

            while True:
                line.strip()
                line.replace('\n','')
                line.replace('\t','')

                if '\n' in line and '\t' in line:
                  continue
                else:
                  break


            aftercontent1.append(line)

      print(aftercontent1)

      content2 = file2.readlines()
      aftercontent2 = []
      for line in content2:

            while True:
                line.strip()
                line.replace('\n','')
                line.replace('\t','')

                if '\n' in line and '\t' in line:
                  continue
                else:
                  break

            aftercontent2.append(line)

      print(aftercontent2)

      if aftercontent1 == aftercontent2:
            print("The contents are the same.")
      else:
            print("The contents are not the same.")

      file1.close()
      file2.close()

    else:
      return

if __name__ == "__main__":
    filename()
    check()
    compare()

python爱好者. 发表于 2022-1-19 13:04:19

放一下报错信息!

YouCam 发表于 2022-1-19 13:05:37

python爱好者. 发表于 2022-1-19 11:16
乐意帮助您!兄弟!
尽管说出来!!!

程序运行后一直在while循环里面,我设置了跳出条件也没用。那个循环是想给字符串中的转义字符 \n \t 删除,待字符串中没有了以后,就跳出。但是我这里一直在运行,请问能帮我找下原因吗?

python爱好者. 发表于 2022-1-19 13:14:09

应该把 这里面 的两个 while 循环都改成这样:
while True:
                line = line.strip()
                line = line.replace('\n','')
                line = line.replace('\t','')

                if '\n' in line and '\t' in line:
                  continue
                else:
                  break
因为你前面是直接写 line.replace('\n','') 的,
但是实际上这样是错误的,
因为字符串是无法改变的,所以所有和字符串有关的内置方法,
都是返回一个新的字符串,而并不是修改原来的字符串,
所以这里应改为 line = line.replace('\n',''),这样才能改变字符串,
不然你那样一直都改不了字符串,去不掉 \n 和 \t ,
自然循环就一直执行,结束不了!

python爱好者. 发表于 2022-1-19 13:14:45

缩进打错了{:10_282:}

python爱好者. 发表于 2022-1-19 13:15:23

python爱好者. 发表于 2022-1-19 13:14
缩进打错了

是指我刚才回复的,不是你的!

python爱好者. 发表于 2022-1-19 13:20:18

在吗,兄弟!
帮到忙了吗?

YouCam 发表于 2022-1-19 14:17:09

python爱好者. 发表于 2022-1-19 13:14
应该把 这里面 的两个 while 循环都改成这样:

因为你前面是直接写 line.replace('\n','') 的,


哦哦哦!!!!原来是要把返回值赋给一个新的变量!程序成功运行了!谢谢大佬!

YouCam 发表于 2022-1-19 14:18:26

python爱好者. 发表于 2022-1-19 13:20
在吗,兄弟!
帮到忙了吗?

不好意思,我一直在改代码!谢谢你啦,程序终于成功运行了!感谢感谢!

python爱好者. 发表于 2022-1-19 15:03:22

不用谢,都是兄弟!
页: [1]
查看完整版本: Index out of range 求助