Python中如何将循环输出存储为字符串并生成指定逻辑查询语句
修改Python代码生成指定格式的逻辑查询字符串
问题说明
需要生成格式为 ("java developer" OR "software developer") AND (angular) AND (core OR j2ee) 的逻辑查询字符串,原代码存在以下问题:
- 错误将多词职位拆分为单个单词进行OR连接
- 未给多词短语添加引号
- 存在未定义变量
d的语法错误 - 三个逻辑块未用
AND拼接,而是单独输出
修改后的代码
def build_or_block(items): # 清理输入项,去除前后空格 cleaned_items = [item.strip() for item in items] if len(cleaned_items) == 1: # 单个项直接包裹括号,不加引号 return f'({cleaned_items[0]})' else: # 多个项添加引号后用OR连接,再包裹括号 quoted_items = [f'"{item}"' for item in cleaned_items] return f'({" OR ".join(quoted_items)})' # 获取用户输入,用逗号分隔不同选项(支持带空格的短语) job_titles = input("Enter job titles (用逗号分隔多个选项): ").split(',') primary_skills = input("Enter primary skills (用逗号分隔多个选项): ").split(',') secondary_skills = input("Enter secondary skills (用逗号分隔多个选项): ").split(',') # 生成三个逻辑块 block_job = build_or_block(job_titles) block_primary = build_or_block(primary_skills) block_secondary = build_or_block(secondary_skills) # 用AND拼接所有块并输出 final_query = " AND ".join([block_job, block_primary, block_secondary]) print(final_query)
测试示例
输入:
Enter job titles (用逗号分隔多个选项): java developer, software developer Enter primary skills (用逗号分隔多个选项): angular Enter secondary skills (用逗号分隔多个选项): core, j2ee
输出:
("java developer" OR "software developer") AND (angular) AND ("core" OR "j2ee")
关键改进点
- 新增通用函数
build_or_block,统一处理单个/多个选项的OR块生成逻辑 - 改用逗号分隔输入选项,避免多词短语被错误拆分
- 自动为多个选项的短语添加引号,单个选项保持无引号格式
- 用
AND拼接三个逻辑块,生成符合预期的完整查询字符串
内容的提问来源于stack exchange,提问作者nagendrababu banala
相关产品推荐
相关产品推荐

