猪猪虾 发表于 2020-3-26 17:06:24

29讲,课程内容里面的题,运行无结果

#小甲鱼的对话单独保存为boy_*.txt,去掉”小甲鱼:“
#小客服的对话单独保存为girl_*.txt,去掉”小客服:“
#文件中一共有三段对话,分别保存为boy_1.txt,boy_2.txt,boy_3.txt
#以及girl_1.txt,girl_2.txt,girl_3.txt共6个文件
f=open(r"C:\Users\Administrator\Desktop\python\record.txt","r")
f.seek(0,0)                                          #从文件头开始
string=f.read()                                    #讲txt里面的东西赋值给字符串string

def variation(range_1,count):
   i=0
   sign=
   while string!= '=':
      for i in range(range_1,len(string)):
            if string=='\n' and"小客服:" in string:
               boy='boy_'+str(count)+'.txt'
               boy_file=open(boy,'w+')               #+4的目的是避免将”小甲鱼:“,”小客服:“放入文件中               
               boy_file.write(string) #max(sign)找最大值,越往后的换行符的位置参数越大,就是离当前换行符最近的那一个换行符的位置
               i+=1                                  #跳过第二个换行符,开始新一轮判别,原因如下
               sign.append(i)                        #存放换行符的位置,换行符是有每个句子结尾和句子开头都有一个换行符,例如‘女朋友?\n\n小甲鱼:咦???\n\n小客服:我跟:’
            else:                                       
               if string=='\n' and"小甲鱼:" in string :
                   girl='girl'+str(count)+'.txt'
                   girl_file=open(girl,'w+')
                   girl_file.write(string)
                   i+=1
                   sign.append(i)
   print('location=',i)                            #输出当前出现‘=’的位置
                                                                              
variation(0,1)                              
location_1=location                                  #存放第一次出现‘=’的位置
if string=='=':                        #循环跳过所有的‘=’符号之后,在开始存放数据
   location_1+=1
else:
    variation(location_1,2)
    location_2=location                              #存放第2次出现‘=’的位置
    if string=='=':                      #循环跳过所有的‘=’符号之后,在开始存放数据
         location_2+=1         
    else:
       variation(location_2,3)         
                                    
f.close()
boy_1.close()
boy_2.close()
boy_3.close()
girl_1.close()
girl_2.close()
girl_3.close()

永恒的蓝色梦想 发表于 2020-3-26 17:10:19

emmm
怎么个没结果法?搞死不出答案还是报错?

BngThea 发表于 2020-3-26 17:25:21

文件的关闭应该放到循环里面

猪猪虾 发表于 2020-3-26 17:25:27

永恒的蓝色梦想 发表于 2020-3-26 17:10
emmm
怎么个没结果法?搞死不出答案还是报错?

运行了一晚上,第二天报错了,显示这句有问题
if string=='\n' and"小客服:" in string:

永恒的蓝色梦想 发表于 2020-3-26 17:54:22

猪猪虾 发表于 2020-3-26 17:25
运行了一晚上,第二天报错了,显示这句有问题
if string=='\n' and"小客服:" in string ...

没看懂你的代码,所以重写了一个def _OpenFile(count):
    return open(f'boy_{count}.txt',mode='w'),open(f'girl_{count}.txt',mode='w')

def _Writer(path):
    file=open(path,mode='r').__iter__()
    count=1
    boy_file,girl_file=_OpenFile(count)

    while True:
      line=file.__next__()

      if line.startswith('小甲鱼'):
            boy_file.write(line)

      elif line.startswith('小客服'):
            girl_file.write(line)

      elif line.startswith('='):
            boy_file,girl_file=_OpenFile(count)

def main():
    try:
      _Writer(r"C:\Users\Administrator\Desktop\python\record.txt")

    except StopIteration:
      pass

    except BaseException as err:
      print(err.__repr())

猪猪虾 发表于 2020-3-26 17:59:43

BngThea 发表于 2020-3-26 17:25
文件的关闭应该放到循环里面

#小甲鱼的对话单独保存为boy_*.txt,去掉”小甲鱼:“
#小客服的对话单独保存为girl_*.txt,去掉”小客服:“
#文件中一共有三段对话,分别保存为boy_1.txt,boy_2.txt,boy_3.txt
#以及girl_1.txt,girl_2.txt,girl_3.txt共6个文件
f=open(r"C:\Users\Administrator\Desktop\python\record.txt","r")
f.seek(0,0)                                          #从文件头开始
string=f.read()                                    #讲txt里面的东西赋值给字符串string

def variation(range_1,count):
   i=0
   sign=
   while string != '=':
      for i in range(range_1,len(string)):
            if string=='\n' and"小客服:" in string:
               boy='boy_'+str(count)+'.txt'
               boy_file=open(boy,'w+')               #+4的目的是避免将”小甲鱼:“,”小客服:“放入文件中               
               boy_file.write(string) #max(sign)找最大值,越往后的换行符的位置参数越大,就是离当前换行符最近的那一个换行符的位置
               i+=1                                  #跳过第二个换行符,开始新一轮判别,原因如下
               sign.append(i)                        #存放换行符的位置,换行符是有每个句子结尾和句子开头都有一个换行符,例如‘女朋友?\n\n小甲鱼:咦???\n\n小客服:我跟:’
            else:                                       
               if string=='\n' and"小甲鱼:" in string :
                   girl='girl'+str(count)+'.txt'
                   girl_file=open(girl,'w+')
                   girl_file.write(string)
                   i+=1
                   sign.append(i)
   print('location=',i)                            #输出当前出现‘=’的位置
                                                                              
variation(0,1)
boy_1.close()
girl_1.close()
location_1=location                                  #存放第一次出现‘=’的位置
if string=='=':                        #循环跳过所有的‘=’符号之后,在开始存放数据
   location_1+=1
else:
    variation(location_1,2)
    boy_2.close()
    girl_2.close()
    location_2=location                              #存放第2次出现‘=’的位置
    if string=='=':                      #循环跳过所有的‘=’符号之后,在开始存放数据
         location_2+=1         
    else:
       variation(location_2,3)         
       boy_3.close()
       girl_3.close()
      
f.close()






#现在显示回溯(最后调用):
#File "C:\Users\Administrator\Desktop\python\29_fenduan.py", line 29, in <module>
#   variation(0,1)
#File "C:\Users\Administrator\Desktop\python\29_fenduan.py", line 12, in variation
   # while string != '=':
#IndexError: string index out of range

BngThea 发表于 2020-3-26 18:02:35

你的代码中必须遇到 = 才结束循环,这里没遇到,并且后面没有字符了

猪猪虾 发表于 2020-3-26 18:08:33

BngThea 发表于 2020-3-26 18:02
你的代码中必须遇到 = 才结束循环,这里没遇到,并且后面没有字符了

所以在第三次运行的时候,会一直运行下去,停不下来

猪猪虾 发表于 2020-3-26 18:09:18

永恒的蓝色梦想 发表于 2020-3-26 17:54
没看懂你的代码,所以重写了一个

好的,谢谢,大概懂你的思路了,我的太繁琐了

永恒的蓝色梦想 发表于 2020-3-26 18:16:19

猪猪虾 发表于 2020-3-26 18:09
好的,谢谢,大概懂你的思路了,我的太繁琐了

选个最佳好不好{:10_281:}

猪猪虾 发表于 2020-3-26 18:22:41

BngThea 发表于 2020-3-26 18:02
你的代码中必须遇到 = 才结束循环,这里没遇到,并且后面没有字符了

老师,我改了一下,在第三次分割的时候,我不调用程序了,将循环里面的东西复制了一遍,放在第三种情况里面,但是还是报同一个地方同样#小甲鱼的对话单独保存为boy_*.txt,去掉”小甲鱼:“
#小客服的对话单独保存为girl_*.txt,去掉”小客服:“
#文件中一共有三段对话,分别保存为boy_1.txt,boy_2.txt,boy_3.txt
#以及girl_1.txt,girl_2.txt,girl_3.txt共6个文件
f=open(r"C:\Users\Administrator\Desktop\python\record.txt","r")
f.seek(0,0)                                          #从文件头开始
string=f.read()                                    #讲txt里面的东西赋值给字符串string

def variation(range_1,count):
   i=0
   sign=
   while string != '=':
      for i in range(range_1,len(string)):
            if string=='\n' and"小客服:" in string:
               boy='boy_'+str(count)+'.txt'
               boy_file=open(boy,'w+')               #+4的目的是避免将”小甲鱼:“,”小客服:“放入文件中               
               boy_file.write(string) #max(sign)找最大值,越往后的换行符的位置参数越大,就是离当前换行符最近的那一个换行符的位置
               i+=1                                  #跳过第二个换行符,开始新一轮判别,原因如下
               sign.append(i)                        #存放换行符的位置,换行符是有每个句子结尾和句子开头都有一个换行符,例如‘女朋友?\n\n小甲鱼:咦???\n\n小客服:我跟:’
            else:                                       
               if string=='\n' and"小甲鱼:" in string :
                   girl='girl'+str(count)+'.txt'
                   girl_file=open(girl,'w+')
                   girl_file.write(string)
                   i+=1
                   sign.append(i)
   print('location=',i)                            #输出当前出现‘=’的位置
                                                                              
variation(0,1)
boy_1.close()
girl_1.close()
location_1=location                                  #存放第一次出现‘=’的位置
if string=='=':                        #循环跳过所有的‘=’符号之后,在开始存放数据
   location_1+=1
else:
    variation(location_1,2)
    boy_2.close()
    girl_2.close()
    location_2=location                              #存放第2次出现‘=’的位置
    if string=='=':                      #循环跳过所有的‘=’符号之后,在开始存放数据
         location_2+=1         
    else:

#----------------------------情况三----------------------------------------------
         
       for i in range(location_2,len(string)):
            if string=='\n' and"小客服:" in string:
               boy='boy_'+str(count)+'.txt'
               boy_file=open(boy,'w+')                           
               boy_file.write(string)
               i+=1                                 
               sign.append(i)                        
            else:                                       
               if string=='\n' and"小甲鱼:" in string :
                   girl='girl'+str(count)+'.txt'
                   girl_file=open(girl,'w+')
                   girl_file.write(string)
                   i+=1
                   sign.append(i)
       boy_3.close()
       girl_3.close()
      
f.close()
的错误

猪猪虾 发表于 2020-3-26 18:24:15

永恒的蓝色梦想 发表于 2020-3-26 18:16
选个最佳好不好

我还是想知道我的啥地方有问题{:5_96:}

永恒的蓝色梦想 发表于 2020-3-26 18:28:11

猪猪虾 发表于 2020-3-26 18:24
我还是想知道我的啥地方有问题

嘛……其实我觉得你写代码之前应该先写一个框架,再完成代码,到时候自己写的哪有问题基本也能清楚{:10_327:}

猪猪虾 发表于 2020-3-26 18:41:05

永恒的蓝色梦想 发表于 2020-3-26 18:28
嘛……其实我觉得你写代码之前应该先写一个框架,再完成代码,到时候自己写的哪有问题基本也能清楚{:10_3 ...

感谢你的建议,这样也方便别人看

BngThea 发表于 2020-3-26 18:46:39

猪猪虾 发表于 2020-3-26 18:22
老师,我改了一下,在第三次分割的时候,我不调用程序了,将循环里面的东西复制了一遍,放在第三种情况里 ...

因为string读进来的字符串是有长度的,你的循环里面i一直在增加,而没有合理的跳出,导致越界

猪猪虾 发表于 2020-3-26 21:48:17

BngThea 发表于 2020-3-26 18:46
因为string读进来的字符串是有长度的,你的循环里面i一直在增加,而没有合理的跳出,导致越界

我这程序问题真是多,我加了一个条件,改成
while string != '=' and i <= len(string):
同样的地方还是有问题
页: [1]
查看完整版本: 29讲,课程内容里面的题,运行无结果