鱼C论坛

 找回密码
 立即注册
查看: 503|回复: 4

[已解决]Python的多项选择题的选取问题

[复制链接]
发表于 2024-8-11 14:32:50 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fengma 于 2024-8-11 15:47 编辑
  1. answer_list = ['A'、'B'、'D']
  2. options = ['A'、'B'、'C'、'D']
复制代码


如何优化的找出它们的相同组并执行click()(有选择的选项A被提前选择就不管,以此类推)?
我个人是用的双重for来查找.好奇python有优化的解法吗?
最佳答案
2024-8-13 21:13:11
本帖最后由 qq1151985918 于 2024-8-13 21:44 编辑

我看不懂这句话啥意思

(有选择的选项A被提前选择就不管,以此类推)

你的意思是不是这样:
有一道多选题,题目有ABCD四个选项,答案是ABD,怎样执行一个函数从选项中匹配正确的答案内容?
如果是这个意思那你可以用字典+循环的方式


我猜测你是不是这样写的:
  1. answer_list = ['A', 'B', 'D']
  2. options = ['A.这是A选项', 'B.这是B选项', 'C.这是C选项', 'D.这是D选项']

  3. question = '这是问题?'

  4. print(question, '正确答案是:\n')
  5. for answer in answer_list:
  6.     for option in options:
  7.         if answer in option:
  8.             print(option)
复制代码

这样是比较容易出问题的,假设选项变一变只怕就出不来正确结果了
你可以把

  1. options = ['A.这是A选项-ASD', 'B.这是B选项-QWE', 'C.这是C选项-ABD', 'D.这是D选项-XYZ']
复制代码

换上去试试

而我的建议是

  1. answer_list = ['A', 'B', 'D']
  2. options = ['A.这是A选项-ASD', 'B.这是B选项-QWE', 'C.这是C选项-ABD', 'D.这是D选项-XYZ']

  3. question = '这是问题?'
  4. options = {option[0]: option for option in options} # 将选项转换为字典方式

  5. def test(question, options, answer_list):
  6.     print(question, '正确答案是:\n')
  7.     for answer in answer_list:
  8.         print(options[answer])

  9. if __name__ == '__main__':
  10.     test(question, options, answer_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-8-11 19:24:10 From FishC Mobile | 显示全部楼层
没看懂,那个click是什么鬼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-12 21:16:49 | 显示全部楼层
同上。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-8-13 21:13:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2024-8-13 21:44 编辑

我看不懂这句话啥意思

(有选择的选项A被提前选择就不管,以此类推)

你的意思是不是这样:
有一道多选题,题目有ABCD四个选项,答案是ABD,怎样执行一个函数从选项中匹配正确的答案内容?
如果是这个意思那你可以用字典+循环的方式


我猜测你是不是这样写的:
  1. answer_list = ['A', 'B', 'D']
  2. options = ['A.这是A选项', 'B.这是B选项', 'C.这是C选项', 'D.这是D选项']

  3. question = '这是问题?'

  4. print(question, '正确答案是:\n')
  5. for answer in answer_list:
  6.     for option in options:
  7.         if answer in option:
  8.             print(option)
复制代码

这样是比较容易出问题的,假设选项变一变只怕就出不来正确结果了
你可以把

  1. options = ['A.这是A选项-ASD', 'B.这是B选项-QWE', 'C.这是C选项-ABD', 'D.这是D选项-XYZ']
复制代码

换上去试试

而我的建议是

  1. answer_list = ['A', 'B', 'D']
  2. options = ['A.这是A选项-ASD', 'B.这是B选项-QWE', 'C.这是C选项-ABD', 'D.这是D选项-XYZ']

  3. question = '这是问题?'
  4. options = {option[0]: option for option in options} # 将选项转换为字典方式

  5. def test(question, options, answer_list):
  6.     print(question, '正确答案是:\n')
  7.     for answer in answer_list:
  8.         print(options[answer])

  9. if __name__ == '__main__':
  10.     test(question, options, answer_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-14 18:18:34 | 显示全部楼层
qq1151985918 发表于 2024-8-13 21:13
我看不懂这句话啥意思

(有选择的选项A被提前选择就不管,以此类推)
  1.                     # 存储标准答案
  2.                     answer_list = answer.split('、')  # 将字符串按'、 '分割并存入数组
  3.                     # 存储当前的选项,例如A、B、C、D
  4.                     options = ele.eles('xxxxxxxxx ')
  5.                     # 已经被选上的选项先去掉
  6.                     # 后面答题时会被取消
  7.                     chks=ele.eles('xxxxxxxxx')
  8.                     for chk in chks:
  9.                         chk.click()
  10.                     # 再根据标准答案选题
  11.                     # options 循环
  12.                     for opt in options:
  13.                         #answer_list 循环
  14.                         for ans in answer_list:
  15.                             #取出答案
  16.                             qus=opt.text[0]
  17.                             #比较后点击
  18.                             if qus == ans:
  19.                                 opt.click()
复制代码


haha,我的确用的是最古老的for...for....循环.感谢提醒!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 05:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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