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()
emmm
怎么个没结果法?搞死不出答案还是报错? 文件的关闭应该放到循环里面 永恒的蓝色梦想 发表于 2020-3-26 17:10
emmm
怎么个没结果法?搞死不出答案还是报错?
运行了一晚上,第二天报错了,显示这句有问题
if string=='\n' and"小客服:" in string: 猪猪虾 发表于 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()) 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
你的代码中必须遇到 = 才结束循环,这里没遇到,并且后面没有字符了
所以在第三次运行的时候,会一直运行下去,停不下来 永恒的蓝色梦想 发表于 2020-3-26 17:54
没看懂你的代码,所以重写了一个
好的,谢谢,大概懂你的思路了,我的太繁琐了 猪猪虾 发表于 2020-3-26 18:09
好的,谢谢,大概懂你的思路了,我的太繁琐了
选个最佳好不好{:10_281:} 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:16
选个最佳好不好
我还是想知道我的啥地方有问题{:5_96:} 猪猪虾 发表于 2020-3-26 18:24
我还是想知道我的啥地方有问题
嘛……其实我觉得你写代码之前应该先写一个框架,再完成代码,到时候自己写的哪有问题基本也能清楚{:10_327:} 永恒的蓝色梦想 发表于 2020-3-26 18:28
嘛……其实我觉得你写代码之前应该先写一个框架,再完成代码,到时候自己写的哪有问题基本也能清楚{:10_3 ...
感谢你的建议,这样也方便别人看 猪猪虾 发表于 2020-3-26 18:22
老师,我改了一下,在第三次分割的时候,我不调用程序了,将循环里面的东西复制了一遍,放在第三种情况里 ...
因为string读进来的字符串是有长度的,你的循环里面i一直在增加,而没有合理的跳出,导致越界 BngThea 发表于 2020-3-26 18:46
因为string读进来的字符串是有长度的,你的循环里面i一直在增加,而没有合理的跳出,导致越界
我这程序问题真是多,我加了一个条件,改成
while string != '=' and i <= len(string):
同样的地方还是有问题
页:
[1]