新手提问 python for循环问题 print (y) #这里为啥只输出一行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手提问 python for循环问题 print (y) #这里为啥只输出一行?相关的知识,希望对你有一定的参考价值。

import re
i1 = open('test.txt','r').read()
str =input('初始值:')
str1 =input('结束值:')
i2 = re.findall(r""+str+"(.*?)"+str1+"", i1, re.MULTILINE | re.DOTALL)
for i in i2:
print (i) #到这里正确
x = i
str2 =input('初始值:')
str3 =input('结束值:')
i3 = re.findall(r"("+str2+".*?"+str3+")",x, re.MULTILINE | re.DOTALL)
for y in i3:
print (y) #这里为什么只输出一行?
test.txt:这是里面的内容

hello
hlllllllll
eeee11
dfsfsd
333
hi
hello
hlllllllll
eeee11
dfsfsd
333
hi
hello
hlllllllll
eeee11
dfsfsd
333
hi

有一种可能,i3的长度就是1,所以for循环里面只有一行输出结果追问

第一步匹配hello到hi显示正确,第二步不循环,哪里错了?

追答

不要看文档里的数据,把i3打印出来,看看i3的长度
print len(i3)

追问

应该是x = i 这里的i只有一行,不是循环后的数据,应该怎么改?

追答

因为循环结束了,所以x = i 是最后一行的数据,如果你是想打出每一行的匹配结果,最后一个循环这样改,打出每一行匹配的结果,数据结构是列表
for i in i2:
i3 = re.findall(r"("+str2+".*?"+str3+")",i, re.MULTILINE | re.DOTALL)
print i3

追问

老师你好,怎样不已列表的形式显示?改了程序是这种显示方式
['llllllll\neeee11\ndfsfsd\n']
['llllllll\neeee11\ndfsfsd\n']
['llllllll\neeee11\ndfsfsd\n']

追答

re.findall 返回的是列表,用其他正则方法

re.match(r"("+str2+".*?"+str3+")",x, re.MULTILINE | re.DOTALL
).group()
re.search(r"("+str2+".*?"+str3+")",x, re.MULTILINE | re.DOTALL
).group()

追问

python3.5用什么打包

追答

py2exe和pyinstaller,推荐pyinstaller,用命令行打包,不用再写脚本

参考技术A print len(i3) 你看看

python FOR循环

answer = 10
for i in range(3):
    guess = int(input(‘猜一个‘))
    if  guess == answer:
        print(‘ok‘)
        break
    elif guess > answer:
        print(‘猜大了‘)
    else:
        print(‘猜小了‘)
else:
    print(‘机会用完了‘)

for i in range(10):
    print(‘loop‘,i)
print(‘---------‘)
for i in range(0,10,2):  #最后一个2是步进值
    print(‘loop‘,i)
print(‘---------‘)
for i in range(1,11):  #或者可以定义从1开始到11,也是10个循环
    print(‘loop‘,i)
print(‘---------‘)

  

以上是关于新手提问 python for循环问题 print (y) #这里为啥只输出一行?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在shell上写python一行写循环

Python 图中的while循环改for循环,怎么改,直接回答代码,谢谢

Python 在 print() 之后跳过 for 循环

python FOR循环

python 利用 for 循环 打印数字图案

Python_06_for循环