鱼C论坛

 找回密码
 立即注册
查看: 3386|回复: 11

python 使用遍历出了个问题

[复制链接]
发表于 2013-12-3 00:33:34 | 显示全部楼层 |阅读模式

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

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

x
初学python在做文件内容查找时使用for遍历文件内容,最后打印出来的结果有一个小尾巴。
import sys
sys.path.append('C:/Users/sunshineyilan/Desktop/study')
file1 = open('demo_file.txt','w')
file1.writelines(' num:1 sex:male phone:1111 \n num:2 sex:female phone:2222 \n num:3 sex=male phone:3333 \n')
file1.close()
file1 = open('demo_file.txt','r')
readfile = file1.readlines()
while True:
    guest_input = input('enter the keywords you want to search for:').strip()
    if len(guest_input) == 0:
        print('please enter the keywords what you want to search:')
        continue
    else:
        for line in readfile:
            if guest_input in line:
                print(line)
                file1.close()
            else:
                print("have no data.")
附件中有一个错误的截图。

QQ截图20131203003235.png

最后想做到的样子:输入1 或者2 3的时候不会显示have no data,输入num的时候会显示所有带有num字符的行

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-3 00:35:12 | 显示全部楼层
sys.path.append('C:/Users/sunshineyilan/Desktop/study')
这一句代码是因为我没有在linux环境中所以他找不到我的py文件,我就改了下python的路径。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 08:58:30 | 显示全部楼层
python3.2?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 09:00:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 09:05:23 | 显示全部楼层
逻辑错误,你可以设置一个标志found,在循环里面查找,如果找到了,就打印并设置found=1。最后在循环外面判断found的值,确定找没找到。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 09:28:29 | 显示全部楼层

。。。这个不是重点。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 10:52:41 | 显示全部楼层
liufei_vip 发表于 2013-12-3 09:05
逻辑错误,你可以设置一个标志found,在循环里面查找,如果找到了,就打印并设置found=1。最后在循环外面判 ...

可以这么做,但是打印出来的结果就只有1条了。
found = 1
while True:
    guest_input = input('enter the keywords you want to search for:').strip()
    if len(guest_input) == 0:
        print('please enter the keywords what you want to search:')
        continue
    else:
        for line in readfile:
            if guest_input in line:
                found = 0
    if found == 0:
        while True:
            print(line)
            file1.close()
            break        
    else:
        print("have no data") 
            
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 14:02:29 | 显示全部楼层
我用的2.7,前面的输入输出改了一些就没复制,后面的大体是这样。。。
PS:主要是逻辑。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 17:46:25 | 显示全部楼层
liufei_vip 发表于 2013-12-3 14:02
我用的2.7,前面的输入输出改了一些就没复制,后面的大体是这样。。。
PS:主要是逻辑。。。

恩,是的,我个人感觉是在for循环的时候出问题的,应该是他找到匹配数据后还会继续往下面查找,等没找到的时候就break掉了,但是这时候就会出现那个小尾巴了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-4 20:22:28 | 显示全部楼层
有人帮忙么。实在是没办法了。。。:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-10 17:21:27 | 显示全部楼层
逻辑存在漏洞,给你补了,
#coding:utf-8

import sys
sys.path.append('C:/Users/sunshineyilan/Desktop/study')
file1 = open('demo_file.txt','w')
file1.writelines(' num:1 sex:male phone:1111 \n num:2 sex:female phone:2222 \n num:3 sex=male phone:3333 \n')
file1.close()
file1 = open('demo_file.txt','r')
readfile = file1.readlines()
while True:
    guest_input = input('enter the keywords you want to search for:').strip()
    if len(guest_input) == 0:
        print('please enter the keywords what you want to search:')
    else:
        flag = []
        for line in readfile:
            if guest_input in line:
                print(line)
                flag.append(1)
            else:
                flag.append(0)
        for each in flag:
            if each == 1:
                flag = 1
                break
        if flag == 0:
            print("have no data.")
            
file1.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 06:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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