前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在匹配过程中为什么将 found 重置为 False?

在匹配过程中为什么将 found 重置为 False?

原创
作者头像
华科云商小徐
发布于 2024-11-12 03:30:29
发布于 2024-11-12 03:30:29
8500
代码可运行
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫
运行总次数:0
代码可运行

在匹配过程中,将 found 变量重置为 False 通常用于循环或递归结构中以重新初始化某些状态。

1、问题背景

在使用 Python 编写一个搜索程序时,需要从文本文件中提取特定的数据记录,并根据用户输入的查询条件在文件中进行搜索。代码中使用了 found = False 的赋值语句,但在某些情况下,即使没有找到匹配项,程序也会显示文件中所有数据。为了避免这种情况,需要理解为什么在代码中使用此赋值语句,以及如何正确处理 found 变量。

2、解决方案

found = False 的赋值语句用于在每次循环迭代结束后,将 found 变量重置为 False。这是因为在新一轮迭代开始时,需要确保 found 变量为 False,以确保程序能够正确地根据用户输入的查询条件查找匹配项。如果在循环中不重置 found 变量,一旦某个记录与查询条件匹配,则 found 变量将一直保持 True,这将导致程序在 subsequent iterations 中将所有记录打印到网页浏览器上,即使这些记录不满足查询条件。

为了更清楚地说明问题,以下代码示例展示了不正确地使用 found 变量时会发生的情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
import cgi
​
def get_search():
​
    form = cgi.FieldStorage()
    Fname = form.getvalue('firstname', '')
    Lname = form.getvalue('lastname', '')
    Age = form.getvalue('age', 0)
    Gender = form.getvalue('gender', '')
​
    found_record = []
    with open("/tmp/abcd.txt","r") as f:
        for line in f:
            temp = line.split()
​
            Fsearch = temp[0]
            Lsearch = temp[1]
            Asearch = temp[2]
            Gsearch = temp[3]if Fname and Fname.lower() in Fsearch.lower():
                found = True
​
            if Lname and Lname.lower() in Lsearch.lower():
                found = True
​
            if Age and Age == Asearch:
                found = True
​
            if Gender and Gender in Gsearch:
                found = True
​
            if found:
                found_record.append(line)
​
    print "Content-type:text/html\n"
    if len(found_record) == 0:
        print "No records found"
    else:
        for each in found_record:
             print each
​
get_search()

在这个代码示例中,found 变量在循环中没有被重置为 False,因此当程序找到第一个匹配项时,found 变量将一直保持 True,导致所有记录被打印到网页浏览器上,即使有些记录不满足查询条件。

为了解决这个问题,需要在每次循环迭代结束后,将 found 变量重置为 False。这样,程序才能正确地根据用户输入的查询条件查找匹配项,并在页面上显示找到的结果。

以下代码示例展示了如何正确使用 found 变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
import cgi
​
def get_search():
​
    form = cgi.FieldStorage()
    Fname = form.getvalue('firstname', '')
    Lname = form.getvalue('lastname', '')
    Age = form.getvalue('age', 0)
    Gender = form.getvalue('gender', '')
​
    found_record = []
    with open("/tmp/abcd.txt","r") as f:
        for line in f:
            temp = line.split()
​
            Fsearch = temp[0]
            Lsearch = temp[1]
            Asearch = temp[2]
            Gsearch = temp[3]
            found = False # Reset found variable for each record
​
            if Fname and Fname.lower() in Fsearch.lower():
                found = True
​
            if Lname and Lname.lower() in Lsearch.lower():
                found = True
​
            if Age and Age == Asearch:
                found = True
​
            if Gender and Gender in Gsearch:
                found = True
​
            if found:
                found_record.append(line)
​
    print "Content-type:text/html\n"
    if len(found_record) == 0:
        print "No records found"
    else:
        for each in found_record:
             print each
​
get_search()

在这个代码示例中,found 变量在每次循环迭代结束后都重置为 False,因此程序能够正确地根据用户输入的查询条件查找匹配项,并在页面上显示找到的结果。

在某些逻辑中,我们可能希望在每次匹配后返回是否找到。如果在某一轮次没有匹配成功,可以通过 found = False 表明该轮次未找到。这种方式在需要记录每次匹配状态的算法中非常常见。

例如,如果是在一个字符串匹配的循环中,每次都重置 found 可以确保每个字符的检查都是独立的,并且不会因为之前找到匹配项而跳过未匹配的项。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文